@livetronics/wocul-email-config 1.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.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # @livetronics/wocul-email-config
2
+
3
+ Shared email templates configuration for Wocul services.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @livetronics/wocul-email-config
9
+
10
+
11
+ ## Usage
12
+
13
+ import {
14
+ EMAIL_TEMPLATES,
15
+ validateEmailParams,
16
+ getEmailTemplate,
17
+ getTemplateName
18
+ } from '@livetronics/wocul-email-config'
19
+
20
+ // Validate email parameters before queueing
21
+ const validation = validateEmailParams('Staff', 'Task', 'Task-Assigned', {
22
+ assignee: 'John Doe',
23
+ task_title: 'Fix bug',
24
+ // ... other variables
25
+ })
26
+
27
+ if (!validation.valid) {
28
+ console.error(validation.errors)
29
+ }
30
+
31
+ // Get template name for an environment
32
+ const templateName = getTemplateName('Staff', 'Task', 'Task-Assigned', 'production')
33
+
34
+ // Get template configuration
35
+ const template = getEmailTemplate('Staff', 'Task', 'Task-Assigned')
36
+ console.log(template?.variables) // List of required variables
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export { EMAIL_TEMPLATES } from './templates';
3
+ export { default as EMAIL_TEMPLATES_DEFAULT } from './templates';
4
+ export { getEmailTemplate, validateEmailParams, getValidEventTypes, getValidSubCategories, getTemplateName, getSubject } from './validation';
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.getSubject = exports.getTemplateName = exports.getValidSubCategories = exports.getValidEventTypes = exports.validateEmailParams = exports.getEmailTemplate = exports.EMAIL_TEMPLATES_DEFAULT = exports.EMAIL_TEMPLATES = void 0;
21
+ // Export all types
22
+ __exportStar(require("./types"), exports);
23
+ // Export templates
24
+ var templates_1 = require("./templates");
25
+ Object.defineProperty(exports, "EMAIL_TEMPLATES", { enumerable: true, get: function () { return templates_1.EMAIL_TEMPLATES; } });
26
+ var templates_2 = require("./templates");
27
+ Object.defineProperty(exports, "EMAIL_TEMPLATES_DEFAULT", { enumerable: true, get: function () { return __importDefault(templates_2).default; } });
28
+ // Export validation functions
29
+ var validation_1 = require("./validation");
30
+ Object.defineProperty(exports, "getEmailTemplate", { enumerable: true, get: function () { return validation_1.getEmailTemplate; } });
31
+ Object.defineProperty(exports, "validateEmailParams", { enumerable: true, get: function () { return validation_1.validateEmailParams; } });
32
+ Object.defineProperty(exports, "getValidEventTypes", { enumerable: true, get: function () { return validation_1.getValidEventTypes; } });
33
+ Object.defineProperty(exports, "getValidSubCategories", { enumerable: true, get: function () { return validation_1.getValidSubCategories; } });
34
+ Object.defineProperty(exports, "getTemplateName", { enumerable: true, get: function () { return validation_1.getTemplateName; } });
35
+ Object.defineProperty(exports, "getSubject", { enumerable: true, get: function () { return validation_1.getSubject; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQkFBbUI7QUFDbkIsMENBQXVCO0FBRXZCLG1CQUFtQjtBQUNuQix5Q0FBNkM7QUFBcEMsNEdBQUEsZUFBZSxPQUFBO0FBQ3hCLHlDQUFnRTtBQUF2RCxxSUFBQSxPQUFPLE9BQTJCO0FBRTNDLDhCQUE4QjtBQUM5QiwyQ0FPcUI7QUFObkIsOEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsaUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsZ0hBQUEsa0JBQWtCLE9BQUE7QUFDbEIsbUhBQUEscUJBQXFCLE9BQUE7QUFDckIsNkdBQUEsZUFBZSxPQUFBO0FBQ2Ysd0dBQUEsVUFBVSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IGFsbCB0eXBlc1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcblxuLy8gRXhwb3J0IHRlbXBsYXRlc1xuZXhwb3J0IHsgRU1BSUxfVEVNUExBVEVTIH0gZnJvbSAnLi90ZW1wbGF0ZXMnXG5leHBvcnQgeyBkZWZhdWx0IGFzIEVNQUlMX1RFTVBMQVRFU19ERUZBVUxUIH0gZnJvbSAnLi90ZW1wbGF0ZXMnXG5cbi8vIEV4cG9ydCB2YWxpZGF0aW9uIGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgZ2V0RW1haWxUZW1wbGF0ZSxcbiAgdmFsaWRhdGVFbWFpbFBhcmFtcyxcbiAgZ2V0VmFsaWRFdmVudFR5cGVzLFxuICBnZXRWYWxpZFN1YkNhdGVnb3JpZXMsXG4gIGdldFRlbXBsYXRlTmFtZSxcbiAgZ2V0U3ViamVjdFxufSBmcm9tICcuL3ZhbGlkYXRpb24nIl19
@@ -0,0 +1,3 @@
1
+ import type { EmailTemplatesConfig } from './types';
2
+ export declare const EMAIL_TEMPLATES: EmailTemplatesConfig;
3
+ export default EMAIL_TEMPLATES;
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMAIL_TEMPLATES = void 0;
4
+ exports.EMAIL_TEMPLATES = {
5
+ 'Default-Template': {
6
+ templateName: {
7
+ development: 'modern-v2-Default-Template-20220225062622',
8
+ qa: 'modern-v2-Default-Template-20220225062622',
9
+ production: 'modern-v2-Default-Template-20220225062622'
10
+ },
11
+ subject: '{{subject}}',
12
+ variables: ['subject', 'body']
13
+ },
14
+ Common: {
15
+ OTP: {
16
+ 'Email-OTP': {
17
+ templateName: {
18
+ development: 'modern-v2-Wocul-Collab-Email-OTP',
19
+ qa: 'modern-v2-Wocul-Collab-Email-OTP',
20
+ production: 'modern-v2-Wocul-Collab-Email-OTP'
21
+ },
22
+ subject: 'Your OTP for {{purpose}}',
23
+ variables: ['recipient_name', 'purpose', 'otp_code', 'support_email'],
24
+ description: 'On generating email OTP for verification',
25
+ status: 'completed',
26
+ templateFile: 'otp.html'
27
+ }
28
+ },
29
+ Welcome: {
30
+ 'User-Welcome': {
31
+ templateName: {
32
+ development: 'modern-v2-Wocul-Collab-Welcome',
33
+ qa: 'modern-v2-Wocul-Collab-Welcome',
34
+ production: 'modern-v2-Wocul-Collab-Welcome'
35
+ },
36
+ subject: 'Welcome to Wocul',
37
+ variables: [
38
+ 'user_name',
39
+ 'ios_app_url',
40
+ 'android_app_url',
41
+ 'app_url',
42
+ 'help_center_url',
43
+ 'support_email'
44
+ ],
45
+ description: 'Welcome email for new users',
46
+ status: 'completed',
47
+ templateFile: 'welcome.html'
48
+ }
49
+ },
50
+ Account: {
51
+ 'Account-Deleted': {
52
+ templateName: {
53
+ development: 'modern-v2-Wocul-Collab-Account-Deleted',
54
+ qa: 'modern-v2-Wocul-Collab-Account-Deleted',
55
+ production: 'modern-v2-Wocul-Collab-Account-Deleted'
56
+ },
57
+ subject: 'Your Account Has Been Deleted',
58
+ variables: [
59
+ 'user_name',
60
+ 'user_email',
61
+ 'deleted_date',
62
+ 'deleted_time',
63
+ 'support_url'
64
+ ],
65
+ description: 'Notification when user account is deleted',
66
+ status: 'completed',
67
+ templateFile: 'account-deleted.html'
68
+ }
69
+ }
70
+ },
71
+ Staff: {
72
+ Task: {
73
+ 'Task-Assigned': {
74
+ templateName: {
75
+ development: 'modern-v2-Wocul-Collab-Task-Assignment',
76
+ qa: 'modern-v2-Wocul-Collab-Task-Assignment',
77
+ production: 'modern-v2-Wocul-Collab-Task-Assignment'
78
+ },
79
+ subject: 'Task Assigned: {{task_title}}',
80
+ variables: [
81
+ 'assignee',
82
+ 'assigner',
83
+ 'assigner_initials',
84
+ 'task_id',
85
+ 'task_title',
86
+ 'project_id',
87
+ 'project_name',
88
+ 'priority',
89
+ 'priority_class',
90
+ 'reporter',
91
+ 'reporter_designation',
92
+ 'deadline',
93
+ 'task_url',
94
+ 'help_center_url',
95
+ 'support_email'
96
+ ],
97
+ description: 'On assigning a task to a user',
98
+ status: 'completed',
99
+ templateFile: 'taskassigned.html'
100
+ },
101
+ 'Task-Overdue-Assignee': {
102
+ templateName: {
103
+ development: 'modern-v2-Wocul-Collab-TaskOverdue-Assignee',
104
+ qa: 'modern-v2-Wocul-Collab-TaskOverdue-Assignee',
105
+ production: 'modern-v2-Wocul-Collab-TaskOverdue-Assignee'
106
+ },
107
+ subject: 'Task Overdue: {{task_title}}',
108
+ variables: [
109
+ 'assignee',
110
+ 'task_id',
111
+ 'task_title',
112
+ 'project_name',
113
+ 'due_date',
114
+ 'priority',
115
+ 'priority_class',
116
+ 'board_name',
117
+ 'kanban_column',
118
+ 'task_url',
119
+ 'support_email'
120
+ ],
121
+ description: 'Overdue task notification for the assignee',
122
+ status: 'completed',
123
+ templateFile: 'taskoverdue-assignee.html'
124
+ },
125
+ 'Task-Overdue-Stakeholder': {
126
+ templateName: {
127
+ development: 'modern-v2-Wocul-Collab-TaskOverdue-Stakeholder',
128
+ qa: 'modern-v2-Wocul-Collab-TaskOverdue-Stakeholder',
129
+ production: 'modern-v2-Wocul-Collab-TaskOverdue-Stakeholder'
130
+ },
131
+ subject: 'Task Overdue: {{task_title}}',
132
+ variables: [
133
+ 'recipient_name',
134
+ 'stakeholder_role',
135
+ 'task_id',
136
+ 'task_title',
137
+ 'project_name',
138
+ 'due_date',
139
+ 'assignee',
140
+ 'assignee_initials',
141
+ 'priority',
142
+ 'priority_class',
143
+ 'board_name',
144
+ 'kanban_column',
145
+ 'task_url'
146
+ ],
147
+ description: 'Overdue task notification for stakeholders (reporters, watchers)',
148
+ status: 'completed',
149
+ templateFile: 'taskoverdue-stakeholder.html'
150
+ },
151
+ 'Approval-Needed': {
152
+ templateName: {
153
+ development: 'modern-v2-Wocul-Collab-Approval-Needed',
154
+ qa: 'modern-v2-Wocul-Collab-Approval-Needed',
155
+ production: 'modern-v2-Wocul-Collab-Approval-Needed'
156
+ },
157
+ subject: 'Approval Needed: {{task_title}}',
158
+ variables: [
159
+ 'approver_name',
160
+ 'task_id',
161
+ 'task_title',
162
+ 'project_id',
163
+ 'project_name',
164
+ 'priority',
165
+ 'ai_summary',
166
+ 'task_url',
167
+ 'help_center_url',
168
+ 'support_email'
169
+ ],
170
+ description: 'Notification when approval is needed for a task',
171
+ status: 'completed',
172
+ templateFile: 'approvalneeded.html'
173
+ }
174
+ },
175
+ Project: {
176
+ 'Member-Invitation': {
177
+ templateName: {
178
+ development: 'modern-v2-Wocul-Collab-Project-Invitation',
179
+ qa: 'modern-v2-Wocul-Collab-Project-Invitation',
180
+ production: 'modern-v2-Wocul-Collab-Project-Invitation'
181
+ },
182
+ subject: '{{inviter_name}} invited you to {{project_name}}',
183
+ variables: [
184
+ 'recipient_name',
185
+ 'inviter_name',
186
+ 'inviter_initials',
187
+ 'inviter_designation',
188
+ 'organisation_name',
189
+ 'project_id',
190
+ 'project_name',
191
+ 'project_description',
192
+ 'role',
193
+ 'invite_code',
194
+ 'invite_url'
195
+ ],
196
+ description: 'On inviting a user to a project',
197
+ status: 'completed',
198
+ templateFile: 'projectinvite.html'
199
+ },
200
+ 'Project-Kickstart': {
201
+ templateName: {
202
+ development: 'modern-v2-Wocul-Collab-Project-Kickstart',
203
+ qa: 'modern-v2-Wocul-Collab-Project-Kickstart',
204
+ production: 'modern-v2-Wocul-Collab-Project-Kickstart'
205
+ },
206
+ subject: 'Welcome to {{project_name}}',
207
+ variables: [
208
+ 'creator_name',
209
+ 'project_name',
210
+ 'created_date',
211
+ 'project_url',
212
+ 'help_url'
213
+ ],
214
+ description: 'Welcome email when a new project is created',
215
+ status: 'completed',
216
+ templateFile: 'project-kickstart.html'
217
+ }
218
+ },
219
+ Mention: {
220
+ 'User-Mention': {
221
+ templateName: {
222
+ development: 'modern-v2-Wocul-Collab-User-Mention',
223
+ qa: 'modern-v2-Wocul-Collab-User-Mention',
224
+ production: 'modern-v2-Wocul-Collab-User-Mention'
225
+ },
226
+ subject: 'You were mentioned in {{task_title}}',
227
+ variables: [
228
+ 'recipient_name',
229
+ 'mentioner_name',
230
+ 'mentioner_initials',
231
+ 'project_name',
232
+ 'task_id',
233
+ 'task_title',
234
+ 'comment_preview',
235
+ 'comment_before_mention',
236
+ 'comment_after_mention',
237
+ 'comment_time',
238
+ 'reply_url',
239
+ 'task_url',
240
+ 'settings_url'
241
+ ],
242
+ description: 'Notification when a user is mentioned in a comment',
243
+ status: 'completed',
244
+ templateFile: 'mention.html'
245
+ },
246
+ 'AI-Mention': {
247
+ templateName: {
248
+ development: 'modern-v2-Wocul-Collab-AI-Mention',
249
+ qa: 'modern-v2-Wocul-Collab-AI-Mention',
250
+ production: 'modern-v2-Wocul-Collab-AI-Mention'
251
+ },
252
+ subject: 'WOCUL AI mentioned you in {{task_title}}',
253
+ variables: [
254
+ 'recipient_name',
255
+ 'project_name',
256
+ 'task_id',
257
+ 'task_title',
258
+ 'ai_welcome_message',
259
+ 'task_url',
260
+ 'settings_url'
261
+ ],
262
+ description: 'Notification when WOCUL AI mentions a user',
263
+ status: 'completed',
264
+ templateFile: 'mention-ai.html'
265
+ }
266
+ },
267
+ Feedback: {
268
+ 'Feedback-Received': {
269
+ templateName: {
270
+ development: 'modern-v2-Wocul-Collab-Feedback-Received',
271
+ qa: 'modern-v2-Wocul-Collab-Feedback-Received',
272
+ production: 'modern-v2-Wocul-Collab-Feedback-Received'
273
+ },
274
+ subject: 'Feedback on {{task_title}}',
275
+ variables: [
276
+ 'recipient_name',
277
+ 'sender_name',
278
+ 'sender_initials',
279
+ 'task_title',
280
+ 'rating_stars',
281
+ 'feedback_message',
282
+ 'feedback_time',
283
+ 'task_url',
284
+ 'settings_url'
285
+ ],
286
+ description: 'Notification when feedback is received on a task',
287
+ status: 'completed',
288
+ templateFile: 'feedback-received.html'
289
+ },
290
+ 'Feedback-Prompt': {
291
+ templateName: {
292
+ development: 'modern-v2-Wocul-Collab-Feedback-Prompt',
293
+ qa: 'modern-v2-Wocul-Collab-Feedback-Prompt',
294
+ production: 'modern-v2-Wocul-Collab-Feedback-Prompt'
295
+ },
296
+ subject: 'Share your feedback on {{task_title}}',
297
+ variables: [
298
+ 'reporter_name',
299
+ 'task_title',
300
+ 'days_since_completion',
301
+ 'days_plural',
302
+ 'completion_date',
303
+ 'participants',
304
+ 'feedback_url',
305
+ 'task_url',
306
+ 'settings_url'
307
+ ],
308
+ description: 'Reminder to provide feedback on a completed task',
309
+ status: 'completed',
310
+ templateFile: 'feedback-prompt.html'
311
+ },
312
+ 'AI-Feedback': {
313
+ templateName: {
314
+ development: 'modern-v2-Wocul-Collab-AI-Feedback',
315
+ qa: 'modern-v2-Wocul-Collab-AI-Feedback',
316
+ production: 'modern-v2-Wocul-Collab-AI-Feedback'
317
+ },
318
+ subject: 'AI Feedback on {{task_title}}',
319
+ variables: [
320
+ 'recipient_name',
321
+ 'task_title',
322
+ 'ai_feedback_message',
323
+ 'insights',
324
+ 'task_url',
325
+ 'settings_url'
326
+ ],
327
+ description: 'AI-generated feedback on task completion',
328
+ status: 'completed',
329
+ templateFile: 'feedback-ai.html'
330
+ }
331
+ },
332
+ 'AI-Insights': {
333
+ 'Board-Insights-Ready': {
334
+ templateName: {
335
+ development: 'modern-v2-Wocul-Collab-Board-Insights',
336
+ qa: 'modern-v2-Wocul-Collab-Board-Insights',
337
+ production: 'modern-v2-Wocul-Collab-Board-Insights'
338
+ },
339
+ subject: 'New insights for {{board_name}}',
340
+ variables: [
341
+ 'owner_name',
342
+ 'board_name',
343
+ 'project_name',
344
+ 'insights_summary',
345
+ 'generated_date',
346
+ 'generated_time',
347
+ 'insights_url'
348
+ ],
349
+ description: 'Notification when AI insights are ready for a board',
350
+ status: 'completed',
351
+ templateFile: 'board-insights-ready.html'
352
+ }
353
+ },
354
+ 'Daily-Digest': {
355
+ 'Daily-Task-Digest': {
356
+ templateName: {
357
+ development: 'modern-v2-Wocul-Collab-Daily-Digest',
358
+ qa: 'modern-v2-Wocul-Collab-Daily-Digest',
359
+ production: 'modern-v2-Wocul-Collab-Daily-Digest'
360
+ },
361
+ subject: 'Your Daily Task Digest - {{date_formatted}}',
362
+ variables: [
363
+ 'user_name',
364
+ 'date_formatted',
365
+ 'overdue_count',
366
+ 'today_count',
367
+ 'upcoming_count',
368
+ 'assignee_count',
369
+ 'assignee_tasks',
370
+ 'reporter_count',
371
+ 'reporter_tasks',
372
+ 'approver_count',
373
+ 'approver_tasks',
374
+ 'dashboard_url',
375
+ 'settings_url',
376
+ 'unsubscribe_url'
377
+ ],
378
+ description: 'Daily digest of tasks requiring attention',
379
+ status: 'completed',
380
+ templateFile: 'dailydigest.html'
381
+ }
382
+ }
383
+ }
384
+ };
385
+ exports.default = exports.EMAIL_TEMPLATES;
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFYSxRQUFBLGVBQWUsR0FBeUI7SUFDbkQsa0JBQWtCLEVBQUU7UUFDbEIsWUFBWSxFQUFFO1lBQ1osV0FBVyxFQUFFLDJDQUEyQztZQUN4RCxFQUFFLEVBQUUsMkNBQTJDO1lBQy9DLFVBQVUsRUFBRSwyQ0FBMkM7U0FDeEQ7UUFDRCxPQUFPLEVBQUUsYUFBYTtRQUN0QixTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO0tBQy9CO0lBRUQsTUFBTSxFQUFFO1FBQ04sR0FBRyxFQUFFO1lBQ0gsV0FBVyxFQUFFO2dCQUNYLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxFQUFFLEVBQUUsa0NBQWtDO29CQUN0QyxVQUFVLEVBQUUsa0NBQWtDO2lCQUMvQztnQkFDRCxPQUFPLEVBQUUsMEJBQTBCO2dCQUNuQyxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQztnQkFDckUsV0FBVyxFQUFFLDBDQUEwQztnQkFDdkQsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLFlBQVksRUFBRSxVQUFVO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUU7Z0JBQ2QsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLEVBQUUsRUFBRSxnQ0FBZ0M7b0JBQ3BDLFVBQVUsRUFBRSxnQ0FBZ0M7aUJBQzdDO2dCQUNELE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFNBQVMsRUFBRTtvQkFDVCxXQUFXO29CQUNYLGFBQWE7b0JBQ2IsaUJBQWlCO29CQUNqQixTQUFTO29CQUNULGlCQUFpQjtvQkFDakIsZUFBZTtpQkFDaEI7Z0JBQ0QsV0FBVyxFQUFFLDZCQUE2QjtnQkFDMUMsTUFBTSxFQUFFLFdBQVc7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QixnQkFBZ0I7b0JBQ2hCLGdCQUFnQjtvQkFDaEIsY0FBYztpQkFDZjtnQkFDRCxXQUFXLEVBQUUscURBQXFEO2dCQUNsRSxNQUFNLEVBQUUsV0FBVztnQkFDbkIsWUFBWSxFQUFFLDJCQUEyQjthQUMxQztTQUNGO1FBQ0QsY0FBYyxFQUFFO1lBQ2QsbUJBQW1CLEVBQUU7Z0JBQ25CLFlBQVksRUFBRTtvQkFDWixXQUFXLEVBQUUscUNBQXFDO29CQUNsRCxFQUFFLEVBQUUscUNBQXFDO29CQUN6QyxVQUFVLEVBQUUscUNBQXFDO2lCQUNsRDtnQkFDRCxPQUFPLEVBQUUsNkNBQTZDO2dCQUN0RCxTQUFTLEVBQUU7b0JBQ1QsV0FBVztvQkFDWCxnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsYUFBYTtvQkFDYixnQkFBZ0I7b0JBQ2hCLGdCQUFnQjtvQkFDaEIsZ0JBQWdCO29CQUNoQixnQkFBZ0I7b0JBQ2hCLGdCQUFnQjtvQkFDaEIsZ0JBQWdCO29CQUNoQixnQkFBZ0I7b0JBQ2hCLGVBQWU7b0JBQ2YsY0FBYztvQkFDZCxpQkFBaUI7aUJBQ2xCO2dCQUNELFdBQVcsRUFBRSwyQ0FBMkM7Z0JBQ3hELE1BQU0sRUFBRSxXQUFXO2dCQUNuQixZQUFZLEVBQUUsa0JBQWtCO2FBQ2pDO1NBQ0Y7S0FDRjtDQUNGLENBQUE7QUFFRCxrQkFBZSx1QkFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbWFpbFRlbXBsYXRlc0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBFTUFJTF9URU1QTEFURVM6IEVtYWlsVGVtcGxhdGVzQ29uZmlnID0ge1xuICAnRGVmYXVsdC1UZW1wbGF0ZSc6IHtcbiAgICB0ZW1wbGF0ZU5hbWU6IHtcbiAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLURlZmF1bHQtVGVtcGxhdGUtMjAyMjAyMjUwNjI2MjInLFxuICAgICAgcWE6ICdtb2Rlcm4tdjItRGVmYXVsdC1UZW1wbGF0ZS0yMDIyMDIyNTA2MjYyMicsXG4gICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLURlZmF1bHQtVGVtcGxhdGUtMjAyMjAyMjUwNjI2MjInXG4gICAgfSxcbiAgICBzdWJqZWN0OiAne3tzdWJqZWN0fX0nLFxuICAgIHZhcmlhYmxlczogWydzdWJqZWN0JywgJ2JvZHknXVxuICB9LFxuXG4gIENvbW1vbjoge1xuICAgIE9UUDoge1xuICAgICAgJ0VtYWlsLU9UUCc6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUVtYWlsLU9UUCcsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUVtYWlsLU9UUCcsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItRW1haWwtT1RQJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnWW91ciBPVFAgZm9yIHt7cHVycG9zZX19JyxcbiAgICAgICAgdmFyaWFibGVzOiBbJ3JlY2lwaWVudF9uYW1lJywgJ3B1cnBvc2UnLCAnb3RwX2NvZGUnLCAnc3VwcG9ydF9lbWFpbCddLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09uIGdlbmVyYXRpbmcgZW1haWwgT1RQIGZvciB2ZXJpZmljYXRpb24nLFxuICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB0ZW1wbGF0ZUZpbGU6ICdvdHAuaHRtbCdcbiAgICAgIH1cbiAgICB9LFxuICAgIFdlbGNvbWU6IHtcbiAgICAgICdVc2VyLVdlbGNvbWUnOiB7XG4gICAgICAgIHRlbXBsYXRlTmFtZToge1xuICAgICAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1XZWxjb21lJyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItV2VsY29tZScsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItV2VsY29tZSdcbiAgICAgICAgfSxcbiAgICAgICAgc3ViamVjdDogJ1dlbGNvbWUgdG8gV29jdWwnLFxuICAgICAgICB2YXJpYWJsZXM6IFtcbiAgICAgICAgICAndXNlcl9uYW1lJyxcbiAgICAgICAgICAnaW9zX2FwcF91cmwnLFxuICAgICAgICAgICdhbmRyb2lkX2FwcF91cmwnLFxuICAgICAgICAgICdhcHBfdXJsJyxcbiAgICAgICAgICAnaGVscF9jZW50ZXJfdXJsJyxcbiAgICAgICAgICAnc3VwcG9ydF9lbWFpbCdcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXZWxjb21lIGVtYWlsIGZvciBuZXcgdXNlcnMnLFxuICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB0ZW1wbGF0ZUZpbGU6ICd3ZWxjb21lLmh0bWwnXG4gICAgICB9XG4gICAgfSxcbiAgICBBY2NvdW50OiB7XG4gICAgICAnQWNjb3VudC1EZWxldGVkJzoge1xuICAgICAgICB0ZW1wbGF0ZU5hbWU6IHtcbiAgICAgICAgICBkZXZlbG9wbWVudDogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItQWNjb3VudC1EZWxldGVkJyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItQWNjb3VudC1EZWxldGVkJyxcbiAgICAgICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BY2NvdW50LURlbGV0ZWQnXG4gICAgICAgIH0sXG4gICAgICAgIHN1YmplY3Q6ICdZb3VyIEFjY291bnQgSGFzIEJlZW4gRGVsZXRlZCcsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICd1c2VyX25hbWUnLFxuICAgICAgICAgICd1c2VyX2VtYWlsJyxcbiAgICAgICAgICAnZGVsZXRlZF9kYXRlJyxcbiAgICAgICAgICAnZGVsZXRlZF90aW1lJyxcbiAgICAgICAgICAnc3VwcG9ydF91cmwnXG4gICAgICAgIF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTm90aWZpY2F0aW9uIHdoZW4gdXNlciBhY2NvdW50IGlzIGRlbGV0ZWQnLFxuICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB0ZW1wbGF0ZUZpbGU6ICdhY2NvdW50LWRlbGV0ZWQuaHRtbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgU3RhZmY6IHtcbiAgICBUYXNrOiB7XG4gICAgICAnVGFzay1Bc3NpZ25lZCc6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVRhc2stQXNzaWdubWVudCcsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVRhc2stQXNzaWdubWVudCcsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItVGFzay1Bc3NpZ25tZW50J1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnVGFzayBBc3NpZ25lZDoge3t0YXNrX3RpdGxlfX0nLFxuICAgICAgICB2YXJpYWJsZXM6IFtcbiAgICAgICAgICAnYXNzaWduZWUnLFxuICAgICAgICAgICdhc3NpZ25lcicsXG4gICAgICAgICAgJ2Fzc2lnbmVyX2luaXRpYWxzJyxcbiAgICAgICAgICAndGFza19pZCcsXG4gICAgICAgICAgJ3Rhc2tfdGl0bGUnLFxuICAgICAgICAgICdwcm9qZWN0X2lkJyxcbiAgICAgICAgICAncHJvamVjdF9uYW1lJyxcbiAgICAgICAgICAncHJpb3JpdHknLFxuICAgICAgICAgICdwcmlvcml0eV9jbGFzcycsXG4gICAgICAgICAgJ3JlcG9ydGVyJyxcbiAgICAgICAgICAncmVwb3J0ZXJfZGVzaWduYXRpb24nLFxuICAgICAgICAgICdkZWFkbGluZScsXG4gICAgICAgICAgJ3Rhc2tfdXJsJyxcbiAgICAgICAgICAnaGVscF9jZW50ZXJfdXJsJyxcbiAgICAgICAgICAnc3VwcG9ydF9lbWFpbCdcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPbiBhc3NpZ25pbmcgYSB0YXNrIHRvIGEgdXNlcicsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ3Rhc2thc3NpZ25lZC5odG1sJ1xuICAgICAgfSxcbiAgICAgICdUYXNrLU92ZXJkdWUtQXNzaWduZWUnOiB7XG4gICAgICAgIHRlbXBsYXRlTmFtZToge1xuICAgICAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1UYXNrT3ZlcmR1ZS1Bc3NpZ25lZScsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVRhc2tPdmVyZHVlLUFzc2lnbmVlJyxcbiAgICAgICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1UYXNrT3ZlcmR1ZS1Bc3NpZ25lZSdcbiAgICAgICAgfSxcbiAgICAgICAgc3ViamVjdDogJ1Rhc2sgT3ZlcmR1ZToge3t0YXNrX3RpdGxlfX0nLFxuICAgICAgICB2YXJpYWJsZXM6IFtcbiAgICAgICAgICAnYXNzaWduZWUnLFxuICAgICAgICAgICd0YXNrX2lkJyxcbiAgICAgICAgICAndGFza190aXRsZScsXG4gICAgICAgICAgJ3Byb2plY3RfbmFtZScsXG4gICAgICAgICAgJ2R1ZV9kYXRlJyxcbiAgICAgICAgICAncHJpb3JpdHknLFxuICAgICAgICAgICdwcmlvcml0eV9jbGFzcycsXG4gICAgICAgICAgJ2JvYXJkX25hbWUnLFxuICAgICAgICAgICdrYW5iYW5fY29sdW1uJyxcbiAgICAgICAgICAndGFza191cmwnLFxuICAgICAgICAgICdzdXBwb3J0X2VtYWlsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ092ZXJkdWUgdGFzayBub3RpZmljYXRpb24gZm9yIHRoZSBhc3NpZ25lZScsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ3Rhc2tvdmVyZHVlLWFzc2lnbmVlLmh0bWwnXG4gICAgICB9LFxuICAgICAgJ1Rhc2stT3ZlcmR1ZS1TdGFrZWhvbGRlcic6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVRhc2tPdmVyZHVlLVN0YWtlaG9sZGVyJyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItVGFza092ZXJkdWUtU3Rha2Vob2xkZXInLFxuICAgICAgICAgIHByb2R1Y3Rpb246ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVRhc2tPdmVyZHVlLVN0YWtlaG9sZGVyJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnVGFzayBPdmVyZHVlOiB7e3Rhc2tfdGl0bGV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdyZWNpcGllbnRfbmFtZScsXG4gICAgICAgICAgJ3N0YWtlaG9sZGVyX3JvbGUnLFxuICAgICAgICAgICd0YXNrX2lkJyxcbiAgICAgICAgICAndGFza190aXRsZScsXG4gICAgICAgICAgJ3Byb2plY3RfbmFtZScsXG4gICAgICAgICAgJ2R1ZV9kYXRlJyxcbiAgICAgICAgICAnYXNzaWduZWUnLFxuICAgICAgICAgICdhc3NpZ25lZV9pbml0aWFscycsXG4gICAgICAgICAgJ3ByaW9yaXR5JyxcbiAgICAgICAgICAncHJpb3JpdHlfY2xhc3MnLFxuICAgICAgICAgICdib2FyZF9uYW1lJyxcbiAgICAgICAgICAna2FuYmFuX2NvbHVtbicsXG4gICAgICAgICAgJ3Rhc2tfdXJsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ092ZXJkdWUgdGFzayBub3RpZmljYXRpb24gZm9yIHN0YWtlaG9sZGVycyAocmVwb3J0ZXJzLCB3YXRjaGVycyknLFxuICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB0ZW1wbGF0ZUZpbGU6ICd0YXNrb3ZlcmR1ZS1zdGFrZWhvbGRlci5odG1sJ1xuICAgICAgfSxcbiAgICAgICdBcHByb3ZhbC1OZWVkZWQnOiB7XG4gICAgICAgIHRlbXBsYXRlTmFtZToge1xuICAgICAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BcHByb3ZhbC1OZWVkZWQnLFxuICAgICAgICAgIHFhOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BcHByb3ZhbC1OZWVkZWQnLFxuICAgICAgICAgIHByb2R1Y3Rpb246ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUFwcHJvdmFsLU5lZWRlZCdcbiAgICAgICAgfSxcbiAgICAgICAgc3ViamVjdDogJ0FwcHJvdmFsIE5lZWRlZDoge3t0YXNrX3RpdGxlfX0nLFxuICAgICAgICB2YXJpYWJsZXM6IFtcbiAgICAgICAgICAnYXBwcm92ZXJfbmFtZScsXG4gICAgICAgICAgJ3Rhc2tfaWQnLFxuICAgICAgICAgICd0YXNrX3RpdGxlJyxcbiAgICAgICAgICAncHJvamVjdF9pZCcsXG4gICAgICAgICAgJ3Byb2plY3RfbmFtZScsXG4gICAgICAgICAgJ3ByaW9yaXR5JyxcbiAgICAgICAgICAnYWlfc3VtbWFyeScsXG4gICAgICAgICAgJ3Rhc2tfdXJsJyxcbiAgICAgICAgICAnaGVscF9jZW50ZXJfdXJsJyxcbiAgICAgICAgICAnc3VwcG9ydF9lbWFpbCdcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOb3RpZmljYXRpb24gd2hlbiBhcHByb3ZhbCBpcyBuZWVkZWQgZm9yIGEgdGFzaycsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ2FwcHJvdmFsbmVlZGVkLmh0bWwnXG4gICAgICB9XG4gICAgfSxcbiAgICBQcm9qZWN0OiB7XG4gICAgICAnTWVtYmVyLUludml0YXRpb24nOiB7XG4gICAgICAgIHRlbXBsYXRlTmFtZToge1xuICAgICAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1Qcm9qZWN0LUludml0YXRpb24nLFxuICAgICAgICAgIHFhOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1Qcm9qZWN0LUludml0YXRpb24nLFxuICAgICAgICAgIHByb2R1Y3Rpb246ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVByb2plY3QtSW52aXRhdGlvbidcbiAgICAgICAgfSxcbiAgICAgICAgc3ViamVjdDogJ3t7aW52aXRlcl9uYW1lfX0gaW52aXRlZCB5b3UgdG8ge3twcm9qZWN0X25hbWV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdyZWNpcGllbnRfbmFtZScsXG4gICAgICAgICAgJ2ludml0ZXJfbmFtZScsXG4gICAgICAgICAgJ2ludml0ZXJfaW5pdGlhbHMnLFxuICAgICAgICAgICdpbnZpdGVyX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICAnb3JnYW5pc2F0aW9uX25hbWUnLFxuICAgICAgICAgICdwcm9qZWN0X2lkJyxcbiAgICAgICAgICAncHJvamVjdF9uYW1lJyxcbiAgICAgICAgICAncHJvamVjdF9kZXNjcmlwdGlvbicsXG4gICAgICAgICAgJ3JvbGUnLFxuICAgICAgICAgICdpbnZpdGVfY29kZScsXG4gICAgICAgICAgJ2ludml0ZV91cmwnXG4gICAgICAgIF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT24gaW52aXRpbmcgYSB1c2VyIHRvIGEgcHJvamVjdCcsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ3Byb2plY3RpbnZpdGUuaHRtbCdcbiAgICAgIH0sXG4gICAgICAnUHJvamVjdC1LaWNrc3RhcnQnOiB7XG4gICAgICAgIHRlbXBsYXRlTmFtZToge1xuICAgICAgICAgIGRldmVsb3BtZW50OiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1Qcm9qZWN0LUtpY2tzdGFydCcsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVByb2plY3QtS2lja3N0YXJ0JyxcbiAgICAgICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1Qcm9qZWN0LUtpY2tzdGFydCdcbiAgICAgICAgfSxcbiAgICAgICAgc3ViamVjdDogJ1dlbGNvbWUgdG8ge3twcm9qZWN0X25hbWV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdjcmVhdG9yX25hbWUnLFxuICAgICAgICAgICdwcm9qZWN0X25hbWUnLFxuICAgICAgICAgICdjcmVhdGVkX2RhdGUnLFxuICAgICAgICAgICdwcm9qZWN0X3VybCcsXG4gICAgICAgICAgJ2hlbHBfdXJsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1dlbGNvbWUgZW1haWwgd2hlbiBhIG5ldyBwcm9qZWN0IGlzIGNyZWF0ZWQnLFxuICAgICAgICBzdGF0dXM6ICdjb21wbGV0ZWQnLFxuICAgICAgICB0ZW1wbGF0ZUZpbGU6ICdwcm9qZWN0LWtpY2tzdGFydC5odG1sJ1xuICAgICAgfVxuICAgIH0sXG4gICAgTWVudGlvbjoge1xuICAgICAgJ1VzZXItTWVudGlvbic6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVVzZXItTWVudGlvbicsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLVVzZXItTWVudGlvbicsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItVXNlci1NZW50aW9uJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnWW91IHdlcmUgbWVudGlvbmVkIGluIHt7dGFza190aXRsZX19JyxcbiAgICAgICAgdmFyaWFibGVzOiBbXG4gICAgICAgICAgJ3JlY2lwaWVudF9uYW1lJyxcbiAgICAgICAgICAnbWVudGlvbmVyX25hbWUnLFxuICAgICAgICAgICdtZW50aW9uZXJfaW5pdGlhbHMnLFxuICAgICAgICAgICdwcm9qZWN0X25hbWUnLFxuICAgICAgICAgICd0YXNrX2lkJyxcbiAgICAgICAgICAndGFza190aXRsZScsXG4gICAgICAgICAgJ2NvbW1lbnRfcHJldmlldycsXG4gICAgICAgICAgJ2NvbW1lbnRfYmVmb3JlX21lbnRpb24nLFxuICAgICAgICAgICdjb21tZW50X2FmdGVyX21lbnRpb24nLFxuICAgICAgICAgICdjb21tZW50X3RpbWUnLFxuICAgICAgICAgICdyZXBseV91cmwnLFxuICAgICAgICAgICd0YXNrX3VybCcsXG4gICAgICAgICAgJ3NldHRpbmdzX3VybCdcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOb3RpZmljYXRpb24gd2hlbiBhIHVzZXIgaXMgbWVudGlvbmVkIGluIGEgY29tbWVudCcsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ21lbnRpb24uaHRtbCdcbiAgICAgIH0sXG4gICAgICAnQUktTWVudGlvbic6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUFJLU1lbnRpb24nLFxuICAgICAgICAgIHFhOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BSS1NZW50aW9uJyxcbiAgICAgICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BSS1NZW50aW9uJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnV09DVUwgQUkgbWVudGlvbmVkIHlvdSBpbiB7e3Rhc2tfdGl0bGV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdyZWNpcGllbnRfbmFtZScsXG4gICAgICAgICAgJ3Byb2plY3RfbmFtZScsXG4gICAgICAgICAgJ3Rhc2tfaWQnLFxuICAgICAgICAgICd0YXNrX3RpdGxlJyxcbiAgICAgICAgICAnYWlfd2VsY29tZV9tZXNzYWdlJyxcbiAgICAgICAgICAndGFza191cmwnLFxuICAgICAgICAgICdzZXR0aW5nc191cmwnXG4gICAgICAgIF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnTm90aWZpY2F0aW9uIHdoZW4gV09DVUwgQUkgbWVudGlvbnMgYSB1c2VyJyxcbiAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgdGVtcGxhdGVGaWxlOiAnbWVudGlvbi1haS5odG1sJ1xuICAgICAgfVxuICAgIH0sXG4gICAgRmVlZGJhY2s6IHtcbiAgICAgICdGZWVkYmFjay1SZWNlaXZlZCc6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUZlZWRiYWNrLVJlY2VpdmVkJyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItRmVlZGJhY2stUmVjZWl2ZWQnLFxuICAgICAgICAgIHByb2R1Y3Rpb246ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUZlZWRiYWNrLVJlY2VpdmVkJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnRmVlZGJhY2sgb24ge3t0YXNrX3RpdGxlfX0nLFxuICAgICAgICB2YXJpYWJsZXM6IFtcbiAgICAgICAgICAncmVjaXBpZW50X25hbWUnLFxuICAgICAgICAgICdzZW5kZXJfbmFtZScsXG4gICAgICAgICAgJ3NlbmRlcl9pbml0aWFscycsXG4gICAgICAgICAgJ3Rhc2tfdGl0bGUnLFxuICAgICAgICAgICdyYXRpbmdfc3RhcnMnLFxuICAgICAgICAgICdmZWVkYmFja19tZXNzYWdlJyxcbiAgICAgICAgICAnZmVlZGJhY2tfdGltZScsXG4gICAgICAgICAgJ3Rhc2tfdXJsJyxcbiAgICAgICAgICAnc2V0dGluZ3NfdXJsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ05vdGlmaWNhdGlvbiB3aGVuIGZlZWRiYWNrIGlzIHJlY2VpdmVkIG9uIGEgdGFzaycsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ2ZlZWRiYWNrLXJlY2VpdmVkLmh0bWwnXG4gICAgICB9LFxuICAgICAgJ0ZlZWRiYWNrLVByb21wdCc6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUZlZWRiYWNrLVByb21wdCcsXG4gICAgICAgICAgcWE6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUZlZWRiYWNrLVByb21wdCcsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItRmVlZGJhY2stUHJvbXB0J1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnU2hhcmUgeW91ciBmZWVkYmFjayBvbiB7e3Rhc2tfdGl0bGV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdyZXBvcnRlcl9uYW1lJyxcbiAgICAgICAgICAndGFza190aXRsZScsXG4gICAgICAgICAgJ2RheXNfc2luY2VfY29tcGxldGlvbicsXG4gICAgICAgICAgJ2RheXNfcGx1cmFsJyxcbiAgICAgICAgICAnY29tcGxldGlvbl9kYXRlJyxcbiAgICAgICAgICAncGFydGljaXBhbnRzJyxcbiAgICAgICAgICAnZmVlZGJhY2tfdXJsJyxcbiAgICAgICAgICAndGFza191cmwnLFxuICAgICAgICAgICdzZXR0aW5nc191cmwnXG4gICAgICAgIF0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVtaW5kZXIgdG8gcHJvdmlkZSBmZWVkYmFjayBvbiBhIGNvbXBsZXRlZCB0YXNrJyxcbiAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgdGVtcGxhdGVGaWxlOiAnZmVlZGJhY2stcHJvbXB0Lmh0bWwnXG4gICAgICB9LFxuICAgICAgJ0FJLUZlZWRiYWNrJzoge1xuICAgICAgICB0ZW1wbGF0ZU5hbWU6IHtcbiAgICAgICAgICBkZXZlbG9wbWVudDogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItQUktRmVlZGJhY2snLFxuICAgICAgICAgIHFhOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1BSS1GZWVkYmFjaycsXG4gICAgICAgICAgcHJvZHVjdGlvbjogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItQUktRmVlZGJhY2snXG4gICAgICAgIH0sXG4gICAgICAgIHN1YmplY3Q6ICdBSSBGZWVkYmFjayBvbiB7e3Rhc2tfdGl0bGV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdyZWNpcGllbnRfbmFtZScsXG4gICAgICAgICAgJ3Rhc2tfdGl0bGUnLFxuICAgICAgICAgICdhaV9mZWVkYmFja19tZXNzYWdlJyxcbiAgICAgICAgICAnaW5zaWdodHMnLFxuICAgICAgICAgICd0YXNrX3VybCcsXG4gICAgICAgICAgJ3NldHRpbmdzX3VybCdcbiAgICAgICAgXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBSS1nZW5lcmF0ZWQgZmVlZGJhY2sgb24gdGFzayBjb21wbGV0aW9uJyxcbiAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgdGVtcGxhdGVGaWxlOiAnZmVlZGJhY2stYWkuaHRtbCdcbiAgICAgIH1cbiAgICB9LFxuICAgICdBSS1JbnNpZ2h0cyc6IHtcbiAgICAgICdCb2FyZC1JbnNpZ2h0cy1SZWFkeSc6IHtcbiAgICAgICAgdGVtcGxhdGVOYW1lOiB7XG4gICAgICAgICAgZGV2ZWxvcG1lbnQ6ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUJvYXJkLUluc2lnaHRzJyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItQm9hcmQtSW5zaWdodHMnLFxuICAgICAgICAgIHByb2R1Y3Rpb246ICdtb2Rlcm4tdjItV29jdWwtQ29sbGFiLUJvYXJkLUluc2lnaHRzJ1xuICAgICAgICB9LFxuICAgICAgICBzdWJqZWN0OiAnTmV3IGluc2lnaHRzIGZvciB7e2JvYXJkX25hbWV9fScsXG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICdvd25lcl9uYW1lJyxcbiAgICAgICAgICAnYm9hcmRfbmFtZScsXG4gICAgICAgICAgJ3Byb2plY3RfbmFtZScsXG4gICAgICAgICAgJ2luc2lnaHRzX3N1bW1hcnknLFxuICAgICAgICAgICdnZW5lcmF0ZWRfZGF0ZScsXG4gICAgICAgICAgJ2dlbmVyYXRlZF90aW1lJyxcbiAgICAgICAgICAnaW5zaWdodHNfdXJsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ05vdGlmaWNhdGlvbiB3aGVuIEFJIGluc2lnaHRzIGFyZSByZWFkeSBmb3IgYSBib2FyZCcsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIHRlbXBsYXRlRmlsZTogJ2JvYXJkLWluc2lnaHRzLXJlYWR5Lmh0bWwnXG4gICAgICB9XG4gICAgfSxcbiAgICAnRGFpbHktRGlnZXN0Jzoge1xuICAgICAgJ0RhaWx5LVRhc2stRGlnZXN0Jzoge1xuICAgICAgICB0ZW1wbGF0ZU5hbWU6IHtcbiAgICAgICAgICBkZXZlbG9wbWVudDogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItRGFpbHktRGlnZXN0JyxcbiAgICAgICAgICBxYTogJ21vZGVybi12Mi1Xb2N1bC1Db2xsYWItRGFpbHktRGlnZXN0JyxcbiAgICAgICAgICBwcm9kdWN0aW9uOiAnbW9kZXJuLXYyLVdvY3VsLUNvbGxhYi1EYWlseS1EaWdlc3QnXG4gICAgICAgIH0sXG4gICAgICAgIHN1YmplY3Q6ICdZb3VyIERhaWx5IFRhc2sgRGlnZXN0IC0ge3tkYXRlX2Zvcm1hdHRlZH19JyxcbiAgICAgICAgdmFyaWFibGVzOiBbXG4gICAgICAgICAgJ3VzZXJfbmFtZScsXG4gICAgICAgICAgJ2RhdGVfZm9ybWF0dGVkJyxcbiAgICAgICAgICAnb3ZlcmR1ZV9jb3VudCcsXG4gICAgICAgICAgJ3RvZGF5X2NvdW50JyxcbiAgICAgICAgICAndXBjb21pbmdfY291bnQnLFxuICAgICAgICAgICdhc3NpZ25lZV9jb3VudCcsXG4gICAgICAgICAgJ2Fzc2lnbmVlX3Rhc2tzJyxcbiAgICAgICAgICAncmVwb3J0ZXJfY291bnQnLFxuICAgICAgICAgICdyZXBvcnRlcl90YXNrcycsXG4gICAgICAgICAgJ2FwcHJvdmVyX2NvdW50JyxcbiAgICAgICAgICAnYXBwcm92ZXJfdGFza3MnLFxuICAgICAgICAgICdkYXNoYm9hcmRfdXJsJyxcbiAgICAgICAgICAnc2V0dGluZ3NfdXJsJyxcbiAgICAgICAgICAndW5zdWJzY3JpYmVfdXJsJ1xuICAgICAgICBdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0RhaWx5IGRpZ2VzdCBvZiB0YXNrcyByZXF1aXJpbmcgYXR0ZW50aW9uJyxcbiAgICAgICAgc3RhdHVzOiAnY29tcGxldGVkJyxcbiAgICAgICAgdGVtcGxhdGVGaWxlOiAnZGFpbHlkaWdlc3QuaHRtbCdcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRU1BSUxfVEVNUExBVEVTIl19
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Email Template Types
3
+ */
4
+ export interface EmailTemplateConfig {
5
+ templateName: {
6
+ development: string;
7
+ qa: string;
8
+ production: string;
9
+ };
10
+ subject: string;
11
+ variables: string[];
12
+ description?: string;
13
+ status?: string;
14
+ templateFile?: string;
15
+ }
16
+ export interface EmailTemplatesConfig {
17
+ 'Default-Template': EmailTemplateConfig;
18
+ Common: {
19
+ OTP: Record<string, EmailTemplateConfig>;
20
+ Welcome: Record<string, EmailTemplateConfig>;
21
+ Account: Record<string, EmailTemplateConfig>;
22
+ };
23
+ Staff: {
24
+ Task: Record<string, EmailTemplateConfig>;
25
+ Project: Record<string, EmailTemplateConfig>;
26
+ Mention: Record<string, EmailTemplateConfig>;
27
+ Feedback: Record<string, EmailTemplateConfig>;
28
+ 'AI-Insights': Record<string, EmailTemplateConfig>;
29
+ 'Daily-Digest': Record<string, EmailTemplateConfig>;
30
+ };
31
+ }
32
+ export interface EmailValidationResult {
33
+ valid: boolean;
34
+ errors: string[];
35
+ }
36
+ export type EmailCategory = 'Common' | 'Staff';
37
+ export type CommonSubCategory = 'OTP' | 'Welcome' | 'Account';
38
+ export type StaffSubCategory = 'Task' | 'Project' | 'Mention' | 'Feedback' | 'AI-Insights' | 'Daily-Digest';
39
+ export type EmailSubCategory = CommonSubCategory | StaffSubCategory;
40
+ export type OTPEventType = 'Email-OTP';
41
+ export type WelcomeEventType = 'User-Welcome';
42
+ export type AccountEventType = 'Account-Deleted';
43
+ export type TaskEventType = 'Task-Assigned' | 'Task-Overdue-Assignee' | 'Task-Overdue-Stakeholder' | 'Approval-Needed';
44
+ export type ProjectEventType = 'Member-Invitation' | 'Project-Kickstart';
45
+ export type MentionEventType = 'User-Mention' | 'AI-Mention';
46
+ export type FeedbackEventType = 'Feedback-Received' | 'Feedback-Prompt' | 'AI-Feedback';
47
+ export type AIInsightsEventType = 'Board-Insights-Ready';
48
+ export type DailyDigestEventType = 'Daily-Task-Digest';
49
+ export type EmailEventType = OTPEventType | WelcomeEventType | AccountEventType | TaskEventType | ProjectEventType | MentionEventType | FeedbackEventType | AIInsightsEventType | DailyDigestEventType;
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Email Template Types
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbWFpbCBUZW1wbGF0ZSBUeXBlc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZUNvbmZpZyB7XG4gIHRlbXBsYXRlTmFtZToge1xuICAgIGRldmVsb3BtZW50OiBzdHJpbmdcbiAgICBxYTogc3RyaW5nXG4gICAgcHJvZHVjdGlvbjogc3RyaW5nXG4gIH1cbiAgc3ViamVjdDogc3RyaW5nXG4gIHZhcmlhYmxlczogc3RyaW5nW11cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgc3RhdHVzPzogc3RyaW5nXG4gIHRlbXBsYXRlRmlsZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVzQ29uZmlnIHtcbiAgJ0RlZmF1bHQtVGVtcGxhdGUnOiBFbWFpbFRlbXBsYXRlQ29uZmlnXG4gIENvbW1vbjoge1xuICAgIE9UUDogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz5cbiAgICBXZWxjb21lOiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlQ29uZmlnPlxuICAgIEFjY291bnQ6IFJlY29yZDxzdHJpbmcsIEVtYWlsVGVtcGxhdGVDb25maWc+XG4gIH1cbiAgU3RhZmY6IHtcbiAgICBUYXNrOiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlQ29uZmlnPlxuICAgIFByb2plY3Q6IFJlY29yZDxzdHJpbmcsIEVtYWlsVGVtcGxhdGVDb25maWc+XG4gICAgTWVudGlvbjogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz5cbiAgICBGZWVkYmFjazogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz5cbiAgICAnQUktSW5zaWdodHMnOiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlQ29uZmlnPlxuICAgICdEYWlseS1EaWdlc3QnOiBSZWNvcmQ8c3RyaW5nLCBFbWFpbFRlbXBsYXRlQ29uZmlnPlxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxWYWxpZGF0aW9uUmVzdWx0IHtcbiAgdmFsaWQ6IGJvb2xlYW5cbiAgZXJyb3JzOiBzdHJpbmdbXVxufVxuXG4vLyBUeXBlIGFsaWFzZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSBFbWFpbENhdGVnb3J5ID0gJ0NvbW1vbicgfCAnU3RhZmYnXG5leHBvcnQgdHlwZSBDb21tb25TdWJDYXRlZ29yeSA9ICdPVFAnIHwgJ1dlbGNvbWUnIHwgJ0FjY291bnQnXG5leHBvcnQgdHlwZSBTdGFmZlN1YkNhdGVnb3J5ID0gJ1Rhc2snIHwgJ1Byb2plY3QnIHwgJ01lbnRpb24nIHwgJ0ZlZWRiYWNrJyB8ICdBSS1JbnNpZ2h0cycgfCAnRGFpbHktRGlnZXN0J1xuZXhwb3J0IHR5cGUgRW1haWxTdWJDYXRlZ29yeSA9IENvbW1vblN1YkNhdGVnb3J5IHwgU3RhZmZTdWJDYXRlZ29yeVxuXG4vLyBDb21tb24gZXZlbnQgdHlwZXNcbmV4cG9ydCB0eXBlIE9UUEV2ZW50VHlwZSA9ICdFbWFpbC1PVFAnXG5leHBvcnQgdHlwZSBXZWxjb21lRXZlbnRUeXBlID0gJ1VzZXItV2VsY29tZSdcbmV4cG9ydCB0eXBlIEFjY291bnRFdmVudFR5cGUgPSAnQWNjb3VudC1EZWxldGVkJ1xuXG4vLyBTdGFmZiBldmVudCB0eXBlc1xuZXhwb3J0IHR5cGUgVGFza0V2ZW50VHlwZSA9ICdUYXNrLUFzc2lnbmVkJyB8ICdUYXNrLU92ZXJkdWUtQXNzaWduZWUnIHwgJ1Rhc2stT3ZlcmR1ZS1TdGFrZWhvbGRlcicgfCAnQXBwcm92YWwtTmVlZGVkJ1xuZXhwb3J0IHR5cGUgUHJvamVjdEV2ZW50VHlwZSA9ICdNZW1iZXItSW52aXRhdGlvbicgfCAnUHJvamVjdC1LaWNrc3RhcnQnXG5leHBvcnQgdHlwZSBNZW50aW9uRXZlbnRUeXBlID0gJ1VzZXItTWVudGlvbicgfCAnQUktTWVudGlvbidcbmV4cG9ydCB0eXBlIEZlZWRiYWNrRXZlbnRUeXBlID0gJ0ZlZWRiYWNrLVJlY2VpdmVkJyB8ICdGZWVkYmFjay1Qcm9tcHQnIHwgJ0FJLUZlZWRiYWNrJ1xuZXhwb3J0IHR5cGUgQUlJbnNpZ2h0c0V2ZW50VHlwZSA9ICdCb2FyZC1JbnNpZ2h0cy1SZWFkeSdcbmV4cG9ydCB0eXBlIERhaWx5RGlnZXN0RXZlbnRUeXBlID0gJ0RhaWx5LVRhc2stRGlnZXN0J1xuXG5leHBvcnQgdHlwZSBFbWFpbEV2ZW50VHlwZSA9XG4gIHwgT1RQRXZlbnRUeXBlXG4gIHwgV2VsY29tZUV2ZW50VHlwZVxuICB8IEFjY291bnRFdmVudFR5cGVcbiAgfCBUYXNrRXZlbnRUeXBlXG4gIHwgUHJvamVjdEV2ZW50VHlwZVxuICB8IE1lbnRpb25FdmVudFR5cGVcbiAgfCBGZWVkYmFja0V2ZW50VHlwZVxuICB8IEFJSW5zaWdodHNFdmVudFR5cGVcbiAgfCBEYWlseURpZ2VzdEV2ZW50VHlwZSJdfQ==
@@ -0,0 +1,25 @@
1
+ import type { EmailTemplateConfig, EmailValidationResult } from './types';
2
+ /**
3
+ * Get email template configuration for a given category, subcategory, and event type
4
+ */
5
+ export declare function getEmailTemplate(category: string, subCategory: string, eventType: string): EmailTemplateConfig | null;
6
+ /**
7
+ * Validate email queue parameters against template configuration
8
+ */
9
+ export declare function validateEmailParams(category: string, subCategory: string, eventType: string, data: Record<string, string>): EmailValidationResult;
10
+ /**
11
+ * Get all valid event types for a category and subcategory
12
+ */
13
+ export declare function getValidEventTypes(category: string, subCategory: string): string[];
14
+ /**
15
+ * Get all valid subcategories for a category
16
+ */
17
+ export declare function getValidSubCategories(category: string): string[];
18
+ /**
19
+ * Get the SES template name for an environment
20
+ */
21
+ export declare function getTemplateName(category: string, subCategory: string, eventType: string, environment: 'development' | 'qa' | 'production'): string | null;
22
+ /**
23
+ * Get the subject line for an email template
24
+ */
25
+ export declare function getSubject(category: string, subCategory: string, eventType: string): string | null;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEmailTemplate = getEmailTemplate;
4
+ exports.validateEmailParams = validateEmailParams;
5
+ exports.getValidEventTypes = getValidEventTypes;
6
+ exports.getValidSubCategories = getValidSubCategories;
7
+ exports.getTemplateName = getTemplateName;
8
+ exports.getSubject = getSubject;
9
+ const templates_1 = require("./templates");
10
+ /**
11
+ * Get email template configuration for a given category, subcategory, and event type
12
+ */
13
+ function getEmailTemplate(category, subCategory, eventType) {
14
+ const templates = templates_1.EMAIL_TEMPLATES;
15
+ if (category === 'Default-Template') {
16
+ return templates_1.EMAIL_TEMPLATES['Default-Template'];
17
+ }
18
+ const categoryConfig = templates[category];
19
+ if (!categoryConfig) {
20
+ return null;
21
+ }
22
+ const subCategoryConfig = categoryConfig[subCategory];
23
+ if (!subCategoryConfig) {
24
+ return null;
25
+ }
26
+ return subCategoryConfig[eventType] || null;
27
+ }
28
+ /**
29
+ * Validate email queue parameters against template configuration
30
+ */
31
+ function validateEmailParams(category, subCategory, eventType, data) {
32
+ const errors = [];
33
+ // Get template configuration
34
+ const template = getEmailTemplate(category, subCategory, eventType);
35
+ if (!template) {
36
+ errors.push(`Invalid email template: category="${category}", subCategory="${subCategory}", eventType="${eventType}"`);
37
+ return { valid: false, errors };
38
+ }
39
+ // Check for missing required variables
40
+ const missingVariables = template.variables.filter((variable) => !(variable in data));
41
+ if (missingVariables.length > 0) {
42
+ errors.push(`Missing required variables for ${eventType}: ${missingVariables.join(', ')}`);
43
+ }
44
+ return {
45
+ valid: errors.length === 0,
46
+ errors
47
+ };
48
+ }
49
+ /**
50
+ * Get all valid event types for a category and subcategory
51
+ */
52
+ function getValidEventTypes(category, subCategory) {
53
+ const templates = templates_1.EMAIL_TEMPLATES;
54
+ if (category === 'Default-Template') {
55
+ return ['Default-Template'];
56
+ }
57
+ const categoryConfig = templates[category];
58
+ if (!categoryConfig) {
59
+ return [];
60
+ }
61
+ const subCategoryConfig = categoryConfig[subCategory];
62
+ if (!subCategoryConfig) {
63
+ return [];
64
+ }
65
+ return Object.keys(subCategoryConfig);
66
+ }
67
+ /**
68
+ * Get all valid subcategories for a category
69
+ */
70
+ function getValidSubCategories(category) {
71
+ const templates = templates_1.EMAIL_TEMPLATES;
72
+ if (category === 'Default-Template') {
73
+ return [];
74
+ }
75
+ const categoryConfig = templates[category];
76
+ if (!categoryConfig) {
77
+ return [];
78
+ }
79
+ return Object.keys(categoryConfig);
80
+ }
81
+ /**
82
+ * Get the SES template name for an environment
83
+ */
84
+ function getTemplateName(category, subCategory, eventType, environment) {
85
+ const template = getEmailTemplate(category, subCategory, eventType);
86
+ if (!template) {
87
+ return null;
88
+ }
89
+ return template.templateName[environment];
90
+ }
91
+ /**
92
+ * Get the subject line for an email template
93
+ */
94
+ function getSubject(category, subCategory, eventType) {
95
+ const template = getEmailTemplate(category, subCategory, eventType);
96
+ if (!template) {
97
+ return null;
98
+ }
99
+ return template.subject;
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92YWxpZGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsNENBd0JDO0FBS0Qsa0RBaUNDO0FBS0QsZ0RBdUJDO0FBS0Qsc0RBZUM7QUFLRCwwQ0FXQztBQUtELGdDQVVDO0FBbEpELDJDQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUM5QixRQUFnQixFQUNoQixXQUFtQixFQUNuQixTQUFpQjtJQUVqQixNQUFNLFNBQVMsR0FBRywyQkFBcUQsQ0FBQTtJQUV2RSxJQUFJLFFBQVEsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sMkJBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUU1QixDQUFBO0lBQ2IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8saUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFBO0FBQzdDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxRQUFnQixFQUNoQixXQUFtQixFQUNuQixTQUFpQixFQUNqQixJQUE0QjtJQUU1QixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUE7SUFFM0IsNkJBQTZCO0lBQzdCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxDQUFDLElBQUksQ0FDVCxxQ0FBcUMsUUFBUSxtQkFBbUIsV0FBVyxpQkFBaUIsU0FBUyxHQUFHLENBQ3pHLENBQUE7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQ2hELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUNsQyxDQUFBO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FDVCxrQ0FBa0MsU0FBUyxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUM5RSxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzFCLE1BQU07S0FDUCxDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQ2hDLFFBQWdCLEVBQ2hCLFdBQW1CO0lBRW5CLE1BQU0sU0FBUyxHQUFHLDJCQUFxRCxDQUFBO0lBRXZFLElBQUksUUFBUSxLQUFLLGtCQUFrQixFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBRTVCLENBQUE7SUFDYixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDckQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7QUFDdkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsTUFBTSxTQUFTLEdBQUcsMkJBQXFELENBQUE7SUFFdkUsSUFBSSxRQUFRLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUNwQyxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUU1QixDQUFBO0lBQ2IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNwQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLFFBQWdCLEVBQ2hCLFdBQW1CLEVBQ25CLFNBQWlCLEVBQ2pCLFdBQWdEO0lBRWhELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDbkUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0FBQzNDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUNuRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUE7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW1haWxUZW1wbGF0ZUNvbmZpZywgRW1haWxWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IEVNQUlMX1RFTVBMQVRFUyB9IGZyb20gJy4vdGVtcGxhdGVzJ1xuXG4vKipcbiAqIEdldCBlbWFpbCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGNhdGVnb3J5LCBzdWJjYXRlZ29yeSwgYW5kIGV2ZW50IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYWlsVGVtcGxhdGUoXG4gIGNhdGVnb3J5OiBzdHJpbmcsXG4gIHN1YkNhdGVnb3J5OiBzdHJpbmcsXG4gIGV2ZW50VHlwZTogc3RyaW5nXG4pOiBFbWFpbFRlbXBsYXRlQ29uZmlnIHwgbnVsbCB7XG4gIGNvbnN0IHRlbXBsYXRlcyA9IEVNQUlMX1RFTVBMQVRFUyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgaWYgKGNhdGVnb3J5ID09PSAnRGVmYXVsdC1UZW1wbGF0ZScpIHtcbiAgICByZXR1cm4gRU1BSUxfVEVNUExBVEVTWydEZWZhdWx0LVRlbXBsYXRlJ11cbiAgfVxuXG4gIGNvbnN0IGNhdGVnb3J5Q29uZmlnID0gdGVtcGxhdGVzW2NhdGVnb3J5XSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz4+XG4gICAgfCB1bmRlZmluZWRcbiAgaWYgKCFjYXRlZ29yeUNvbmZpZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBzdWJDYXRlZ29yeUNvbmZpZyA9IGNhdGVnb3J5Q29uZmlnW3N1YkNhdGVnb3J5XVxuICBpZiAoIXN1YkNhdGVnb3J5Q29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiBzdWJDYXRlZ29yeUNvbmZpZ1tldmVudFR5cGVdIHx8IG51bGxcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBlbWFpbCBxdWV1ZSBwYXJhbWV0ZXJzIGFnYWluc3QgdGVtcGxhdGUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFbWFpbFBhcmFtcyhcbiAgY2F0ZWdvcnk6IHN0cmluZyxcbiAgc3ViQ2F0ZWdvcnk6IHN0cmluZyxcbiAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbik6IEVtYWlsVmFsaWRhdGlvblJlc3VsdCB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXVxuXG4gIC8vIEdldCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHRlbXBsYXRlID0gZ2V0RW1haWxUZW1wbGF0ZShjYXRlZ29yeSwgc3ViQ2F0ZWdvcnksIGV2ZW50VHlwZSlcblxuICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgSW52YWxpZCBlbWFpbCB0ZW1wbGF0ZTogY2F0ZWdvcnk9XCIke2NhdGVnb3J5fVwiLCBzdWJDYXRlZ29yeT1cIiR7c3ViQ2F0ZWdvcnl9XCIsIGV2ZW50VHlwZT1cIiR7ZXZlbnRUeXBlfVwiYFxuICAgIClcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9ycyB9XG4gIH1cblxuICAvLyBDaGVjayBmb3IgbWlzc2luZyByZXF1aXJlZCB2YXJpYWJsZXNcbiAgY29uc3QgbWlzc2luZ1ZhcmlhYmxlcyA9IHRlbXBsYXRlLnZhcmlhYmxlcy5maWx0ZXIoXG4gICAgKHZhcmlhYmxlKSA9PiAhKHZhcmlhYmxlIGluIGRhdGEpXG4gIClcblxuICBpZiAobWlzc2luZ1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBgTWlzc2luZyByZXF1aXJlZCB2YXJpYWJsZXMgZm9yICR7ZXZlbnRUeXBlfTogJHttaXNzaW5nVmFyaWFibGVzLmpvaW4oJywgJyl9YFxuICAgIClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgZXJyb3JzXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgYWxsIHZhbGlkIGV2ZW50IHR5cGVzIGZvciBhIGNhdGVnb3J5IGFuZCBzdWJjYXRlZ29yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFdmVudFR5cGVzKFxuICBjYXRlZ29yeTogc3RyaW5nLFxuICBzdWJDYXRlZ29yeTogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRlbXBsYXRlcyA9IEVNQUlMX1RFTVBMQVRFUyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgaWYgKGNhdGVnb3J5ID09PSAnRGVmYXVsdC1UZW1wbGF0ZScpIHtcbiAgICByZXR1cm4gWydEZWZhdWx0LVRlbXBsYXRlJ11cbiAgfVxuXG4gIGNvbnN0IGNhdGVnb3J5Q29uZmlnID0gdGVtcGxhdGVzW2NhdGVnb3J5XSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz4+XG4gICAgfCB1bmRlZmluZWRcbiAgaWYgKCFjYXRlZ29yeUNvbmZpZykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgY29uc3Qgc3ViQ2F0ZWdvcnlDb25maWcgPSBjYXRlZ29yeUNvbmZpZ1tzdWJDYXRlZ29yeV1cbiAgaWYgKCFzdWJDYXRlZ29yeUNvbmZpZykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN1YkNhdGVnb3J5Q29uZmlnKVxufVxuXG4vKipcbiAqIEdldCBhbGwgdmFsaWQgc3ViY2F0ZWdvcmllcyBmb3IgYSBjYXRlZ29yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRTdWJDYXRlZ29yaWVzKGNhdGVnb3J5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRlbXBsYXRlcyA9IEVNQUlMX1RFTVBMQVRFUyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgaWYgKGNhdGVnb3J5ID09PSAnRGVmYXVsdC1UZW1wbGF0ZScpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIGNvbnN0IGNhdGVnb3J5Q29uZmlnID0gdGVtcGxhdGVzW2NhdGVnb3J5XSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUNvbmZpZz4+XG4gICAgfCB1bmRlZmluZWRcbiAgaWYgKCFjYXRlZ29yeUNvbmZpZykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNhdGVnb3J5Q29uZmlnKVxufVxuXG4vKipcbiAqIEdldCB0aGUgU0VTIHRlbXBsYXRlIG5hbWUgZm9yIGFuIGVudmlyb25tZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZW1wbGF0ZU5hbWUoXG4gIGNhdGVnb3J5OiBzdHJpbmcsXG4gIHN1YkNhdGVnb3J5OiBzdHJpbmcsXG4gIGV2ZW50VHlwZTogc3RyaW5nLFxuICBlbnZpcm9ubWVudDogJ2RldmVsb3BtZW50JyB8ICdxYScgfCAncHJvZHVjdGlvbidcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGdldEVtYWlsVGVtcGxhdGUoY2F0ZWdvcnksIHN1YkNhdGVnb3J5LCBldmVudFR5cGUpXG4gIGlmICghdGVtcGxhdGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHJldHVybiB0ZW1wbGF0ZS50ZW1wbGF0ZU5hbWVbZW52aXJvbm1lbnRdXG59XG5cbi8qKlxuICogR2V0IHRoZSBzdWJqZWN0IGxpbmUgZm9yIGFuIGVtYWlsIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWJqZWN0KFxuICBjYXRlZ29yeTogc3RyaW5nLFxuICBzdWJDYXRlZ29yeTogc3RyaW5nLFxuICBldmVudFR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHRlbXBsYXRlID0gZ2V0RW1haWxUZW1wbGF0ZShjYXRlZ29yeSwgc3ViQ2F0ZWdvcnksIGV2ZW50VHlwZSlcbiAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIHRlbXBsYXRlLnN1YmplY3Rcbn0iXX0=
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@livetronics/wocul-email-config",
3
+ "version": "1.0.1",
4
+ "description": "Email configuration utilities for Wocul services",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public",
9
+ "registry": "https://registry.npmjs.org/"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/livetronics/wocul-email-config.git"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.0.0"
24
+ }
25
+ }