UNPKG

nodemailer-sequelize-queue

Version:
49 lines 7.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // import cron from 'node-cron' const cron_1 = require("cron"); const logger_1 = __importDefault(require("./utils/logger")); const generateRandom_1 = require("./utils/generateRandom"); class Scheduler { constructor(smtpCredentials, queueModel, expression = '0 */1 * * *', maxAttemps = -1, logging = false, limit = 100, mailProcessor) { if (!isCronValid(expression)) { throw new Error('Cron expression is invalid'); } this.limit = limit; this.expression = expression; this.maxAttemps = maxAttemps; this.logging = logging; this.runJobs(); this.queueModel = queueModel; this.mailProcessor = mailProcessor; } async runJobs() { this.log(`Initialising cron schedule ${this.expression}`); await new Promise((resolve) => setTimeout(resolve, (0, generateRandom_1.generateRandom)(500, 2500))); // eslint-disable-next-line @typescript-eslint/no-this-alias const self = this; const job = new cron_1.CronJob(this.expression, function () { self.mailProcessor.processQueueMails().catch((e) => { logger_1.default.error('Cron failed', { message: e.message, stack: e.stack, }); }); }); job.start(); } log(message, level = 'info') { if (this.logging) { logger_1.default.log(level, message); } } } function isCronValid(freq) { const cronregex = new RegExp(/^(\*|([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|\*\/([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])) (\*|([0-9]|1[0-9]|2[0-3])|\*\/([0-9]|1[0-9]|2[0-3])) (\*|([1-9]|1[0-9]|2[0-9]|3[0-1])|\*\/([1-9]|1[0-9]|2[0-9]|3[0-1])) (\*|([1-9]|1[0-2])|\*\/([1-9]|1[0-2])) (\*|([0-6])|\*\/([0-6]))$/); return cronregex.test(freq); } exports.default = Scheduler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NjaGVkdWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUErQjtBQUMvQiwrQkFBOEI7QUFFOUIsNERBQW1DO0FBQ25DLDJEQUF1RDtBQUd2RCxNQUFNLFNBQVM7SUFRYixZQUNFLGVBQW9CLEVBQ3BCLFVBQTZCLEVBQzdCLFVBQVUsR0FBRyxhQUFhLEVBQzFCLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFDZixPQUFPLEdBQUcsS0FBSyxFQUNmLEtBQUssR0FBRyxHQUFHLEVBQ1gsYUFBNEI7UUFFNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7U0FDOUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUV0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFZCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUU1QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQTtJQUNwQyxDQUFDO0lBRU8sS0FBSyxDQUFDLE9BQU87UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFFekQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFBLCtCQUFjLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RSw0REFBNEQ7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7b0JBQzFCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztvQkFDbEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2lCQUNmLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDRixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDYixDQUFDO0lBRU8sR0FBRyxDQUFDLE9BQWUsRUFBRSxLQUFLLEdBQUcsTUFBTTtRQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1NBQzNCO0lBQ0gsQ0FBQztDQUNGO0FBU0QsU0FBUyxXQUFXLENBQUMsSUFBWTtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FDMUIsMFJBQTBSLENBQzNSLENBQUE7SUFDRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFDN0IsQ0FBQztBQUlELGtCQUFlLFNBQVMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBjcm9uIGZyb20gJ25vZGUtY3JvbidcbmltcG9ydCB7IENyb25Kb2IgfSBmcm9tICdjcm9uJ1xuaW1wb3J0IHsgSVF1ZXVlTW9kZWxTdGF0aWMgfSBmcm9tICcuL1F1ZXVlTW9kZWwnXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb20gfSBmcm9tICcuL3V0aWxzL2dlbmVyYXRlUmFuZG9tJ1xuaW1wb3J0IHsgTWFpbFByb2Nlc3NvciB9IGZyb20gJy4vTWFpbFByb2Nlc3NvcidcblxuY2xhc3MgU2NoZWR1bGVyIGltcGxlbWVudHMgSVNjaGVkdWxlciB7XG4gIGV4cHJlc3Npb246IHN0cmluZ1xuICBtYXhBdHRlbXBzOiBudW1iZXJcbiAgbG9nZ2luZzogYm9vbGVhblxuICBsaW1pdDogbnVtYmVyXG4gIG1haWxQcm9jZXNzb3I6IE1haWxQcm9jZXNzb3JcbiAgcHJpdmF0ZSBxdWV1ZU1vZGVsOiBJUXVldWVNb2RlbFN0YXRpY1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNtdHBDcmVkZW50aWFsczogYW55LFxuICAgIHF1ZXVlTW9kZWw6IElRdWV1ZU1vZGVsU3RhdGljLFxuICAgIGV4cHJlc3Npb24gPSAnMCAqLzEgKiAqIConLFxuICAgIG1heEF0dGVtcHMgPSAtMSxcbiAgICBsb2dnaW5nID0gZmFsc2UsXG4gICAgbGltaXQgPSAxMDAsXG4gICAgbWFpbFByb2Nlc3NvcjogTWFpbFByb2Nlc3NvclxuICApIHtcbiAgICBpZiAoIWlzQ3JvblZhbGlkKGV4cHJlc3Npb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nyb24gZXhwcmVzc2lvbiBpcyBpbnZhbGlkJylcbiAgICB9XG4gICAgdGhpcy5saW1pdCA9IGxpbWl0XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvblxuICAgIHRoaXMubWF4QXR0ZW1wcyA9IG1heEF0dGVtcHNcbiAgICB0aGlzLmxvZ2dpbmcgPSBsb2dnaW5nXG5cbiAgICB0aGlzLnJ1bkpvYnMoKVxuXG4gICAgdGhpcy5xdWV1ZU1vZGVsID0gcXVldWVNb2RlbFxuXG4gICAgdGhpcy5tYWlsUHJvY2Vzc29yID0gbWFpbFByb2Nlc3NvclxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5Kb2JzKCkge1xuICAgIHRoaXMubG9nKGBJbml0aWFsaXNpbmcgY3JvbiBzY2hlZHVsZSAke3RoaXMuZXhwcmVzc2lvbn1gKVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZ2VuZXJhdGVSYW5kb20oNTAwLCAyNTAwKSkpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICBjb25zdCBqb2IgPSBuZXcgQ3JvbkpvYih0aGlzLmV4cHJlc3Npb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYubWFpbFByb2Nlc3Nvci5wcm9jZXNzUXVldWVNYWlscygpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignQ3JvbiBmYWlsZWQnLCB7XG4gICAgICAgICAgbWVzc2FnZTogZS5tZXNzYWdlLFxuICAgICAgICAgIHN0YWNrOiBlLnN0YWNrLFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICAgIGpvYi5zdGFydCgpXG4gIH1cblxuICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcsIGxldmVsID0gJ2luZm8nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgbWVzc2FnZSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2NoZWR1bGVyIHtcbiAgZXhwcmVzc2lvbjogc3RyaW5nXG4gIG1heEF0dGVtcHM6IG51bWJlclxuICBsb2dnaW5nOiBib29sZWFuXG4gIG1haWxQcm9jZXNzb3I6IE1haWxQcm9jZXNzb3Jcbn1cblxuZnVuY3Rpb24gaXNDcm9uVmFsaWQoZnJlcTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNyb25yZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgL14oXFwqfChbMC05XXwxWzAtOV18MlswLTldfDNbMC05XXw0WzAtOV18NVswLTldKXxcXCpcXC8oWzAtOV18MVswLTldfDJbMC05XXwzWzAtOV18NFswLTldfDVbMC05XSkpIChcXCp8KFswLTldfDFbMC05XXwyWzAtM10pfFxcKlxcLyhbMC05XXwxWzAtOV18MlswLTNdKSkgKFxcKnwoWzEtOV18MVswLTldfDJbMC05XXwzWzAtMV0pfFxcKlxcLyhbMS05XXwxWzAtOV18MlswLTldfDNbMC0xXSkpIChcXCp8KFsxLTldfDFbMC0yXSl8XFwqXFwvKFsxLTldfDFbMC0yXSkpIChcXCp8KFswLTZdKXxcXCpcXC8oWzAtNl0pKSQvXG4gIClcbiAgcmV0dXJuIGNyb25yZWdleC50ZXN0KGZyZXEpXG59XG5cbmV4cG9ydCB0eXBlIExvY2tUeXBlID0gJ3RyYW5zYWN0aW9uJ1xuXG5leHBvcnQgZGVmYXVsdCBTY2hlZHVsZXJcbiJdfQ==