UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

185 lines (184 loc) 6.07 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); 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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/providers/slack.ts var slack_exports = {}; __export(slack_exports, { default: () => SlackProvider, mockSlackProvider: () => mockSlackProvider }); module.exports = __toCommonJS(slack_exports); function SlackProvider(options) { return { id: "slack", name: "Slack", type: "notification", options, ...options, sendNotification: async (sendOptions) => { if (!options.apiKey) { throw new Error("No apiKey found for notification provider"); } const channel = sendOptions.channel || options.defaultChannelId; if (!channel) { throw new Error("No channel found"); } const { attachments, text, icon_emoji = ":robot_face:", username = "Announce Bot" } = sendOptions; try { const response = await fetch("https://slack.com/api/chat.postMessage", { method: "POST", headers: { Authorization: `Bearer ${options.apiKey}`, "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify({ icon_emoji, username, attachments, channel, text }) }); if (!response.ok) { throw new Error(`Slack API error: ${response.statusText}`); } return await response.json(); } catch (e) { console.log(e); return Promise.reject(e); } }, createChannel: async (createOptions) => { if (!options.apiKey) { throw new Error("No apiKey found for notification provider"); } try { const response = await fetch("https://slack.com/api/conversations.create", { method: "POST", headers: { Authorization: `Bearer ${options.apiKey}`, "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify(createOptions) }); if (!response.ok) { throw new Error(`Slack API error: ${response.statusText}`); } const data = await response.json(); if (!data.ok) { throw new Error(`Slack API error: ${data.error}`); } return data; } catch (e) { console.log(e); return Promise.reject(e); } }, inviteToChannel: async (inviteOptions) => { if (!options.apiKey) { throw new Error("No apiKey found for notification provider"); } const users = Array.isArray(inviteOptions.users) ? inviteOptions.users.join(",") : inviteOptions.users; try { const response = await fetch("https://slack.com/api/conversations.invite", { method: "POST", headers: { Authorization: `Bearer ${options.apiKey}`, "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify({ channel: inviteOptions.channel, users, force: inviteOptions.force }) }); if (!response.ok) { throw new Error(`Slack API error: ${response.statusText}`); } const data = await response.json(); if (!data.ok) { throw new Error(`Slack API error: ${data.error}`); } return data; } catch (e) { console.log(e); return Promise.reject(e); } }, postEphemeral: async (ephemeralOptions) => { if (!options.apiKey) { throw new Error("No apiKey found for notification provider"); } const channel = ephemeralOptions.channel || options.defaultChannelId; if (!channel) { throw new Error("No channel found"); } const { text, icon_emoji = ":eggo:", username = "eggo", user, as_user, thread_ts, attachments } = ephemeralOptions; try { const response = await fetch("https://slack.com/api/chat.postEphemeral", { method: "POST", headers: { Authorization: `Bearer ${options.apiKey}`, "Content-Type": "application/json; charset=utf-8" }, body: JSON.stringify({ icon_emoji, username, channel, text, user, as_user, thread_ts, attachments }) }); if (!response.ok) { throw new Error(`Slack API error: ${response.statusText}`); } const data = await response.json(); if (!data.ok) { throw new Error(`Slack API error: ${data.error}`); } return data; } catch (e) { console.log(e); return Promise.reject(e); } } }; } __name(SlackProvider, "SlackProvider"); var mockSlackProvider = { id: "mock-slack", name: "Mock Slack", type: "notification", options: { apiKey: "mock-api-key" }, apiKey: "mock-api-key", sendNotification: async () => Promise.resolve({}), createChannel: async () => Promise.resolve({}), inviteToChannel: async () => Promise.resolve({}), postEphemeral: async () => Promise.resolve({}) }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { mockSlackProvider }); //# sourceMappingURL=slack.cjs.map