import type { AdoptRequest } from "../shared/vault-adopt"; import { storageGet, storageRemove, storageSet } from "../shared/storage"; export const PENDING_ADOPTION_HOLDER_KEY = "peach_pending_adoption_holder_v1"; export type PendingAdoptionHolder = { request: AdoptRequest; createdAt: number; }; function isHolder(value: unknown): value is PendingAdoptionHolder { if (!value || typeof value !== "object") return false; const holder = value as Partial; return typeof holder.createdAt === "number" && Number.isFinite(holder.createdAt) && !!holder.request && typeof holder.request === "object" && typeof (holder.request as Partial).device_id === "string"; } export async function persistPendingAdoptionHolder(request: AdoptRequest): Promise { await storageSet(PENDING_ADOPTION_HOLDER_KEY, JSON.stringify({ request, createdAt: Date.now() })); } /** Returns null for absent or malformed data; malformed bytes remain for explicit recovery/removal. */ export async function readPendingAdoptionHolder(): Promise { const raw = await storageGet(PENDING_ADOPTION_HOLDER_KEY); if (!raw) return null; try { const parsed: unknown = JSON.parse(raw); return isHolder(parsed) ? parsed : null; } catch { return null; } } export async function listPendingAdoptionHolders(): Promise { const holder = await readPendingAdoptionHolder(); return holder ? [holder] : []; } export async function removePendingAdoptionHolder(): Promise { await storageRemove(PENDING_ADOPTION_HOLDER_KEY); } export const revokePendingAdoptionHolder = removePendingAdoptionHolder;