import type { Aperture } from '../types/Aperture.ts';
import type { WorldlineOptions, WorldlineSource } from '../capabilities/QueryCapability.ts';
import WorldlineSelector from '../types/WorldlineSelector.ts';
import type Observer from './query/Observer.ts';
import LogicalTraversal from './query/LogicalTraversal.ts';
import QueryBuilder from './query/QueryBuilder.ts';
import WorldlineOptic from './optic/WorldlineOptic.ts';
import type CheckpointTailOpticSource from './optic/CheckpointTailOpticSource.ts';
import type { QueryReadModel, QueryReadModelOpenRequest, QueryReadModelProvider } from './query/QueryReadModelProvider.ts';
type VisibleNodeProps = NonNullable<Awaited<ReturnType<Observer['getNodeProps']>>>;
type VisibleEdge = Awaited<ReturnType<Observer['getEdges']>>[number];
type ProjectionObserverFactory = {
    observer(config: Aperture, options?: {
        source: WorldlineSource;
    }): Promise<Observer>;
    observer(name: string, config: Aperture, options?: {
        source: WorldlineSource;
    }): Promise<Observer>;
};
export default class ProjectionHandle {
    private readonly _graph;
    private readonly _source;
    private readonly _opticSource;
    private _delegateObserverPromise;
    readonly traverse: LogicalTraversal;
    constructor({ graph, source, opticSource, }: {
        graph: ProjectionObserverFactory;
        source?: WorldlineSelector | WorldlineSource | null;
        opticSource?: CheckpointTailOpticSource | null;
    });
    get source(): WorldlineSource;
    seek(options?: WorldlineOptions): Promise<ProjectionHandle>;
    optic(): WorldlineOptic;
    private _coordinateOptic;
    _delegateObserver(): Promise<Observer>;
    hasNode(nodeId: string): Promise<boolean>;
    getNodes(): Promise<string[]>;
    getNodeProps(nodeId: string): Promise<VisibleNodeProps | null>;
    getEdges(): Promise<VisibleEdge[]>;
    queryReadModelProvider(): QueryReadModelProvider;
    openQueryReadModel(request?: QueryReadModelOpenRequest): Promise<QueryReadModel>;
    private _boundedExactReadModel;
    private _exactReadOptic;
    private _liveExactReadOptic;
    private _coordinateExactReadOptic;
    private _capturedCoordinateOptic;
    query(): QueryBuilder;
    observer(config: Aperture): Promise<Observer>;
    observer(name: string, config: Aperture): Promise<Observer>;
}
export {};
