///
import { WebSocket } from "@libsql/isomorphic-ws";
import type { ProtocolVersion, ProtocolEncoding } from "../client.js";
import { Client } from "../client.js";
import { IdAlloc } from "../id_alloc.js";
import { Sql, SqlOwner } from "../sql.js";
import type * as proto from "./proto.js";
import { WsStream } from "./stream.js";
export type Subprotocol = {
version: ProtocolVersion;
encoding: ProtocolEncoding;
};
export declare const subprotocolsV2: Map;
export declare const subprotocolsV3: Map;
/** A client for the Hrana protocol over a WebSocket. */
export declare class WsClient extends Client implements SqlOwner {
#private;
/** @private */
_streamIdAlloc: IdAlloc;
/** @private */
_cursorIdAlloc: IdAlloc;
/** @private */
constructor(socket: WebSocket, jwt: string | undefined);
/** Get the protocol version negotiated with the server, possibly waiting until the socket is open. */
getVersion(): Promise;
/** @private */
_ensureVersion(minVersion: ProtocolVersion, feature: string): void;
/** @private */
_sendRequest(request: proto.Request, callbacks: ResponseCallbacks): void;
/** Open a {@link WsStream}, a stream for executing SQL statements. */
openStream(): WsStream;
/** Cache a SQL text on the server. This requires protocol version 2 or higher. */
storeSql(sql: string): Sql;
/** @private */
_closeSql(sqlId: number): void;
/** Close the client and the WebSocket. */
close(): void;
/** True if the client is closed. */
get closed(): boolean;
}
export interface OpenCallbacks {
openCallback: () => void;
errorCallback: (_: Error) => void;
}
export interface ResponseCallbacks {
responseCallback: (_: proto.Response) => void;
errorCallback: (_: Error) => void;
}