UNPKG

@coursebuilder/core

Version:

Core package for Course Builder

164 lines (162 loc) 5 kB
import { __name } from "./chunk-VLQXSCFN.js"; // src/providers/slack.ts 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({}) }; export { SlackProvider, mockSlackProvider }; //# sourceMappingURL=chunk-CRE32GAU.js.map