UNPKG

rokot-notification

Version:

Rokot - [Rocketmakers](http://www.rocketmakers.com/) TypeScript NodeJs Platform

92 lines (91 loc) 4.14 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const nodemailer = require("nodemailer"); const recipients_1 = require("../core/recipients"); const dispatchHandler_1 = require("../core/dispatchHandler"); class NodemailerNotificationDispatchHandler extends dispatchHandler_1.NotificationDispatchHandler { constructor(logger, transport) { super("nodemailer", logger, transport); } } exports.NodemailerNotificationDispatchHandler = NodemailerNotificationDispatchHandler; function nodemailerInitializer(logger, transporterProvider, defaultFromAddress, recipientResolver) { return __awaiter(this, void 0, void 0, function* () { const transporter = yield transporterProvider.getTransporter(); const transport = new NodemailerNotificationTransport(logger, transporter, recipientResolver || recipients_1.recipientTokenResolver, defaultFromAddress); return new NodemailerNotificationDispatchHandler(logger, transport); }); } exports.nodemailerInitializer = nodemailerInitializer; class NodemailerTransporterBase { getTransporter() { return __awaiter(this, void 0, void 0, function* () { this.validate(); return yield this.createTransport(); }); } createTransport() { return new Promise((res, rej) => { res(nodemailer.createTransport(this.createNodemailerTransport())); }); } } exports.NodemailerTransporterBase = NodemailerTransporterBase; class NodemailerNotificationTransport { constructor(logger, native, recipientResolver, defaultFromAddress) { this.logger = logger; this.native = native; this.recipientResolver = recipientResolver; this.defaultFromAddress = defaultFromAddress; logger.trace("Created Nodemailer Notification Transport"); } static create(logger, transporter, recipientResolver, defaultFromAddress) { return __awaiter(this, void 0, void 0, function* () { const t = yield transporter.getTransporter(); return new NodemailerNotificationTransport(logger, t, recipientResolver, defaultFromAddress); }); } getFromAddress(notification) { return notification.fromAddress || this.defaultFromAddress; } shutdown() { this.native.close(); } resolveTokens(recipients) { return this.recipientResolver.find(recipients, ["nodemailer", "email"], true); } send(recipients, builder) { return __awaiter(this, void 0, void 0, function* () { const to = yield this.resolveTokens(recipients); if (!to || !to.length) { return; } const outMessage = { to }; builder && builder(outMessage); return this.sendMessage(outMessage); }); } sendMessage(mail) { return __awaiter(this, void 0, void 0, function* () { try { const info = yield this.native.sendMail(mail); const failed = info.rejected ? info.rejected.map(r => ({ token: r, error: null })) : []; const sent = info.accepted ? info.accepted : []; return { transport: "nodemailer", sent, failed, native: info }; } catch (e) { this.logger.error(e, "Nodemailer was unable to send mail"); return { transport: "nodemailer", error: e }; } }); } } exports.NodemailerNotificationTransport = NodemailerNotificationTransport;