UNPKG

@synet/realtime

Version:

Realtime Communication server/client implementations

98 lines (97 loc) 2.78 kB
import type { Logger } from "@synet/logger"; import type { RealtimeServer, RealtimeServerOptions, RealtimeServerStats, ServerEventType, RealtimeEvent, Topic } from "@synet/patterns/realtime"; /** * NATS-specific options */ export interface NatsServerOptions { url?: string; user?: string; password?: string; token?: string; reconnect?: { enabled: boolean; maxAttempts: number; delayMs: number; }; } export interface ControlConnectMessage { clientId?: string; topic?: string; clientInbox?: string; timestamp: Date | string; replyTo?: string; metadata?: Record<string, unknown>; } export interface ControlDisconnectMessage { clientId: string; timestamp: Date | string; topics: Topic[]; } export interface ControlSubscribeMessage { clientId: string; topic: string; } export interface ControlUnsubscribeMessage { clientId: string; topic: string; } export type ControlMessage = ControlConnectMessage | ControlDisconnectMessage | ControlSubscribeMessage | ControlUnsubscribeMessage; export declare class NatsRealtimeServer implements RealtimeServer { private options; private logger?; private natsConnection?; private clients; private subscriptions; private stats; private startTime; private eventHandlers; private natsSubscriptions; private stringCodec; constructor(options?: RealtimeServerOptions<NatsServerOptions>, logger?: Logger | undefined); start(): Promise<void>; stop(): Promise<void>; broadcast(topic: Topic, event: RealtimeEvent): Promise<void>; sendToClient(clientId: string, event: RealtimeEvent): Promise<void>; getStats(): RealtimeServerStats; on<T extends ServerEventType>(event: T, handler: (data: unknown) => void): void; /** * Set up subscriptions for client control messages */ private setupControlSubscriptions; /** * Handle a new client connection */ private handleClientConnection; /** * Subscribe a client to a topic */ private subscribeClientToTopic; /** * Unsubscribe a client from a topic */ private unsubscribeClientFromTopic; /** * Handle client disconnection */ private handleClientDisconnection; /** * Create a NATS subscription for a topic */ private createTopicSubscription; /** * Remove a NATS subscription for a topic */ private removeTopicSubscription; /** * Forward a message to all clients subscribed to a topic */ private forwardMessageToSubscribers; /** * Start periodic cleanup of stale clients */ private startStaleClientCleanup; /** * Emit an event to all registered handlers */ private emit; }