@astralibx/email-rule-engine 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -0
- package/dist/controllers/index.d.ts +5 -0
- package/dist/controllers/index.d.ts.map +1 -0
- package/dist/controllers/index.js +12 -0
- package/dist/controllers/index.js.map +1 -0
- package/dist/controllers/rule.controller.d.ts +13 -0
- package/dist/controllers/rule.controller.d.ts.map +1 -0
- package/dist/controllers/rule.controller.js +142 -0
- package/dist/controllers/rule.controller.js.map +1 -0
- package/dist/controllers/runner.controller.d.ts +8 -0
- package/dist/controllers/runner.controller.d.ts.map +1 -0
- package/dist/controllers/runner.controller.js +22 -0
- package/dist/controllers/runner.controller.js.map +1 -0
- package/dist/controllers/settings.controller.d.ts +7 -0
- package/dist/controllers/settings.controller.d.ts.map +1 -0
- package/dist/controllers/settings.controller.js +56 -0
- package/dist/controllers/settings.controller.js.map +1 -0
- package/dist/controllers/template.controller.d.ts +15 -0
- package/dist/controllers/template.controller.d.ts.map +1 -0
- package/dist/controllers/template.controller.js +169 -0
- package/dist/controllers/template.controller.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/routes/index.d.ts +16 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +47 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +14 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/rule-send.schema.d.ts +25 -0
- package/dist/schemas/rule-send.schema.d.ts.map +1 -0
- package/dist/schemas/rule-send.schema.js +41 -0
- package/dist/schemas/rule-send.schema.js.map +1 -0
- package/dist/schemas/rule.schema.d.ts +22 -0
- package/dist/schemas/rule.schema.d.ts.map +1 -0
- package/dist/schemas/rule.schema.js +81 -0
- package/dist/schemas/rule.schema.js.map +1 -0
- package/dist/schemas/run-log.schema.d.ts +39 -0
- package/dist/schemas/run-log.schema.d.ts.map +1 -0
- package/dist/schemas/run-log.schema.js +47 -0
- package/dist/schemas/run-log.schema.js.map +1 -0
- package/dist/schemas/template.schema.d.ts +24 -0
- package/dist/schemas/template.schema.d.ts.map +1 -0
- package/dist/schemas/template.schema.js +65 -0
- package/dist/schemas/template.schema.js.map +1 -0
- package/dist/schemas/throttle-config.schema.d.ts +19 -0
- package/dist/schemas/throttle-config.schema.d.ts.map +1 -0
- package/dist/schemas/throttle-config.schema.js +32 -0
- package/dist/schemas/throttle-config.schema.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +12 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/rule-runner.service.d.ts +31 -0
- package/dist/services/rule-runner.service.d.ts.map +1 -0
- package/dist/services/rule-runner.service.js +253 -0
- package/dist/services/rule-runner.service.js.map +1 -0
- package/dist/services/rule.service.d.ts +27 -0
- package/dist/services/rule.service.d.ts.map +1 -0
- package/dist/services/rule.service.js +127 -0
- package/dist/services/rule.service.js.map +1 -0
- package/dist/services/template-render.service.d.ts +23 -0
- package/dist/services/template-render.service.d.ts.map +1 -0
- package/dist/services/template-render.service.js +178 -0
- package/dist/services/template-render.service.js.map +1 -0
- package/dist/services/template.service.d.ts +42 -0
- package/dist/services/template.service.d.ts.map +1 -0
- package/dist/services/template.service.js +128 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/types/config.types.d.ts +50 -0
- package/dist/types/config.types.d.ts.map +1 -0
- package/dist/types/config.types.js +3 -0
- package/dist/types/config.types.js.map +1 -0
- package/dist/types/enums.d.ts +43 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +40 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/rule.types.d.ts +91 -0
- package/dist/types/rule.types.d.ts.map +1 -0
- package/dist/types/rule.types.js +3 -0
- package/dist/types/rule.types.js.map +1 -0
- package/dist/types/template.types.d.ts +43 -0
- package/dist/types/template.types.d.ts.map +1 -0
- package/dist/types/template.types.js +3 -0
- package/dist/types/template.types.js.map +1 -0
- package/dist/types/throttle.types.d.ts +15 -0
- package/dist/types/throttle.types.d.ts.map +1 -0
- package/dist/types/throttle.types.js +3 -0
- package/dist/types/throttle.types.js.map +1 -0
- package/dist/utils/express-helpers.d.ts +4 -0
- package/dist/utils/express-helpers.d.ts.map +1 -0
- package/dist/utils/express-helpers.js +15 -0
- package/dist/utils/express-helpers.js.map +1 -0
- package/dist/utils/redis-lock.d.ts +13 -0
- package/dist/utils/redis-lock.d.ts.map +1 -0
- package/dist/utils/redis-lock.js +36 -0
- package/dist/utils/redis-lock.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTemplateController = createTemplateController;
|
|
4
|
+
const enums_1 = require("../types/enums");
|
|
5
|
+
const express_helpers_1 = require("../utils/express-helpers");
|
|
6
|
+
function isValidEnum(enumObj, value) {
|
|
7
|
+
return typeof value === 'string' && Object.values(enumObj).includes(value);
|
|
8
|
+
}
|
|
9
|
+
function getErrorStatus(message) {
|
|
10
|
+
if (message.includes('already exists') || message.includes('validation failed'))
|
|
11
|
+
return 400;
|
|
12
|
+
if (message.includes('not found'))
|
|
13
|
+
return 404;
|
|
14
|
+
return 500;
|
|
15
|
+
}
|
|
16
|
+
function createTemplateController(templateService, platformValues) {
|
|
17
|
+
async function list(req, res) {
|
|
18
|
+
try {
|
|
19
|
+
const { category, audience, platform, isActive } = req.query;
|
|
20
|
+
const templates = await templateService.list({
|
|
21
|
+
category: category,
|
|
22
|
+
audience: audience,
|
|
23
|
+
platform: platform,
|
|
24
|
+
isActive: isActive !== undefined ? isActive === 'true' : undefined
|
|
25
|
+
});
|
|
26
|
+
res.json({ success: true, data: { templates } });
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
30
|
+
res.status(500).json({ success: false, error: message });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function getById(req, res) {
|
|
34
|
+
try {
|
|
35
|
+
const template = await templateService.getById((0, express_helpers_1.getParam)(req, 'id'));
|
|
36
|
+
if (!template) {
|
|
37
|
+
return res.status(404).json({ success: false, error: 'Template not found' });
|
|
38
|
+
}
|
|
39
|
+
res.json({ success: true, data: { template } });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
43
|
+
res.status(500).json({ success: false, error: message });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function create(req, res) {
|
|
47
|
+
try {
|
|
48
|
+
const { name, subject, body, category, audience, platform } = req.body;
|
|
49
|
+
if (!name || !subject || !body || !category || !audience || !platform) {
|
|
50
|
+
return res.status(400).json({ success: false, error: 'name, subject, body, category, audience, and platform are required' });
|
|
51
|
+
}
|
|
52
|
+
if (!isValidEnum(enums_1.TemplateCategory, category)) {
|
|
53
|
+
return res.status(400).json({ success: false, error: `Invalid category. Must be one of: ${Object.values(enums_1.TemplateCategory).join(', ')}` });
|
|
54
|
+
}
|
|
55
|
+
if (!isValidEnum(enums_1.TemplateAudience, audience)) {
|
|
56
|
+
return res.status(400).json({ success: false, error: `Invalid audience. Must be one of: ${Object.values(enums_1.TemplateAudience).join(', ')}` });
|
|
57
|
+
}
|
|
58
|
+
if (platformValues && !platformValues.includes(platform)) {
|
|
59
|
+
return res.status(400).json({ success: false, error: `Invalid platform. Must be one of: ${platformValues.join(', ')}` });
|
|
60
|
+
}
|
|
61
|
+
const template = await templateService.create(req.body);
|
|
62
|
+
res.status(201).json({ success: true, data: { template } });
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
66
|
+
res.status(getErrorStatus(message)).json({ success: false, error: message });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function update(req, res) {
|
|
70
|
+
try {
|
|
71
|
+
const template = await templateService.update((0, express_helpers_1.getParam)(req, 'id'), req.body);
|
|
72
|
+
if (!template) {
|
|
73
|
+
return res.status(404).json({ success: false, error: 'Template not found' });
|
|
74
|
+
}
|
|
75
|
+
res.json({ success: true, data: { template } });
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
79
|
+
res.status(getErrorStatus(message)).json({ success: false, error: message });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function remove(req, res) {
|
|
83
|
+
try {
|
|
84
|
+
const deleted = await templateService.delete((0, express_helpers_1.getParam)(req, 'id'));
|
|
85
|
+
if (!deleted) {
|
|
86
|
+
return res.status(404).json({ success: false, error: 'Template not found' });
|
|
87
|
+
}
|
|
88
|
+
res.json({ success: true });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
92
|
+
res.status(500).json({ success: false, error: message });
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async function toggleActive(req, res) {
|
|
96
|
+
try {
|
|
97
|
+
const template = await templateService.toggleActive((0, express_helpers_1.getParam)(req, 'id'));
|
|
98
|
+
if (!template) {
|
|
99
|
+
return res.status(404).json({ success: false, error: 'Template not found' });
|
|
100
|
+
}
|
|
101
|
+
res.json({ success: true, data: { template } });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
105
|
+
res.status(500).json({ success: false, error: message });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async function preview(req, res) {
|
|
109
|
+
try {
|
|
110
|
+
const { sampleData } = req.body;
|
|
111
|
+
const result = await templateService.preview((0, express_helpers_1.getParam)(req, 'id'), sampleData || {});
|
|
112
|
+
if (!result) {
|
|
113
|
+
return res.status(404).json({ success: false, error: 'Template not found' });
|
|
114
|
+
}
|
|
115
|
+
res.json({ success: true, data: result });
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
119
|
+
res.status(500).json({ success: false, error: message });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function previewRaw(req, res) {
|
|
123
|
+
try {
|
|
124
|
+
const { subject, body, textBody, sampleData } = req.body;
|
|
125
|
+
if (!subject || !body) {
|
|
126
|
+
return res.status(400).json({ success: false, error: 'subject and body are required' });
|
|
127
|
+
}
|
|
128
|
+
const result = await templateService.previewRaw(subject, body, sampleData || {}, textBody);
|
|
129
|
+
res.json({ success: true, data: result });
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
133
|
+
res.status(500).json({ success: false, error: message });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async function validate(req, res) {
|
|
137
|
+
try {
|
|
138
|
+
const { body: templateBody } = req.body;
|
|
139
|
+
if (!templateBody) {
|
|
140
|
+
return res.status(400).json({ success: false, error: 'body is required' });
|
|
141
|
+
}
|
|
142
|
+
const result = await templateService.validate(templateBody);
|
|
143
|
+
res.json({ success: true, data: result });
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
147
|
+
res.status(500).json({ success: false, error: message });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function sendTestEmail(req, res) {
|
|
151
|
+
try {
|
|
152
|
+
const { testEmail, sampleData } = req.body;
|
|
153
|
+
if (!testEmail) {
|
|
154
|
+
return res.status(400).json({ success: false, error: 'testEmail is required' });
|
|
155
|
+
}
|
|
156
|
+
const result = await templateService.sendTestEmail((0, express_helpers_1.getParam)(req, 'id'), testEmail, sampleData || {});
|
|
157
|
+
if (!result.success) {
|
|
158
|
+
return res.status(400).json({ success: false, error: result.error });
|
|
159
|
+
}
|
|
160
|
+
res.json({ success: true });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
164
|
+
res.status(500).json({ success: false, error: message });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return { list, getById, create, update, remove, toggleActive, preview, previewRaw, validate, sendTestEmail };
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=template.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.controller.js","sourceRoot":"","sources":["../../src/controllers/template.controller.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { EmailRuleEngineConfig } from './types/config.types';
|
|
2
|
+
import { type EmailTemplateModel } from './schemas/template.schema';
|
|
3
|
+
import { type EmailRuleModel } from './schemas/rule.schema';
|
|
4
|
+
import { type EmailRuleSendModel } from './schemas/rule-send.schema';
|
|
5
|
+
import { type EmailRuleRunLogModel } from './schemas/run-log.schema';
|
|
6
|
+
import { type EmailThrottleConfigModel } from './schemas/throttle-config.schema';
|
|
7
|
+
import { TemplateService } from './services/template.service';
|
|
8
|
+
import { RuleService } from './services/rule.service';
|
|
9
|
+
import { RuleRunnerService } from './services/rule-runner.service';
|
|
10
|
+
import type { Router } from 'express';
|
|
11
|
+
export interface EmailRuleEngine {
|
|
12
|
+
routes: Router;
|
|
13
|
+
runner: RuleRunnerService;
|
|
14
|
+
templateService: TemplateService;
|
|
15
|
+
ruleService: RuleService;
|
|
16
|
+
models: {
|
|
17
|
+
EmailTemplate: EmailTemplateModel;
|
|
18
|
+
EmailRule: EmailRuleModel;
|
|
19
|
+
EmailRuleSend: EmailRuleSendModel;
|
|
20
|
+
EmailRuleRunLog: EmailRuleRunLogModel;
|
|
21
|
+
EmailThrottleConfig: EmailThrottleConfigModel;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function createEmailRuleEngine(config: EmailRuleEngineConfig): EmailRuleEngine;
|
|
25
|
+
export * from './types';
|
|
26
|
+
export * from './schemas';
|
|
27
|
+
export { TemplateRenderService, type RenderResult, type CompiledTemplate } from './services/template-render.service';
|
|
28
|
+
export { TemplateService } from './services/template.service';
|
|
29
|
+
export { RuleService } from './services/rule.service';
|
|
30
|
+
export { RuleRunnerService } from './services/rule-runner.service';
|
|
31
|
+
export { RedisLock } from './utils/redis-lock';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAA+B,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAmC,KAAK,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE;QACN,aAAa,EAAE,kBAAkB,CAAC;QAClC,SAAS,EAAE,cAAc,CAAC;QAC1B,aAAa,EAAE,kBAAkB,CAAC;QAClC,eAAe,EAAE,oBAAoB,CAAC;QACtC,mBAAmB,EAAE,wBAAwB,CAAC;KAC/C,CAAC;CACH;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAmDpF;AAED,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.RedisLock = exports.RuleRunnerService = exports.RuleService = exports.TemplateService = exports.TemplateRenderService = void 0;
|
|
18
|
+
exports.createEmailRuleEngine = createEmailRuleEngine;
|
|
19
|
+
const template_schema_1 = require("./schemas/template.schema");
|
|
20
|
+
const rule_schema_1 = require("./schemas/rule.schema");
|
|
21
|
+
const rule_send_schema_1 = require("./schemas/rule-send.schema");
|
|
22
|
+
const run_log_schema_1 = require("./schemas/run-log.schema");
|
|
23
|
+
const throttle_config_schema_1 = require("./schemas/throttle-config.schema");
|
|
24
|
+
const template_service_1 = require("./services/template.service");
|
|
25
|
+
const rule_service_1 = require("./services/rule.service");
|
|
26
|
+
const rule_runner_service_1 = require("./services/rule-runner.service");
|
|
27
|
+
const routes_1 = require("./routes");
|
|
28
|
+
function createEmailRuleEngine(config) {
|
|
29
|
+
const conn = config.db.connection;
|
|
30
|
+
const prefix = config.db.collectionPrefix || '';
|
|
31
|
+
const EmailTemplate = conn.model(`${prefix}EmailTemplate`, (0, template_schema_1.createEmailTemplateSchema)(config.platforms));
|
|
32
|
+
const EmailRule = conn.model(`${prefix}EmailRule`, (0, rule_schema_1.createEmailRuleSchema)(config.platforms));
|
|
33
|
+
const EmailRuleSend = conn.model(`${prefix}EmailRuleSend`, (0, rule_send_schema_1.createEmailRuleSendSchema)());
|
|
34
|
+
const EmailRuleRunLog = conn.model(`${prefix}EmailRuleRunLog`, (0, run_log_schema_1.createEmailRuleRunLogSchema)());
|
|
35
|
+
const EmailThrottleConfig = conn.model(`${prefix}EmailThrottleConfig`, (0, throttle_config_schema_1.createEmailThrottleConfigSchema)());
|
|
36
|
+
const templateService = new template_service_1.TemplateService(EmailTemplate, config);
|
|
37
|
+
const ruleService = new rule_service_1.RuleService(EmailRule, EmailTemplate, EmailRuleRunLog, config);
|
|
38
|
+
const runnerService = new rule_runner_service_1.RuleRunnerService(EmailRule, EmailTemplate, EmailRuleSend, EmailRuleRunLog, EmailThrottleConfig, config);
|
|
39
|
+
const routes = (0, routes_1.createRoutes)({
|
|
40
|
+
templateService,
|
|
41
|
+
ruleService,
|
|
42
|
+
runnerService,
|
|
43
|
+
EmailRuleRunLog,
|
|
44
|
+
EmailThrottleConfig,
|
|
45
|
+
platformValues: config.platforms
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
routes,
|
|
49
|
+
runner: runnerService,
|
|
50
|
+
templateService,
|
|
51
|
+
ruleService,
|
|
52
|
+
models: { EmailTemplate, EmailRule, EmailRuleSend, EmailRuleRunLog, EmailThrottleConfig }
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
__exportStar(require("./types"), exports);
|
|
56
|
+
__exportStar(require("./schemas"), exports);
|
|
57
|
+
var template_render_service_1 = require("./services/template-render.service");
|
|
58
|
+
Object.defineProperty(exports, "TemplateRenderService", { enumerable: true, get: function () { return template_render_service_1.TemplateRenderService; } });
|
|
59
|
+
var template_service_2 = require("./services/template.service");
|
|
60
|
+
Object.defineProperty(exports, "TemplateService", { enumerable: true, get: function () { return template_service_2.TemplateService; } });
|
|
61
|
+
var rule_service_2 = require("./services/rule.service");
|
|
62
|
+
Object.defineProperty(exports, "RuleService", { enumerable: true, get: function () { return rule_service_2.RuleService; } });
|
|
63
|
+
var rule_runner_service_2 = require("./services/rule-runner.service");
|
|
64
|
+
Object.defineProperty(exports, "RuleRunnerService", { enumerable: true, get: function () { return rule_runner_service_2.RuleRunnerService; } });
|
|
65
|
+
var redis_lock_1 = require("./utils/redis-lock");
|
|
66
|
+
Object.defineProperty(exports, "RedisLock", { enumerable: true, get: function () { return redis_lock_1.RedisLock; } });
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0BA,sDAmDC;AA5ED,+DAA+F;AAC/F,uDAAmF;AACnF,iEAAgG;AAChG,6DAAkG;AAClG,6EAAkH;AAClH,kEAA8D;AAC9D,0DAAsD;AACtD,wEAAmE;AACnE,qCAAwC;AAiBxC,SAAgB,qBAAqB,CAAC,MAA6B;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC;IAEhD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC9B,GAAG,MAAM,eAAe,EACxB,IAAA,2CAAyB,EAAC,MAAM,CAAC,SAAS,CAAC,CACtB,CAAC;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAC1B,GAAG,MAAM,WAAW,EACpB,IAAA,mCAAqB,EAAC,MAAM,CAAC,SAAS,CAAC,CACtB,CAAC;IAEpB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAC9B,GAAG,MAAM,eAAe,EACxB,IAAA,4CAAyB,GAAE,CACN,CAAC;IAExB,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,GAAG,MAAM,iBAAiB,EAC1B,IAAA,4CAA2B,GAAE,CACN,CAAC;IAE1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CACpC,GAAG,MAAM,qBAAqB,EAC9B,IAAA,wDAA+B,GAAE,CACN,CAAC;IAE9B,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IACvF,MAAM,aAAa,GAAG,IAAI,uCAAiB,CACzC,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,CACtF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC;QAC1B,eAAe;QACf,WAAW;QACX,aAAa;QACb,eAAe;QACf,mBAAmB;QACnB,cAAc,EAAE,MAAM,CAAC,SAAS;KACjC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,MAAM,EAAE,aAAa;QACrB,eAAe;QACf,WAAW;QACX,MAAM,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE;KAC1F,CAAC;AACJ,CAAC;AAED,0CAAwB;AACxB,4CAA0B;AAC1B,8EAAqH;AAA5G,gIAAA,qBAAqB,OAAA;AAC9B,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AACxB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,sEAAmE;AAA1D,wHAAA,iBAAiB,OAAA;AAC1B,iDAA+C;AAAtC,uGAAA,SAAS,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import type { TemplateService } from '../services/template.service';
|
|
3
|
+
import type { RuleService } from '../services/rule.service';
|
|
4
|
+
import type { RuleRunnerService } from '../services/rule-runner.service';
|
|
5
|
+
import type { EmailRuleRunLogModel } from '../schemas/run-log.schema';
|
|
6
|
+
import type { EmailThrottleConfigModel } from '../schemas/throttle-config.schema';
|
|
7
|
+
export interface RoutesDeps {
|
|
8
|
+
templateService: TemplateService;
|
|
9
|
+
ruleService: RuleService;
|
|
10
|
+
runnerService: RuleRunnerService;
|
|
11
|
+
EmailRuleRunLog: EmailRuleRunLogModel;
|
|
12
|
+
EmailThrottleConfig: EmailThrottleConfigModel;
|
|
13
|
+
platformValues?: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare function createRoutes(deps: RoutesDeps): Router;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAElF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,EAAE,oBAAoB,CAAC;IACtC,mBAAmB,EAAE,wBAAwB,CAAC;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA4CrD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRoutes = createRoutes;
|
|
4
|
+
const express_1 = require("express");
|
|
5
|
+
const template_controller_1 = require("../controllers/template.controller");
|
|
6
|
+
const rule_controller_1 = require("../controllers/rule.controller");
|
|
7
|
+
const runner_controller_1 = require("../controllers/runner.controller");
|
|
8
|
+
const settings_controller_1 = require("../controllers/settings.controller");
|
|
9
|
+
function createRoutes(deps) {
|
|
10
|
+
const router = (0, express_1.Router)();
|
|
11
|
+
const templateCtrl = (0, template_controller_1.createTemplateController)(deps.templateService, deps.platformValues);
|
|
12
|
+
const ruleCtrl = (0, rule_controller_1.createRuleController)(deps.ruleService, deps.platformValues);
|
|
13
|
+
const runnerCtrl = (0, runner_controller_1.createRunnerController)(deps.runnerService, deps.EmailRuleRunLog);
|
|
14
|
+
const settingsCtrl = (0, settings_controller_1.createSettingsController)(deps.EmailThrottleConfig);
|
|
15
|
+
const templateRouter = (0, express_1.Router)();
|
|
16
|
+
templateRouter.get('/', templateCtrl.list);
|
|
17
|
+
templateRouter.post('/', templateCtrl.create);
|
|
18
|
+
templateRouter.post('/validate', templateCtrl.validate);
|
|
19
|
+
templateRouter.post('/preview', templateCtrl.previewRaw);
|
|
20
|
+
templateRouter.get('/:id', templateCtrl.getById);
|
|
21
|
+
templateRouter.put('/:id', templateCtrl.update);
|
|
22
|
+
templateRouter.delete('/:id', templateCtrl.remove);
|
|
23
|
+
templateRouter.patch('/:id/toggle', templateCtrl.toggleActive);
|
|
24
|
+
templateRouter.post('/:id/preview', templateCtrl.preview);
|
|
25
|
+
templateRouter.post('/:id/test-email', templateCtrl.sendTestEmail);
|
|
26
|
+
const ruleRouter = (0, express_1.Router)();
|
|
27
|
+
ruleRouter.get('/', ruleCtrl.list);
|
|
28
|
+
ruleRouter.post('/', ruleCtrl.create);
|
|
29
|
+
ruleRouter.get('/run-history', ruleCtrl.runHistory);
|
|
30
|
+
ruleRouter.get('/:id', ruleCtrl.getById);
|
|
31
|
+
ruleRouter.patch('/:id', ruleCtrl.update);
|
|
32
|
+
ruleRouter.delete('/:id', ruleCtrl.remove);
|
|
33
|
+
ruleRouter.patch('/:id/toggle', ruleCtrl.toggleActive);
|
|
34
|
+
ruleRouter.post('/:id/dry-run', ruleCtrl.dryRun);
|
|
35
|
+
const runnerRouter = (0, express_1.Router)();
|
|
36
|
+
runnerRouter.post('/', runnerCtrl.triggerManualRun);
|
|
37
|
+
runnerRouter.get('/status', runnerCtrl.getLatestRun);
|
|
38
|
+
const settingsRouter = (0, express_1.Router)();
|
|
39
|
+
settingsRouter.get('/throttle', settingsCtrl.getThrottleConfig);
|
|
40
|
+
settingsRouter.patch('/throttle', settingsCtrl.updateThrottleConfig);
|
|
41
|
+
router.use('/templates', templateRouter);
|
|
42
|
+
router.use('/rules', ruleRouter);
|
|
43
|
+
router.use('/runner', runnerRouter);
|
|
44
|
+
router.use('/settings', settingsRouter);
|
|
45
|
+
return router;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createEmailTemplateSchema, type IEmailTemplate, type EmailTemplateDocument, type EmailTemplateModel, type EmailTemplateStatics } from './template.schema';
|
|
2
|
+
export { createEmailRuleSchema, type IEmailRule, type EmailRuleDocument, type EmailRuleModel, type EmailRuleStatics } from './rule.schema';
|
|
3
|
+
export { createEmailRuleSendSchema, type IEmailRuleSend, type EmailRuleSendDocument, type EmailRuleSendModel, type EmailRuleSendStatics } from './rule-send.schema';
|
|
4
|
+
export { createEmailRuleRunLogSchema, type IEmailRuleRunLog, type EmailRuleRunLogDocument, type EmailRuleRunLogModel, type EmailRuleRunLogStatics } from './run-log.schema';
|
|
5
|
+
export { createEmailThrottleConfigSchema, type IEmailThrottleConfig, type EmailThrottleConfigDocument, type EmailThrottleConfigModel, type EmailThrottleConfigStatics } from './throttle-config.schema';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACnK,OAAO,EAAE,qBAAqB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3I,OAAO,EAAE,yBAAyB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,2BAA2B,EAAE,KAAK,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC5K,OAAO,EAAE,+BAA+B,EAAE,KAAK,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,KAAK,wBAAwB,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmailThrottleConfigSchema = exports.createEmailRuleRunLogSchema = exports.createEmailRuleSendSchema = exports.createEmailRuleSchema = exports.createEmailTemplateSchema = void 0;
|
|
4
|
+
var template_schema_1 = require("./template.schema");
|
|
5
|
+
Object.defineProperty(exports, "createEmailTemplateSchema", { enumerable: true, get: function () { return template_schema_1.createEmailTemplateSchema; } });
|
|
6
|
+
var rule_schema_1 = require("./rule.schema");
|
|
7
|
+
Object.defineProperty(exports, "createEmailRuleSchema", { enumerable: true, get: function () { return rule_schema_1.createEmailRuleSchema; } });
|
|
8
|
+
var rule_send_schema_1 = require("./rule-send.schema");
|
|
9
|
+
Object.defineProperty(exports, "createEmailRuleSendSchema", { enumerable: true, get: function () { return rule_send_schema_1.createEmailRuleSendSchema; } });
|
|
10
|
+
var run_log_schema_1 = require("./run-log.schema");
|
|
11
|
+
Object.defineProperty(exports, "createEmailRuleRunLogSchema", { enumerable: true, get: function () { return run_log_schema_1.createEmailRuleRunLogSchema; } });
|
|
12
|
+
var throttle_config_schema_1 = require("./throttle-config.schema");
|
|
13
|
+
Object.defineProperty(exports, "createEmailThrottleConfigSchema", { enumerable: true, get: function () { return throttle_config_schema_1.createEmailThrottleConfigSchema; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":";;;AAAA,qDAAmK;AAA1J,4HAAA,yBAAyB,OAAA;AAClC,6CAA2I;AAAlI,oHAAA,qBAAqB,OAAA;AAC9B,uDAAoK;AAA3J,6HAAA,yBAAyB,OAAA;AAClC,mDAA4K;AAAnK,6HAAA,2BAA2B,OAAA;AACpC,mEAAwM;AAA/L,yIAAA,+BAA+B,OAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Schema, Model, Types, HydratedDocument } from 'mongoose';
|
|
2
|
+
export interface IEmailRuleSend {
|
|
3
|
+
ruleId: Types.ObjectId;
|
|
4
|
+
userId: Types.ObjectId;
|
|
5
|
+
emailIdentifierId?: Types.ObjectId;
|
|
6
|
+
messageId?: Types.ObjectId;
|
|
7
|
+
sentAt: Date;
|
|
8
|
+
}
|
|
9
|
+
export type EmailRuleSendDocument = HydratedDocument<IEmailRuleSend>;
|
|
10
|
+
export interface EmailRuleSendStatics {
|
|
11
|
+
findLatestForUser(ruleId: string | Types.ObjectId, userId: string | Types.ObjectId): Promise<EmailRuleSendDocument | null>;
|
|
12
|
+
findRecentByUserIds(userIds: (string | Types.ObjectId)[], sinceDays: number): Promise<EmailRuleSendDocument[]>;
|
|
13
|
+
logSend(ruleId: string | Types.ObjectId, userId: string | Types.ObjectId, emailIdentifierId?: string | Types.ObjectId, messageId?: string | Types.ObjectId): Promise<EmailRuleSendDocument>;
|
|
14
|
+
}
|
|
15
|
+
export type EmailRuleSendModel = Model<IEmailRuleSend> & EmailRuleSendStatics;
|
|
16
|
+
export declare function createEmailRuleSendSchema(): Schema<IEmailRuleSend, Model<IEmailRuleSend, any, any, any, import("mongoose").Document<unknown, any, IEmailRuleSend, any, {}> & IEmailRuleSend & {
|
|
17
|
+
_id: Types.ObjectId;
|
|
18
|
+
} & {
|
|
19
|
+
__v: number;
|
|
20
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IEmailRuleSend, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IEmailRuleSend>, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").FlatRecord<IEmailRuleSend> & {
|
|
21
|
+
_id: Types.ObjectId;
|
|
22
|
+
} & {
|
|
23
|
+
__v: number;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=rule-send.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-send.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/rule-send.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IACvB,iBAAiB,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IACnC,SAAS,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC3B,MAAM,EAAE,IAAI,CAAC;CACd;AAED,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IAC3H,mBAAmB,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC/G,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC7L;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,oBAAoB,CAAC;AAE9E,wBAAgB,yBAAyB;;;;;;;;GAgDxC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmailRuleSendSchema = createEmailRuleSendSchema;
|
|
4
|
+
const mongoose_1 = require("mongoose");
|
|
5
|
+
function createEmailRuleSendSchema() {
|
|
6
|
+
const schema = new mongoose_1.Schema({
|
|
7
|
+
ruleId: { type: mongoose_1.Schema.Types.ObjectId, ref: 'EmailRule', required: true },
|
|
8
|
+
userId: { type: mongoose_1.Schema.Types.ObjectId, required: true },
|
|
9
|
+
emailIdentifierId: { type: mongoose_1.Schema.Types.ObjectId },
|
|
10
|
+
messageId: { type: mongoose_1.Schema.Types.ObjectId },
|
|
11
|
+
sentAt: { type: Date, required: true, default: () => new Date() }
|
|
12
|
+
}, {
|
|
13
|
+
collection: 'email_rule_sends',
|
|
14
|
+
statics: {
|
|
15
|
+
findLatestForUser(ruleId, userId) {
|
|
16
|
+
return this.findOne({ ruleId, userId }).sort({ sentAt: -1 });
|
|
17
|
+
},
|
|
18
|
+
findRecentByUserIds(userIds, sinceDays) {
|
|
19
|
+
const since = new Date(Date.now() - sinceDays * 86400000);
|
|
20
|
+
return this.find({
|
|
21
|
+
userId: { $in: userIds },
|
|
22
|
+
sentAt: { $gte: since }
|
|
23
|
+
}).sort({ sentAt: -1 });
|
|
24
|
+
},
|
|
25
|
+
async logSend(ruleId, userId, emailIdentifierId, messageId) {
|
|
26
|
+
return this.create({
|
|
27
|
+
ruleId,
|
|
28
|
+
userId,
|
|
29
|
+
emailIdentifierId,
|
|
30
|
+
messageId,
|
|
31
|
+
sentAt: new Date()
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
schema.index({ ruleId: 1, userId: 1, sentAt: -1 });
|
|
37
|
+
schema.index({ userId: 1, sentAt: -1 });
|
|
38
|
+
schema.index({ ruleId: 1, sentAt: -1 });
|
|
39
|
+
return schema;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=rule-send.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-send.schema.js","sourceRoot":"","sources":["../../src/schemas/rule-send.schema.ts"],"names":[],"mappings":";;AAoBA,8DAgDC;AApED,uCAAkE;AAoBlE,SAAgB,yBAAyB;IACvC,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;QACE,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzE,MAAM,EAAE,EAAE,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACvD,iBAAiB,EAAE,EAAE,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;QAClD,SAAS,EAAE,EAAE,IAAI,EAAE,iBAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;QAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE;KAClE,EACD;QACE,UAAU,EAAE,kBAAkB;QAE9B,OAAO,EAAE;YACP,iBAAiB,CAAC,MAA+B,EAAE,MAA+B;gBAChF,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,mBAAmB,CAAC,OAAoC,EAAE,SAAiB;gBACzE,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;gBAC1D,OAAO,IAAI,CAAC,IAAI,CAAC;oBACf,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;iBACxB,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YAED,KAAK,CAAC,OAAO,CACX,MAA+B,EAC/B,MAA+B,EAC/B,iBAA2C,EAC3C,SAAmC;gBAEnC,OAAO,IAAI,CAAC,MAAM,CAAC;oBACjB,MAAM;oBACN,MAAM;oBACN,iBAAiB;oBACjB,SAAS;oBACT,MAAM,EAAE,IAAI,IAAI,EAAE;iBACnB,CAAC,CAAC;YACL,CAAC;SACF;KACF,CACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAExC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Schema, Model, Types, HydratedDocument } from 'mongoose';
|
|
2
|
+
import type { EmailRule, CreateEmailRuleInput } from '../types/rule.types';
|
|
3
|
+
export interface IEmailRule extends Omit<EmailRule, '_id' | 'templateId'> {
|
|
4
|
+
templateId: Types.ObjectId;
|
|
5
|
+
}
|
|
6
|
+
export type EmailRuleDocument = HydratedDocument<IEmailRule>;
|
|
7
|
+
export interface EmailRuleStatics {
|
|
8
|
+
findActive(): Promise<EmailRuleDocument[]>;
|
|
9
|
+
findByTemplateId(templateId: string | Types.ObjectId): Promise<EmailRuleDocument[]>;
|
|
10
|
+
createRule(input: CreateEmailRuleInput): Promise<EmailRuleDocument>;
|
|
11
|
+
}
|
|
12
|
+
export type EmailRuleModel = Model<IEmailRule> & EmailRuleStatics;
|
|
13
|
+
export declare function createEmailRuleSchema(platformValues?: string[]): Schema<IEmailRule, Model<IEmailRule, any, any, any, import("mongoose").Document<unknown, any, IEmailRule, any, {}> & IEmailRule & {
|
|
14
|
+
_id: Types.ObjectId;
|
|
15
|
+
} & {
|
|
16
|
+
__v: number;
|
|
17
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IEmailRule, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IEmailRule>, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").FlatRecord<IEmailRule> & {
|
|
18
|
+
_id: Types.ObjectId;
|
|
19
|
+
} & {
|
|
20
|
+
__v: number;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=rule.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/rule.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,YAAY,CAAC;IACvE,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC3C,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACpF,UAAU,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrE;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC;AAElE,wBAAgB,qBAAqB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE;;;;;;;;GA0F9D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmailRuleSchema = createEmailRuleSchema;
|
|
4
|
+
const mongoose_1 = require("mongoose");
|
|
5
|
+
const enums_1 = require("../types/enums");
|
|
6
|
+
function createEmailRuleSchema(platformValues) {
|
|
7
|
+
const RuleConditionSchema = new mongoose_1.Schema({
|
|
8
|
+
field: { type: String, required: true },
|
|
9
|
+
operator: { type: String, enum: Object.values(enums_1.RuleOperator), required: true },
|
|
10
|
+
value: { type: mongoose_1.Schema.Types.Mixed }
|
|
11
|
+
}, { _id: false });
|
|
12
|
+
const RuleTargetSchema = new mongoose_1.Schema({
|
|
13
|
+
role: { type: String, enum: Object.values(enums_1.TemplateAudience), required: true },
|
|
14
|
+
platform: {
|
|
15
|
+
type: String,
|
|
16
|
+
required: true,
|
|
17
|
+
...(platformValues ? { enum: platformValues } : {})
|
|
18
|
+
},
|
|
19
|
+
conditions: [RuleConditionSchema]
|
|
20
|
+
}, { _id: false });
|
|
21
|
+
const RuleRunStatsSchema = new mongoose_1.Schema({
|
|
22
|
+
matched: { type: Number, default: 0 },
|
|
23
|
+
sent: { type: Number, default: 0 },
|
|
24
|
+
skipped: { type: Number, default: 0 },
|
|
25
|
+
skippedByThrottle: { type: Number, default: 0 },
|
|
26
|
+
errors: { type: Number, default: 0 }
|
|
27
|
+
}, { _id: false });
|
|
28
|
+
const schema = new mongoose_1.Schema({
|
|
29
|
+
name: { type: String, required: true },
|
|
30
|
+
description: String,
|
|
31
|
+
isActive: { type: Boolean, default: false, index: true },
|
|
32
|
+
sortOrder: { type: Number, default: 10 },
|
|
33
|
+
target: { type: RuleTargetSchema, required: true },
|
|
34
|
+
templateId: { type: mongoose_1.Schema.Types.ObjectId, ref: 'EmailTemplate', required: true, index: true },
|
|
35
|
+
sendOnce: { type: Boolean, default: true },
|
|
36
|
+
resendAfterDays: Number,
|
|
37
|
+
cooldownDays: Number,
|
|
38
|
+
autoApprove: { type: Boolean, default: true },
|
|
39
|
+
maxPerRun: Number,
|
|
40
|
+
bypassThrottle: { type: Boolean, default: false },
|
|
41
|
+
emailType: { type: String, enum: Object.values(enums_1.EmailType), default: enums_1.EmailType.Automated },
|
|
42
|
+
totalSent: { type: Number, default: 0 },
|
|
43
|
+
totalSkipped: { type: Number, default: 0 },
|
|
44
|
+
lastRunAt: Date,
|
|
45
|
+
lastRunStats: RuleRunStatsSchema
|
|
46
|
+
}, {
|
|
47
|
+
timestamps: true,
|
|
48
|
+
collection: 'email_rules',
|
|
49
|
+
statics: {
|
|
50
|
+
findActive() {
|
|
51
|
+
return this.find({ isActive: true }).sort({ sortOrder: 1 });
|
|
52
|
+
},
|
|
53
|
+
findByTemplateId(templateId) {
|
|
54
|
+
return this.find({ templateId });
|
|
55
|
+
},
|
|
56
|
+
async createRule(input) {
|
|
57
|
+
return this.create({
|
|
58
|
+
name: input.name,
|
|
59
|
+
description: input.description,
|
|
60
|
+
isActive: false,
|
|
61
|
+
sortOrder: input.sortOrder ?? 10,
|
|
62
|
+
target: input.target,
|
|
63
|
+
templateId: input.templateId,
|
|
64
|
+
sendOnce: input.sendOnce ?? true,
|
|
65
|
+
resendAfterDays: input.resendAfterDays,
|
|
66
|
+
cooldownDays: input.cooldownDays,
|
|
67
|
+
autoApprove: input.autoApprove ?? true,
|
|
68
|
+
maxPerRun: input.maxPerRun,
|
|
69
|
+
bypassThrottle: input.bypassThrottle ?? false,
|
|
70
|
+
emailType: input.emailType ?? enums_1.EmailType.Automated,
|
|
71
|
+
totalSent: 0,
|
|
72
|
+
totalSkipped: 0
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
schema.index({ isActive: 1, sortOrder: 1 });
|
|
78
|
+
schema.index({ templateId: 1 });
|
|
79
|
+
return schema;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=rule.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.schema.js","sourceRoot":"","sources":["../../src/schemas/rule.schema.ts"],"names":[],"mappings":"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"}
|