import type { Auth } from './auth.js'; import type { Unsubscribe } from './types.js'; /** * Light realtime room — Durable-Object-backed WebSocket fan-out. * * Use cases: cursor presence, low-state multiplayer (Slither-style), chat-light. * Not a multiplayer game server. Messages are not persisted. * * Limits (enforced server-side): * - max 32 concurrent peers per room * - max 100 messages/sec per peer * - max 4KB per message * - max 64 active rooms per app (LRU evicts the oldest) * - rooms idle for 24h are auto-evicted */ export interface RoomPeer { uid: string; login: string; } export interface RoomMessage { from: RoomPeer; data: T; at: number; } export type ConnectionState = 'connecting' | 'open' | 'closed' | 'error'; export declare class Rooms { private readonly appId; private readonly apiBase; private readonly auth; constructor(appId: string, apiBase: string, auth: Auth); join(roomId: string): Room; } export declare class Room { private readonly appId; private readonly apiBase; private readonly auth; private readonly roomId; private socket; private listeners; private peerListeners; private stateListeners; private _peers; private connectionState; private reconnectAttempt; private reconnectTimer; private explicitlyClosed; /** Enable to log all WebSocket traffic to console. */ debug: boolean; constructor(appId: string, apiBase: string, auth: Auth, roomId: string); /** Current connection state. */ get state(): ConnectionState; /** Underlying WebSocket readyState (or -1 if no socket). */ get socketState(): number; /** Number of registered message listeners. */ get listenerCount(): number; /** Current peer list (read-only snapshot). */ get peers(): RoomPeer[]; /** Number of reconnect attempts since last successful connection. */ get reconnectAttempts(): number; /** Whether a reconnect is currently pending. */ get isReconnecting(): boolean; send(data: T): void; onMessage(listener: (msg: RoomMessage) => void): Unsubscribe; onPeers(listener: (peers: RoomPeer[]) => void): Unsubscribe; onConnectionState(listener: (state: ConnectionState) => void): Unsubscribe; /** Permanently close the room. Stops any pending reconnect. */ close(): void; private connect; private connectAsync; private scheduleReconnect; private setState; } //# sourceMappingURL=rooms.d.ts.map