anon-identity
Version:
Decentralized identity framework with DIDs, Verifiable Credentials, and privacy-preserving selective disclosure
82 lines • 2.32 kB
TypeScript
import { Server } from 'http';
import { ActivityStreamManager, StreamEvent, StreamFilter, StreamSubscription } from './activity-stream-manager';
export interface WebSocketMessage {
type: MessageType;
id?: string;
data?: any;
error?: string;
}
export declare enum MessageType {
SUBSCRIBE = "subscribe",
UNSUBSCRIBE = "unsubscribe",
GET_RECENT_EVENTS = "get_recent_events",
GET_METRICS = "get_metrics",
PING = "ping",
EVENT = "event",
SUBSCRIBED = "subscribed",
UNSUBSCRIBED = "unsubscribed",
RECENT_EVENTS = "recent_events",
METRICS = "metrics",
PONG = "pong",
ERROR = "error"
}
export interface ClientSubscription {
subscriptionId: string;
streamSubscription: StreamSubscription;
filters: StreamFilter;
clientId: string;
}
export interface WebSocketServerConfig {
port?: number;
path?: string;
enableAuth?: boolean;
authTimeout?: number;
maxConnections?: number;
pingInterval?: number;
enableCompression?: boolean;
}
export declare class ActivityWebSocketServer {
private wss;
private streamManager;
private clients;
private clientSubscriptions;
private config;
private pingTimer?;
constructor(streamManager: ActivityStreamManager, server?: Server, config?: WebSocketServerConfig);
/**
* Get server statistics
*/
getStats(): {
connectedClients: number;
totalSubscriptions: number;
subscriptionsByType: Record<string, number>;
uptime: number;
};
/**
* Broadcast event to all matching clients
*/
broadcast(event: StreamEvent, filters?: Partial<StreamFilter>): void;
/**
* Send event to specific client
*/
sendToClient(clientId: string, event: StreamEvent): void;
/**
* Close the WebSocket server
*/
close(): Promise<void>;
private setupEventHandlers;
private handleClientMessage;
private handleSubscribe;
private handleUnsubscribe;
private handleGetRecentEvents;
private handleGetMetrics;
private handleClientDisconnect;
private sendMessage;
private sendError;
private startPingTimer;
private generateClientId;
private generateId;
private getFilterType;
private filtersMatch;
}
//# sourceMappingURL=websocket-server.d.ts.map