import { WebSocket } from 'ws'; import type { OpenSpeedApp } from '../index.js'; export interface WebSocketData { [key: string]: unknown; } export interface WebSocketHandler { message?: (ws: WebSocket, message: string | Buffer | ArrayBuffer, clientInfo: WebSocketClientInfo) => void | Promise; open?: (ws: WebSocket, clientInfo: WebSocketClientInfo) => void | Promise; close?: (ws: WebSocket, code: number, reason: string, clientInfo: WebSocketClientInfo) => void | Promise; error?: (ws: WebSocket, error: Error, clientInfo: WebSocketClientInfo) => void | Promise; ping?: (ws: WebSocket, data: Buffer, clientInfo: WebSocketClientInfo) => void | Promise; pong?: (ws: WebSocket, data: Buffer, clientInfo: WebSocketClientInfo) => void | Promise; } export interface WebSocketOptions { idleTimeout?: number; maxConnections?: number; perMessageDeflate?: boolean; sendPingsAutomatically?: boolean; compression?: boolean; allowedOrigins?: string[]; requireAuth?: boolean; maxMessageSize?: number; rateLimit?: { windowMs: number; maxMessages: number; }; requireSecure?: boolean; maxConnectionsPerIP?: number; } export interface WebSocketClientInfo { ip: string; userAgent?: string; origin?: string; authenticated: boolean; userId?: string; connectionTime: number; messageCount: number; } export declare function websocket(path: string, handler: WebSocketHandler, options?: WebSocketOptions): (app: OpenSpeedApp) => void; export declare class WebSocketRoom { private connections; private connectionRooms; private roomAuth; join(ws: WebSocket, room: string, userId?: string): boolean; leave(ws: WebSocket, room?: string): void; broadcast(room: string, message: string | Buffer | ArrayBuffer, exclude?: WebSocket): void; broadcastAll(message: string | Buffer | ArrayBuffer, exclude?: WebSocket): void; authorizeRoom(room: string, userIds: string[]): void; deauthorizeRoom(room: string, userId: string): void; getRoomSize(room: string): number; getRooms(): string[]; getAuthorizedUsers(room: string): string[]; cleanup(ws: WebSocket): void; } export declare const wsRoom: WebSocketRoom; export declare function createSecureWebSocketHandler(originalHandler: WebSocketHandler, options: WebSocketOptions, activeConnections: Map, connectionsPerIP: Map, messageCounts: Map): WebSocketHandler; //# sourceMappingURL=websocket.d.ts.map