import { HamokMessage } from './messages/HamokMessage';
import { PendingRequest } from './messages/PendingRequest';
import { PendingResponse } from './messages/PendingResponse';
import { OngoingRequestsNotifier } from './messages/OngoingRequestsNotifier';
import { RaftLogs } from './raft/RaftLogs';
export declare class HamokGrid {
    readonly sendMessage: (message: HamokMessage, targetPeerIds?: ReadonlySet<string> | string[] | string) => void;
    readonly submit: (message: HamokMessage) => Promise<void>;
    readonly waitUntilCommitHead: () => Promise<void>;
    readonly ongoingRequestsNotifier: OngoingRequestsNotifier;
    readonly remotePeerIds: ReadonlySet<string>;
    readonly logs: RaftLogs;
    private _getLocalPeerId;
    private _getLeaderId;
    readonly pendingRequests: Map<string, PendingRequest>;
    readonly pendingResponses: Map<string, PendingResponse>;
    constructor(sendMessage: (message: HamokMessage, targetPeerIds?: ReadonlySet<string> | string[] | string) => void, submit: (message: HamokMessage) => Promise<void>, waitUntilCommitHead: () => Promise<void>, ongoingRequestsNotifier: OngoingRequestsNotifier, remotePeerIds: ReadonlySet<string>, logs: RaftLogs, _getLocalPeerId: () => string, _getLeaderId: () => string | undefined);
    get localPeerId(): string;
    get leaderId(): string | undefined;
    get connected(): boolean;
    request(options: {
        message: HamokMessage;
        timeoutInMs?: number;
        neededResponses?: number;
        targetPeerIds?: ReadonlySet<string> | string[] | string;
        submit?: boolean;
    }): Promise<HamokMessage[]>;
    processResponse(message: HamokMessage): void;
    purgeResponseForRequest(requestId: string): void;
    purgeResponseForRequests(requestIds: string[]): void;
}
//# sourceMappingURL=HamokGrid.d.ts.map