UNPKG

reservease.consumer

Version:

This package allows you to create an amqplib consumer and producer.

115 lines (114 loc) 4.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EmailService = void 0; const nodemailer_1 = __importDefault(require("nodemailer")); const handlebars_1 = __importDefault(require("handlebars")); const nodemailer_express_handlebars_1 = __importDefault(require("nodemailer-express-handlebars")); const InternalApiResponse_1 = require("./InternalApiResponse"); const allow_prototype_access_1 = require("@handlebars/allow-prototype-access"); class EmailService { constructor(appEmailAddress, appPassword, defaultLayout, viewDir, layoutDir, partialDir, defaultSenderEmail, defaultSenderName) { this._defaultLayout = 'main.hbs'; this._appEmailAddress = appEmailAddress; this._appPassword = appPassword; this._defaultSenderEmail = defaultSenderEmail; this._defaultSenderName = defaultSenderName; this._defaultLayout = defaultLayout; this._viewDir = viewDir; this._layoutDir = layoutDir; this._partialDir = partialDir; this.gmailAuth = { user: this._appEmailAddress, pass: this._appPassword, }; } CreateGmailTransporter() { try { const emailTransporter = nodemailer_1.default.createTransport({ service: 'gmail', auth: this.gmailAuth, }); return emailTransporter; } catch (err) { throw err; } } GetSenderInfo(email, name) { let _email = this._defaultSenderEmail; let _name = this._defaultSenderName; if (email !== '' && email !== null && email !== undefined) { _email = email; } if (name !== '' && name !== null && name !== undefined) { _name = name; } return `${_name}<${_email}>`; } async sendEmail(params, context = null) { try { const { subject, templateName } = params; const senderInfo = this.GetSenderInfo(params.senderEmail, params.senderName); let receipient; if (typeof params.receipient === 'string') { receipient = Array(params.receipient); } else { receipient = params.receipient; } const options = { viewEngine: { extname: '.hbs', layoutsDir: `${this._layoutDir}`, defaultLayout: this._defaultLayout, paritalsDir: `${this._partialDir}/`, handlebars: (0, allow_prototype_access_1.allowInsecurePrototypeAccess)(handlebars_1.default), }, viewPath: `${this._viewDir}/`, extName: '.hbs', }; const emailTransporter = this.CreateGmailTransporter(); emailTransporter.use('compile', (0, nodemailer_express_handlebars_1.default)(options)); const mail = { from: senderInfo, to: receipient, subject, template: templateName, context, }; const messageInfo = await emailTransporter.sendMail(mail); return new InternalApiResponse_1.InternalApiResponse(true, { mail, messageInfo, }, 'Successfuly sent email'); } catch (error) { return new InternalApiResponse_1.InternalApiResponse(false, undefined, JSON.stringify(error)); } } async sendTextEmail(params) { try { const { receipient, subject, text } = params; const senderInfo = this.GetSenderInfo(params.senderEmail, params.senderName); const mail = { from: senderInfo, to: receipient, subject, text, }; const emailTransporter = this.CreateGmailTransporter(); const messageInfo = await emailTransporter.sendMail(mail); return new InternalApiResponse_1.InternalApiResponse(true, { mail, messageInfo, }, 'Successfuly sent email'); } catch (error) { return new InternalApiResponse_1.InternalApiResponse(false, undefined, JSON.stringify(error)); } } } exports.EmailService = EmailService;