@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 +36 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +36 -0
- package/dist/templates.d.ts +3 -0
- package/dist/templates.js +386 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.js +6 -0
- package/dist/validation.d.ts +25 -0
- package/dist/validation.js +101 -0
- package/package.json +25 -0
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
|
package/dist/index.d.ts
ADDED
|
@@ -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,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
|
package/dist/types.d.ts
ADDED
|
@@ -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
|
+
}
|