19 lines
1.5 KiB
TypeScript
19 lines
1.5 KiB
TypeScript
import type { Json } from '../canvas-core/types.ts';
|
|
|
|
/** Portable durable-store contract. Browser database types belong to the adapter. */
|
|
export type StorageScope = { readonly accountId: string; readonly workspaceId: string; readonly projectId: string };
|
|
export type RecoveryImage = { readonly formatVersion: 1 | 2 | 3 | 4 | 5 | 6; readonly rootRevision: number; readonly localRevision: number; readonly payload: Json };
|
|
export type DurableBatch = { readonly image: RecoveryImage; readonly deleteFiles?:readonly string[]; readonly files?: readonly { readonly id: string; readonly bytes: Blob }[] };
|
|
export type StorageLeader = { readonly scope: StorageScope; readonly fence: number; readonly active: boolean; release(): Promise<void> };
|
|
export type StoredFileInfo={readonly id:string;readonly byteLength:number;readonly mimeType:string};
|
|
export type FileInventoryPage={readonly files:readonly StoredFileInfo[];readonly rootRevision:number;readonly nextAfter?:string};
|
|
export type StoragePort = {
|
|
scanFiles?(leader:StorageLeader,input:{readonly expectedRootRevision:number;readonly after?:string;readonly limit:number}):Promise<FileInventoryPage>;
|
|
readonly fileDeletion?: 'atomic-v1';
|
|
claim(scope: StorageScope): Promise<StorageLeader>;
|
|
recover(leader: StorageLeader): Promise<RecoveryImage | null>;
|
|
commit(leader: StorageLeader, batch: DurableBatch): Promise<{ readonly durableRootRevision: number }>;
|
|
readFile(leader: StorageLeader, id: string): Promise<Blob | undefined>;
|
|
close(): void;
|
|
};
|