import type { ClientList, Commit, SyncStatus } from './types'; import { CommitDoc, TrimergeClientOptions } from './TrimergeClientOptions'; import { OnChangeFn } from './lib/SubscriberList'; export declare type SubscribeEvent = { origin: 'subscribe' | 'self' | 'local' | 'remote'; }; export declare class TrimergeClient { readonly userId: string; readonly clientId: string; private lastNonTempDoc?; private lastSavedDoc?; private latestDoc?; private docSubs; private syncStateSubs; private clientListSubs; private clientMap; private clientList; private commits; private allHeadRefs; private nonTempHeadRefs; private store; private readonly differ; private readonly migrate; private readonly mergeAllBranches; private readonly computeRef; private readonly addNewCommitMetadata; private readonly docCache; private tempCommits; private unsyncedCommits; private newPresence; private numPendingUpdates; private syncState; constructor(userId: string, clientId: string, { differ, migrate, mergeAllBranches, computeRef, getLocalStore, addNewCommitMetadata, docCache, }: TrimergeClientOptions); get isRemoteLeader(): boolean; private setClientInfo; private onStoreEvent; get doc(): LatestDoc | undefined; get syncStatus(): SyncStatus; get clients(): ClientList; subscribeDoc(onChange: OnChangeFn): () => void; subscribeSyncStatus(onChange: OnChangeFn): () => void; subscribeClientList(onChange: OnChangeFn, SubscribeEvent>): () => void; updateDoc(doc: LatestDoc, metadata: CommitMetadata, presence?: Presence): Promise; updatePresence(state: Presence): void; private setPresence; getCommit: (ref: string) => Commit; private mergeHelpers; getCommitDoc(ref: string): CommitDoc; private migrateCommit; private mergeHeads; private emitClientListChange; private sync; private updateSyncState; private addHead; private addCommit; private promoteTempCommit; private updateCommitFromRemote; private addNewCommit; shutdown(): Promise | void; }