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

719 lines 34.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SlackSocketEventTrigger = void 0; const bolt_1 = require("@slack/bolt"); class SlackSocketEventTrigger { constructor() { this.description = { displayName: 'Slack Socket Event Trigger', name: 'slackSocketEventTrigger', group: ['trigger'], version: 1, description: 'Triggers workflow when a Slack message matches a regex pattern via Socket Mode', defaults: { name: 'Slack Socket Mode Trigger', }, icon: 'file:./assets/slack-socket.svg', inputs: [], outputs: ["main"], credentials: [ { name: 'slackSocketCredentialsApi', required: true, }, ], properties: [ { displayName: 'Trigger On', name: 'trigger', type: 'multiOptions', options: [{ name: 'App Deleted', value: 'app_deleted', description: 'When a user has deleted an app', }, { name: 'App Home Opened', value: 'app_home_opened', description: 'When a user clicks into your App Home', }, { name: 'App Installed', value: 'app_installed', description: 'When a user has installed an app', }, { name: 'App Mention', value: 'app_mention', description: 'When your bot or app is mentioned in a channel', }, { name: 'App Rate Limited', value: 'app_rate_limited', description: 'When your app\'s event subscriptions are being rate limited', }, { name: 'App Requested', value: 'app_requested', description: 'When a user requested an app', }, { name: 'App Uninstalled', value: 'app_uninstalled', description: 'When your Slack app was uninstalled', }, { name: 'App Uninstalled Team', value: 'app_uninstalled_team', description: 'When a user has uninstalled an app', }, { name: 'Assistant Thread Context Changed', value: 'assistant_thread_context_changed', description: 'When the context changed while an AI assistant thread was visible', }, { name: 'Assistant Thread Started', value: 'assistant_thread_started', description: 'When an AI assistant thread was started', }, { name: 'Bot Added', value: 'bot_added', description: 'When a bot user was added', }, { name: 'Bot Changed', value: 'bot_changed', description: 'When a bot user was changed', }, { name: 'Button Interaction', value: 'block_actions', description: 'When a user interacts with buttons, including NPS-style ratings', }, { name: 'Call Rejected', value: 'call_rejected', description: 'When a call was rejected', }, { name: 'Channel Archive', value: 'channel_archive', description: 'When a channel was archived', }, { name: 'Channel Created', value: 'channel_created', description: 'When a new channel was created', }, { name: 'Channel Deleted', value: 'channel_deleted', description: 'When a channel was deleted', }, { name: 'Channel History Changed', value: 'channel_history_changed', description: 'When bulk updates were made to a channel\'s history', }, { name: 'Channel ID Changed', value: 'channel_id_changed', description: 'When a channel ID changed', }, { name: 'Channel Joined', value: 'channel_joined', description: 'When you joined a channel', }, { name: 'Channel Left', value: 'channel_left', description: 'When you left a channel', }, { name: 'Channel Marked', value: 'channel_marked', description: 'When your channel read marker was updated', }, { name: 'Channel Rename', value: 'channel_rename', description: 'When a channel was renamed', }, { name: 'Channel Shared', value: 'channel_shared', description: 'When a channel has been shared with an external workspace', }, { name: 'Channel Unarchive', value: 'channel_unarchive', description: 'When a channel was unarchived', }, { name: 'Channel Unshared', value: 'channel_unshared', description: 'When a channel has been unshared with an external workspace', }, { name: 'Commands Changed', value: 'commands_changed', description: 'When a slash command has been added or changed', }, { name: 'DND Updated', value: 'dnd_updated', description: 'When Do not Disturb settings changed for the current user', }, { name: 'DND Updated User', value: 'dnd_updated_user', description: 'When Do not Disturb settings changed for a member', }, { name: 'Email Domain Changed', value: 'email_domain_changed', description: 'When the workspace email domain has changed', }, { name: 'Emoji Changed', value: 'emoji_changed', description: 'When a custom emoji has been added or changed', }, { name: 'External Org Migration Finished', value: 'external_org_migration_finished', description: 'When an enterprise grid migration has finished on an external workspace', }, { name: 'External Org Migration Started', value: 'external_org_migration_started', description: 'When an enterprise grid migration has started on an external workspace', }, { name: 'File Change', value: 'file_change', description: 'When a file was changed', }, { name: 'File Comment Added', value: 'file_comment_added', description: 'When a file comment was added', }, { name: 'File Comment Deleted', value: 'file_comment_deleted', description: 'When a file comment was deleted', }, { name: 'File Comment Edited', value: 'file_comment_edited', description: 'When a file comment was edited', }, { name: 'File Created', value: 'file_created', description: 'When a file was created', }, { name: 'File Deleted', value: 'file_deleted', description: 'When a file was deleted', }, { name: 'File Public', value: 'file_public', description: 'When a file was made public', }, { name: 'File Shared', value: 'file_shared', description: 'When a file was shared', }, { name: 'File Unshared', value: 'file_unshared', description: 'When a file was unshared', }, { name: 'Function Executed', value: 'function_executed', description: 'When your app function is executed as a step in a workflow', }, { name: 'Grid Migration Finished', value: 'grid_migration_finished', description: 'When an enterprise grid migration has finished on this workspace', }, { name: 'Grid Migration Started', value: 'grid_migration_started', description: 'When an enterprise grid migration has started on this workspace', }, { name: 'Group Archive', value: 'group_archive', description: 'When a private channel was archived', }, { name: 'Group Close', value: 'group_close', description: 'When you closed a private channel', }, { name: 'Group Deleted', value: 'group_deleted', description: 'When a private channel was deleted', }, { name: 'Group History Changed', value: 'group_history_changed', description: 'When bulk updates were made to a private channel\'s history', }, { name: 'Group Joined', value: 'group_joined', description: 'When you joined a private channel', }, { name: 'Group Left', value: 'group_left', description: 'When you left a private channel', }, { name: 'Group Marked', value: 'group_marked', description: 'When a private channel read marker was updated', }, { name: 'Group Open', value: 'group_open', description: 'When you created a group DM', }, { name: 'Group Rename', value: 'group_rename', description: 'When a private channel was renamed', }, { name: 'Group Unarchive', value: 'group_unarchive', description: 'When a private channel was unarchived', }, { name: 'Hello', value: 'hello', description: 'When the client has successfully connected to the server', }, { name: 'IM Close', value: 'im_close', description: 'When you closed a DM', }, { name: 'IM Created', value: 'im_created', description: 'When a DM was created', }, { name: 'IM History Changed', value: 'im_history_changed', description: 'When bulk updates were made to a DM\'s history', }, { name: 'IM Marked', value: 'im_marked', description: 'When a direct message read marker was updated', }, { name: 'IM Open', value: 'im_open', description: 'When you opened a DM', }, { name: 'Invite Requested', value: 'invite_requested', description: 'When a user requested an invite', }, { name: 'Link Shared', value: 'link_shared', description: 'When a message was posted containing links relevant to your application', }, { name: 'Manual Presence Change', value: 'manual_presence_change', description: 'When you manually updated your presence', }, { name: 'Member Joined Channel', value: 'member_joined_channel', description: 'When a user joined a public channel, private channel or MPDM', }, { name: 'Member Left Channel', value: 'member_left_channel', description: 'When a user left a public or private channel', }, { name: 'Message', value: 'message', description: 'When a message was sent to a channel', }, { name: 'Message App Home', value: 'message.app_home', description: 'When a user sent a message to your Slack app', }, { name: 'Message Channels', value: 'message.channels', description: 'When a message was posted to a channel', }, { name: 'Message Groups', value: 'message.groups', description: 'When a message was posted to a private channel', }, { name: 'Message IM', value: 'message.im', description: 'When a message was posted in a direct message channel', }, { name: 'Message Metadata Deleted', value: 'message_metadata_deleted', description: 'When message metadata was deleted', }, { name: 'Message Metadata Posted', value: 'message_metadata_posted', description: 'When message metadata was posted', }, { name: 'Message Metadata Updated', value: 'message_metadata_updated', description: 'When message metadata was updated', }, { name: 'Message MPIM', value: 'message.mpim', description: 'When a message was posted in a multiparty direct message channel', }, { name: 'Pin Added', value: 'pin_added', description: 'When a pin was added to a channel', }, { name: 'Pin Removed', value: 'pin_removed', description: 'When a pin was removed from a channel', }, { name: 'Pref Change', value: 'pref_change', description: 'When you have updated your preferences', }, { name: 'Presence Change', value: 'presence_change', description: 'When a member\'s presence changed', }, { name: 'Reaction Added', value: 'reaction_added', description: 'When a member has added an emoji reaction to an item', }, { name: 'Reaction Removed', value: 'reaction_removed', description: 'When a member removed an emoji reaction', }, { name: 'Resources Added', value: 'resources_added', description: 'When access to a set of resources was granted for your app', }, { name: 'Resources Removed', value: 'resources_removed', description: 'When access to a set of resources was removed for your app', }, { name: 'Scope Denied', value: 'scope_denied', description: 'When OAuth scopes were denied to your app', }, { name: 'Scope Granted', value: 'scope_granted', description: 'When OAuth scopes were granted to your app', }, { name: 'Shared Channel Invite Accepted', value: 'shared_channel_invite_accepted', description: 'When a shared channel invite was accepted', }, { name: 'Shared Channel Invite Approved', value: 'shared_channel_invite_approved', description: 'When a shared channel invite was approved', }, { name: 'Shared Channel Invite Declined', value: 'shared_channel_invite_declined', description: 'When a shared channel invite was declined', }, { name: 'Shared Channel Invite Received', value: 'shared_channel_invite_received', description: 'When a shared channel invite was sent to a Slack user', }, { name: 'Shared Channel Invite Requested', value: 'shared_channel_invite_requested', description: 'When a shared channel invite was requested', }, { name: 'Star Added', value: 'star_added', description: 'When a member has saved an item for later or starred an item', }, { name: 'Star Removed', value: 'star_removed', description: 'When a member has removed an item saved for later or starred an item', }, { name: 'Subteam Created', value: 'subteam_created', description: 'When a User Group has been added to the workspace', }, { name: 'Subteam Members Changed', value: 'subteam_members_changed', description: 'When the membership of an existing User Group has changed', }, { name: 'Subteam Self Added', value: 'subteam_self_added', description: 'When you have been added to a User Group', }, { name: 'Subteam Self Removed', value: 'subteam_self_removed', description: 'When you have been removed from a User Group', }, { name: 'Subteam Updated', value: 'subteam_updated', description: 'When an existing User Group has been updated or its members changed', }, { name: 'Team Access Granted', value: 'team_access_granted', description: 'When access to a set of teams was granted to your org app', }, { name: 'Team Access Revoked', value: 'team_access_revoked', description: 'When access to a set of teams was revoked from your org app', }, { name: 'Team Domain Change', value: 'team_domain_change', description: 'When the workspace domain has changed', }, { name: 'Team Join', value: 'team_join', description: 'When a new member has joined', }, { name: 'Team Plan Change', value: 'team_plan_change', description: 'When the account billing plan has changed', }, { name: 'Team Pref Change', value: 'team_pref_change', description: 'When a preference has been updated', }, { name: 'Team Profile Change', value: 'team_profile_change', description: 'When the workspace profile fields have been updated', }, { name: 'Team Profile Delete', value: 'team_profile_delete', description: 'When the workspace profile fields have been deleted', }, { name: 'Team Profile Reorder', value: 'team_profile_reorder', description: 'When the workspace profile fields have been reordered', }, { name: 'Team Rename', value: 'team_rename', description: 'When the workspace name has changed', }, { name: 'Tokens Revoked', value: 'tokens_revoked', description: 'When API tokens for your app were revoked', }, { name: 'URL Verification', value: 'url_verification', description: 'When verifying ownership of an Events API Request URL', }, { name: 'User Change', value: 'user_change', description: 'When a member\'s data has changed', }, { name: 'User Resource Denied', value: 'user_resource_denied', description: 'When user resource was denied to your app', }, { name: 'User Resource Granted', value: 'user_resource_granted', description: 'When user resource was granted to your app', }, { name: 'User Resource Removed', value: 'user_resource_removed', description: 'When user resource was removed from your app', }, { name: 'User Typing', value: 'user_typing', description: 'When a channel member is typing a message', }, { name: 'Workflow Deleted', value: 'workflow_deleted', description: 'When a workflow that contains a step supported by your app was deleted', }, { name: 'Workflow Published', value: 'workflow_published', description: 'When a workflow that contains a step supported by your app was published', }, { name: 'Workflow Step Deleted', value: 'workflow_step_deleted', description: 'When a workflow step supported by your app was removed from a workflow', }, { name: 'Workflow Step Execute', value: 'workflow_step_execute', description: 'When a workflow step supported by your app should execute', }, { name: 'Workflow Unpublished', value: 'workflow_unpublished', description: 'When a workflow that contains a step supported by your app was unpublished', },], default: [], }, { displayName: 'Regex Pattern', name: 'regexPattern', type: 'string', default: '', placeholder: 'regex pattern', description: 'Regular expression to match against incoming Slack messages. Capture groups can be used to extract data.', }, { displayName: 'Regex Flags', name: 'regexFlags', type: 'string', default: 'g', placeholder: 'gmi', description: 'Flags for the regular expression (e.g., g for global, i for case-insensitive)', }, ], }; } async trigger() { const filters = this.getNodeParameter('trigger', []); const pattern = this.getNodeParameter('regexPattern'); const flags = this.getNodeParameter('regexFlags'); const regExp = pattern.length > 0 ? new RegExp(pattern, flags) : undefined; const credentials = await this.getCredentials('slackSocketCredentialsApi'); const app = new bolt_1.App({ token: credentials.botToken, signingSecret: credentials.signingSecret, appToken: credentials.appToken, socketMode: true, }); const process = async ({ ack, body, payload, context, event }) => { if (ack) { await ack(); } let result = { body, payload, context, event }; this.emit([this.helpers.returnJsonArray(result)]); }; const setupEventListeners = () => { const handler = async (args) => { await process.call(this, args); }; filters.forEach((filter) => { if (filter === 'message' && regExp) { app.message(regExp, handler); } else if (filter === 'block_actions') { app.action(/.*/, handler); } else { app.event(filter, handler); } }); }; setupEventListeners(); const manualTriggerFunction = async () => { try { await app.start(); this.logger.info('Started Slack Socket app in test mode'); } catch (error) { this.logger.error('Error starting Slack Socket app in test mode:', error); } return new Promise((resolve) => { resolve(); }); }; if (this.getMode() === 'trigger') { try { await app.start(); this.logger.info('Started Slack Socket app in trigger mode'); } catch (error) { this.logger.error('Error starting Slack Socket app in trigger mode:', error); } } const closeFunction = async () => { try { await app.stop(); this.logger.info('Stopped Slack Socket app'); } catch (error) { this.logger.error('Error stopping Slack Socket app:', error); } }; return { closeFunction, manualTriggerFunction }; } } exports.SlackSocketEventTrigger = SlackSocketEventTrigger; //# sourceMappingURL=SlackSocketEventTrigger.node.js.map