@heliyos/heliyos-api-core 1.0.58 → 1.0.59
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/dist/email/forgot-password.html +0 -1
- package/dist/email/inviting-existing-user.html +0 -1
- package/dist/email/inviting-new-user.html +0 -1
- package/dist/email/notification-daily-summary.html +151 -90
- package/dist/email/notification-immediate.html +49 -38
- package/dist/email/password-reset-success.html +0 -1
- package/dist/email/signup-step-1.html +1 -2
- package/dist/email/signup-step-2.html +0 -1
- package/dist/resend.d.ts +4 -1
- package/dist/resend.js +60 -8
- package/package.json +1 -1
- package/src/email/forgot-password.html +0 -1
- package/src/email/inviting-existing-user.html +0 -1
- package/src/email/inviting-new-user.html +0 -1
- package/src/email/notification-daily-summary.html +151 -90
- package/src/email/notification-immediate.html +49 -38
- package/src/email/password-reset-success.html +0 -1
- package/src/email/signup-step-1.html +1 -2
- package/src/email/signup-step-2.html +0 -1
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -61,93 +60,98 @@
|
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
.section {
|
|
64
|
-
margin:
|
|
65
|
-
padding:
|
|
66
|
-
background-color:
|
|
67
|
-
border-radius:
|
|
68
|
-
border-left:
|
|
63
|
+
margin: 20px 0;
|
|
64
|
+
padding: 0;
|
|
65
|
+
background-color: transparent;
|
|
66
|
+
border-radius: 0;
|
|
67
|
+
border-left: none;
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
.section-header {
|
|
72
71
|
display: flex;
|
|
73
72
|
justify-content: space-between;
|
|
74
73
|
align-items: center;
|
|
75
|
-
margin-bottom:
|
|
74
|
+
margin-bottom: 12px;
|
|
75
|
+
padding-bottom: 8px;
|
|
76
|
+
border-bottom: 1px solid #e5e7eb;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
.section-title {
|
|
79
|
-
font-size:
|
|
80
|
+
font-size: 16px;
|
|
80
81
|
font-weight: bold;
|
|
81
|
-
color: #
|
|
82
|
+
color: #111827;
|
|
82
83
|
margin: 0;
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
.section-count {
|
|
86
|
-
background-color: #
|
|
87
|
-
color: #
|
|
88
|
-
padding:
|
|
89
|
-
border-radius:
|
|
90
|
-
font-size:
|
|
87
|
+
background-color: #f3f0ff;
|
|
88
|
+
color: #7c3aed;
|
|
89
|
+
padding: 2px 8px;
|
|
90
|
+
border-radius: 4px;
|
|
91
|
+
font-size: 11px;
|
|
91
92
|
font-weight: bold;
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
.section-content {
|
|
95
|
-
color: #
|
|
96
|
-
line-height: 1.8;
|
|
96
|
+
color: #374151;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
.item {
|
|
100
|
-
margin:
|
|
101
|
-
padding: 12px;
|
|
102
|
-
background-color:
|
|
103
|
-
border-radius:
|
|
104
|
-
border:
|
|
100
|
+
margin: 0;
|
|
101
|
+
padding: 12px 0;
|
|
102
|
+
background-color: transparent;
|
|
103
|
+
border-radius: 0;
|
|
104
|
+
border: none;
|
|
105
|
+
border-bottom: 1px solid #f3f4f6;
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
.item-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
.item:last-child {
|
|
109
|
+
border-bottom: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.item-title {
|
|
113
|
+
font-weight: 600;
|
|
114
|
+
color: #111827;
|
|
110
115
|
font-size: 14px;
|
|
111
|
-
|
|
116
|
+
margin-bottom: 2px;
|
|
112
117
|
}
|
|
113
118
|
|
|
114
|
-
.item-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
border-radius: 6px;
|
|
118
|
-
padding: 10px;
|
|
119
|
+
.item-meta {
|
|
120
|
+
font-size: 12px;
|
|
121
|
+
color: #6b7280;
|
|
119
122
|
}
|
|
120
123
|
|
|
121
|
-
.
|
|
122
|
-
|
|
123
|
-
color: #
|
|
124
|
-
|
|
124
|
+
.item-details {
|
|
125
|
+
margin-top: 8px;
|
|
126
|
+
background-color: #f9fafb;
|
|
127
|
+
border-radius: 6px;
|
|
128
|
+
padding: 8px 12px;
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
.detail-
|
|
128
|
-
|
|
131
|
+
.detail-table {
|
|
132
|
+
width: 100%;
|
|
133
|
+
border-collapse: collapse;
|
|
129
134
|
}
|
|
130
135
|
|
|
131
|
-
.
|
|
132
|
-
|
|
136
|
+
.detail-cell {
|
|
137
|
+
padding-right: 12px;
|
|
138
|
+
vertical-align: top;
|
|
133
139
|
}
|
|
134
140
|
|
|
135
|
-
.
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
.detail-label {
|
|
142
|
+
font-size: 10px;
|
|
143
|
+
color: #6b7280;
|
|
144
|
+
text-transform: uppercase;
|
|
138
145
|
font-weight: bold;
|
|
139
|
-
font-size: 13px;
|
|
140
146
|
}
|
|
141
147
|
|
|
142
|
-
.
|
|
143
|
-
font-
|
|
144
|
-
color: #
|
|
145
|
-
margin-bottom: 4px;
|
|
148
|
+
.detail-value {
|
|
149
|
+
font-size: 12px;
|
|
150
|
+
color: #374151;
|
|
146
151
|
}
|
|
147
152
|
|
|
148
|
-
.item-
|
|
149
|
-
|
|
150
|
-
color: #5c5545;
|
|
153
|
+
.item-link {
|
|
154
|
+
margin-top: 10px;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
.org-summary-box {
|
|
@@ -226,7 +230,7 @@
|
|
|
226
230
|
</div>
|
|
227
231
|
<div class="content">
|
|
228
232
|
<div class="greeting">
|
|
229
|
-
Hello,<br>
|
|
233
|
+
Hello {{first_name}},<br>
|
|
230
234
|
Here's your daily summary of activities in your Heliyos workspace.
|
|
231
235
|
</div>
|
|
232
236
|
|
|
@@ -246,21 +250,36 @@
|
|
|
246
250
|
<div class="section-content">
|
|
247
251
|
{{#each tasks}}
|
|
248
252
|
<div class="item">
|
|
249
|
-
<
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
253
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
254
|
+
<tr>
|
|
255
|
+
<td>
|
|
256
|
+
<div class="item-title">{{this.title}}</div>
|
|
257
|
+
<div class="item-meta">
|
|
258
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.type}}</span> • {{this.actor}}
|
|
259
|
+
</div>
|
|
260
|
+
</td>
|
|
261
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
262
|
+
{{this.time}}
|
|
263
|
+
</td>
|
|
264
|
+
</tr>
|
|
265
|
+
</table>
|
|
254
266
|
{{#if this.details}}
|
|
255
267
|
<div class="item-details">
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
268
|
+
<table class="detail-table">
|
|
269
|
+
<tr>
|
|
270
|
+
{{#each this.details}}
|
|
271
|
+
<td class="detail-cell">
|
|
272
|
+
<div class="detail-label">{{this.label}}</div>
|
|
273
|
+
<div class="detail-value">{{this.value}}</div>
|
|
274
|
+
</td>
|
|
275
|
+
{{/each}}
|
|
276
|
+
</tr>
|
|
277
|
+
</table>
|
|
259
278
|
</div>
|
|
260
279
|
{{/if}}
|
|
261
280
|
{{#if this.view_url}}
|
|
262
|
-
<div
|
|
263
|
-
<a href="{{this.view_url}}">View
|
|
281
|
+
<div style="margin-top: 6px;">
|
|
282
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
264
283
|
</div>
|
|
265
284
|
{{/if}}
|
|
266
285
|
</div>
|
|
@@ -281,21 +300,36 @@
|
|
|
281
300
|
<div class="section-content">
|
|
282
301
|
{{#each deals}}
|
|
283
302
|
<div class="item">
|
|
284
|
-
<
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
303
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
304
|
+
<tr>
|
|
305
|
+
<td>
|
|
306
|
+
<div class="item-title">{{this.title}}</div>
|
|
307
|
+
<div class="item-meta">
|
|
308
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.type}}</span> • {{this.actor}}
|
|
309
|
+
</div>
|
|
310
|
+
</td>
|
|
311
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
312
|
+
{{this.time}}
|
|
313
|
+
</td>
|
|
314
|
+
</tr>
|
|
315
|
+
</table>
|
|
289
316
|
{{#if this.details}}
|
|
290
317
|
<div class="item-details">
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
318
|
+
<table class="detail-table">
|
|
319
|
+
<tr>
|
|
320
|
+
{{#each this.details}}
|
|
321
|
+
<td class="detail-cell">
|
|
322
|
+
<div class="detail-label">{{this.label}}</div>
|
|
323
|
+
<div class="detail-value">{{this.value}}</div>
|
|
324
|
+
</td>
|
|
325
|
+
{{/each}}
|
|
326
|
+
</tr>
|
|
327
|
+
</table>
|
|
294
328
|
</div>
|
|
295
329
|
{{/if}}
|
|
296
330
|
{{#if this.view_url}}
|
|
297
|
-
<div
|
|
298
|
-
<a href="{{this.view_url}}">View
|
|
331
|
+
<div style="margin-top: 6px;">
|
|
332
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
299
333
|
</div>
|
|
300
334
|
{{/if}}
|
|
301
335
|
</div>
|
|
@@ -316,21 +350,36 @@
|
|
|
316
350
|
<div class="section-content">
|
|
317
351
|
{{#each approvals}}
|
|
318
352
|
<div class="item">
|
|
319
|
-
<
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
353
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
354
|
+
<tr>
|
|
355
|
+
<td>
|
|
356
|
+
<div class="item-title">{{this.title}}</div>
|
|
357
|
+
<div class="item-meta">
|
|
358
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.status}}</span> • {{this.actor}}
|
|
359
|
+
</div>
|
|
360
|
+
</td>
|
|
361
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
362
|
+
{{this.time}}
|
|
363
|
+
</td>
|
|
364
|
+
</tr>
|
|
365
|
+
</table>
|
|
324
366
|
{{#if this.details}}
|
|
325
367
|
<div class="item-details">
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
368
|
+
<table class="detail-table">
|
|
369
|
+
<tr>
|
|
370
|
+
{{#each this.details}}
|
|
371
|
+
<td class="detail-cell">
|
|
372
|
+
<div class="detail-label">{{this.label}}</div>
|
|
373
|
+
<div class="detail-value">{{this.value}}</div>
|
|
374
|
+
</td>
|
|
375
|
+
{{/each}}
|
|
376
|
+
</tr>
|
|
377
|
+
</table>
|
|
329
378
|
</div>
|
|
330
379
|
{{/if}}
|
|
331
380
|
{{#if this.view_url}}
|
|
332
|
-
<div
|
|
333
|
-
<a href="{{this.view_url}}">View
|
|
381
|
+
<div style="margin-top: 6px;">
|
|
382
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
334
383
|
</div>
|
|
335
384
|
{{/if}}
|
|
336
385
|
</div>
|
|
@@ -351,21 +400,33 @@
|
|
|
351
400
|
<div class="section-content">
|
|
352
401
|
{{#each leadsets}}
|
|
353
402
|
<div class="item">
|
|
354
|
-
<
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
403
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
404
|
+
<tr>
|
|
405
|
+
<td>
|
|
406
|
+
<div class="item-title">{{this.title}}</div>
|
|
407
|
+
<div class="item-meta">
|
|
408
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.records_count}} records</span> • {{this.time}}
|
|
409
|
+
</div>
|
|
410
|
+
</td>
|
|
411
|
+
</tr>
|
|
412
|
+
</table>
|
|
359
413
|
{{#if this.details}}
|
|
360
414
|
<div class="item-details">
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
415
|
+
<table class="detail-table">
|
|
416
|
+
<tr>
|
|
417
|
+
{{#each this.details}}
|
|
418
|
+
<td class="detail-cell">
|
|
419
|
+
<div class="detail-label">{{this.label}}</div>
|
|
420
|
+
<div class="detail-value">{{this.value}}</div>
|
|
421
|
+
</td>
|
|
422
|
+
{{/each}}
|
|
423
|
+
</tr>
|
|
424
|
+
</table>
|
|
364
425
|
</div>
|
|
365
426
|
{{/if}}
|
|
366
427
|
{{#if this.view_url}}
|
|
367
|
-
<div
|
|
368
|
-
<a href="{{this.view_url}}">View
|
|
428
|
+
<div style="margin-top: 6px;">
|
|
429
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
369
430
|
</div>
|
|
370
431
|
{{/if}}
|
|
371
432
|
</div>
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -41,61 +40,68 @@
|
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
.event-card {
|
|
44
|
-
background-color: #
|
|
45
|
-
border: 1px solid #
|
|
43
|
+
background-color: #ffffff;
|
|
44
|
+
border: 1px solid #e5e7eb;
|
|
46
45
|
border-radius: 8px;
|
|
47
|
-
padding:
|
|
48
|
-
margin:
|
|
46
|
+
padding: 16px;
|
|
47
|
+
margin: 16px 0;
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
.event-badge {
|
|
52
51
|
display: inline-block;
|
|
53
|
-
background-color: #
|
|
54
|
-
color: #
|
|
55
|
-
padding:
|
|
56
|
-
border-radius:
|
|
57
|
-
font-size:
|
|
52
|
+
background-color: #f3f0ff;
|
|
53
|
+
color: #7c3aed;
|
|
54
|
+
padding: 4px 8px;
|
|
55
|
+
border-radius: 4px;
|
|
56
|
+
font-size: 11px;
|
|
58
57
|
font-weight: bold;
|
|
59
58
|
text-transform: uppercase;
|
|
60
|
-
margin-bottom:
|
|
59
|
+
margin-bottom: 8px;
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
.event-title {
|
|
64
|
-
font-size:
|
|
63
|
+
font-size: 18px;
|
|
65
64
|
font-weight: bold;
|
|
66
|
-
color: #
|
|
67
|
-
margin:
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.event-summary {
|
|
71
|
-
color: #2c2721;
|
|
72
|
-
margin: 12px 0;
|
|
73
|
-
line-height: 1.6;
|
|
65
|
+
color: #111827;
|
|
66
|
+
margin: 0 0 12px 0;
|
|
74
67
|
}
|
|
75
68
|
|
|
76
69
|
.event-details {
|
|
77
70
|
margin-top: 12px;
|
|
78
|
-
background-color: #
|
|
71
|
+
background-color: #f9fafb;
|
|
79
72
|
border-radius: 6px;
|
|
80
73
|
padding: 12px;
|
|
81
74
|
}
|
|
82
75
|
|
|
83
|
-
.detail-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
76
|
+
.detail-table {
|
|
77
|
+
width: 100%;
|
|
78
|
+
border-collapse: collapse;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.detail-label {
|
|
82
|
+
font-size: 11px;
|
|
83
|
+
color: #6b7280;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
margin-bottom: 2px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.detail-value {
|
|
90
|
+
font-size: 13px;
|
|
91
|
+
color: #111827;
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
.detail-
|
|
90
|
-
|
|
94
|
+
.detail-cell {
|
|
95
|
+
padding-right: 16px;
|
|
96
|
+
vertical-align: top;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
.event-meta {
|
|
94
100
|
margin-top: 16px;
|
|
95
|
-
padding-top:
|
|
96
|
-
border-top: 1px solid #
|
|
97
|
-
font-size:
|
|
98
|
-
color: #
|
|
101
|
+
padding-top: 12px;
|
|
102
|
+
border-top: 1px solid #f3f4f6;
|
|
103
|
+
font-size: 12px;
|
|
104
|
+
color: #6b7280;
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
.event-meta strong {
|
|
@@ -144,23 +150,28 @@
|
|
|
144
150
|
<img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
|
|
145
151
|
</div>
|
|
146
152
|
<div class="content">
|
|
147
|
-
<p>Hello,</p>
|
|
153
|
+
<p>Hello {{first_name}},</p>
|
|
148
154
|
<p>You have a new update in your Heliyos workspace:</p>
|
|
149
155
|
|
|
150
156
|
<div class="event-card">
|
|
151
157
|
<div class="event-badge">{{event_type_label}}</div>
|
|
152
158
|
<div class="event-title">{{object_name}}</div>
|
|
153
|
-
<div class="event-summary">{{summary}}</div>
|
|
154
159
|
{{#if details}}
|
|
155
160
|
<div class="event-details">
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
<table class="detail-table">
|
|
162
|
+
<tr>
|
|
163
|
+
{{#each details}}
|
|
164
|
+
<td class="detail-cell">
|
|
165
|
+
<div class="detail-label">{{this.label}}</div>
|
|
166
|
+
<div class="detail-value">{{this.value}}</div>
|
|
167
|
+
</td>
|
|
168
|
+
{{/each}}
|
|
169
|
+
</tr>
|
|
170
|
+
</table>
|
|
159
171
|
</div>
|
|
160
172
|
{{/if}}
|
|
161
173
|
<div class="event-meta">
|
|
162
|
-
<strong>By:</strong> {{actor_name}}<
|
|
163
|
-
<strong>When:</strong> {{timestamp}}
|
|
174
|
+
<strong>By:</strong> {{actor_name}} • <strong>When:</strong> {{timestamp}}
|
|
164
175
|
</div>
|
|
165
176
|
</div>
|
|
166
177
|
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -80,7 +79,7 @@
|
|
|
80
79
|
</div>
|
|
81
80
|
<div class="content">
|
|
82
81
|
<h2 style="margin-top: 0; color: #0e0d0c;">Confirm Your Email Address</h2>
|
|
83
|
-
<p>Hello,</p>
|
|
82
|
+
<p>Hello {{first_name}},</p>
|
|
84
83
|
<p>Thank you for signing up for Heliyos AI! To complete your registration and verify your email address, please click the
|
|
85
84
|
button below:</p>
|
|
86
85
|
<p style="text-align: center;">
|
package/dist/resend.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export declare const resendSendEmail: (to: string[], templateId: string, dynamicTemplateData: object, subject: string) => Promise<import("resend").CreateEmailResponse
|
|
1
|
+
export declare const resendSendEmail: (to: string[], templateId: string, dynamicTemplateData: object, subject: string) => Promise<import("resend").CreateEmailResponse | {
|
|
2
|
+
data: any;
|
|
3
|
+
error: Error;
|
|
4
|
+
}>;
|
package/dist/resend.js
CHANGED
|
@@ -12,17 +12,69 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.resendSendEmail = void 0;
|
|
13
13
|
const resend_1 = require("resend");
|
|
14
14
|
const email_1 = require("./email");
|
|
15
|
+
const mongoose_1 = require("./mongoose");
|
|
16
|
+
const logger_1 = require("./logger");
|
|
15
17
|
// eslint-disable-next-line import/prefer-default-export
|
|
16
18
|
const resendSendEmail = (to, templateId, dynamicTemplateData, subject) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
19
|
const resend = new resend_1.Resend(process.env.RESEND_API_KEY);
|
|
18
20
|
const from = process.env.RESEND_FROM_RECIPIENT || "";
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
// If there are multiple recipients, we send individual emails to ensure personalized salutations
|
|
22
|
+
const sendIndividualEmail = (email) => __awaiter(void 0, void 0, void 0, function* () {
|
|
23
|
+
let firstName = dynamicTemplateData.first_name ||
|
|
24
|
+
dynamicTemplateData.firstName;
|
|
25
|
+
// Try to extract from fullName if available in data but firstName isn't
|
|
26
|
+
if (!firstName && dynamicTemplateData.fullName) {
|
|
27
|
+
firstName = dynamicTemplateData.fullName.split(" ")[0];
|
|
28
|
+
}
|
|
29
|
+
else if (!firstName && dynamicTemplateData.name) {
|
|
30
|
+
firstName = dynamicTemplateData.name.split(" ")[0];
|
|
31
|
+
}
|
|
32
|
+
if (!firstName) {
|
|
33
|
+
try {
|
|
34
|
+
// Access the User model if it's already registered on the connection
|
|
35
|
+
const UserModel = mongoose_1.mongooseConnection.models.User;
|
|
36
|
+
if (UserModel) {
|
|
37
|
+
const user = yield UserModel.findOne({ email })
|
|
38
|
+
.select("firstName")
|
|
39
|
+
.lean();
|
|
40
|
+
if (user && user.firstName) {
|
|
41
|
+
firstName = user.firstName;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// If still no firstName, use the part before @ as requested
|
|
45
|
+
if (!firstName) {
|
|
46
|
+
firstName = email.split("@")[0];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
// Fallback to email prefix on any error
|
|
51
|
+
firstName = email.split("@")[0];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const message = {
|
|
55
|
+
to: [email],
|
|
56
|
+
from,
|
|
57
|
+
subject,
|
|
58
|
+
html: (0, email_1.getEmailTemplate)(templateId, Object.assign(Object.assign({}, dynamicTemplateData), { first_name: firstName,
|
|
59
|
+
// For templates that might still use fullName or name
|
|
60
|
+
fullName: dynamicTemplateData.fullName || firstName, name: dynamicTemplateData.name || firstName })),
|
|
61
|
+
};
|
|
62
|
+
return resend.emails.send(message);
|
|
63
|
+
});
|
|
64
|
+
try {
|
|
65
|
+
if (to.length > 1) {
|
|
66
|
+
// Send emails in parallel but return the first response or a combined summary
|
|
67
|
+
const responses = yield Promise.all(to.map(sendIndividualEmail));
|
|
68
|
+
return responses[0];
|
|
69
|
+
}
|
|
70
|
+
else if (to.length === 1) {
|
|
71
|
+
return yield sendIndividualEmail(to[0]);
|
|
72
|
+
}
|
|
73
|
+
return { data: null, error: new Error("No recipients provided") };
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
logger_1.logger.error("Error in resendSendEmail:", error);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
27
79
|
});
|
|
28
80
|
exports.resendSendEmail = resendSendEmail;
|
package/package.json
CHANGED
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -61,93 +60,98 @@
|
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
.section {
|
|
64
|
-
margin:
|
|
65
|
-
padding:
|
|
66
|
-
background-color:
|
|
67
|
-
border-radius:
|
|
68
|
-
border-left:
|
|
63
|
+
margin: 20px 0;
|
|
64
|
+
padding: 0;
|
|
65
|
+
background-color: transparent;
|
|
66
|
+
border-radius: 0;
|
|
67
|
+
border-left: none;
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
.section-header {
|
|
72
71
|
display: flex;
|
|
73
72
|
justify-content: space-between;
|
|
74
73
|
align-items: center;
|
|
75
|
-
margin-bottom:
|
|
74
|
+
margin-bottom: 12px;
|
|
75
|
+
padding-bottom: 8px;
|
|
76
|
+
border-bottom: 1px solid #e5e7eb;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
.section-title {
|
|
79
|
-
font-size:
|
|
80
|
+
font-size: 16px;
|
|
80
81
|
font-weight: bold;
|
|
81
|
-
color: #
|
|
82
|
+
color: #111827;
|
|
82
83
|
margin: 0;
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
.section-count {
|
|
86
|
-
background-color: #
|
|
87
|
-
color: #
|
|
88
|
-
padding:
|
|
89
|
-
border-radius:
|
|
90
|
-
font-size:
|
|
87
|
+
background-color: #f3f0ff;
|
|
88
|
+
color: #7c3aed;
|
|
89
|
+
padding: 2px 8px;
|
|
90
|
+
border-radius: 4px;
|
|
91
|
+
font-size: 11px;
|
|
91
92
|
font-weight: bold;
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
.section-content {
|
|
95
|
-
color: #
|
|
96
|
-
line-height: 1.8;
|
|
96
|
+
color: #374151;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
.item {
|
|
100
|
-
margin:
|
|
101
|
-
padding: 12px;
|
|
102
|
-
background-color:
|
|
103
|
-
border-radius:
|
|
104
|
-
border:
|
|
100
|
+
margin: 0;
|
|
101
|
+
padding: 12px 0;
|
|
102
|
+
background-color: transparent;
|
|
103
|
+
border-radius: 0;
|
|
104
|
+
border: none;
|
|
105
|
+
border-bottom: 1px solid #f3f4f6;
|
|
105
106
|
}
|
|
106
107
|
|
|
107
|
-
.item-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
.item:last-child {
|
|
109
|
+
border-bottom: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.item-title {
|
|
113
|
+
font-weight: 600;
|
|
114
|
+
color: #111827;
|
|
110
115
|
font-size: 14px;
|
|
111
|
-
|
|
116
|
+
margin-bottom: 2px;
|
|
112
117
|
}
|
|
113
118
|
|
|
114
|
-
.item-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
border-radius: 6px;
|
|
118
|
-
padding: 10px;
|
|
119
|
+
.item-meta {
|
|
120
|
+
font-size: 12px;
|
|
121
|
+
color: #6b7280;
|
|
119
122
|
}
|
|
120
123
|
|
|
121
|
-
.
|
|
122
|
-
|
|
123
|
-
color: #
|
|
124
|
-
|
|
124
|
+
.item-details {
|
|
125
|
+
margin-top: 8px;
|
|
126
|
+
background-color: #f9fafb;
|
|
127
|
+
border-radius: 6px;
|
|
128
|
+
padding: 8px 12px;
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
.detail-
|
|
128
|
-
|
|
131
|
+
.detail-table {
|
|
132
|
+
width: 100%;
|
|
133
|
+
border-collapse: collapse;
|
|
129
134
|
}
|
|
130
135
|
|
|
131
|
-
.
|
|
132
|
-
|
|
136
|
+
.detail-cell {
|
|
137
|
+
padding-right: 12px;
|
|
138
|
+
vertical-align: top;
|
|
133
139
|
}
|
|
134
140
|
|
|
135
|
-
.
|
|
136
|
-
|
|
137
|
-
|
|
141
|
+
.detail-label {
|
|
142
|
+
font-size: 10px;
|
|
143
|
+
color: #6b7280;
|
|
144
|
+
text-transform: uppercase;
|
|
138
145
|
font-weight: bold;
|
|
139
|
-
font-size: 13px;
|
|
140
146
|
}
|
|
141
147
|
|
|
142
|
-
.
|
|
143
|
-
font-
|
|
144
|
-
color: #
|
|
145
|
-
margin-bottom: 4px;
|
|
148
|
+
.detail-value {
|
|
149
|
+
font-size: 12px;
|
|
150
|
+
color: #374151;
|
|
146
151
|
}
|
|
147
152
|
|
|
148
|
-
.item-
|
|
149
|
-
|
|
150
|
-
color: #5c5545;
|
|
153
|
+
.item-link {
|
|
154
|
+
margin-top: 10px;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
.org-summary-box {
|
|
@@ -226,7 +230,7 @@
|
|
|
226
230
|
</div>
|
|
227
231
|
<div class="content">
|
|
228
232
|
<div class="greeting">
|
|
229
|
-
Hello,<br>
|
|
233
|
+
Hello {{first_name}},<br>
|
|
230
234
|
Here's your daily summary of activities in your Heliyos workspace.
|
|
231
235
|
</div>
|
|
232
236
|
|
|
@@ -246,21 +250,36 @@
|
|
|
246
250
|
<div class="section-content">
|
|
247
251
|
{{#each tasks}}
|
|
248
252
|
<div class="item">
|
|
249
|
-
<
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
253
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
254
|
+
<tr>
|
|
255
|
+
<td>
|
|
256
|
+
<div class="item-title">{{this.title}}</div>
|
|
257
|
+
<div class="item-meta">
|
|
258
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.type}}</span> • {{this.actor}}
|
|
259
|
+
</div>
|
|
260
|
+
</td>
|
|
261
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
262
|
+
{{this.time}}
|
|
263
|
+
</td>
|
|
264
|
+
</tr>
|
|
265
|
+
</table>
|
|
254
266
|
{{#if this.details}}
|
|
255
267
|
<div class="item-details">
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
268
|
+
<table class="detail-table">
|
|
269
|
+
<tr>
|
|
270
|
+
{{#each this.details}}
|
|
271
|
+
<td class="detail-cell">
|
|
272
|
+
<div class="detail-label">{{this.label}}</div>
|
|
273
|
+
<div class="detail-value">{{this.value}}</div>
|
|
274
|
+
</td>
|
|
275
|
+
{{/each}}
|
|
276
|
+
</tr>
|
|
277
|
+
</table>
|
|
259
278
|
</div>
|
|
260
279
|
{{/if}}
|
|
261
280
|
{{#if this.view_url}}
|
|
262
|
-
<div
|
|
263
|
-
<a href="{{this.view_url}}">View
|
|
281
|
+
<div style="margin-top: 6px;">
|
|
282
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
264
283
|
</div>
|
|
265
284
|
{{/if}}
|
|
266
285
|
</div>
|
|
@@ -281,21 +300,36 @@
|
|
|
281
300
|
<div class="section-content">
|
|
282
301
|
{{#each deals}}
|
|
283
302
|
<div class="item">
|
|
284
|
-
<
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
303
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
304
|
+
<tr>
|
|
305
|
+
<td>
|
|
306
|
+
<div class="item-title">{{this.title}}</div>
|
|
307
|
+
<div class="item-meta">
|
|
308
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.type}}</span> • {{this.actor}}
|
|
309
|
+
</div>
|
|
310
|
+
</td>
|
|
311
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
312
|
+
{{this.time}}
|
|
313
|
+
</td>
|
|
314
|
+
</tr>
|
|
315
|
+
</table>
|
|
289
316
|
{{#if this.details}}
|
|
290
317
|
<div class="item-details">
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
318
|
+
<table class="detail-table">
|
|
319
|
+
<tr>
|
|
320
|
+
{{#each this.details}}
|
|
321
|
+
<td class="detail-cell">
|
|
322
|
+
<div class="detail-label">{{this.label}}</div>
|
|
323
|
+
<div class="detail-value">{{this.value}}</div>
|
|
324
|
+
</td>
|
|
325
|
+
{{/each}}
|
|
326
|
+
</tr>
|
|
327
|
+
</table>
|
|
294
328
|
</div>
|
|
295
329
|
{{/if}}
|
|
296
330
|
{{#if this.view_url}}
|
|
297
|
-
<div
|
|
298
|
-
<a href="{{this.view_url}}">View
|
|
331
|
+
<div style="margin-top: 6px;">
|
|
332
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
299
333
|
</div>
|
|
300
334
|
{{/if}}
|
|
301
335
|
</div>
|
|
@@ -316,21 +350,36 @@
|
|
|
316
350
|
<div class="section-content">
|
|
317
351
|
{{#each approvals}}
|
|
318
352
|
<div class="item">
|
|
319
|
-
<
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
353
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
354
|
+
<tr>
|
|
355
|
+
<td>
|
|
356
|
+
<div class="item-title">{{this.title}}</div>
|
|
357
|
+
<div class="item-meta">
|
|
358
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.status}}</span> • {{this.actor}}
|
|
359
|
+
</div>
|
|
360
|
+
</td>
|
|
361
|
+
<td style="text-align: right; vertical-align: top; font-size: 11px; color: #9ca3af;">
|
|
362
|
+
{{this.time}}
|
|
363
|
+
</td>
|
|
364
|
+
</tr>
|
|
365
|
+
</table>
|
|
324
366
|
{{#if this.details}}
|
|
325
367
|
<div class="item-details">
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
368
|
+
<table class="detail-table">
|
|
369
|
+
<tr>
|
|
370
|
+
{{#each this.details}}
|
|
371
|
+
<td class="detail-cell">
|
|
372
|
+
<div class="detail-label">{{this.label}}</div>
|
|
373
|
+
<div class="detail-value">{{this.value}}</div>
|
|
374
|
+
</td>
|
|
375
|
+
{{/each}}
|
|
376
|
+
</tr>
|
|
377
|
+
</table>
|
|
329
378
|
</div>
|
|
330
379
|
{{/if}}
|
|
331
380
|
{{#if this.view_url}}
|
|
332
|
-
<div
|
|
333
|
-
<a href="{{this.view_url}}">View
|
|
381
|
+
<div style="margin-top: 6px;">
|
|
382
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
334
383
|
</div>
|
|
335
384
|
{{/if}}
|
|
336
385
|
</div>
|
|
@@ -351,21 +400,33 @@
|
|
|
351
400
|
<div class="section-content">
|
|
352
401
|
{{#each leadsets}}
|
|
353
402
|
<div class="item">
|
|
354
|
-
<
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
403
|
+
<table style="width: 100%; border-collapse: collapse;">
|
|
404
|
+
<tr>
|
|
405
|
+
<td>
|
|
406
|
+
<div class="item-title">{{this.title}}</div>
|
|
407
|
+
<div class="item-meta">
|
|
408
|
+
<span style="color: #7c3aed; font-weight: 600;">{{this.records_count}} records</span> • {{this.time}}
|
|
409
|
+
</div>
|
|
410
|
+
</td>
|
|
411
|
+
</tr>
|
|
412
|
+
</table>
|
|
359
413
|
{{#if this.details}}
|
|
360
414
|
<div class="item-details">
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
415
|
+
<table class="detail-table">
|
|
416
|
+
<tr>
|
|
417
|
+
{{#each this.details}}
|
|
418
|
+
<td class="detail-cell">
|
|
419
|
+
<div class="detail-label">{{this.label}}</div>
|
|
420
|
+
<div class="detail-value">{{this.value}}</div>
|
|
421
|
+
</td>
|
|
422
|
+
{{/each}}
|
|
423
|
+
</tr>
|
|
424
|
+
</table>
|
|
364
425
|
</div>
|
|
365
426
|
{{/if}}
|
|
366
427
|
{{#if this.view_url}}
|
|
367
|
-
<div
|
|
368
|
-
<a href="{{this.view_url}}">View
|
|
428
|
+
<div style="margin-top: 6px;">
|
|
429
|
+
<a href="{{this.view_url}}" style="font-size: 11px; color: #7c3aed; text-decoration: none; font-weight: bold;">View Details →</a>
|
|
369
430
|
</div>
|
|
370
431
|
{{/if}}
|
|
371
432
|
</div>
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -41,61 +40,68 @@
|
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
.event-card {
|
|
44
|
-
background-color: #
|
|
45
|
-
border: 1px solid #
|
|
43
|
+
background-color: #ffffff;
|
|
44
|
+
border: 1px solid #e5e7eb;
|
|
46
45
|
border-radius: 8px;
|
|
47
|
-
padding:
|
|
48
|
-
margin:
|
|
46
|
+
padding: 16px;
|
|
47
|
+
margin: 16px 0;
|
|
49
48
|
}
|
|
50
49
|
|
|
51
50
|
.event-badge {
|
|
52
51
|
display: inline-block;
|
|
53
|
-
background-color: #
|
|
54
|
-
color: #
|
|
55
|
-
padding:
|
|
56
|
-
border-radius:
|
|
57
|
-
font-size:
|
|
52
|
+
background-color: #f3f0ff;
|
|
53
|
+
color: #7c3aed;
|
|
54
|
+
padding: 4px 8px;
|
|
55
|
+
border-radius: 4px;
|
|
56
|
+
font-size: 11px;
|
|
58
57
|
font-weight: bold;
|
|
59
58
|
text-transform: uppercase;
|
|
60
|
-
margin-bottom:
|
|
59
|
+
margin-bottom: 8px;
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
.event-title {
|
|
64
|
-
font-size:
|
|
63
|
+
font-size: 18px;
|
|
65
64
|
font-weight: bold;
|
|
66
|
-
color: #
|
|
67
|
-
margin:
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.event-summary {
|
|
71
|
-
color: #2c2721;
|
|
72
|
-
margin: 12px 0;
|
|
73
|
-
line-height: 1.6;
|
|
65
|
+
color: #111827;
|
|
66
|
+
margin: 0 0 12px 0;
|
|
74
67
|
}
|
|
75
68
|
|
|
76
69
|
.event-details {
|
|
77
70
|
margin-top: 12px;
|
|
78
|
-
background-color: #
|
|
71
|
+
background-color: #f9fafb;
|
|
79
72
|
border-radius: 6px;
|
|
80
73
|
padding: 12px;
|
|
81
74
|
}
|
|
82
75
|
|
|
83
|
-
.detail-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
76
|
+
.detail-table {
|
|
77
|
+
width: 100%;
|
|
78
|
+
border-collapse: collapse;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.detail-label {
|
|
82
|
+
font-size: 11px;
|
|
83
|
+
color: #6b7280;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
margin-bottom: 2px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.detail-value {
|
|
90
|
+
font-size: 13px;
|
|
91
|
+
color: #111827;
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
.detail-
|
|
90
|
-
|
|
94
|
+
.detail-cell {
|
|
95
|
+
padding-right: 16px;
|
|
96
|
+
vertical-align: top;
|
|
91
97
|
}
|
|
92
98
|
|
|
93
99
|
.event-meta {
|
|
94
100
|
margin-top: 16px;
|
|
95
|
-
padding-top:
|
|
96
|
-
border-top: 1px solid #
|
|
97
|
-
font-size:
|
|
98
|
-
color: #
|
|
101
|
+
padding-top: 12px;
|
|
102
|
+
border-top: 1px solid #f3f4f6;
|
|
103
|
+
font-size: 12px;
|
|
104
|
+
color: #6b7280;
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
.event-meta strong {
|
|
@@ -144,23 +150,28 @@
|
|
|
144
150
|
<img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
|
|
145
151
|
</div>
|
|
146
152
|
<div class="content">
|
|
147
|
-
<p>Hello,</p>
|
|
153
|
+
<p>Hello {{first_name}},</p>
|
|
148
154
|
<p>You have a new update in your Heliyos workspace:</p>
|
|
149
155
|
|
|
150
156
|
<div class="event-card">
|
|
151
157
|
<div class="event-badge">{{event_type_label}}</div>
|
|
152
158
|
<div class="event-title">{{object_name}}</div>
|
|
153
|
-
<div class="event-summary">{{summary}}</div>
|
|
154
159
|
{{#if details}}
|
|
155
160
|
<div class="event-details">
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
<table class="detail-table">
|
|
162
|
+
<tr>
|
|
163
|
+
{{#each details}}
|
|
164
|
+
<td class="detail-cell">
|
|
165
|
+
<div class="detail-label">{{this.label}}</div>
|
|
166
|
+
<div class="detail-value">{{this.value}}</div>
|
|
167
|
+
</td>
|
|
168
|
+
{{/each}}
|
|
169
|
+
</tr>
|
|
170
|
+
</table>
|
|
159
171
|
</div>
|
|
160
172
|
{{/if}}
|
|
161
173
|
<div class="event-meta">
|
|
162
|
-
<strong>By:</strong> {{actor_name}}<
|
|
163
|
-
<strong>When:</strong> {{timestamp}}
|
|
174
|
+
<strong>By:</strong> {{actor_name}} • <strong>When:</strong> {{timestamp}}
|
|
164
175
|
</div>
|
|
165
176
|
</div>
|
|
166
177
|
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
background-color: #ffffff;
|
|
22
22
|
border-radius: 12px;
|
|
23
23
|
overflow: hidden;
|
|
24
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
.header {
|
|
@@ -80,7 +79,7 @@
|
|
|
80
79
|
</div>
|
|
81
80
|
<div class="content">
|
|
82
81
|
<h2 style="margin-top: 0; color: #0e0d0c;">Confirm Your Email Address</h2>
|
|
83
|
-
<p>Hello,</p>
|
|
82
|
+
<p>Hello {{first_name}},</p>
|
|
84
83
|
<p>Thank you for signing up for Heliyos AI! To complete your registration and verify your email address, please click the
|
|
85
84
|
button below:</p>
|
|
86
85
|
<p style="text-align: center;">
|