Skip to content

src/disconnect.ts

28 lines · 1.2 KB · TypeScript
Raw
import { ACCESS_TOKEN_SECRET, REFRESH_TOKEN_SECRET } from './config.ts'
import { clearArchiveSigning, clearDevice, loadDevice } from './device.ts'
import { deleteSecret } from './secrets.ts'
import { deregisterDevice } from './tokens.ts'

export type DisconnectResult = {
	/** False when nothing was connected. */
	wasConnected: boolean
	/** The virtual device is gone from the Amazon account, so its tokens no longer work. */
	deviceRemoved: boolean
	/** Both token secrets are deleted from Kody. */
	secretsDeleted: boolean
}

/**
 * Disconnect: remove the virtual device from the Amazon account, delete both
 * token secrets, and forget the device. Removing the device comes first,
 * because it needs the access token.
 */
export async function disconnect(): Promise<DisconnectResult> {
	const device = await loadDevice()
	if (!device) return { wasConnected: false, deviceRemoved: false, secretsDeleted: false }
	const deviceRemoved = await deregisterDevice(device)
	const deleted = await Promise.all([deleteSecret(ACCESS_TOKEN_SECRET), deleteSecret(REFRESH_TOKEN_SECRET)])
	await clearDevice()
	await clearArchiveSigning()
	return { wasConnected: true, deviceRemoved, secretsDeleted: deleted.every(Boolean) }
}