import { HamokMessage } from '../messages/HamokMessage';
import { LogEntry } from './LogEntry';
export declare const logger: import("pino").default.Logger<never>;
export type RaftLogsEventMap = {
    committed: [commitIndex: number, message: HamokMessage];
    removed: [commitIndex: number, message: HamokMessage];
};
export type MemoryStoredRaftLogsConfig = {
    expirationTimeInMs: number;
    memorySizeHighWaterMark: number;
};
export interface RaftLogs {
    readonly commitIndex: number;
    readonly nextIndex: number;
    readonly firstIndex: number;
    readonly size: number;
    readonly bytesInMemory: number;
    commitUntil(newCommitIndex: number): Readonly<LogEntry[]>;
    submit(term: number, entry: HamokMessage): number;
    compareAndOverride(index: number, expectedTerm: number, entry: HamokMessage): LogEntry | undefined;
    compareAndAdd(expectedNextIndex: number, term: number, entry: HamokMessage): boolean;
    removeUntil(index: number): void;
    get(index: number): LogEntry | undefined;
    collectEntries(startIndex: number, endIndex?: number): LogEntry[];
    [Symbol.iterator](): IterableIterator<LogEntry>;
    reset(newCommitIndex: number): void;
    on<U extends keyof RaftLogsEventMap>(event: U, listener: (...args: RaftLogsEventMap[U]) => void): this;
    once<U extends keyof RaftLogsEventMap>(event: U, listener: (...args: RaftLogsEventMap[U]) => void): this;
    off<U extends keyof RaftLogsEventMap>(event: U, listener: (...args: RaftLogsEventMap[U]) => void): this;
}
//# sourceMappingURL=RaftLogs.d.ts.map