/// <reference types="node" />
/// <reference types="./types/global" />
/// <reference types="node" />
import type { IncomingMessage } from 'http';
import type ws from 'ws';
import type { AnyRouter, inferRouterContext } from '../@trpc/server';
import type { BaseHandlerOptions } from '../@trpc/server/http';
import type { MaybePromise } from '../unstable-core-do-not-import';
import type { NodeHTTPCreateContextFnOptions } from './node-http';
/**
 * @public
 */
export type CreateWSSContextFnOptions = Omit<NodeHTTPCreateContextFnOptions<IncomingMessage, ws.WebSocket>, 'info'>;
/**
 * @public
 */
export type CreateWSSContextFn<TRouter extends AnyRouter> = (opts: CreateWSSContextFnOptions) => MaybePromise<inferRouterContext<TRouter>>;
/**
 * Web socket server handler
 */
export type WSSHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<TRouter, IncomingMessage> & (object extends inferRouterContext<TRouter> ? {
    /**
     * @link https://trpc.io/docs/v11/context
     **/
    createContext?: CreateWSSContextFn<TRouter>;
} : {
    /**
     * @link https://trpc.io/docs/v11/context
     **/
    createContext: CreateWSSContextFn<TRouter>;
}) & {
    wss: ws.WebSocketServer;
    process?: NodeJS.Process;
};
export declare function applyWSSHandler<TRouter extends AnyRouter>(opts: WSSHandlerOptions<TRouter>): {
    broadcastReconnectNotification: () => void;
};
//# sourceMappingURL=ws.d.ts.map