import type { JSONSchemaType } from "ajv";
import { type NestedDatabaseType, type NestedValue } from "@orbitdb/nested-db";
import { ExtractKeys, ExtractKeysAsList, GetValueFromKey, GetValueFromKeyList, RecursivePartial } from "./types.js";
export type TypedNested<T extends NestedValue> = Omit<NestedDatabaseType, "put" | "set" | "putNested" | "del" | "get" | "all"> & {
    put<K extends ExtractKeys<T>>(key: K, value: GetValueFromKey<T, K>): Promise<string>;
    put<K extends ExtractKeysAsList<T>>(key: K, value: GetValueFromKeyList<T, K>): Promise<string>;
    set: TypedNested<T>["put"];
    putNested(value: RecursivePartial<T>): Promise<string[]>;
    putNested<K extends ExtractKeys<T>>(key: K, value: GetValueFromKey<T, K>): Promise<string[]>;
    setNested: TypedNested<T>["putNested"];
    del<K extends ExtractKeys<T>>(key: K): Promise<string>;
    get<K extends ExtractKeys<T>>(key: K): Promise<GetValueFromKey<T, K> | undefined>;
    all: () => Promise<{
        key: ExtractKeys<T>;
        value: GetValueFromKey<T, ExtractKeys<T>>;
        hash: string;
    }[]>;
    allAsJSON(): Promise<T>;
};
export declare const typedNested: <T extends NestedValue>({ db, schema, }: {
    db: NestedDatabaseType;
    schema: JSONSchemaType<RecursivePartial<T>>;
}) => TypedNested<T>;
