import EventEmitter from 'events'; import http from 'http'; import { WebSocket } from 'ws'; import { HttpServer } from './HttpServer.js'; import { AuthToken, User } from './User.js'; export type AuthData = { roomId?: number; credentials?: { register?: boolean; username: string; password: string; }; token?: Partial; }; export type ConnectionAcceptedEvent = { webSocket: WebSocket; request: http.IncomingMessage; data: AuthData; user?: User; }; /** * @emits connection-accepted */ export declare class AuthBridge extends EventEmitter { static readonly TICK_INTERVAL: number; static readonly MAX_REGISTER_PER_HOUR = 1; static readonly MAX_LOGIN_PER_MINUTE = 10; static readonly MAX_GUEST_PER_MINUTE = 8; static readonly MAX_TOKEN_AUTH_PER_MINUTE = 20; /** * Max number of websockets pending for authentication per IP. */ static readonly WS_MAX_PENDING_FOR_AUTH_PER_IP = 3; private readonly server; private readonly pendingSockets; private readonly registerLimiter; private readonly loginLimiter; private readonly guestLimiter; private readonly tokenAuthLimiter; constructor(server: HttpServer); start(): void; private onConnectionAccepted; private tick; private onConnectionUpgraded; private onMessage; private sendError; }