UNPKG

n8n-nodes-socketio-client

Version:
143 lines 5.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebsocketTrigger = void 0; const n8n_workflow_1 = require("n8n-workflow"); const socket_io_client_1 = require("socket.io-client"); class WebsocketTrigger { constructor() { this.description = { displayName: 'Websocket - Trigger', name: 'websocketTrigger', icon: 'file:websocket.svg', group: ['trigger'], version: 1, description: 'Connect to ws endpoint and trigger flow both on incoming message or websocket opening/closing', defaults: { name: 'SocketIO Connection & Message', }, inputs: [], outputs: ['main'], properties: [ { displayName: 'SocketIO URL', name: 'websocketUrl', type: 'string', default: '', placeholder: 'http://localhost:5000', description: 'URL of the SocketIO server to connect to', }, { displayName: 'Return WS Resource', name: 'returnWs', type: 'boolean', default: false, description: 'Whether to return ws resource. If you want to send back messages, this is required. However, your browser might freeze for a moment while displaying it in execution mode.', }, { displayName: 'Send Initial Message', name: 'sendInitMessage', type: 'boolean', default: false, description: 'Whether to send message to server immediately upon connecting', }, { displayName: 'Initial Message', name: 'initMessage', type: 'string', displayOptions: { show: { sendInitMessage: [true], }, }, required: true, default: '{}', description: 'Message to send', }, ], }; } async trigger() { let ws; let websocketUrl; let sendInitMessage; let returnWs; let initMessage; const startConsumer = async () => { try { websocketUrl = this.getNodeParameter('websocketUrl'); sendInitMessage = (this.getNodeParameter('sendInitMessage') || false); returnWs = (this.getNodeParameter('returnWs') || false); ws = (0, socket_io_client_1.io)(websocketUrl, { reconnectionDelayMax: 10000, }); ws.connect(); ws.on('connect_error', (error) => { console.warn('[socketio-client] connection error'); const errorData = { message: 'SocketIO connection error', description: error.message, }; throw new n8n_workflow_1.NodeApiError(this.getNode(), errorData); }); ws.on('disconnect', () => { this.emit([ this.helpers.returnJsonArray([{ event: 'close' }]) ]); }); ws.on('message', (data) => { console.debug('[socketio-client] received new message'); let message = data.toString(); try { message = JSON.parse(message); } catch (exception) { console.warn('Unable to json parse SocketIO message: ' + message); } this.emit([ this.helpers.returnJsonArray([ { event: 'message', message, ws: returnWs ? ws : null, }, ]), ]); }); ws.on('connect', () => { console.debug('[socketio-client] connected'); if (sendInitMessage) { initMessage = (this.getNodeParameter('initMessage') || ''); ws.send(initMessage); } this.emit([ this.helpers.returnJsonArray([ { event: 'open', ws: returnWs ? ws : null, }, ]), ]); }); } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Execution error: ${error.message}`); } }; await startConsumer(); async function closeFunction() { ws.offAny(); ws.disconnect(); } async function manualTriggerFunction() { await startConsumer(); } return { closeFunction, manualTriggerFunction, }; } } exports.WebsocketTrigger = WebsocketTrigger; //# sourceMappingURL=WebsocketTrigger.node.js.map