n8n-nodes-socketio-client
Version:
SocketIO nodes for n8n. Using Socket.io-client library
143 lines • 5.6 kB
JavaScript
;
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