reservease.consumer
Version:
This package allows you to create an amqplib consumer and producer.
115 lines (114 loc) • 4.63 kB
JavaScript
;
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;