import { type CAR } from 'cartonne';
import { Observable } from 'rxjs';
import { DiagnosticsLogger, FetchRequest, AbortOptions, Networks } from '@ceramicnetwork/common';
import { StreamID } from '@ceramicnetwork/streamid';
import { CID } from 'multiformats/cid';
export declare type ReconApiConfig = {
    enabled: boolean;
    url: string | Promise<string>;
    feedEnabled: boolean;
    network: Networks;
};
export interface ReconEvent {
    cid: CID;
    data: CAR | null;
}
export interface ReconEventFeedResponse {
    events: Array<ReconEvent>;
    cursor: string;
}
export interface IReconApi extends Observable<ReconEventFeedResponse> {
    init(initialCursor?: string, initialInterests?: Array<StreamID>): Promise<void>;
    registerInterest(model: StreamID, controller?: string): Promise<void>;
    put(car: CAR, opts?: AbortOptions): Promise<void>;
    enabled: boolean;
    stop(): void;
}
export declare class ReconApi extends Observable<ReconEventFeedResponse> implements IReconApi {
    #private;
    constructor(config: ReconApiConfig, logger: DiagnosticsLogger, sendRequest?: FetchRequest, pollInterval?: number);
    init(initialCursor?: string, initialInterests?: Array<StreamID>): Promise<void>;
    private verifyNetwork;
    registerInterest(model: StreamID, controller?: string): Promise<void>;
    put(car: CAR, opts?: AbortOptions): Promise<void>;
    get enabled(): boolean;
    stop(): void;
    private createSubscription;
}
//# sourceMappingURL=recon.d.ts.map