@bn-digital/strapi-plugin-email-emitter
Version:
Strapi plugin to send emails based on entity lifecycle or schedule rules
56 lines (55 loc) • 2.67 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const service = {
async sendScheduled() {
const startDate = Date.now();
strapi.log.info(`[email] Batch email delivery each-minute job started`);
const entityService = strapi.entityService;
await entityService
.findMany(constants_1.contentTypeUIDs.email, {
filters: {
scheduled: { $eq: true },
delivered: { $eq: false },
},
publicationState: "preview",
})
.then(emails => {
strapi.log.warn(`[email] Found ${emails.length} emails to deliver`);
emails.forEach(email => entityService.update(constants_1.contentTypeUIDs.email, email.id, {
data: { publishedAt: new Date() },
}));
})
.catch(err => strapi.log.error(`[email] Error while delivering emails`, err))
.finally(() => strapi.log.info(`[email] Delivery finished (${Date.now() - startDate} ms)`));
},
/**
* Instantly send one email
* @param emailTemplate
* @param initialParams
*/
async send({ template: emailTemplate, ...initialParams }) {
var _a;
const startDate = Date.now();
strapi.log.info(`[email] Sending email to ${initialParams.email}`);
const entityService = strapi.entityService;
const emailDesignerService = strapi.service("plugin::email-designer.template");
const templatePromised = !emailTemplate || !emailTemplate.id || !emailDesignerService
? Promise.resolve((_a = emailTemplate === null || emailTemplate === void 0 ? void 0 : emailTemplate.id) !== null && _a !== void 0 ? _a : null)
: emailDesignerService === null || emailDesignerService === void 0 ? void 0 : emailDesignerService.findOne(emailTemplate).then(template => { var _a; return (_a = template === null || template === void 0 ? void 0 : template.id) !== null && _a !== void 0 ? _a : null; });
return templatePromised
.then(template => ({
state: "queued",
scheduled: false,
delivered: false,
publishedAt: new Date(),
template,
...initialParams,
}))
.then(data => ({ data }))
.then(params => entityService.create(constants_1.contentTypeUIDs.email, params))
.catch(error => strapi.log.error(`[email] Delivery failed`, error))
.finally(() => strapi.log.info(`[email] Delivery finished (${Date.now() - startDate} ms)`));
},
};
exports.default = service;
;