import { KvService } from "./kv_types.js";
import { DecodeV8, EncodeV8 } from "./kv_util.js";
export interface NapiBasedServiceOptions {
    /** Enable some console logging */
    readonly debug?: boolean;
    /** Underlying native napi interface */
    readonly napi?: NapiInterface;
    /** Custom serializer to use when serializing v8-encoded KV values.
     *
     * When you are running on Node 18+, pass the 'serialize' function in Node's 'v8' module. */
    readonly encodeV8: EncodeV8;
    /** Custom deserializer to use when deserializing v8-encoded KV values.
     *
     * When you are running on Node 18+, pass the 'deserialize' function in Node's 'v8' module. */
    readonly decodeV8: DecodeV8;
    /** The database will be opened as an in-memory database. */
    readonly inMemory?: boolean;
}
/**
 * Return a KVService that creates KV instances backed by a native Node NAPI interface.
 */
export declare function makeNapiBasedService(opts: NapiBasedServiceOptions): KvService;
export interface NapiInterface {
    open(path: string, inMemory: boolean | undefined | null, debug: boolean): number;
    close(db: number, debug: boolean): void;
    snapshotRead(dbId: number, snapshotReadBytes: Uint8Array, debug: boolean): Promise<Uint8Array>;
    atomicWrite(dbId: number, atomicWriteBytes: Uint8Array, debug: boolean): Promise<Uint8Array>;
    dequeueNextMessage(dbId: number, debug: boolean): Promise<{
        bytes: Uint8Array;
        messageId: number;
    } | undefined>;
    finishMessage(dbId: number, messageId: number, success: boolean, debug: boolean): Promise<void>;
    startWatch(dbId: number, watchBytes: Uint8Array, debug: boolean): Promise<number>;
    dequeueNextWatchMessage(dbId: number, watchId: number, debug: boolean): Promise<Uint8Array | undefined>;
    endWatch(dbId: number, watchId: number, debug: boolean): void;
}
export declare const NAPI_FUNCTIONS: string[];
export declare function isNapiInterface(obj: unknown): obj is NapiInterface;
