import { AppliableStreamLog, DiagnosticsLogger, LogEntry, Stream, StreamHandler, StreamState, UnappliableStreamLog, StreamReaderWriter } from '@ceramicnetwork/common';
import { CID } from 'multiformats/cid';
import { HandlersMap } from '../handlers-map.js';
import { LogSyncer } from './log-syncer.js';
declare type ApplyFullLogOpts = {
    throwOnInvalidCommit: boolean;
};
export declare type ApplyLogToStateOpts = {
    throwOnInvalidCommit: boolean;
    throwIfStale: boolean;
    throwOnConflict: boolean;
};
export declare type ResetStateToCommitOpts = {
    copyTimestampsFromRemovedAnchors: boolean;
};
export declare class StateManipulator {
    private readonly logger;
    private readonly streamTypeHandlers;
    private readonly logSyncer;
    private readonly context;
    constructor(logger: DiagnosticsLogger, streamTypeHandlers: HandlersMap, logSyncer: LogSyncer, context: StreamReaderWriter);
    _applyLog<T extends Stream>(handler: StreamHandler<T>, state: StreamState | null, log: AppliableStreamLog, throwOnInvalidCommit: boolean): Promise<StreamState>;
    assertStreamTypeAppliable(streamType: number): void;
    applyFullLog(streamType: number, log: AppliableStreamLog, opts: ApplyFullLogOpts): Promise<StreamState>;
    _copyTrustedTimestamps(source: Array<LogEntry>, dest: UnappliableStreamLog, copyTimestampsFromRemovedAnchors: boolean): AppliableStreamLog;
    _findAnchorIndex(log: Array<LogEntry>): number;
    _pickLogToAccept(log1: Array<LogEntry>, log2: Array<LogEntry>): Array<LogEntry>;
    _applyLogToStateWithoutCacaoVerification(initialState: StreamState, logToApply: AppliableStreamLog, opts: ApplyLogToStateOpts): Promise<StreamState>;
    resetStateToCommit(initialState: StreamState, commitCid: CID, opts: ResetStateToCommitOpts): Promise<StreamState>;
    applyLogToState(initialState: StreamState, logToApply: AppliableStreamLog, opts: ApplyLogToStateOpts): Promise<StreamState>;
}
export {};
//# sourceMappingURL=state-manipulator.d.ts.map