/** * @file WebSocket type definitions * @module types/websocket */ import { WebSocket } from 'ws'; import { MessageType, NostrWSMessage } from './messages.js'; import { MessagePriority } from './priority.js'; import { RateLimitConfig } from '../utils/rate-limiter.js'; import { Logger } from 'pino'; /** * Extended WebSocket interface with additional properties * @interface ExtendedWebSocket */ export interface ExtendedWebSocket extends WebSocket { /** * Whether the WebSocket connection is alive */ isAlive?: boolean; /** * Set of subscription channels */ subscriptions?: Set; /** * Unique client identifier */ clientId?: string; /** * Queue of messages to be sent */ messageQueue?: NostrWSMessage[]; /** * Timestamp of the last ping message */ lastPing?: number; /** * Timestamp of the last pong message */ lastPong?: number; } /** * WebSocket client configuration options */ export interface NostrWSClientOptions { /** * Logger instance */ logger?: Logger; /** * Connection timeout in milliseconds */ connectionTimeout?: number; /** * Number of retry attempts for reconnection */ retryAttempts?: number; /** * Delay between retry attempts in milliseconds */ retryDelay?: number; /** * Maximum queue size */ queueSize?: number; /** * Maximum number of retries for sending messages */ maxRetries?: number; /** * Message handler callback */ onMessage?: (message: string) => void; /** * Error handler callback */ onError?: (error: Error) => void; } /** * WebSocket client event handlers */ export interface NostrWSEventHandlers { /** * Message handler callback */ onMessage?: (message: string) => void; /** * Error handler callback */ onError?: (error: Error) => void; } /** * Queue configuration options */ export interface QueueOptions { /** * Maximum size of the queue */ maxSize?: number; /** * Maximum number of retries for failed messages */ maxRetries?: number; /** * Delay between retries in milliseconds */ retryDelay?: number; /** * Timeout for stale messages in milliseconds */ staleTimeout?: number; } /** * Message queue item */ export interface QueueItem { /** * Message to be sent */ message: NostrWSMessage; /** * Message priority */ priority: MessagePriority; /** * Timestamp when the message was queued */ queuedAt: number; /** * Number of retries for the message */ retryCount?: number; } /** * State of the NostrWSClient connection * @interface NostrWSConnectionState */ export interface NostrWSConnectionState { /** * Whether the client is currently connected */ isConnected: boolean; /** * Number of reconnection attempts made */ reconnectAttempts: number; /** * Last error encountered */ lastError?: string; } /** * Server configuration options * @interface NostrWSServerOptions */ export interface NostrWSServerOptions { /** * Port to listen on */ port: number; /** * Host to bind to */ host?: string; /** * Path for the WebSocket endpoint */ path?: string; /** * Maximum payload size in bytes */ maxPayload?: number; /** * Maximum number of concurrent connections */ maxConnections?: number; /** * Ping interval in milliseconds */ pingInterval?: number; /** * Rate limiting configuration */ rateLimits?: RateLimitConfig; /** * Logger instance */ logger?: Logger; /** * Message handler callback */ onMessage?: (message: NostrWSMessage, socket: NostrWSServerSocket) => void; /** * Error handler callback */ onError?: (error: Error, socket: NostrWSServerSocket) => void; /** * Close handler */ onClose?: (socket: NostrWSServerSocket) => void; /** * Connection handler */ onConnection?: (socket: NostrWSServerSocket) => Promise; } /** * Server message structure * @interface NostrWSServerMessage */ export type NostrWSServerMessage = NostrWSMessage & { /** * Unique client identifier */ clientId?: string; }; /** * Extended WebSocket interface for Nostr server * @interface NostrWSServerSocket */ export interface NostrWSServerSocket extends WebSocket { /** * Unique client identifier */ clientId: string; /** * Set of subscription channels */ subscriptions: Set; /** * Timestamp of the last ping message */ lastPing?: number; /** * Whether the WebSocket connection is alive */ isAlive: boolean; } /** * Nostr WebSocket server message with client info * @interface NostrWSServerClientMessage */ export type NostrWSServerClientMessage = [MessageType, ...unknown[]] & { /** * Unique client identifier */ clientId?: string; /** * Timestamp of the message */ timestamp?: number; }; //# sourceMappingURL=websocket.d.ts.map