/**
 * TypeScript types for browser WebSocket client.
 * See @specs/client.md for full API documentation.
 */
export type ClientState = "closed" | "connecting" | "open" | "closing" | "reconnecting";
export interface ClientOptions {
    url: string | URL;
    protocols?: string | string[];
    reconnect?: {
        enabled?: boolean;
        maxAttempts?: number;
        initialDelayMs?: number;
        maxDelayMs?: number;
        jitter?: "full" | "none";
    };
    queue?: "drop-oldest" | "drop-newest" | "off";
    queueSize?: number;
    autoConnect?: boolean;
    pendingRequestsLimit?: number;
    auth?: {
        getToken?: () => string | null | undefined | Promise<string | null | undefined>;
        attach?: "query" | "protocol";
        queryParam?: string;
        protocolPrefix?: string;
        protocolPosition?: "append" | "prepend";
    };
    wsFactory?: (url: string | URL, protocols?: string | string[]) => WebSocket;
}
export type AnyMessageSchema = any;
export interface AnyInboundMessage {
    type: string;
    meta?: Record<string, unknown>;
    payload?: unknown;
}
export type MessageHandler = (msg: unknown) => void;
export interface WebSocketClient {
    readonly state: ClientState;
    readonly isConnected: boolean;
    readonly protocol: string;
    connect(): Promise<void>;
    close(opts?: {
        code?: number;
        reason?: string;
    }): Promise<void>;
    onState(cb: (state: ClientState) => void): () => void;
    onceOpen(): Promise<void>;
    on<S extends AnyMessageSchema>(schema: S, handler: MessageHandler): () => void;
    send<S extends AnyMessageSchema>(schema: S, payload: unknown, opts?: {
        meta?: Record<string, unknown>;
        correlationId?: string;
    }): boolean;
    request<S extends AnyMessageSchema, R extends AnyMessageSchema>(schema: S, payload: unknown, reply: R, opts?: {
        timeoutMs?: number;
        meta?: Record<string, unknown>;
        correlationId?: string;
        signal?: AbortSignal;
    }): Promise<unknown>;
    onUnhandled(cb: (msg: AnyInboundMessage) => void): () => void;
    onError(cb: (error: Error, context: {
        type: "parse" | "validation" | "overflow" | "unknown";
        details?: unknown;
    }) => void): () => void;
}
//# sourceMappingURL=types.d.ts.map