import { AtomicCheck, KvCommitError, KvCommitResult, KvConsistencyLevel, KvEntry, KvEntryMaybe, KvKey, KvListOptions, KvListSelector, KvMutation } from "./kv_types.js";
import { BaseKv, CursorHolder, DecodeV8, EncodeV8, Enqueue } from "./kv_util.js";
import { AtomicWrite, AtomicWriteOutput, SnapshotRead, SnapshotReadOutput, WatchKeyOutput } from "./proto/messages/com/deno/kv/datapath/index.js";
export { UnknownV8 } from "./v8.js";
export declare abstract class ProtoBasedKv extends BaseKv {
    protected readonly decodeV8: DecodeV8;
    protected readonly encodeV8: EncodeV8;
    constructor(debug: boolean, decodeV8: DecodeV8, encodeV8: EncodeV8);
    protected abstract snapshotRead(req: SnapshotRead, consistency: KvConsistencyLevel | undefined): Promise<SnapshotReadOutput>;
    protected abstract atomicWrite(req: AtomicWrite): Promise<AtomicWriteOutput>;
    protected get_<T = unknown>(key: KvKey, consistency?: KvConsistencyLevel): Promise<KvEntryMaybe<T>>;
    protected getMany_(keys: readonly KvKey[], consistency?: KvConsistencyLevel): Promise<KvEntryMaybe<unknown>[]>;
    protected commit(checks: AtomicCheck[], mutations: KvMutation[], enqueues: Enqueue[]): Promise<KvCommitResult | KvCommitError>;
    protected listStream<T>(outCursor: CursorHolder, selector: KvListSelector, { batchSize, consistency, cursor: cursorOpt, limit, reverse }?: KvListOptions): AsyncGenerator<KvEntry<T>>;
}
export declare class WatchCache {
    private readonly decodeV8;
    private readonly keys;
    private readonly lastValues;
    constructor(decodeV8: DecodeV8, keys: readonly KvKey[]);
    processOutputKeys(outputKeys: WatchKeyOutput[]): KvEntryMaybe<unknown>[];
}
