UNPKG

sfdx-hardis

Version:

Swiss-army-knife Toolbox for Salesforce. Allows you to define a complete CD/CD Pipeline. Orchestrate base commands and assist users with interactive wizards

64 lines 3.26 kB
import { isCI, uxLog } from "../utils/index.js"; import c from "chalk"; import { SlackProvider } from "./slackProvider.js"; import { UtilsNotifs as utilsNotifs } from "./utils.js"; import { TeamsProvider } from "./teamsProvider.js"; import { CONSTANTS, getConfig } from "../../config/index.js"; import { EmailProvider } from "./emailProvider.js"; import { ApiProvider } from "./apiProvider.js"; export class NotifProvider { static getInstances() { const notifProviders = []; // Slack if (UtilsNotifs.isSlackAvailable()) { notifProviders.push(new SlackProvider()); } // Ms Teams if (UtilsNotifs.isMsTeamsAvailable()) { notifProviders.push(new TeamsProvider()); } // Email if (UtilsNotifs.isEmailAvailable()) { notifProviders.push(new EmailProvider()); } // Api if (UtilsNotifs.isApiAvailable()) { notifProviders.push(new ApiProvider()); } return notifProviders; } // Post notifications to all configured channels // This method is sync to allow the command to continue and not negatively impact performances static async postNotifications(notifMessage) { const config = await getConfig("user"); const notificationsDisable = config.notificationsDisable ?? (process.env?.NOTIFICATIONS_DISABLE ? process.env.NOTIFICATIONS_DISABLE.split(",") : []); uxLog("log", this, c.grey(`[NotifProvider] Handling notification of type ${notifMessage.type}...`)); const notifProviders = this.getInstances(); if (notifProviders.length === 0 && isCI) { uxLog("log", this, c.grey(`[NotifProvider] No notif has been configured: ${CONSTANTS.DOC_URL_ROOT}/salesforce-ci-cd-setup-integrations-home/#message-notifications`)); } for (const notifProvider of notifProviders) { uxLog("log", this, c.grey(`[NotifProvider] - Notif target found: ${notifProvider.getLabel()}`)); // Skip if matching NOTIFICATIONS_DISABLE except for Api if (notificationsDisable.includes(notifMessage.type) && notifProvider.isUserNotifProvider()) { uxLog("warning", this, c.yellow(`[NotifProvider] Skip notification of type ${notifMessage.type} according to configuration (NOTIFICATIONS_DISABLE env var or notificationsDisable .sfdx-hardis.yml property)`)); } // Do not send notifs for level "log" to Users, but just to logs/metrics API else if (notifProvider.isApplicableForNotif(notifMessage)) { await notifProvider.postNotification(notifMessage); } else { uxLog("error", this, c.grey(`[NotifProvider] - Skipped: ${notifProvider.getLabel()} as not applicable for notification severity`)); } } } getLabel() { return "get label should be implemented !"; } // eslint-disable-next-line @typescript-eslint/no-unused-vars async postNotification(notifMessage, buttons = [], attachments = []) { uxLog("log", this, c.grey("method postNotification is not implemented on " + this.getLabel())); } } export const UtilsNotifs = utilsNotifs; //# sourceMappingURL=index.js.map