@astralibx/email-rule-engine 1.2.2 → 3.0.1

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 (109) hide show
  1. package/README.md +93 -46
  2. package/dist/index.d.mts +607 -0
  3. package/dist/index.d.ts +595 -20
  4. package/dist/index.js +1731 -65
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +1699 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +26 -8
  9. package/dist/controllers/index.d.ts +0 -5
  10. package/dist/controllers/index.d.ts.map +0 -1
  11. package/dist/controllers/index.js +0 -12
  12. package/dist/controllers/index.js.map +0 -1
  13. package/dist/controllers/rule.controller.d.ts +0 -13
  14. package/dist/controllers/rule.controller.d.ts.map +0 -1
  15. package/dist/controllers/rule.controller.js +0 -142
  16. package/dist/controllers/rule.controller.js.map +0 -1
  17. package/dist/controllers/runner.controller.d.ts +0 -8
  18. package/dist/controllers/runner.controller.d.ts.map +0 -1
  19. package/dist/controllers/runner.controller.js +0 -22
  20. package/dist/controllers/runner.controller.js.map +0 -1
  21. package/dist/controllers/settings.controller.d.ts +0 -7
  22. package/dist/controllers/settings.controller.d.ts.map +0 -1
  23. package/dist/controllers/settings.controller.js +0 -56
  24. package/dist/controllers/settings.controller.js.map +0 -1
  25. package/dist/controllers/template.controller.d.ts +0 -15
  26. package/dist/controllers/template.controller.d.ts.map +0 -1
  27. package/dist/controllers/template.controller.js +0 -169
  28. package/dist/controllers/template.controller.js.map +0 -1
  29. package/dist/index.d.ts.map +0 -1
  30. package/dist/routes/index.d.ts +0 -16
  31. package/dist/routes/index.d.ts.map +0 -1
  32. package/dist/routes/index.js +0 -47
  33. package/dist/routes/index.js.map +0 -1
  34. package/dist/schemas/index.d.ts +0 -6
  35. package/dist/schemas/index.d.ts.map +0 -1
  36. package/dist/schemas/index.js +0 -14
  37. package/dist/schemas/index.js.map +0 -1
  38. package/dist/schemas/rule-send.schema.d.ts +0 -25
  39. package/dist/schemas/rule-send.schema.d.ts.map +0 -1
  40. package/dist/schemas/rule-send.schema.js +0 -41
  41. package/dist/schemas/rule-send.schema.js.map +0 -1
  42. package/dist/schemas/rule.schema.d.ts +0 -22
  43. package/dist/schemas/rule.schema.d.ts.map +0 -1
  44. package/dist/schemas/rule.schema.js +0 -81
  45. package/dist/schemas/rule.schema.js.map +0 -1
  46. package/dist/schemas/run-log.schema.d.ts +0 -39
  47. package/dist/schemas/run-log.schema.d.ts.map +0 -1
  48. package/dist/schemas/run-log.schema.js +0 -47
  49. package/dist/schemas/run-log.schema.js.map +0 -1
  50. package/dist/schemas/template.schema.d.ts +0 -24
  51. package/dist/schemas/template.schema.d.ts.map +0 -1
  52. package/dist/schemas/template.schema.js +0 -65
  53. package/dist/schemas/template.schema.js.map +0 -1
  54. package/dist/schemas/throttle-config.schema.d.ts +0 -19
  55. package/dist/schemas/throttle-config.schema.d.ts.map +0 -1
  56. package/dist/schemas/throttle-config.schema.js +0 -32
  57. package/dist/schemas/throttle-config.schema.js.map +0 -1
  58. package/dist/services/index.d.ts +0 -5
  59. package/dist/services/index.d.ts.map +0 -1
  60. package/dist/services/index.js +0 -12
  61. package/dist/services/index.js.map +0 -1
  62. package/dist/services/rule-runner.service.d.ts +0 -31
  63. package/dist/services/rule-runner.service.d.ts.map +0 -1
  64. package/dist/services/rule-runner.service.js +0 -279
  65. package/dist/services/rule-runner.service.js.map +0 -1
  66. package/dist/services/rule.service.d.ts +0 -27
  67. package/dist/services/rule.service.d.ts.map +0 -1
  68. package/dist/services/rule.service.js +0 -127
  69. package/dist/services/rule.service.js.map +0 -1
  70. package/dist/services/template-render.service.d.ts +0 -23
  71. package/dist/services/template-render.service.d.ts.map +0 -1
  72. package/dist/services/template-render.service.js +0 -178
  73. package/dist/services/template-render.service.js.map +0 -1
  74. package/dist/services/template.service.d.ts +0 -42
  75. package/dist/services/template.service.d.ts.map +0 -1
  76. package/dist/services/template.service.js +0 -128
  77. package/dist/services/template.service.js.map +0 -1
  78. package/dist/types/config.types.d.ts +0 -85
  79. package/dist/types/config.types.d.ts.map +0 -1
  80. package/dist/types/config.types.js +0 -3
  81. package/dist/types/config.types.js.map +0 -1
  82. package/dist/types/enums.d.ts +0 -43
  83. package/dist/types/enums.d.ts.map +0 -1
  84. package/dist/types/enums.js +0 -40
  85. package/dist/types/enums.js.map +0 -1
  86. package/dist/types/index.d.ts +0 -6
  87. package/dist/types/index.d.ts.map +0 -1
  88. package/dist/types/index.js +0 -11
  89. package/dist/types/index.js.map +0 -1
  90. package/dist/types/rule.types.d.ts +0 -91
  91. package/dist/types/rule.types.d.ts.map +0 -1
  92. package/dist/types/rule.types.js +0 -3
  93. package/dist/types/rule.types.js.map +0 -1
  94. package/dist/types/template.types.d.ts +0 -43
  95. package/dist/types/template.types.d.ts.map +0 -1
  96. package/dist/types/template.types.js +0 -3
  97. package/dist/types/template.types.js.map +0 -1
  98. package/dist/types/throttle.types.d.ts +0 -15
  99. package/dist/types/throttle.types.d.ts.map +0 -1
  100. package/dist/types/throttle.types.js +0 -3
  101. package/dist/types/throttle.types.js.map +0 -1
  102. package/dist/utils/express-helpers.d.ts +0 -4
  103. package/dist/utils/express-helpers.d.ts.map +0 -1
  104. package/dist/utils/express-helpers.js +0 -15
  105. package/dist/utils/express-helpers.js.map +0 -1
  106. package/dist/utils/redis-lock.d.ts +0 -13
  107. package/dist/utils/redis-lock.d.ts.map +0 -1
  108. package/dist/utils/redis-lock.js +0 -36
  109. package/dist/utils/redis-lock.js.map +0 -1
@@ -1,25 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,41 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,22 +0,0 @@
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[], audienceValues?: 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
@@ -1 +0,0 @@
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,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE;;;;;;;;GA0FzF"}
@@ -1,81 +0,0 @@
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, audienceValues) {
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: audienceValues || 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
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule.schema.js","sourceRoot":"","sources":["../../src/schemas/rule.schema.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { Schema, Model, Types, HydratedDocument } from 'mongoose';
2
- export interface IEmailRuleRunLog {
3
- runAt: Date;
4
- triggeredBy: string;
5
- duration: number;
6
- rulesProcessed: number;
7
- totalStats: {
8
- matched: number;
9
- sent: number;
10
- skipped: number;
11
- skippedByThrottle: number;
12
- errors: number;
13
- };
14
- perRuleStats: Array<{
15
- ruleId: Types.ObjectId;
16
- ruleName: string;
17
- matched: number;
18
- sent: number;
19
- skipped: number;
20
- skippedByThrottle: number;
21
- errors: number;
22
- }>;
23
- }
24
- export type EmailRuleRunLogDocument = HydratedDocument<IEmailRuleRunLog>;
25
- export interface EmailRuleRunLogStatics {
26
- getRecent(limit?: number): Promise<EmailRuleRunLogDocument[]>;
27
- getByRuleId(ruleId: string | Types.ObjectId, limit?: number): Promise<EmailRuleRunLogDocument[]>;
28
- }
29
- export type EmailRuleRunLogModel = Model<IEmailRuleRunLog> & EmailRuleRunLogStatics;
30
- export declare function createEmailRuleRunLogSchema(): Schema<IEmailRuleRunLog, Model<IEmailRuleRunLog, any, any, any, import("mongoose").Document<unknown, any, IEmailRuleRunLog, any, {}> & IEmailRuleRunLog & {
31
- _id: Types.ObjectId;
32
- } & {
33
- __v: number;
34
- }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IEmailRuleRunLog, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IEmailRuleRunLog>, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").FlatRecord<IEmailRuleRunLog> & {
35
- _id: Types.ObjectId;
36
- } & {
37
- __v: number;
38
- }>;
39
- //# sourceMappingURL=run-log.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-log.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/run-log.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGlE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;AAEzE,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC9D,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CAClG;AAED,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,gBAAgB,CAAC,GAAG,sBAAsB,CAAC;AAEpF,wBAAgB,2BAA2B;;;;;;;;GAiD1C"}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEmailRuleRunLogSchema = createEmailRuleRunLogSchema;
4
- const mongoose_1 = require("mongoose");
5
- const enums_1 = require("../types/enums");
6
- function createEmailRuleRunLogSchema() {
7
- const PerRuleStatsSchema = new mongoose_1.Schema({
8
- ruleId: { type: mongoose_1.Schema.Types.ObjectId, ref: 'EmailRule', required: true },
9
- ruleName: { type: String, required: true },
10
- matched: { type: Number, default: 0 },
11
- sent: { type: Number, default: 0 },
12
- skipped: { type: Number, default: 0 },
13
- skippedByThrottle: { type: Number, default: 0 },
14
- errors: { type: Number, default: 0 }
15
- }, { _id: false });
16
- const TotalStatsSchema = new mongoose_1.Schema({
17
- matched: { type: Number, default: 0 },
18
- sent: { type: Number, default: 0 },
19
- skipped: { type: Number, default: 0 },
20
- skippedByThrottle: { type: Number, default: 0 },
21
- errors: { type: Number, default: 0 }
22
- }, { _id: false });
23
- const schema = new mongoose_1.Schema({
24
- runAt: { type: Date, required: true, default: () => new Date() },
25
- triggeredBy: { type: String, enum: Object.values(enums_1.RunTrigger), required: true },
26
- duration: { type: Number, required: true },
27
- rulesProcessed: { type: Number, required: true },
28
- totalStats: { type: TotalStatsSchema, required: true },
29
- perRuleStats: [PerRuleStatsSchema]
30
- }, {
31
- collection: 'email_rule_run_logs',
32
- statics: {
33
- getRecent(limit = 20) {
34
- return this.find().sort({ runAt: -1 }).limit(limit);
35
- },
36
- getByRuleId(ruleId, limit = 20) {
37
- return this.find({ 'perRuleStats.ruleId': ruleId })
38
- .sort({ runAt: -1 })
39
- .limit(limit);
40
- }
41
- }
42
- });
43
- schema.index({ runAt: -1 });
44
- schema.index({ runAt: 1 }, { expireAfterSeconds: 90 * 86400 });
45
- return schema;
46
- }
47
- //# sourceMappingURL=run-log.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"run-log.schema.js","sourceRoot":"","sources":["../../src/schemas/run-log.schema.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { Schema, Model, HydratedDocument } from 'mongoose';
2
- import { TemplateCategory, TemplateAudience } from '../types/enums';
3
- import type { EmailTemplate, CreateEmailTemplateInput } from '../types/template.types';
4
- export interface IEmailTemplate extends Omit<EmailTemplate, '_id'> {
5
- }
6
- export type EmailTemplateDocument = HydratedDocument<IEmailTemplate>;
7
- export interface EmailTemplateStatics {
8
- findBySlug(slug: string): Promise<EmailTemplateDocument | null>;
9
- findActive(): Promise<EmailTemplateDocument[]>;
10
- findByCategory(category: TemplateCategory): Promise<EmailTemplateDocument[]>;
11
- findByAudience(audience: TemplateAudience): Promise<EmailTemplateDocument[]>;
12
- createTemplate(input: CreateEmailTemplateInput): Promise<EmailTemplateDocument>;
13
- }
14
- export type EmailTemplateModel = Model<IEmailTemplate> & EmailTemplateStatics;
15
- export declare function createEmailTemplateSchema(platformValues?: string[], audienceValues?: string[]): Schema<IEmailTemplate, Model<IEmailTemplate, any, any, any, import("mongoose").Document<unknown, any, IEmailTemplate, any, {}> & IEmailTemplate & {
16
- _id: import("mongoose").Types.ObjectId;
17
- } & {
18
- __v: number;
19
- }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IEmailTemplate, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IEmailTemplate>, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").FlatRecord<IEmailTemplate> & {
20
- _id: import("mongoose").Types.ObjectId;
21
- } & {
22
- __v: number;
23
- }>;
24
- //# sourceMappingURL=template.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/template.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;CAAG;AAErE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;IAChE,UAAU,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC/C,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC7E,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAC7E,cAAc,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACjF;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,oBAAoB,CAAC;AAE9E,wBAAgB,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE;;;;;;;;GAsE7F"}
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEmailTemplateSchema = createEmailTemplateSchema;
4
- const mongoose_1 = require("mongoose");
5
- const enums_1 = require("../types/enums");
6
- function createEmailTemplateSchema(platformValues, audienceValues) {
7
- const schema = new mongoose_1.Schema({
8
- name: { type: String, required: true },
9
- slug: { type: String, required: true, unique: true },
10
- description: String,
11
- category: { type: String, enum: Object.values(enums_1.TemplateCategory), required: true },
12
- audience: { type: String, enum: audienceValues || Object.values(enums_1.TemplateAudience), required: true },
13
- platform: {
14
- type: String,
15
- required: true,
16
- ...(platformValues ? { enum: platformValues } : {})
17
- },
18
- subject: { type: String, required: true },
19
- body: { type: String, required: true },
20
- textBody: String,
21
- variables: [{ type: String }],
22
- version: { type: Number, default: 1 },
23
- isActive: { type: Boolean, default: true, index: true }
24
- }, {
25
- timestamps: true,
26
- collection: 'email_templates',
27
- statics: {
28
- findBySlug(slug) {
29
- return this.findOne({ slug });
30
- },
31
- findActive() {
32
- return this.find({ isActive: true }).sort({ category: 1, name: 1 });
33
- },
34
- findByCategory(category) {
35
- return this.find({ category, isActive: true }).sort({ name: 1 });
36
- },
37
- findByAudience(audience) {
38
- return this.find({
39
- $or: [{ audience }, { audience: enums_1.TemplateAudience.All }],
40
- isActive: true
41
- }).sort({ name: 1 });
42
- },
43
- async createTemplate(input) {
44
- return this.create({
45
- name: input.name,
46
- slug: input.slug,
47
- description: input.description,
48
- category: input.category,
49
- audience: input.audience,
50
- platform: input.platform,
51
- subject: input.subject,
52
- body: input.body,
53
- textBody: input.textBody,
54
- variables: input.variables || [],
55
- version: 1,
56
- isActive: true
57
- });
58
- }
59
- }
60
- });
61
- schema.index({ category: 1, isActive: 1 });
62
- schema.index({ audience: 1, platform: 1, isActive: 1 });
63
- return schema;
64
- }
65
- //# sourceMappingURL=template.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.schema.js","sourceRoot":"","sources":["../../src/schemas/template.schema.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { Schema, Model, HydratedDocument } from 'mongoose';
2
- import type { EmailThrottleConfig } from '../types/throttle.types';
3
- export interface IEmailThrottleConfig extends Omit<EmailThrottleConfig, '_id'> {
4
- }
5
- export type EmailThrottleConfigDocument = HydratedDocument<IEmailThrottleConfig>;
6
- export interface EmailThrottleConfigStatics {
7
- getConfig(): Promise<EmailThrottleConfigDocument>;
8
- }
9
- export type EmailThrottleConfigModel = Model<IEmailThrottleConfig> & EmailThrottleConfigStatics;
10
- export declare function createEmailThrottleConfigSchema(): Schema<IEmailThrottleConfig, Model<IEmailThrottleConfig, any, any, any, import("mongoose").Document<unknown, any, IEmailThrottleConfig, any, {}> & IEmailThrottleConfig & {
11
- _id: import("mongoose").Types.ObjectId;
12
- } & {
13
- __v: number;
14
- }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, IEmailThrottleConfig, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<IEmailThrottleConfig>, {}, import("mongoose").DefaultSchemaOptions> & import("mongoose").FlatRecord<IEmailThrottleConfig> & {
15
- _id: import("mongoose").Types.ObjectId;
16
- } & {
17
- __v: number;
18
- }>;
19
- //# sourceMappingURL=throttle-config.schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"throttle-config.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/throttle-config.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC;CAAG;AAEjF,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;AAEjF,MAAM,WAAW,0BAA0B;IACzC,SAAS,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAAC;CACnD;AAED,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,0BAA0B,CAAC;AAEhG,wBAAgB,+BAA+B;;;;;;;;GA8B9C"}
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createEmailThrottleConfigSchema = createEmailThrottleConfigSchema;
4
- const mongoose_1 = require("mongoose");
5
- const enums_1 = require("../types/enums");
6
- function createEmailThrottleConfigSchema() {
7
- const schema = new mongoose_1.Schema({
8
- maxPerUserPerDay: { type: Number, default: 1 },
9
- maxPerUserPerWeek: { type: Number, default: 2 },
10
- minGapDays: { type: Number, default: 3 },
11
- throttleWindow: { type: String, enum: Object.values(enums_1.ThrottleWindow), default: enums_1.ThrottleWindow.Rolling }
12
- }, {
13
- timestamps: true,
14
- collection: 'email_throttle_config',
15
- statics: {
16
- async getConfig() {
17
- let config = await this.findOne();
18
- if (!config) {
19
- config = await this.create({
20
- maxPerUserPerDay: 1,
21
- maxPerUserPerWeek: 2,
22
- minGapDays: 3,
23
- throttleWindow: enums_1.ThrottleWindow.Rolling
24
- });
25
- }
26
- return config;
27
- }
28
- }
29
- });
30
- return schema;
31
- }
32
- //# sourceMappingURL=throttle-config.schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"throttle-config.schema.js","sourceRoot":"","sources":["../../src/schemas/throttle-config.schema.ts"],"names":[],"mappings":";;AAcA,0EA8BC;AA5CD,uCAA2D;AAC3D,0CAAgD;AAahD,SAAgB,+BAA+B;IAC7C,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;QACE,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QAC9C,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QAC/C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;QACxC,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,EAAE,OAAO,EAAE,sBAAc,CAAC,OAAO,EAAE;KACvG,EACD;QACE,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,uBAAuB;QAEnC,OAAO,EAAE;YACP,KAAK,CAAC,SAAS;gBACb,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;wBACzB,gBAAgB,EAAE,CAAC;wBACnB,iBAAiB,EAAE,CAAC;wBACpB,UAAU,EAAE,CAAC;wBACb,cAAc,EAAE,sBAAc,CAAC,OAAO;qBACvC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;SACF;KACF,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,5 +0,0 @@
1
- export { TemplateRenderService, type RenderResult, type CompiledTemplate } from './template-render.service';
2
- export { TemplateService } from './template.service';
3
- export { RuleService } from './rule.service';
4
- export { RuleRunnerService } from './rule-runner.service';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RuleRunnerService = exports.RuleService = exports.TemplateService = exports.TemplateRenderService = void 0;
4
- var template_render_service_1 = require("./template-render.service");
5
- Object.defineProperty(exports, "TemplateRenderService", { enumerable: true, get: function () { return template_render_service_1.TemplateRenderService; } });
6
- var template_service_1 = require("./template.service");
7
- Object.defineProperty(exports, "TemplateService", { enumerable: true, get: function () { return template_service_1.TemplateService; } });
8
- var rule_service_1 = require("./rule.service");
9
- Object.defineProperty(exports, "RuleService", { enumerable: true, get: function () { return rule_service_1.RuleService; } });
10
- var rule_runner_service_1 = require("./rule-runner.service");
11
- Object.defineProperty(exports, "RuleRunnerService", { enumerable: true, get: function () { return rule_runner_service_1.RuleRunnerService; } });
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,qEAA4G;AAAnG,gIAAA,qBAAqB,OAAA;AAC9B,uDAAqD;AAA5C,mHAAA,eAAe,OAAA;AACxB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA"}
@@ -1,31 +0,0 @@
1
- import type { EmailRuleModel } from '../schemas/rule.schema';
2
- import type { EmailTemplateModel } from '../schemas/template.schema';
3
- import type { EmailRuleSendModel } from '../schemas/rule-send.schema';
4
- import type { EmailRuleRunLogModel } from '../schemas/run-log.schema';
5
- import type { EmailThrottleConfigModel } from '../schemas/throttle-config.schema';
6
- import { RunTrigger } from '../types/enums';
7
- import type { RuleRunStats } from '../types/rule.types';
8
- import type { EmailRuleEngineConfig } from '../types/config.types';
9
- interface UserThrottle {
10
- today: number;
11
- thisWeek: number;
12
- lastSentDate: Date | null;
13
- }
14
- export declare class RuleRunnerService {
15
- private EmailRule;
16
- private EmailTemplate;
17
- private EmailRuleSend;
18
- private EmailRuleRunLog;
19
- private EmailThrottleConfig;
20
- private config;
21
- private templateRenderer;
22
- private lock;
23
- private logger;
24
- constructor(EmailRule: EmailRuleModel, EmailTemplate: EmailTemplateModel, EmailRuleSend: EmailRuleSendModel, EmailRuleRunLog: EmailRuleRunLogModel, EmailThrottleConfig: EmailThrottleConfigModel, config: EmailRuleEngineConfig);
25
- runAllRules(triggeredBy?: typeof RunTrigger[keyof typeof RunTrigger]): Promise<void>;
26
- executeRule(rule: any, throttleMap: Map<string, UserThrottle>, throttleConfig: any): Promise<RuleRunStats>;
27
- private checkThrottle;
28
- buildThrottleMap(recentSends: any[]): Map<string, UserThrottle>;
29
- }
30
- export {};
31
- //# sourceMappingURL=rule-runner.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rule-runner.service.d.ts","sourceRoot":"","sources":["../../src/services/rule-runner.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAa,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAc,MAAM,uBAAuB,CAAC;AAK/E,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAQD,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,MAAM,CAAa;gBAGjB,SAAS,EAAE,cAAc,EACzB,aAAa,EAAE,kBAAkB,EACjC,aAAa,EAAE,kBAAkB,EACjC,eAAe,EAAE,oBAAoB,EACrC,mBAAmB,EAAE,wBAAwB,EAC7C,MAAM,EAAE,qBAAqB;IAajC,WAAW,CAAC,WAAW,GAAE,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyFrG,WAAW,CACf,IAAI,EAAE,GAAG,EACT,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,cAAc,EAAE,GAAG,GAClB,OAAO,CAAC,YAAY,CAAC;IA2IxB,OAAO,CAAC,aAAa;IA8BrB,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;CAuBhE"}