import { AnyRouter, inferRouterError } from '@trpc/server';
import { Observer, UnsubscribeFn } from '@trpc/server/observable';
import { TRPCResponseMessage } from '@trpc/server/rpc';
import { TRPCClientError } from '../TRPCClientError';
import { retryDelay } from '../internals/retryDelay';
import { Operation, TRPCLink } from './types';
declare type WSCallbackResult<TRouter extends AnyRouter, TOutput> = TRPCResponseMessage<TOutput, inferRouterError<TRouter>>;
declare type WSCallbackObserver<TRouter extends AnyRouter, TOutput> = Observer<WSCallbackResult<TRouter, TOutput>, TRPCClientError<TRouter>>;
export interface WebSocketClientOptions {
    url: string | (() => string);
    WebSocket?: typeof WebSocket;
    retryDelayMs?: typeof retryDelay;
    onOpen?: () => void;
    onClose?: (cause?: {
        code?: number;
    }) => void;
}
export declare function createWSClient(opts: WebSocketClientOptions): {
    close: () => void;
    request: (op: Operation, callbacks: WSCallbackObserver<AnyRouter, unknown>) => UnsubscribeFn;
    getConnection(): WebSocket;
};
export declare type TRPCWebSocketClient = ReturnType<typeof createWSClient>;
export interface WebSocketLinkOptions {
    client: TRPCWebSocketClient;
}
export declare function wsLink<TRouter extends AnyRouter>(opts: WebSocketLinkOptions): TRPCLink<TRouter>;
export {};
//# sourceMappingURL=wsLink.d.ts.map