@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
JavaScript
;
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