/// import { IncomingMessage } from "http"; export type SocketMessage> = { type: string; payload: MessageType; headers?: HeadersType; }; export interface AbstractSocket { connect(options: { auth?: unknown; [key: string]: unknown; }): Promise; disconnect(): Promise; send(message: string | ArrayBuffer): void; on(event: "open" | "message" | "close" | "error" | string, handler: (data: any) => void): void; } export interface AbstractSocketServer { onConnection(onConnection: (client: SocketType, req: IncomingMessage) => void): void; send(client: SocketType, message: string): void; isClientConnected(client: SocketType): boolean; ping(client: SocketType): void; close(): void; } export interface AuthorizationStrategy { applyAuthorization(options: any): any; } export interface SocketClientOptions { url: string; authorizationStrategy?: AuthorizationStrategy; heartbeatInterval?: number; maxRate?: number; reconnect?: { retries: number; delay: number; }; parser?: (data: any) => SocketMessage; onError?: (error: Error) => void; onClose?: () => void; onOpen?: () => void; } export interface SocketServerOptions { port: number; heartbeatInterval?: number; rateLimit?: number; onConnection?: (clientId: string) => void; onDisconnection?: (clientId: string) => void; onError?: (clientId: string, error: Error) => void; onMessage?: (clientId: string, message: SocketMessage) => void; } export interface SocketEventHandler { onMessage(message: SocketMessage): void; onError(error: Error, message?: SocketMessage): void; }