@synet/realtime
Version:
Realtime Communication server/client implementations
98 lines (97 loc) • 2.78 kB
TypeScript
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;
}