import type { TargetIdentity } from "./auth-restore.js"; export type RestorePhase = /** 事务开着,COMMIT 的结果还没确认 */ "transaction" /** 已提交,提交之后的步骤(补授权、补外键)还没做完 */ | "committed" /** 授权已补,外键还没加完 */ | "grants" /** 全部做完 */ | "done" /** 事务回滚了,目标上什么都没留下 */ | "rolled_back"; export interface RestoreRecord { version: 1; snapshot: string; projectName: string; /** * 那份快照的 dump 的 sha256:--finish 只接着做同一份快照。快照名只是时间戳, * 别的项目、别的桶里可能有同名的快照,拿它补授权会改错目标上的权限 */ dumpSha256: string; /** * 整份 manifest.json 的 sha256:--finish 补的授权、要的 schema 都来自 manifest,dump 没变而 manifest 被改过 * 也不能接着做 */ manifestSha256?: string; /** 给人看的目标说明(ref 或 主机/库名),不含密码 */ target: string; identity: TargetIdentity; xid: string; phase: RestorePhase; startedAt: string; updatedAt: string; } export interface RestoreRecordStore { load(key: string): Promise; save(key: string, record: RestoreRecord): Promise; } /** * 一个目标对应一条记录。Supabase 项目按 ref 认(直连和连接池两种连接串是同一个目标),其余按主机、端口、库名、用户; * 只存哈希,文件名里不出现主机名 */ export declare function restoreRecordKey(connString: string): string; /** 给人看的目标说明:ref 或 主机:端口/库名。不带用户名和密码 */ export declare function describeTarget(connString: string): string; /** 本机文件:<目录>/.json,只有当前用户可读写。先写临时文件再改名,写到一半崩溃不会留下坏文件 */ export declare function fileRestoreRecords(dir?: string): RestoreRecordStore;