import { type IdentityScope } from "@gryt/crypto"; import type { MlsDmDriver, MlsGroupRecord, MlsKeyPackageRecord, MlsDeviceRecord, MlsLogEntry, MlsStateStore, MlsTransport, MlsWelcomeDelivery } from "./interfaces.js"; interface KeyPackageRow { ref: string; serverUserId: string; deviceId: string; data: Uint8Array; lastResort: boolean; claimed: boolean; } interface GroupRow { conversationId: string; groupId: string; epoch: number; headSeq: number; log: MlsLogEntry[]; info?: { epoch: number; data: Uint8Array; }; } interface Socket { serverUserId: string; driver: MlsDmDriver | null; online: boolean; /** False: every call answers `offline` without reaching the server, as an app's transport does. */ reachable: boolean; /** The next call to each method either never arrives or has its answer lost. Both answer `timeout`. */ lose: Map; } export declare class FakeDeliveryService { scope: IdentityScope; conversations: Map; devices: Map; /** Ids their owner removed, as `${serverUserId}:${deviceId}`. Anything naming one is refused (GRYT-1555). */ removed: Set; /** Every call that named a device, in order, by device id. */ callsBy: Map; /** When each device id first published, as `mls:devices` reports it. */ deviceAddedAt: Map; keyPackages: KeyPackageRow[]; groups: Map; welcomes: (MlsWelcomeDelivery & { serverUserId: string; })[]; sockets: Socket[]; stats: { commits: number; staleEpoch: number; groupExists: number; claims: number; publishes: number; mostBinaryParts: number; }; /** A cap on Welcomes per sync, for a server that pages them (GRYT-1528). server#241 has none. */ syncWelcomeLimit: number; /** What each `mls:send` said it carried, by seq. */ attachmentIds: Map; private inFlight; private held; private nextWelcome; constructor(scope: IdentityScope); dm(a: string, b: string): string; /** Commits wait until `count` of them are in, then go through in the order they came. */ holdCommits(count: number): void; /** Waits until every push has been handled, including what those handlers set off. */ settle(): Promise; connect(serverUserId: string): { transport: MlsTransport; socket: Socket; }; dropLogThrough(conversationId: string, seq: number): void; private push; private peopleSharing; private devicesOf; private isDevice; private groupView; private transportFor; private checkParts; private counts; private append; private commit; } /** What an app's store does, kept in maps and copied on the way in and out. */ export declare class MemoryMlsStore implements MlsStateStore { device: MlsDeviceRecord | null; keyPackages: Map; groups: Map; loadDevice(): Promise; saveDevice(device: MlsDeviceRecord): Promise; putKeyPackages(records: MlsKeyPackageRecord[]): Promise; listKeyPackages(): Promise; getKeyPackage(ref: string): Promise; deleteKeyPackage(ref: string): Promise; loadGroup(conversationId: string): Promise; listGroups(): Promise; saveGroup(record: MlsGroupRecord): Promise; deleteGroup(conversationId: string): Promise; } export {};