UNPKG

@microfox/webhook-slack

Version:

A TypeScript package for sending webhooks to Slack.

569 lines (526 loc) 20.1 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // ../../node_modules/@slack/types/dist/calls.js var require_calls = __commonJS({ "../../node_modules/@slack/types/dist/calls.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/dialog.js var require_dialog = __commonJS({ "../../node_modules/@slack/types/dist/dialog.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/app.js var require_app = __commonJS({ "../../node_modules/@slack/types/dist/events/app.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/assistant.js var require_assistant = __commonJS({ "../../node_modules/@slack/types/dist/events/assistant.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/call.js var require_call = __commonJS({ "../../node_modules/@slack/types/dist/events/call.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/channel.js var require_channel = __commonJS({ "../../node_modules/@slack/types/dist/events/channel.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/dnd.js var require_dnd = __commonJS({ "../../node_modules/@slack/types/dist/events/dnd.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/email.js var require_email = __commonJS({ "../../node_modules/@slack/types/dist/events/email.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/emoji.js var require_emoji = __commonJS({ "../../node_modules/@slack/types/dist/events/emoji.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/file.js var require_file = __commonJS({ "../../node_modules/@slack/types/dist/events/file.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/function.js var require_function = __commonJS({ "../../node_modules/@slack/types/dist/events/function.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/grid-migration.js var require_grid_migration = __commonJS({ "../../node_modules/@slack/types/dist/events/grid-migration.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/group.js var require_group = __commonJS({ "../../node_modules/@slack/types/dist/events/group.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/im.js var require_im = __commonJS({ "../../node_modules/@slack/types/dist/events/im.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/invite.js var require_invite = __commonJS({ "../../node_modules/@slack/types/dist/events/invite.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/link-shared.js var require_link_shared = __commonJS({ "../../node_modules/@slack/types/dist/events/link-shared.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/member.js var require_member = __commonJS({ "../../node_modules/@slack/types/dist/events/member.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/message.js var require_message = __commonJS({ "../../node_modules/@slack/types/dist/events/message.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/message-metadata.js var require_message_metadata = __commonJS({ "../../node_modules/@slack/types/dist/events/message-metadata.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/pin.js var require_pin = __commonJS({ "../../node_modules/@slack/types/dist/events/pin.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/reaction.js var require_reaction = __commonJS({ "../../node_modules/@slack/types/dist/events/reaction.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/shared-channel.js var require_shared_channel = __commonJS({ "../../node_modules/@slack/types/dist/events/shared-channel.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/star.js var require_star = __commonJS({ "../../node_modules/@slack/types/dist/events/star.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/subteam.js var require_subteam = __commonJS({ "../../node_modules/@slack/types/dist/events/subteam.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/team.js var require_team = __commonJS({ "../../node_modules/@slack/types/dist/events/team.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/token.js var require_token = __commonJS({ "../../node_modules/@slack/types/dist/events/token.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/user.js var require_user = __commonJS({ "../../node_modules/@slack/types/dist/events/user.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/steps-from-apps.js var require_steps_from_apps = __commonJS({ "../../node_modules/@slack/types/dist/events/steps-from-apps.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/events/index.js var require_events = __commonJS({ "../../node_modules/@slack/types/dist/events/index.js"(exports2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p); }; Object.defineProperty(exports2, "__esModule", { value: true }); __exportStar(require_app(), exports2); __exportStar(require_assistant(), exports2); __exportStar(require_call(), exports2); __exportStar(require_channel(), exports2); __exportStar(require_dnd(), exports2); __exportStar(require_email(), exports2); __exportStar(require_emoji(), exports2); __exportStar(require_file(), exports2); __exportStar(require_function(), exports2); __exportStar(require_grid_migration(), exports2); __exportStar(require_group(), exports2); __exportStar(require_im(), exports2); __exportStar(require_invite(), exports2); __exportStar(require_link_shared(), exports2); __exportStar(require_member(), exports2); __exportStar(require_message(), exports2); __exportStar(require_message_metadata(), exports2); __exportStar(require_pin(), exports2); __exportStar(require_reaction(), exports2); __exportStar(require_shared_channel(), exports2); __exportStar(require_star(), exports2); __exportStar(require_subteam(), exports2); __exportStar(require_team(), exports2); __exportStar(require_token(), exports2); __exportStar(require_user(), exports2); __exportStar(require_steps_from_apps(), exports2); } }); // ../../node_modules/@slack/types/dist/message-metadata.js var require_message_metadata2 = __commonJS({ "../../node_modules/@slack/types/dist/message-metadata.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/message-attachments.js var require_message_attachments = __commonJS({ "../../node_modules/@slack/types/dist/message-attachments.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/views.js var require_views = __commonJS({ "../../node_modules/@slack/types/dist/views.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/block-kit/blocks.js var require_blocks = __commonJS({ "../../node_modules/@slack/types/dist/block-kit/blocks.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/block-kit/composition-objects.js var require_composition_objects = __commonJS({ "../../node_modules/@slack/types/dist/block-kit/composition-objects.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/block-kit/block-elements.js var require_block_elements = __commonJS({ "../../node_modules/@slack/types/dist/block-kit/block-elements.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/block-kit/extensions.js var require_extensions = __commonJS({ "../../node_modules/@slack/types/dist/block-kit/extensions.js"(exports2) { "use strict"; Object.defineProperty(exports2, "__esModule", { value: true }); } }); // ../../node_modules/@slack/types/dist/index.js var require_dist = __commonJS({ "../../node_modules/@slack/types/dist/index.js"(exports2) { "use strict"; var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { if (k2 === void 0) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); } : function(o, m, k, k2) { if (k2 === void 0) k2 = k; o[k2] = m[k]; }); var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p); }; Object.defineProperty(exports2, "__esModule", { value: true }); __exportStar(require_calls(), exports2); __exportStar(require_dialog(), exports2); __exportStar(require_events(), exports2); __exportStar(require_message_metadata2(), exports2); __exportStar(require_message_attachments(), exports2); __exportStar(require_views(), exports2); __exportStar(require_blocks(), exports2); __exportStar(require_composition_objects(), exports2); __exportStar(require_block_elements(), exports2); __exportStar(require_extensions(), exports2); } }); // src/index.ts var index_exports = {}; __export(index_exports, { SlackWebhook: () => SlackWebhook, WebhookParseError: () => WebhookParseError }); module.exports = __toCommonJS(index_exports); // src/SlackWebhook.ts var import_webhook_core = require("@microfox/webhook-core"); var import_bolt = require("@slack/bolt"); var WebhookParseError = class extends Error { constructor(message) { super(message); this.name = "WebhookParseError"; } }; var SlackWebhook = class extends import_webhook_core.Webhook { constructor(options) { var _a; super(options); this.callbacks = {}; this.botToken = (_a = options.botToken) != null ? _a : process.env.SLACK_BOT_TOKEN; if (!this.botToken) { throw new Error("Bot token is required"); } } async sign(payload) { throw new Error("Signing is not supported by the Slack adapter."); } async verify(payload, signature, timestamp) { const payloadString = payload.toString(); if (!timestamp) { throw new import_webhook_core.WebhookVerificationError( "Timestamp is required for verification" ); } return (0, import_bolt.isValidSlackRequest)({ signingSecret: this.secret, body: payloadString, headers: { "x-slack-signature": signature, "x-slack-request-timestamp": timestamp } }); } async receive(request) { var _a, _b, _c; const signature = request.headers["x-slack-signature"]; const timestamp = Number(request.headers["x-slack-request-timestamp"]); if (!signature || !timestamp) { throw new import_webhook_core.WebhookVerificationError( "Slack signature or timestamp not found in headers" ); } const valid = await this.verify(request.body, signature, timestamp); if (!valid) { throw new import_webhook_core.WebhookVerificationError("Invalid signature"); } const body = JSON.parse(request.body.toString()); if (body.ssl_check) { return { statusCode: 200, body: JSON.stringify({ ok: true }), payload: body }; } if ((body == null ? void 0 : body.type) === "url_verification") { return { statusCode: 200, body: JSON.stringify({ challenge: body.challenge }), payload: body }; } const eventType = (_a = body == null ? void 0 : body.event) == null ? void 0 : _a.type; const command = body == null ? void 0 : body.command; const actionId = (_c = (_b = body == null ? void 0 : body.actions) == null ? void 0 : _b[0]) == null ? void 0 : _c.action_id; const shortcutId = body == null ? void 0 : body.shortcut_id; const dialogCallbackId = body == null ? void 0 : body.callback_id; if (eventType && this.callbacks[eventType]) { this.callbacks[eventType].forEach((cb) => cb(body)); } else if (command && this.callbacks[`command_${command}`]) { this.callbacks[`command_${command}`].forEach((cb) => cb(body)); } else if (actionId && this.callbacks[`action_${actionId}`]) { this.callbacks[`action_${actionId}`].forEach((cb) => cb(body)); } else if (shortcutId && this.callbacks[`shortcut_${shortcutId}`]) { this.callbacks[`shortcut_${shortcutId}`].forEach((cb) => cb(body)); } else if (dialogCallbackId && this.callbacks[`dialog_${dialogCallbackId}`]) { this.callbacks[`dialog_${dialogCallbackId}`].forEach((cb) => cb(body)); } else if (this.callbacks.message) { this.callbacks.message.forEach((cb) => cb(body)); } return { statusCode: 200, body: JSON.stringify({ ok: true }), payload: body }; } on(event, listener) { if (this.callbacks[event]) { this.callbacks[event].push(listener); } else { this.callbacks[event] = [listener]; } return this; } onMessage(callback) { if (this.callbacks.message) { this.callbacks.message.push(callback); } else { this.callbacks.message = [callback]; } } onCommand(command, callback) { const key = `command_${command}`; if (this.callbacks[key]) { this.callbacks[key].push(callback); } else { this.callbacks[key] = [callback]; } } onAction(actionId, callback) { const key = `action_${actionId}`; if (this.callbacks[key]) { this.callbacks[key].push(callback); } else { this.callbacks[key] = [callback]; } } onDialogSubmission(dialogCallbackId, callback) { const key = `dialog_${dialogCallbackId}`; if (this.callbacks[key]) { this.callbacks[key].push(callback); } else { this.callbacks[key] = [callback]; } } onShortcut(shortcutId, callback) { const key = `shortcut_${shortcutId}`; if (this.callbacks[key]) { this.callbacks[key].push(callback); } else { this.callbacks[key] = [callback]; } } onEvent(eventType, callback) { if (this.callbacks[eventType]) { this.callbacks[eventType].push(callback); } else { this.callbacks[eventType] = [callback]; } } }; // src/types/index.ts var types_exports = {}; // src/types/slack-events-api-types.ts var slack_events_api_types_exports = {}; __reExport(slack_events_api_types_exports, __toESM(require_dist())); // src/types/index.ts __reExport(types_exports, slack_events_api_types_exports); // src/index.ts __reExport(index_exports, types_exports, module.exports); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { SlackWebhook, WebhookParseError }); //# sourceMappingURL=index.js.map