UNPKG

nodemailer-sequelize-queue

Version:
74 lines 11.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const QueueModel_1 = __importDefault(require("./QueueModel")); const sequelize_1 = require("sequelize"); const Scheduler_1 = __importDefault(require("./Scheduler")); const Mailer_1 = __importDefault(require("./Mailer")); const MailProcessor_1 = require("./MailProcessor"); class NodemailerSequelizeQueue { constructor(dbConfigInstance, smtpCredentials, options) { this.initDatabase(dbConfigInstance); this.smtpCredentials = smtpCredentials; this.options = options; this.scheduled = false; this.mailer = new Mailer_1.default(smtpCredentials); } async initDatabase(dbConfigInstance) { this.sequelize = dbConfigInstance.sequelize ? dbConfigInstance.sequelize : new sequelize_1.Sequelize(dbConfigInstance.config.database, dbConfigInstance.config.username, dbConfigInstance.config.password, { host: dbConfigInstance.config.host, dialect: dbConfigInstance.config.dialect, logging: dbConfigInstance.config.logging, }); } async initScheduler({ queueLimit = 100 }) { if (!this.dbInisializated) { await this.initModels(); } if (this.scheduled) { return; } const mailProcessor = new MailProcessor_1.MailProcessor(this.queueModel, this.mailer, this.options.maxAttempts, this.options.logging, queueLimit); this.scheduled = true; new Scheduler_1.default(this.smtpCredentials, this.queueModel, this.options.expression, this.options.maxAttempts, this.options.logging, queueLimit, mailProcessor); } async initModels() { this.queueModel = (0, QueueModel_1.default)(this.sequelize); // Creates table if not exist await this.queueModel.sync({ // eslint-disable-next-line no-console logging: console.log, force: false, }); this.dbInisializated = true; } async queueMail(data) { if (this.options.sendImmidiatly) { const message = this.mailer.composeMailFromModel(data); try { await this.mailer.sendMail(message); } catch (e) { const queueEntity = await this.queueModel.create(data, { returning: true, }); return queueEntity; } return; } await this.initModels(); const queueEntity = await this.queueModel.create(data, { returning: true, }); if (!queueEntity.get('id')) { throw new Error('Error queueing email'); } return queueEntity; } } exports.default = NodemailerSequelizeQueue; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4REFBa0c7QUFDbEcseUNBQXFEO0FBQ3JELDREQUFtQztBQUNuQyxzREFBNkI7QUFDN0IsbURBQStDO0FBRS9DLE1BQXFCLHdCQUF3QjtJQVMzQyxZQUFZLGdCQUFrQyxFQUFFLGVBQW9CLEVBQUUsT0FBaUI7UUFDckYsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFBO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLGdCQUFrQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFNBQVM7WUFDekMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFNBQVM7WUFDNUIsQ0FBQyxDQUFDLElBQUkscUJBQVMsQ0FDWCxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUNoQztnQkFDRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUk7Z0JBQ2xDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDeEMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPO2FBQ3pDLENBQ0YsQ0FBQTtJQUNQLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsVUFBVSxHQUFHLEdBQUcsRUFBc0I7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekIsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7U0FDeEI7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTTtTQUNQO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSw2QkFBYSxDQUNyQyxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUNwQixVQUFVLENBQ1gsQ0FBQTtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLElBQUksbUJBQVMsQ0FDWCxJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQ3BCLFVBQVUsRUFDVixhQUFhLENBQ2QsQ0FBQTtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUEsb0JBQVUsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFNUMsNkJBQTZCO1FBQzdCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDekIsc0NBQXNDO1lBQ3RDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRztZQUNwQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQTZCO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0RCxJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUE7YUFDcEM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDckQsU0FBUyxFQUFFLElBQUk7aUJBQ2hCLENBQUMsQ0FBQTtnQkFDRixPQUFPLFdBQVcsQ0FBQTthQUNuQjtZQUNELE9BQU07U0FDUDtRQUVELE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBRXZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3JELFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtTQUN4QztRQUNELE9BQU8sV0FBVyxDQUFBO0lBQ3BCLENBQUM7Q0FDRjtBQWpHRCwyQ0FpR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUXVldWVNb2RlbCwgeyBBZGRRdWV1ZU1vZGVsQXR0cmlidXRlcywgSVF1ZXVlTW9kZWwsIElRdWV1ZU1vZGVsU3RhdGljIH0gZnJvbSAnLi9RdWV1ZU1vZGVsJ1xuaW1wb3J0IHsgU2VxdWVsaXplLCBNb2RlbCwgRGlhbGVjdCB9IGZyb20gJ3NlcXVlbGl6ZSdcbmltcG9ydCBTY2hlZHVsZXIgZnJvbSAnLi9TY2hlZHVsZXInXG5pbXBvcnQgTWFpbGVyIGZyb20gJy4vTWFpbGVyJ1xuaW1wb3J0IHsgTWFpbFByb2Nlc3NvciB9IGZyb20gJy4vTWFpbFByb2Nlc3NvcidcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZW1haWxlclNlcXVlbGl6ZVF1ZXVlIGltcGxlbWVudHMgSU5vZGVtYWlsZXJTZXF1ZWxpemVRdWV1ZSB7XG4gIHB1YmxpYyBxdWV1ZU1vZGVsOiBJUXVldWVNb2RlbFN0YXRpY1xuICBwcml2YXRlIHNlcXVlbGl6ZTogU2VxdWVsaXplXG4gIHByaXZhdGUgZGJJbmlzaWFsaXphdGVkOiBib29sZWFuXG4gIHByaXZhdGUgc2NoZWR1bGVkOiBib29sZWFuXG4gIHByaXZhdGUgc210cENyZWRlbnRpYWxzOiBhbnlcbiAgcHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zXG4gIHByaXZhdGUgbWFpbGVyOiBNYWlsZXJcblxuICBjb25zdHJ1Y3RvcihkYkNvbmZpZ0luc3RhbmNlOiBEYkNvbmdpZkluc3RhbmNlLCBzbXRwQ3JlZGVudGlhbHM6IGFueSwgb3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICB0aGlzLmluaXREYXRhYmFzZShkYkNvbmZpZ0luc3RhbmNlKVxuICAgIHRoaXMuc210cENyZWRlbnRpYWxzID0gc210cENyZWRlbnRpYWxzXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuc2NoZWR1bGVkID0gZmFsc2VcbiAgICB0aGlzLm1haWxlciA9IG5ldyBNYWlsZXIoc210cENyZWRlbnRpYWxzKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0RGF0YWJhc2UoZGJDb25maWdJbnN0YW5jZTogRGJDb25naWZJbnN0YW5jZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2VxdWVsaXplID0gZGJDb25maWdJbnN0YW5jZS5zZXF1ZWxpemVcbiAgICAgID8gZGJDb25maWdJbnN0YW5jZS5zZXF1ZWxpemVcbiAgICAgIDogbmV3IFNlcXVlbGl6ZShcbiAgICAgICAgICBkYkNvbmZpZ0luc3RhbmNlLmNvbmZpZy5kYXRhYmFzZSxcbiAgICAgICAgICBkYkNvbmZpZ0luc3RhbmNlLmNvbmZpZy51c2VybmFtZSxcbiAgICAgICAgICBkYkNvbmZpZ0luc3RhbmNlLmNvbmZpZy5wYXNzd29yZCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiBkYkNvbmZpZ0luc3RhbmNlLmNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgZGlhbGVjdDogZGJDb25maWdJbnN0YW5jZS5jb25maWcuZGlhbGVjdCxcbiAgICAgICAgICAgIGxvZ2dpbmc6IGRiQ29uZmlnSW5zdGFuY2UuY29uZmlnLmxvZ2dpbmcsXG4gICAgICAgICAgfVxuICAgICAgICApXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdFNjaGVkdWxlcih7IHF1ZXVlTGltaXQgPSAxMDAgfTogSW5pdFNjaGVkdWxlclByb3BzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRiSW5pc2lhbGl6YXRlZCkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0TW9kZWxzKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY2hlZHVsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG1haWxQcm9jZXNzb3IgPSBuZXcgTWFpbFByb2Nlc3NvcihcbiAgICAgIHRoaXMucXVldWVNb2RlbCxcbiAgICAgIHRoaXMubWFpbGVyLFxuICAgICAgdGhpcy5vcHRpb25zLm1heEF0dGVtcHRzLFxuICAgICAgdGhpcy5vcHRpb25zLmxvZ2dpbmcsXG4gICAgICBxdWV1ZUxpbWl0XG4gICAgKVxuXG4gICAgdGhpcy5zY2hlZHVsZWQgPSB0cnVlXG4gICAgbmV3IFNjaGVkdWxlcihcbiAgICAgIHRoaXMuc210cENyZWRlbnRpYWxzLFxuICAgICAgdGhpcy5xdWV1ZU1vZGVsLFxuICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24sXG4gICAgICB0aGlzLm9wdGlvbnMubWF4QXR0ZW1wdHMsXG4gICAgICB0aGlzLm9wdGlvbnMubG9nZ2luZyxcbiAgICAgIHF1ZXVlTGltaXQsXG4gICAgICBtYWlsUHJvY2Vzc29yXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRNb2RlbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5xdWV1ZU1vZGVsID0gUXVldWVNb2RlbCh0aGlzLnNlcXVlbGl6ZSlcblxuICAgIC8vIENyZWF0ZXMgdGFibGUgaWYgbm90IGV4aXN0XG4gICAgYXdhaXQgdGhpcy5xdWV1ZU1vZGVsLnN5bmMoe1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGxvZ2dpbmc6IGNvbnNvbGUubG9nLFxuICAgICAgZm9yY2U6IGZhbHNlLFxuICAgIH0pXG4gICAgdGhpcy5kYkluaXNpYWxpemF0ZWQgPSB0cnVlXG4gIH1cblxuICBhc3luYyBxdWV1ZU1haWwoZGF0YTogQWRkUXVldWVNb2RlbEF0dHJpYnV0ZXMpOiBQcm9taXNlPElRdWV1ZU1vZGVsIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VuZEltbWlkaWF0bHkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1haWxlci5jb21wb3NlTWFpbEZyb21Nb2RlbChkYXRhKVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5tYWlsZXIuc2VuZE1haWwobWVzc2FnZSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgcXVldWVFbnRpdHkgPSBhd2FpdCB0aGlzLnF1ZXVlTW9kZWwuY3JlYXRlKGRhdGEsIHtcbiAgICAgICAgICByZXR1cm5pbmc6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBxdWV1ZUVudGl0eVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pbml0TW9kZWxzKClcblxuICAgIGNvbnN0IHF1ZXVlRW50aXR5ID0gYXdhaXQgdGhpcy5xdWV1ZU1vZGVsLmNyZWF0ZShkYXRhLCB7XG4gICAgICByZXR1cm5pbmc6IHRydWUsXG4gICAgfSlcbiAgICBpZiAoIXF1ZXVlRW50aXR5LmdldCgnaWQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBxdWV1ZWluZyBlbWFpbCcpXG4gICAgfVxuICAgIHJldHVybiBxdWV1ZUVudGl0eVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVtYWlsZXJTZXF1ZWxpemVRdWV1ZSB7XG4gIHF1ZXVlTW9kZWw6IElRdWV1ZU1vZGVsU3RhdGljXG4gIHF1ZXVlTWFpbChkYXRhOiBBZGRRdWV1ZU1vZGVsQXR0cmlidXRlcyk6IFByb21pc2U8TW9kZWw8YW55LCBhbnk+IHwgdm9pZD5cbiAgaW5pdFNjaGVkdWxlcihwcm9wcz86IHsgcXVldWVMaW1pdD86IG51bWJlciB9KTogUHJvbWlzZTx2b2lkPlxufVxuXG5leHBvcnQgdHlwZSBEYkNvbmZpZyA9IHtcbiAgdXNlcm5hbWU6IHN0cmluZ1xuICBwYXNzd29yZDogc3RyaW5nXG4gIGRhdGFiYXNlOiBzdHJpbmdcbiAgaG9zdDogc3RyaW5nXG4gIGRpYWxlY3Q6IERpYWxlY3RcbiAgbG9nZ2luZz86IGJvb2xlYW4gfCAoKHNxbDogc3RyaW5nLCB0aW1pbmc/OiBudW1iZXIpID0+IHZvaWQpXG59XG5cbmV4cG9ydCB0eXBlIERiQ29uZ2lmSW5zdGFuY2UgPSB7XG4gIGNvbmZpZz86IERiQ29uZmlnXG4gIHNlcXVlbGl6ZT86IFNlcXVlbGl6ZVxufVxuXG5leHBvcnQgdHlwZSBPcHRpb25zID0ge1xuICBtYXhBdHRlbXB0cz86IG51bWJlclxuICBleHByZXNzaW9uPzogc3RyaW5nXG4gIGxvZ2dpbmc/OiBib29sZWFuXG4gIHNlbmRJbW1pZGlhdGx5PzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBJbml0U2NoZWR1bGVyUHJvcHMgPSB7XG4gIHF1ZXVlTGltaXQ/OiBudW1iZXJcbn1cbiJdfQ==