@microfox/webhook-slack
Version:
A TypeScript package for sending webhooks to Slack.
570 lines (527 loc) • 19.6 kB
JavaScript
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
));
// ../../node_modules/@slack/types/dist/calls.js
var require_calls = __commonJS({
"../../node_modules/@slack/types/dist/calls.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/dialog.js
var require_dialog = __commonJS({
"../../node_modules/@slack/types/dist/dialog.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/app.js
var require_app = __commonJS({
"../../node_modules/@slack/types/dist/events/app.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/assistant.js
var require_assistant = __commonJS({
"../../node_modules/@slack/types/dist/events/assistant.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/call.js
var require_call = __commonJS({
"../../node_modules/@slack/types/dist/events/call.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/channel.js
var require_channel = __commonJS({
"../../node_modules/@slack/types/dist/events/channel.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/dnd.js
var require_dnd = __commonJS({
"../../node_modules/@slack/types/dist/events/dnd.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/email.js
var require_email = __commonJS({
"../../node_modules/@slack/types/dist/events/email.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/emoji.js
var require_emoji = __commonJS({
"../../node_modules/@slack/types/dist/events/emoji.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/file.js
var require_file = __commonJS({
"../../node_modules/@slack/types/dist/events/file.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/function.js
var require_function = __commonJS({
"../../node_modules/@slack/types/dist/events/function.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/group.js
var require_group = __commonJS({
"../../node_modules/@slack/types/dist/events/group.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/im.js
var require_im = __commonJS({
"../../node_modules/@slack/types/dist/events/im.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/invite.js
var require_invite = __commonJS({
"../../node_modules/@slack/types/dist/events/invite.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/member.js
var require_member = __commonJS({
"../../node_modules/@slack/types/dist/events/member.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/message.js
var require_message = __commonJS({
"../../node_modules/@slack/types/dist/events/message.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/pin.js
var require_pin = __commonJS({
"../../node_modules/@slack/types/dist/events/pin.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/reaction.js
var require_reaction = __commonJS({
"../../node_modules/@slack/types/dist/events/reaction.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/star.js
var require_star = __commonJS({
"../../node_modules/@slack/types/dist/events/star.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/subteam.js
var require_subteam = __commonJS({
"../../node_modules/@slack/types/dist/events/subteam.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/team.js
var require_team = __commonJS({
"../../node_modules/@slack/types/dist/events/team.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/token.js
var require_token = __commonJS({
"../../node_modules/@slack/types/dist/events/token.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/user.js
var require_user = __commonJS({
"../../node_modules/@slack/types/dist/events/user.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/events/index.js
var require_events = __commonJS({
"../../node_modules/@slack/types/dist/events/index.js"(exports) {
"use strict";
var __createBinding = exports && exports.__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 = exports && exports.__exportStar || function(m, exports2) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require_app(), exports);
__exportStar(require_assistant(), exports);
__exportStar(require_call(), exports);
__exportStar(require_channel(), exports);
__exportStar(require_dnd(), exports);
__exportStar(require_email(), exports);
__exportStar(require_emoji(), exports);
__exportStar(require_file(), exports);
__exportStar(require_function(), exports);
__exportStar(require_grid_migration(), exports);
__exportStar(require_group(), exports);
__exportStar(require_im(), exports);
__exportStar(require_invite(), exports);
__exportStar(require_link_shared(), exports);
__exportStar(require_member(), exports);
__exportStar(require_message(), exports);
__exportStar(require_message_metadata(), exports);
__exportStar(require_pin(), exports);
__exportStar(require_reaction(), exports);
__exportStar(require_shared_channel(), exports);
__exportStar(require_star(), exports);
__exportStar(require_subteam(), exports);
__exportStar(require_team(), exports);
__exportStar(require_token(), exports);
__exportStar(require_user(), exports);
__exportStar(require_steps_from_apps(), exports);
}
});
// ../../node_modules/@slack/types/dist/message-metadata.js
var require_message_metadata2 = __commonJS({
"../../node_modules/@slack/types/dist/message-metadata.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/message-attachments.js
var require_message_attachments = __commonJS({
"../../node_modules/@slack/types/dist/message-attachments.js"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/views.js
var require_views = __commonJS({
"../../node_modules/@slack/types/dist/views.js"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__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"(exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
}
});
// ../../node_modules/@slack/types/dist/index.js
var require_dist = __commonJS({
"../../node_modules/@slack/types/dist/index.js"(exports) {
"use strict";
var __createBinding = exports && exports.__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 = exports && exports.__exportStar || function(m, exports2) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require_calls(), exports);
__exportStar(require_dialog(), exports);
__exportStar(require_events(), exports);
__exportStar(require_message_metadata2(), exports);
__exportStar(require_message_attachments(), exports);
__exportStar(require_views(), exports);
__exportStar(require_blocks(), exports);
__exportStar(require_composition_objects(), exports);
__exportStar(require_block_elements(), exports);
__exportStar(require_extensions(), exports);
}
});
// src/index.ts
var index_exports = {};
__export(index_exports, {
SlackWebhook: () => SlackWebhook,
WebhookParseError: () => WebhookParseError
});
// src/SlackWebhook.ts
import {
Webhook,
WebhookVerificationError
} from "@microfox/webhook-core";
import {
isValidSlackRequest
} from "@slack/bolt";
var WebhookParseError = class extends Error {
constructor(message) {
super(message);
this.name = "WebhookParseError";
}
};
var SlackWebhook = class extends 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 WebhookVerificationError(
"Timestamp is required for verification"
);
}
return 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 WebhookVerificationError(
"Slack signature or timestamp not found in headers"
);
}
const valid = await this.verify(request.body, signature, timestamp);
if (!valid) {
throw new 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);
export {
SlackWebhook,
WebhookParseError
};
//# sourceMappingURL=index.mjs.map