import { Collection } from './collection/index.js';
import { DbClient, DehydratedLiveQueryResult } from './client.js';
import { LiveQueryObserver, LiveQuerySnapshot } from './live-query-observer.js';
import { ChangeMessage } from './types.js';
/**
 * DbClient supplies transport behavior to the shared observer. Keeping this
 * implementation behind the client means ordinary framework queries do not
 * import server admission, hydration reconciliation, or streaming machinery.
 */
export interface LiveQueryObserverClientHost<T extends object, TKey extends string | number> {
    observer: LiveQueryObserver<T, TKey>;
    read: (forServerSnapshot: boolean) => LiveQuerySnapshot<T, TKey>;
    entries: () => Array<[TKey, T]>;
    isAttached: () => boolean;
    isDisposed: () => boolean;
    dirty: () => void;
    publish: (changes: Array<ChangeMessage<T, TKey>>, entries?: Array<[TKey, T]>) => void;
    preload: () => Promise<void>;
}
export declare class LiveQueryObserverClient<T extends object, TKey extends string | number> {
    private readonly client;
    private readonly collection;
    private readonly queryHash;
    private readonly usesSettledHydration;
    private readonly host;
    private hydrationSeed;
    error: unknown;
    failed: boolean;
    private authoritative;
    private handoffScheduled;
    private unregisterResource;
    private preloadPromise;
    constructor(client: DbClient, collection: Collection<T, TKey, any> | null, queryHash: string | undefined, usesSettledHydration: boolean, host: LiveQueryObserverClientHost<T, TKey>);
    get seed(): {
        dehydratedAt: number;
        entries: Array<[TKey, T]>;
        snapshot: DehydratedLiveQueryResult;
    } | undefined;
    get query(): import('./client.js').DbClientLiveQuery | undefined;
    sync(forServerSnapshot?: boolean): boolean;
    getServerSnapshot(preloadRequested: boolean): LiveQuerySnapshot<T, TKey>;
    private diffEntries;
    markAuthoritative(dehydratedAt?: number): boolean;
    scheduleHandoff(): void;
    handoff(): void;
    assertSources(): void;
    subscribe(): () => void;
    registerResource(): void;
    takeResourceRelease(): (() => void) | undefined;
    private getSourceInfo;
    preload(): Promise<void>;
}
