import type { Server } from 'node:http';
export type WebSocketMessageType = 'request' | 'response' | 'update' | 'error';
export interface BaseWebSocketMessage {
    id: string;
    messageType: WebSocketMessageType;
    method?: string;
}
export interface RequestMessage<T = any> extends BaseWebSocketMessage {
    messageType: 'request';
    method: string;
    payload: T;
}
export interface ResponseMessage<T = any> extends BaseWebSocketMessage {
    messageType: 'response';
    method: string;
    payload: T;
}
export interface UpdateMessage<T = any> extends BaseWebSocketMessage {
    messageType: 'update';
    method: string;
    payload: T;
}
export interface ErrorMessage extends BaseWebSocketMessage {
    messageType: 'error';
    error: {
        message: string;
        code?: string;
    };
}
export type WebSocketMessage<T = any> = RequestMessage<T> | ResponseMessage<T> | UpdateMessage<T> | ErrorMessage;
export type RpcMethodHandler<TRequest, TResponse, TUpdate> = (request: TRequest, sendUpdate: (update: TUpdate) => void) => Promise<TResponse>;
export interface RpcMethodDefinition<TRequest, TResponse, TUpdate> {
    handler: RpcMethodHandler<TRequest, TResponse, TUpdate>;
}
export type RpcMethods = Record<string, RpcMethodDefinition<any, any, any>>;
export declare class SRPCWebSocketBridge {
    private wss;
    private connections;
    private methods;
    constructor(server: Server);
    register<T extends Record<string, RpcMethodHandler<any, any, any>>>(methodHandlers: T): void;
    private setupWebSocketHandlers;
    private handleMessage;
    private handleRequest;
    private sendResponse;
    private sendUpdate;
    private sendError;
    isConnected(): boolean;
    getConnectionCount(): number;
    getRegisteredMethods(): string[];
    close(): void;
}
export declare function createSRPCBridge(server: Server): SRPCWebSocketBridge;
