export interface Snapshot {
    id: string;
    type: string;
    [key: string]: unknown;
}
export interface SnapshotSpec {
    type: string;
    [key: string]: unknown;
}
export type RemoteSnapshotSaveArgs = {
    id?: string;
    data: Uint8Array;
    metadata?: Record<string, unknown>;
};
export type RemoteSnapshotLoadArgs = {
    id: string;
};
export type RemoteSnapshotDeleteArgs = {
    id: string;
};
export interface RemoteSnapshotStore {
    save(args: RemoteSnapshotSaveArgs): Promise<{
        id: string;
        metadata?: Record<string, unknown>;
    }>;
    load(args: RemoteSnapshotLoadArgs): Promise<{
        data: Uint8Array;
        metadata?: Record<string, unknown>;
    }>;
    delete?(args: RemoteSnapshotDeleteArgs): Promise<void>;
    exists?(args: RemoteSnapshotLoadArgs): Promise<boolean>;
}
export interface RemoteSnapshot extends Snapshot {
    type: 'remote';
    metadata?: Record<string, unknown>;
}
export interface RemoteSnapshotSpec extends SnapshotSpec {
    type: 'remote';
    id?: string;
    store: RemoteSnapshotStore;
    metadata?: Record<string, unknown>;
}
export declare class NoopSnapshotSpec implements SnapshotSpec {
    readonly type = "noop";
    readonly [key: string]: unknown;
}
export declare function isNoopSnapshotSpec(spec: SnapshotSpec | null | undefined): spec is NoopSnapshotSpec;
export declare class InMemoryRemoteSnapshotStore implements RemoteSnapshotStore {
    private readonly snapshots;
    save(args: RemoteSnapshotSaveArgs): Promise<{
        id: string;
        metadata?: Record<string, unknown>;
    }>;
    load(args: RemoteSnapshotLoadArgs): Promise<{
        data: Uint8Array;
        metadata?: Record<string, unknown>;
    }>;
    delete(args: RemoteSnapshotDeleteArgs): Promise<void>;
    exists(args: RemoteSnapshotLoadArgs): Promise<boolean>;
}
