UNPKG

n8n-nodes-websocket

Version:

Enhanced WebSocket nodes for n8n with bidirectional communication support

101 lines 4.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebSocketConnectionManager = exports.globalWebSocketConnections = void 0; const ws_1 = require("ws"); exports.globalWebSocketConnections = new Map(); exports.WebSocketConnectionManager = { addConnection: (connectionId, ws, connectionInfo) => { exports.globalWebSocketConnections.set(connectionId, { ws, connectionInfo, lastActivity: new Date(), }); console.log(`WebSocket connection added: ${connectionId} (Total: ${exports.globalWebSocketConnections.size})`); }, removeConnection: (connectionId) => { const removed = exports.globalWebSocketConnections.delete(connectionId); if (removed) { console.log(`WebSocket connection removed: ${connectionId} (Total: ${exports.globalWebSocketConnections.size})`); } return removed; }, sendToConnection: (connectionId, message) => { const connection = exports.globalWebSocketConnections.get(connectionId); if (connection && connection.ws.readyState === ws_1.WebSocket.OPEN) { try { connection.ws.send(message); connection.lastActivity = new Date(); console.log(`Message sent to ${connectionId}: ${message.substring(0, 100)}...`); return true; } catch (error) { console.error(`Error sending to ${connectionId}:`, error); exports.globalWebSocketConnections.delete(connectionId); return false; } } console.warn(`Connection ${connectionId} not found or not open`); return false; }, broadcastToAll: (message) => { let sent = 0; exports.globalWebSocketConnections.forEach((connection, connectionId) => { if (exports.WebSocketConnectionManager.sendToConnection(connectionId, message)) { sent++; } }); console.log(`Broadcast message sent to ${sent}/${exports.globalWebSocketConnections.size} connections`); return sent; }, getActiveConnections: () => { return Array.from(exports.globalWebSocketConnections.entries()).map(([id, conn]) => ({ connectionId: id, connectionInfo: conn.connectionInfo, lastActivity: conn.lastActivity, isOpen: conn.ws.readyState === ws_1.WebSocket.OPEN, })); }, getConnectionCount: () => { return exports.globalWebSocketConnections.size; }, cleanupDeadConnections: () => { const toDelete = []; exports.globalWebSocketConnections.forEach((connection, connectionId) => { if (connection.ws.readyState !== ws_1.WebSocket.OPEN) { toDelete.push(connectionId); } }); toDelete.forEach(id => { exports.globalWebSocketConnections.delete(id); }); if (toDelete.length > 0) { console.log(`Cleaned up ${toDelete.length} dead connections`); } return toDelete.length; }, updateActivity: (connectionId) => { const connection = exports.globalWebSocketConnections.get(connectionId); if (connection) { connection.lastActivity = new Date(); } }, isConnectionActive: (connectionId) => { const connection = exports.globalWebSocketConnections.get(connectionId); return connection ? connection.ws.readyState === ws_1.WebSocket.OPEN : false; }, getConnectionInfo: (connectionId) => { const connection = exports.globalWebSocketConnections.get(connectionId); return connection ? connection.connectionInfo : null; }, processMessageTemplate: (template, connectionInfo) => { const timestamp = new Date().toISOString(); const connections = exports.globalWebSocketConnections.size; return template .replace(/\{\{timestamp\}\}/g, timestamp) .replace(/\{\{connections\}\}/g, connections.toString()) .replace(/\{\{connectionId\}\}/g, (connectionInfo === null || connectionInfo === void 0 ? void 0 : connectionInfo.connectionId) || 'unknown') .replace(/\{\{date\}\}/g, new Date().toLocaleDateString()) .replace(/\{\{time\}\}/g, new Date().toLocaleTimeString()); }, }; //# sourceMappingURL=WebSocketConnections.js.map