import { Mutex } from '../../../../util/Mutex';
import type { AbstractLevel } from 'abstract-level';
import type { JsonValueCodec } from '@jsonjoy.com/json-pack/lib/codecs/types';
import type * as types from '../types';
type BinStrLevel = AbstractLevel<any, string, Uint8Array>;
export declare class LevelStore implements types.Store {
    protected readonly kv: BinStrLevel;
    protected readonly codec: JsonValueCodec;
    protected readonly mutex: Mutex;
    constructor(kv: BinStrLevel, codec?: JsonValueCodec, mutex?: Mutex);
    protected keyBase(id: string): string;
    protected endKey(id: string): string;
    protected startKey(id: string): string;
    protected batchBase(id: string): string;
    protected batchKey(id: string, seq: number): string;
    protected touchKeyBase(): string;
    protected touchKey(id: string): string;
    /** @todo Add in-memory cache on read. */
    get(id: string): Promise<types.StoreGetResult | undefined>;
    getSnapshot(id: string, seq: number): Promise<{
        snapshot: types.StoreSnapshot;
        batches: types.StoreBatch[];
    }>;
    exists(id: string): Promise<boolean>;
    seq(id: string): Promise<number | undefined>;
    create(start: types.StoreSnapshot, end: types.StoreSnapshot, incomingBatch?: types.StoreIncomingBatch): Promise<types.StoreCreateResult>;
    push(snapshot0: types.StoreIncomingSnapshot, batch0: types.StoreIncomingBatch): Promise<types.StorePushResult>;
    compact(id: string, to: number, advance: types.Advance): Promise<void>;
    scan(id: string, min: number, max: number): Promise<types.StoreBatch[]>;
    remove(id: string): Promise<boolean>;
    /** @todo Make this method async and return something useful. */
    stats(): {
        blocks: number;
        batches: number;
    };
    /**
     * @todo Need to add GC tests.
     */
    removeAccessedBefore(ts: number, limit?: number): Promise<void>;
    removeOldest(x: number): Promise<void>;
    stop(): Promise<void>;
}
export {};
