UNPKG

@softkit/mail

Version:

The Mailgun Mail Module is a comprehensive solution for integrating Mailgun's email functionality into NestJS applications. It provides a seamless way to send emails using Mailgun with minimal setup and configuration.

108 lines 4.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SendgridService = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const constants_1 = require("../../constants"); const exceptions_1 = require("@softkit/exceptions"); const abstract_mail_service_1 = require("../abstract-mail.service"); const config_1 = require("../../config"); const type_convertor_1 = require("../../utils/type-convertor"); let SendgridService = class SendgridService extends abstract_mail_service_1.AbstractMailService { constructor(sendgrid, config) { super(); this.sendgrid = sendgrid; this.config = config; } // eslint-disable-next-line complexity async sendEmail(emailData) { const fromAddress = emailData.from ?? this.config.defaultFromEmail; const fromName = emailData.userFullName ?? this.config.defaultFromName; const bcc = emailData.bcc ?? this.config.defaultBccList; const { attachment, cc, html, subject, to, text, ...rest } = emailData; if (html || text) { const content = (html ? { html } : { text }); const attachments = await this.transformAttachments(attachment); const response = await this.sendgrid.send({ from: { email: fromAddress, name: fromName, }, subject, bcc: this.transformToSendgridEmailData(bcc), cc: this.transformToSendgridEmailData(cc), to: this.transformToSendgridEmailData(to), attachments, ...content, ...rest, }); return { status: response[0].statusCode, }; } else { throw new exceptions_1.GeneralInternalServerException(undefined, `Looks like a developer mistake either html or text must be provided. Take a look now.`); } } async sendTemplateEmail(templateId, emailData, emailTemplateParams) { if (emailData.subject) { this.logger.error({ templateId }, "Subject won't be set. Use subject in the sendgrid UI for template emails."); } const fromAddress = emailData.from ?? this.config.defaultFromEmail; const bcc = emailData.bcc ?? this.config.defaultBccList; const fromName = emailData.userFullName ?? this.config.defaultFromName; const { attachment, cc, to, ...rest } = emailData; const attachments = await this.transformAttachments(attachment); const response = await this.sendgrid.send({ from: { email: fromAddress, name: fromName, }, bcc: this.transformToSendgridEmailData(bcc), cc: this.transformToSendgridEmailData(cc), to: this.transformToSendgridEmailData(to), attachments, templateId, dynamicTemplateData: emailTemplateParams, ...rest, }); return { status: response[0].statusCode, }; } transformToSendgridEmailData(emails) { if (emails === undefined) { return []; } return (Array.isArray(emails) ? emails : [emails]).map((email) => { return { email, }; }); } async transformAttachments(attachment) { if (!attachment) { return []; } const attachments = []; for (const item of attachment) { const content = await (0, type_convertor_1.toBase64)(item.data); attachments.push({ content, contentId: item.contentId, type: item.type, disposition: 'attachment', filename: item.filename, }); } return attachments; } }; exports.SendgridService = SendgridService; exports.SendgridService = SendgridService = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__param(0, (0, common_1.Inject)(constants_1.SENDGRID_CLIENT_TOKEN)), tslib_1.__param(1, (0, common_1.Inject)(constants_1.SENDGRID_CONFIG_TOKEN)), tslib_1.__metadata("design:paramtypes", [Function, config_1.SendgridConfig]) ], SendgridService); //# sourceMappingURL=sendgrid.service.js.map