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

79 lines 3.81 kB
import { SfError } from "@salesforce/core"; import DOMPurify from "isomorphic-dompurify"; import c from "chalk"; import { NotifProviderRoot } from "./notifProviderRoot.js"; import { getCurrentGitBranch, uxLog } from "../utils/index.js"; import { UtilsNotifs } from "./index.js"; import { CONSTANTS, getEnvVar } from "../../config/index.js"; import { marked } from "marked"; import { sendEmail } from "../utils/emailUtils.js"; import { removeMarkdown } from "../utils/notifUtils.js"; export class EmailProvider extends NotifProviderRoot { getLabel() { return "sfdx-hardis Email connector"; } // eslint-disable-next-line @typescript-eslint/no-unused-vars async postNotification(notifMessage) { const mainEmailAddress = getEnvVar("NOTIF_EMAIL_ADDRESS"); if (mainEmailAddress == null) { throw new SfError("[EmailProvider] You need to define a variable NOTIF_EMAIL_ADDRESS to use sfdx-hardis Email notifications"); } const emailAddresses = mainEmailAddress.split(","); // Add branch custom Teams channel if defined const customEmailChannelVariable = `NOTIF_EMAIL_ADDRESS_${(await getCurrentGitBranch() || "").toUpperCase()}`; if (getEnvVar(customEmailChannelVariable)) { emailAddresses.push(...(getEnvVar(customEmailChannelVariable) || "").split(",")); } /* jscpd:ignore-start */ // Main block const firstLineMarkdown = UtilsNotifs.prefixWithSeverityEmoji(UtilsNotifs.slackToTeamsMarkdown(notifMessage.text.split("\n")[0]), notifMessage.severity); const emailSubject = "[sfdx-hardis] " + removeMarkdown(firstLineMarkdown); let emailBody = UtilsNotifs.prefixWithSeverityEmoji(UtilsNotifs.slackToTeamsMarkdown(notifMessage.text), notifMessage.severity); // Add text details if (notifMessage?.attachments?.length && notifMessage?.attachments?.length > 0) { let text = "\n\n"; for (const attachment of notifMessage.attachments) { if (attachment.text) { text += attachment.text + "\n\n"; } } if (text !== "") { emailBody += UtilsNotifs.slackToTeamsMarkdown(text) + "\n\n"; } } /* jscpd:ignore-end */ // Add action blocks if (notifMessage.buttons?.length && notifMessage.buttons?.length > 0) { emailBody += "**Links:**\n\n"; for (const button of notifMessage.buttons) { // Url button if (button.url) { emailBody += " - " + UtilsNotifs.markdownLink(button.url, button.text, "teams") + "\n\n"; } } emailBody += "\n\n"; } // Add sfdx-hardis ref emailBody += `_Powered by [sfdx-hardis](${CONSTANTS.DOC_URL_ROOT})_`; // Send email const emailBodyHtml1 = marked.parse(emailBody); const emailBodyHtml = typeof emailBodyHtml1 === "string" ? emailBodyHtml1 : await emailBodyHtml1; const emailBodyHtmlSanitized = DOMPurify.sanitize(emailBodyHtml); const emailMessage = { subject: emailSubject, body_html: emailBodyHtmlSanitized, to: emailAddresses, attachments: notifMessage?.attachedFiles || [], }; const emailRes = await sendEmail(emailMessage); if (emailRes?.success) { uxLog(this, c.cyan(`[EmailProvider] Sent email to ${emailAddresses.join(",")}`)); } else { uxLog(this, c.yellow(`[EmailProvider] Error while sending email to ${emailAddresses.join(",")}`)); uxLog(this, c.grey(JSON.stringify(emailRes?.detail, null, 2))); } return; } } //# sourceMappingURL=emailProvider.js.map