import { Fork } from "../fork/fork";
import { ObservableSource, SpecificationListener } from "../observable/observable";
import { Observer, ResultAddedFunc } from "../observer/observer";
import { Specification } from "../specification/specification";
import { FactEnvelope, FactRecord, FactReference, ProjectedResult, Storage } from "../storage";
import { Network } from "./NetworkManager";
export declare class FactManager {
    private readonly fork;
    private readonly observableSource;
    private readonly store;
    private readonly purgeConditions;
    private networkManager;
    private purgeManager;
    private singleUseKeyPair;
    constructor(fork: Fork, observableSource: ObservableSource, store: Storage, network: Network, purgeConditions: Specification[], feedRefreshIntervalSeconds?: number);
    addSpecificationListener(specification: Specification, onResult: (results: ProjectedResult[]) => Promise<void>): SpecificationListener;
    removeSpecificationListener(listener: SpecificationListener): void;
    close(): Promise<void>;
    testSpecificationForCompliance(specification: Specification): string[];
    save(envelopes: FactEnvelope[]): Promise<FactEnvelope[]>;
    /**
     * Begin a single-use session. Generates a key pair, creates a User fact with the public key,
     * signs it, and saves it to the store.
     * @returns A structure containing the user fact
     */
    beginSingleUse(): Promise<{
        graph: any;
        last: FactRecord;
    }>;
    /**
     * End a single-use session. Discards the private key.
     */
    endSingleUse(): void;
    read(start: FactReference[], specification: Specification): Promise<ProjectedResult[]>;
    fetch(start: FactReference[], specification: Specification): Promise<void>;
    subscribe(start: FactReference[], specification: Specification): Promise<string[]>;
    unsubscribe(feeds: string[]): void;
    load(references: FactReference[]): Promise<FactEnvelope[]>;
    getMruDate(specificationHash: string): Promise<Date | null>;
    setMruDate(specificationHash: string, mruDate: Date): Promise<void>;
    startObserver<U>(references: FactReference[], specification: Specification, resultAdded: ResultAddedFunc<U>, keepAlive: boolean): Observer<U>;
    private factsAdded;
    purge(): Promise<void>;
    /**
     * Processes the queue immediately, bypassing any delay.
     * Only works if the fork is a PersistentFork.
     */
    push(): Promise<void>;
}
//# sourceMappingURL=factManager.d.ts.map