@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.
Files changed (106) hide show
  1. package/README.md +192 -0
  2. package/dist/controllers/index.d.ts +5 -0
  3. package/dist/controllers/index.d.ts.map +1 -0
  4. package/dist/controllers/index.js +12 -0
  5. package/dist/controllers/index.js.map +1 -0
  6. package/dist/controllers/rule.controller.d.ts +13 -0
  7. package/dist/controllers/rule.controller.d.ts.map +1 -0
  8. package/dist/controllers/rule.controller.js +142 -0
  9. package/dist/controllers/rule.controller.js.map +1 -0
  10. package/dist/controllers/runner.controller.d.ts +8 -0
  11. package/dist/controllers/runner.controller.d.ts.map +1 -0
  12. package/dist/controllers/runner.controller.js +22 -0
  13. package/dist/controllers/runner.controller.js.map +1 -0
  14. package/dist/controllers/settings.controller.d.ts +7 -0
  15. package/dist/controllers/settings.controller.d.ts.map +1 -0
  16. package/dist/controllers/settings.controller.js +56 -0
  17. package/dist/controllers/settings.controller.js.map +1 -0
  18. package/dist/controllers/template.controller.d.ts +15 -0
  19. package/dist/controllers/template.controller.d.ts.map +1 -0
  20. package/dist/controllers/template.controller.js +169 -0
  21. package/dist/controllers/template.controller.js.map +1 -0
  22. package/dist/index.d.ts +32 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +67 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/routes/index.d.ts +16 -0
  27. package/dist/routes/index.d.ts.map +1 -0
  28. package/dist/routes/index.js +47 -0
  29. package/dist/routes/index.js.map +1 -0
  30. package/dist/schemas/index.d.ts +6 -0
  31. package/dist/schemas/index.d.ts.map +1 -0
  32. package/dist/schemas/index.js +14 -0
  33. package/dist/schemas/index.js.map +1 -0
  34. package/dist/schemas/rule-send.schema.d.ts +25 -0
  35. package/dist/schemas/rule-send.schema.d.ts.map +1 -0
  36. package/dist/schemas/rule-send.schema.js +41 -0
  37. package/dist/schemas/rule-send.schema.js.map +1 -0
  38. package/dist/schemas/rule.schema.d.ts +22 -0
  39. package/dist/schemas/rule.schema.d.ts.map +1 -0
  40. package/dist/schemas/rule.schema.js +81 -0
  41. package/dist/schemas/rule.schema.js.map +1 -0
  42. package/dist/schemas/run-log.schema.d.ts +39 -0
  43. package/dist/schemas/run-log.schema.d.ts.map +1 -0
  44. package/dist/schemas/run-log.schema.js +47 -0
  45. package/dist/schemas/run-log.schema.js.map +1 -0
  46. package/dist/schemas/template.schema.d.ts +24 -0
  47. package/dist/schemas/template.schema.d.ts.map +1 -0
  48. package/dist/schemas/template.schema.js +65 -0
  49. package/dist/schemas/template.schema.js.map +1 -0
  50. package/dist/schemas/throttle-config.schema.d.ts +19 -0
  51. package/dist/schemas/throttle-config.schema.d.ts.map +1 -0
  52. package/dist/schemas/throttle-config.schema.js +32 -0
  53. package/dist/schemas/throttle-config.schema.js.map +1 -0
  54. package/dist/services/index.d.ts +5 -0
  55. package/dist/services/index.d.ts.map +1 -0
  56. package/dist/services/index.js +12 -0
  57. package/dist/services/index.js.map +1 -0
  58. package/dist/services/rule-runner.service.d.ts +31 -0
  59. package/dist/services/rule-runner.service.d.ts.map +1 -0
  60. package/dist/services/rule-runner.service.js +253 -0
  61. package/dist/services/rule-runner.service.js.map +1 -0
  62. package/dist/services/rule.service.d.ts +27 -0
  63. package/dist/services/rule.service.d.ts.map +1 -0
  64. package/dist/services/rule.service.js +127 -0
  65. package/dist/services/rule.service.js.map +1 -0
  66. package/dist/services/template-render.service.d.ts +23 -0
  67. package/dist/services/template-render.service.d.ts.map +1 -0
  68. package/dist/services/template-render.service.js +178 -0
  69. package/dist/services/template-render.service.js.map +1 -0
  70. package/dist/services/template.service.d.ts +42 -0
  71. package/dist/services/template.service.d.ts.map +1 -0
  72. package/dist/services/template.service.js +128 -0
  73. package/dist/services/template.service.js.map +1 -0
  74. package/dist/types/config.types.d.ts +50 -0
  75. package/dist/types/config.types.d.ts.map +1 -0
  76. package/dist/types/config.types.js +3 -0
  77. package/dist/types/config.types.js.map +1 -0
  78. package/dist/types/enums.d.ts +43 -0
  79. package/dist/types/enums.d.ts.map +1 -0
  80. package/dist/types/enums.js +40 -0
  81. package/dist/types/enums.js.map +1 -0
  82. package/dist/types/index.d.ts +6 -0
  83. package/dist/types/index.d.ts.map +1 -0
  84. package/dist/types/index.js +11 -0
  85. package/dist/types/index.js.map +1 -0
  86. package/dist/types/rule.types.d.ts +91 -0
  87. package/dist/types/rule.types.d.ts.map +1 -0
  88. package/dist/types/rule.types.js +3 -0
  89. package/dist/types/rule.types.js.map +1 -0
  90. package/dist/types/template.types.d.ts +43 -0
  91. package/dist/types/template.types.d.ts.map +1 -0
  92. package/dist/types/template.types.js +3 -0
  93. package/dist/types/template.types.js.map +1 -0
  94. package/dist/types/throttle.types.d.ts +15 -0
  95. package/dist/types/throttle.types.d.ts.map +1 -0
  96. package/dist/types/throttle.types.js +3 -0
  97. package/dist/types/throttle.types.js.map +1 -0
  98. package/dist/utils/express-helpers.d.ts +4 -0
  99. package/dist/utils/express-helpers.d.ts.map +1 -0
  100. package/dist/utils/express-helpers.js +15 -0
  101. package/dist/utils/express-helpers.js.map +1 -0
  102. package/dist/utils/redis-lock.d.ts +13 -0
  103. package/dist/utils/redis-lock.d.ts.map +1 -0
  104. package/dist/utils/redis-lock.js +36 -0
  105. package/dist/utils/redis-lock.js.map +1 -0
  106. 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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"}
@@ -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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"}