import { encodeBinary as encodeAtomicWrite } from "./proto/messages/com/deno/kv/datapath/AtomicWrite.js";
import { encodeBinary as encodeSnapshotRead } from "./proto/messages/com/deno/kv/datapath/SnapshotRead.js";
import { decodeBinary as decodeSnapshotReadOutput } from "./proto/messages/com/deno/kv/datapath/SnapshotReadOutput.js";
import { decodeBinary as decodeAtomicWriteOutput } from "./proto/messages/com/deno/kv/datapath/AtomicWriteOutput.js";
import { AtomicWrite, AtomicWriteOutput, SnapshotRead, SnapshotReadOutput, Watch } from "./proto/messages/com/deno/kv/datapath/index.js";
export { decodeAtomicWriteOutput, decodeSnapshotReadOutput, encodeAtomicWrite, encodeSnapshotRead, };
export type KvConnectProtocolVersion = 1 | 2 | 3;
export declare function fetchDatabaseMetadata(url: string, accessToken: string, fetcher: typeof fetch, maxRetries: number, supportedVersions: KvConnectProtocolVersion[]): Promise<{
    metadata: DatabaseMetadata;
    responseUrl: string;
}>;
export declare function fetchSnapshotRead(url: string, accessToken: string, databaseId: string, req: SnapshotRead, fetcher: typeof fetch, maxRetries: number, version: KvConnectProtocolVersion): Promise<SnapshotReadOutput>;
export declare function fetchAtomicWrite(url: string, accessToken: string, databaseId: string, write: AtomicWrite, fetcher: typeof fetch, maxRetries: number, version: KvConnectProtocolVersion): Promise<AtomicWriteOutput>;
export declare function fetchWatchStream(url: string, accessToken: string, databaseId: string, watch: Watch, fetcher: typeof fetch, maxRetries: number, version: KvConnectProtocolVersion): Promise<ReadableStream<Uint8Array>>;
export interface DatabaseMetadata {
    readonly version: 1 | 2;
    readonly databaseId: string;
    readonly endpoints: EndpointInfo[];
    readonly token: string;
    readonly expiresAt: string;
}
export interface EndpointInfo {
    /** A fully qualified URL, or a URL relative to the metadata URL. The path of the URL must not end with a slash.
     * e.g. https://data.example.com/v1, /v1, ./v1 */
    readonly url: string;
    readonly consistency: "strong" | "eventual";
}
