UNPKG

@openinc/parse-server-opendash

Version:
115 lines (114 loc) 4.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initEmailTransport = initEmailTransport; exports.sendSimpleEmail = sendSimpleEmail; exports.sendTemplateEmail = sendTemplateEmail; exports.init = init; const fs_1 = __importDefault(require("fs")); const nodemailer_1 = __importDefault(require("nodemailer")); const nunjucks_1 = __importDefault(require("nunjucks")); const path_1 = require("path"); const __1 = require(".."); const config_1 = require("../features/config"); const types_1 = require("../types"); let emailTemplateDir = ""; let transport = undefined; async function initEmailTransport() { try { if (config_1.ConfigInstance.getInstance().getBoolean("SMTP_ENABLED")) { transport = nodemailer_1.default.createTransport({ host: config_1.ConfigInstance.getInstance().get("SMTP_HOST"), port: config_1.ConfigInstance.getInstance().getNumber("SMTP_PORT"), secure: config_1.ConfigInstance.getInstance().getBoolean("SMTP_SECURE"), ignoreTLS: config_1.ConfigInstance.getInstance().getBoolean("SMTP_IGNORE_TLS"), auth: { user: config_1.ConfigInstance.getInstance().get("SMTP_USER"), pass: config_1.ConfigInstance.getInstance().get("SMTP_PASS"), }, }); await transport.verify(); emailTemplateDir = (0, path_1.resolve)(process.cwd(), config_1.ConfigInstance.getInstance().get("EMAIL_TEMPLATE_DIR")); nunjucks_1.default.configure(emailTemplateDir, { autoescape: true }); } } catch (error) { console.error(`Parse SMTP Adapter: Error when trying to establish the SMTP connection:`); console.error(error); process.exit(1); } } async function sendSimpleEmail(to, subject, text) { const email = new types_1.Core_Email({ payload: { to, subject, text, }, }); await email.save(null, { useMasterKey: true }); return email; } async function sendTemplateEmail({ to, subject, fallback, template, data, }) { const email = new types_1.Core_Email({ payload: { to, subject: renderEmailTemplate("subject", template, data, subject), text: renderEmailTemplate("txt", template, data, fallback), html: renderEmailTemplate("html", template, data, undefined), }, }); await email.save(null, { useMasterKey: true }); return email; } function validateEmailTemplate(templateDir, template) { const templatePath = (0, path_1.join)(templateDir, template); if (!fs_1.default.existsSync(templateDir)) { return false; } if (!fs_1.default.existsSync(templatePath)) { return false; } return true; } function renderEmailTemplate(type, template, data, fallback) { const fullTemplate = template + "." + type; if (validateEmailTemplate(emailTemplateDir, fullTemplate)) { return nunjucks_1.default.render(fullTemplate, data); } if (type === "html") { return renderEmailTemplate("txt", template, data, fallback); } return fallback || ""; } async function init() { (0, __1.beforeSaveHook)(types_1.Core_Email, async (request) => { const { object } = request; object.setACL(new Parse.ACL()); if (!transport) { object.sent = false; object.success = false; object.error = false; } else { try { const response = await transport.sendMail({ ...object.payload, from: config_1.ConfigInstance.getInstance().get("SMTP_FROM"), }); object.response = response; object.sent = true; object.success = true; object.error = false; } catch (error) { object.response = JSON.parse(JSON.stringify(error)); object.sent = true; object.success = false; object.error = true; } } }); }