UNPKG

@360build/n8n-nodes-slack-socket-mode

Version:

Slack Socket Mode Node for n8n that allows you to use +100 Slack events in your n8n instance with proxy mode

150 lines 6.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SlackSocketDashTrigger = void 0; const n8n_workflow_1 = require("n8n-workflow"); const bolt_1 = require("@slack/bolt"); class SlackSocketDashTrigger { constructor() { this.description = { displayName: 'Slack Dash Trigger', name: 'slackSocketDashTrigger', group: ['trigger'], version: 2, description: 'Triggers workflow when a Slack slash command is invoked via Socket Mode.', defaults: { name: 'Slack Dash Trigger', }, icon: 'file:./assets/slack-dash.svg', inputs: [], outputs: ["main"], credentials: [ { name: 'slackSocketCredentialsApi', required: true, }, ], properties: [ { displayName: 'Slash Command', name: 'slashCommandName', type: 'string', default: '', placeholder: '/yourcommand', description: 'The full slash command to listen for (e.g., /mycommand). Leave empty to listen for any command.', }, ], }; } async trigger() { let app = global.__slackSocketDashTriggerApp; let isAppRunning = global.__slackSocketDashTriggerIsAppRunning || false; const handleSlackEvent = async (params, triggerContext) => { const { ack, command, body, context, payload } = params; try { await ack(); } catch (error) { triggerContext.logger.error('Error acknowledging Slack event:', error); } if (triggerContext && triggerContext.emit && triggerContext.helpers) { triggerContext.emit([ triggerContext.helpers.returnJsonArray({ command, body, context, payload }), ]); } else { console.error('Trigger context for emitting data is invalid.'); } }; const credentials = await this.getCredentials('slackSocketCredentialsApi'); if (!app) { app = new bolt_1.App({ token: credentials.botToken, signingSecret: credentials.signingSecret, appToken: credentials.appToken, socketMode: true, }); const slashCommandName = this.getNodeParameter('slashCommandName', ''); const commandHandler = async (args) => { await handleSlackEvent(args, this); }; if (slashCommandName && slashCommandName.trim() !== '') { app.command(slashCommandName, commandHandler); } else { app.command(/.*/, commandHandler); } this.logger.info(`Slack command listener(s) set up for: ${slashCommandName || 'ANY command'}`); global.__slackSocketDashTriggerApp = app; } if (this.getMode() === 'trigger') { if (!isAppRunning) { try { await app.start(); isAppRunning = true; global.__slackSocketDashTriggerIsAppRunning = true; this.logger.info('Slack Socket app started in trigger mode.'); } catch (error) { isAppRunning = false; global.__slackSocketDashTriggerIsAppRunning = false; this.logger.error('Error starting Slack Socket app in trigger mode:', error); throw new n8n_workflow_1.NodeOperationError(this.getNode(), error); } } else { this.logger.info('Slack Socket app already running (trigger mode check).'); } } const manualTriggerFunction = async () => { if (!app) { this.logger.error('Slack App not initialized during manual trigger.'); throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Slack App not initialized. Activate the workflow first or check configuration.'); } if (!isAppRunning) { try { await app.start(); isAppRunning = true; global.__slackSocketDashTriggerIsAppRunning = true; this.logger.info('Slack Socket app started in test mode.'); } catch (error) { isAppRunning = false; global.__slackSocketDashTriggerIsAppRunning = false; this.logger.error('Error starting Slack Socket app in test mode:', error); throw new n8n_workflow_1.NodeOperationError(this.getNode(), error); } } else { this.logger.info('Slack Socket app already running (manual trigger check).'); } return Promise.resolve(); }; const closeFunction = async () => { if (isAppRunning && app) { try { await app.stop(); this.logger.info('Slack Socket app stopped successfully.'); } catch (error) { this.logger.error('Error stopping Slack Socket app:', error); } finally { isAppRunning = false; global.__slackSocketDashTriggerIsAppRunning = false; } } else { this.logger.info('Slack Socket app was not running or already stopped.'); isAppRunning = false; global.__slackSocketDashTriggerIsAppRunning = false; global.__slackSocketDashTriggerApp = undefined; } }; return { closeFunction, manualTriggerFunction, }; } } exports.SlackSocketDashTrigger = SlackSocketDashTrigger; //# sourceMappingURL=SlackSocketDashTrigger.node.js.map