import { PersistedSyncedStream, Snapshot } from '@towns-protocol/proto';
import Dexie, { Table } from 'dexie';
import { ParsedMiniblock } from './types';
import { ParsedPersistedSyncedStream } from './streamUtils';
export interface LoadedStream {
    persistedSyncedStream: ParsedPersistedSyncedStream;
    miniblocks: ParsedMiniblock[];
    cleartexts: Record<string, Uint8Array | string> | undefined;
    snapshot: Snapshot;
    prependedMiniblocks: ParsedMiniblock[];
    prevSnapshotMiniblockNum: bigint;
}
export interface IPersistenceStore {
    saveCleartext(eventId: string, cleartext: Uint8Array | string): Promise<void>;
    getCleartext(eventId: string): Promise<Uint8Array | string | undefined>;
    getCleartexts(eventIds: string[]): Promise<Record<string, Uint8Array | string> | undefined>;
    getSyncedStream(streamId: string): Promise<ParsedPersistedSyncedStream | undefined>;
    saveSyncedStream(streamId: string, syncedStream: PersistedSyncedStream): Promise<void>;
    loadStream(streamId: string, inPersistedSyncedStream?: ParsedPersistedSyncedStream): Promise<LoadedStream | undefined>;
    loadStreams(streamIds: string[]): Promise<Record<string, LoadedStream | undefined>>;
    saveMiniblock(streamId: string, miniblock: ParsedMiniblock): Promise<void>;
    saveMiniblocks(streamId: string, miniblocks: ParsedMiniblock[], direction: 'forward' | 'backward'): Promise<void>;
    getMiniblock(streamId: string, miniblockNum: bigint): Promise<ParsedMiniblock | undefined>;
    getMiniblocks(streamId: string, rangeStart: bigint, randeEnd: bigint): Promise<ParsedMiniblock[]>;
    saveSnapshot(streamId: string, miniblockNum: bigint, snapshot: Snapshot): Promise<void>;
}
export declare class PersistenceStore extends Dexie implements IPersistenceStore {
    cleartexts: Table<{
        cleartext: Uint8Array | string;
        eventId: string;
    }>;
    syncedStreams: Table<{
        streamId: string;
        data: Uint8Array;
    }>;
    miniblocks: Table<{
        streamId: string;
        miniblockNum: string;
        data: Uint8Array;
    }>;
    snapshots: Table<{
        streamId: string;
        data: {
            miniblockNum: bigint;
            snapshot: Uint8Array;
        };
    }>;
    constructor(databaseName: string);
    saveCleartext(eventId: string, cleartext: Uint8Array | string): Promise<void>;
    getCleartext(eventId: string): Promise<string | Uint8Array<ArrayBufferLike> | undefined>;
    getCleartexts(eventIds: string[]): Promise<Record<string, string | Uint8Array<ArrayBufferLike>> | undefined>;
    getSyncedStream(streamId: string): Promise<ParsedPersistedSyncedStream | undefined>;
    loadStream(streamId: string, inPersistedSyncedStream?: ParsedPersistedSyncedStream): Promise<LoadedStream | undefined>;
    loadStreams(streamIds: string[]): Promise<Record<string, LoadedStream | undefined>>;
    private getSyncedStreams;
    saveSyncedStream(streamId: string, syncedStream: PersistedSyncedStream): Promise<void>;
    saveMiniblock(streamId: string, miniblock: ParsedMiniblock): Promise<void>;
    saveMiniblocks(streamId: string, miniblocks: ParsedMiniblock[], direction: 'forward' | 'backward'): Promise<void>;
    getMiniblock(streamId: string, miniblockNum: bigint): Promise<ParsedMiniblock | undefined>;
    getMiniblocks(streamId: string, rangeStart: bigint, rangeEnd: bigint): Promise<ParsedMiniblock[]>;
    saveSnapshot(streamId: string, miniblockNum: bigint, snapshot: Snapshot): Promise<void>;
    getSnapshot(streamId: string): Promise<{
        snapshot: Snapshot;
        miniblockNum: bigint;
    } | undefined>;
    private requestPersistentStorage;
    private logPersistenceStats;
    private cachedScrollback;
}
export declare function eventIdsFromSnapshot(snapshot: Snapshot): string[];
export declare class StubPersistenceStore implements IPersistenceStore {
    saveCleartext(eventId: string, cleartext: Uint8Array): Promise<void>;
    getCleartext(eventId: string): Promise<undefined>;
    getCleartexts(eventIds: string[]): Promise<undefined>;
    getSyncedStream(streamId: string): Promise<undefined>;
    loadStream(streamId: string, inPersistedSyncedStream?: ParsedPersistedSyncedStream): Promise<undefined>;
    loadStreams(streamIds: string[]): Promise<{}>;
    saveSyncedStream(streamId: string, syncedStream: PersistedSyncedStream): Promise<void>;
    saveMiniblock(streamId: string, miniblock: ParsedMiniblock): Promise<void>;
    saveMiniblocks(streamId: string, miniblocks: ParsedMiniblock[], direction: 'forward' | 'backward'): Promise<void>;
    getMiniblock(streamId: string, miniblockNum: bigint): Promise<ParsedMiniblock | undefined>;
    getMiniblocks(streamId: string, rangeStart: bigint, rangeEnd: bigint): Promise<ParsedMiniblock[]>;
    saveSnapshot(streamId: string, miniblockNum: bigint, snapshot: Snapshot): Promise<void>;
}
//# sourceMappingURL=persistenceStore.d.ts.map