import { type WebSocket } from "ws"; import { z } from "zod"; import { type WebSocketAudience } from "./ws-audience"; import { type WebSocketClusterBus } from "./ws-cluster-bus"; import { type WebSocketPresenceStore } from "./ws-presence-store"; import { type ManagedWebSocketConnection, WebSocketRegistry, type WebSocketRoomId, type WebSocketUserId } from "./ws-registry"; type MessageHandler = (data: T) => void | Promise; type CloseHandler = () => void | Promise; export type WebSocketEventMap = Record; type InferWebSocketEventMap = z.infer>; export type WebSocketOutEvents = TOut; export type WebSocketInEvents = TIn; export interface WebSocketConnection extends ManagedWebSocketConnection { transport: "ws"; onClose(callback: CloseHandler): void; onMessage>(event: K, handler: MessageHandler[K]>): void; publish>(event: K, data: WebSocketOutEvents[K]): void; waitForClose(): Promise; join(roomId: WebSocketRoomId): void; leave(roomId: WebSocketRoomId): void; setUserId(userId: WebSocketUserId): void; clearUserId(): void; } export type AnyWebSocketConnection = WebSocketConnection; type WebSocketConnectionOptions = { namespace?: string; heartbeat?: number; maxPayload?: number; active?: boolean; outEvents: z.ZodObject; inEvents: z.ZodObject; registry: WebSocketRegistry; }; export type WebSocketRuntimeOptions = { nodeId?: string; presenceStore?: WebSocketPresenceStore; clusterBus?: WebSocketClusterBus; }; export declare class WebSocketRuntime { readonly registry: WebSocketRegistry; constructor(options?: WebSocketRuntimeOptions); registerConnection(socket: WebSocket, options: Omit, "registry">): WebSocketConnection, InferWebSocketEventMap>; activateConnection(connectionId: string): void; broadcast(event: string, data: unknown, namespace?: string): void; publishToRoom(roomId: WebSocketRoomId, event: string, data: unknown, namespace?: string): void; publishToUser(userId: WebSocketUserId, event: string, data: unknown, namespace?: string): void; publishToAudience(audience: WebSocketAudience, event: string, data: unknown): void; shutdown(code?: number, reason?: string): Promise; } export declare function createWebSocketRuntime(options?: WebSocketRuntimeOptions): WebSocketRuntime; export {}; //# sourceMappingURL=ws.d.ts.map