import type { Duplex } from "node:stream"; import type { IncomingMessage } from "node:http"; import type { ServerOptions } from "ws"; import type { WebSocket } from "ws"; export interface SocketRequest { id: number; jsonrpc: string; method: string; params: any; } export interface SocketResponse { id?: number | null; jsonrpc: string; result?: T; notification?: string; params?: any; error?: { code: number; message: string; data?: any; }; } export interface SocketSendOptions { timeout?: number; } export interface SocketQueue { type: "request" | "notification"; result?: SocketResponse["result"]; error?: SocketResponse["error"]; } type RegisterFn = (params: T, socketId: string) => Promise | any; interface SocketEvents { listening: () => Promise | void; connection: (socket: WebSocket, socketId: string) => Promise | void; disconnection: (socketId: string) => Promise | void; error: (error: Error) => Promise | void; "socket-error": (socketId: string, error: Error) => Promise | void; close: () => Promise | void; } export declare function RPCWebSocketServer(opts: ServerOptions): { on: (event: EventKey, cb: SocketEvents[EventKey]) => void; event: (e: string) => void; handleUpgrade: (req: IncomingMessage, socket: Duplex, upgradeHead: Buffer, callback?: (client: WebSocket, request: IncomingMessage) => void) => Promise; clients: () => Map; register: (method: string, fn: RegisterFn) => void; emit: (name: string, ...params: any[]) => void; notify: (name: string, socketId: string, ...params: any[]) => void; close: () => Promise; }; export {};