import { type CloseArgs, type ConnectArgs, EngineAbc, type EngineAbcConfig, type RpcArgs } from "@tai-kun/surrealdb/engine";
import type { BidirectionalRpcResponse } from "@tai-kun/surrealdb/types";
import { Serial } from "@tai-kun/surrealdb/utils";
import type { Promisable } from "type-fest";
import type { WebSocket as WsWebSocket } from "ws";
type InferWebSocket<T> = T extends {
    readonly WebSocket: new (...args: any) => infer W;
} ? W : never;
type NativeWebSocket = InferWebSocket<typeof global | typeof window | typeof self>;
type WebSocket = WsWebSocket | NativeWebSocket;
export type CreateWebSocket = (address: URL, protocols: string[]) => Promisable<WebSocket>;
export interface WebSocketEngineConfig extends EngineAbcConfig {
    readonly createWebSocket: CreateWebSocket;
    readonly pingInterval?: number | (() => number) | undefined;
}
export default class WebSocketEngine extends EngineAbc {
    readonly name = "websocket";
    protected ws: WebSocket | null;
    protected readonly id: Serial;
    protected readonly newWs: CreateWebSocket;
    protected readonly pingInterval: () => number;
    constructor(config: WebSocketEngineConfig);
    connect({ endpoint, signal }: ConnectArgs): Promise<void>;
    close({ signal }: CloseArgs): Promise<void>;
    rpc({ request, signal }: RpcArgs): Promise<BidirectionalRpcResponse>;
}
export {};
//# sourceMappingURL=engine.d.ts.map