UNPKG

webssh2-server

Version:

A Websocket to SSH2 gateway using xterm.js, socket.io, ssh2

76 lines (75 loc) 2.76 kB
/** * Simple event system setup for services integration */ import { EventBusWithMiddleware, loggingMiddleware, metricsMiddleware, deduplicationMiddleware, rateLimitingMiddleware } from './middleware.js'; import { createAuthHandlers } from './handlers/auth-handler.js'; import { createConnectionHandlers } from './handlers/connection-handler.js'; import { createTerminalHandlers } from './handlers/terminal-handler.js'; import { createSystemHandlers } from './handlers/system-handler.js'; import debug from 'debug'; const logger = debug('webssh2:events:setup-simple'); /** * Setup event system with services */ export function setupEventSystem(services, store, _config) { logger('Setting up event system'); // Create event bus with middleware const eventBus = new EventBusWithMiddleware({ maxQueueSize: 10000, maxRetries: 3 }); // Add middleware based on environment if (process.env['DEBUG']?.includes('webssh2:events') === true) { eventBus.use(loggingMiddleware); } // Always enable these for production stability eventBus.use(deduplicationMiddleware(1000)); eventBus.use(rateLimitingMiddleware(1000)); // Optionally enable metrics if (process.env['WEBSSH2_ENABLE_METRICS'] === 'true') { eventBus.use(metricsMiddleware()); } // Register event handlers const registerHandlers = () => { logger('Registering event handlers'); // Auth handlers createAuthHandlers(eventBus, services.auth, store); // Connection handlers createConnectionHandlers(eventBus, services.ssh, store); // Terminal handlers createTerminalHandlers(eventBus, services.terminal, services.ssh, store); // System handlers createSystemHandlers(eventBus); logger('Event handlers registered'); }; return { eventBus, async start() { logger('Starting event system'); registerHandlers(); await eventBus.publish({ type: 'system.info', payload: { message: 'Event system started', details: { handlers: eventBus.getStats().handlerCounts } } }); logger('Event system started'); }, async stop() { logger('Stopping event system'); await eventBus.publish({ type: 'system.info', payload: { message: 'Event system stopping' } }); await eventBus.flush(); eventBus.clear(); eventBus.clearMiddleware(); logger('Event system stopped'); } }; }