@aglyn/shared-util-email 1.0.0-beta.269 → 1.0.0-beta.271
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/package.json +3 -3
- package/src/index.d.ts +3 -0
- package/src/index.js +3 -0
- package/src/index.js.map +1 -1
- package/src/lib/domain-emails.d.ts +29 -0
- package/src/lib/domain-emails.js +587 -0
- package/src/lib/domain-emails.js.map +1 -0
- package/src/lib/site-care-emails.d.ts +26 -0
- package/src/lib/site-care-emails.js +461 -0
- package/src/lib/site-care-emails.js.map +1 -0
- package/src/lib/site-care-project-emails.d.ts +22 -0
- package/src/lib/site-care-project-emails.js +287 -0
- package/src/lib/site-care-project-emails.js.map +1 -0
- package/src/lib/system-email-catalog.js +162 -3
- package/src/lib/system-email-catalog.js.map +1 -1
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/ /*==========================================
|
|
17
|
+
* A DOMAIN BOUGHT THROUGH THE PLATFORM, AS SYSTEM EMAILS (AGL-3962).
|
|
18
|
+
*
|
|
19
|
+
* The domains plugin writes every one of these: the purchase, the refund
|
|
20
|
+
* when a registration fails, ICANN's registrant check, the renewal notice
|
|
21
|
+
* and its outcome, the expiry, and the transfer code. Each is a key of its
|
|
22
|
+
* own so staff can redesign one without touching the others.
|
|
23
|
+
*
|
|
24
|
+
* They live here, beside the catalog, because system emails have no plugin
|
|
25
|
+
* seam: the staff System emails page reads this registry before any plugin
|
|
26
|
+
* loads. `source` names the plugin file that sends each one.
|
|
27
|
+
*
|
|
28
|
+
* Prices and dates arrive formatted (`$15.99`, `Oct 19, 2027`), because the
|
|
29
|
+
* sender knows the currency and the reader's locale and a template does not.
|
|
30
|
+
*=========================================*/ export const DOMAIN_EMAIL_KEYS = {
|
|
31
|
+
purchased: 'domain-purchased',
|
|
32
|
+
refunded: 'domain-refunded',
|
|
33
|
+
verifyRegistrant: 'domain-verify-registrant',
|
|
34
|
+
renewalNotice: 'domain-renewal-notice',
|
|
35
|
+
renewed: 'domain-renewed',
|
|
36
|
+
renewalFailed: 'domain-renewal-failed',
|
|
37
|
+
expiring: 'domain-expiring',
|
|
38
|
+
expired: 'domain-expired',
|
|
39
|
+
transferCode: 'domain-transfer-code'
|
|
40
|
+
};
|
|
41
|
+
const SOURCE = 'libs/plugins/domains/src/lib/server/domain-emails.ts';
|
|
42
|
+
function tokens(origin) {
|
|
43
|
+
return {
|
|
44
|
+
domain: {
|
|
45
|
+
name: 'domain.name',
|
|
46
|
+
description: 'The domain name',
|
|
47
|
+
sample: 'testbakery.com'
|
|
48
|
+
},
|
|
49
|
+
site: {
|
|
50
|
+
name: 'site.name',
|
|
51
|
+
description: 'The site the domain belongs to',
|
|
52
|
+
sample: 'Test Bakery'
|
|
53
|
+
},
|
|
54
|
+
org: {
|
|
55
|
+
name: 'org.name',
|
|
56
|
+
description: 'The workspace',
|
|
57
|
+
sample: 'Test Org'
|
|
58
|
+
},
|
|
59
|
+
manageUrl: {
|
|
60
|
+
name: 'domain.manageUrl',
|
|
61
|
+
description: "The site's Custom Domain page",
|
|
62
|
+
sample: `${origin}/test-org/hosts/test-bakery/admin/domain`
|
|
63
|
+
},
|
|
64
|
+
billingUrl: {
|
|
65
|
+
name: 'billingUrl',
|
|
66
|
+
description: "The workspace's Billing page",
|
|
67
|
+
sample: `${origin}/test-org/billing`
|
|
68
|
+
},
|
|
69
|
+
firstYear: {
|
|
70
|
+
name: 'domain.firstYear',
|
|
71
|
+
description: 'What the first year cost',
|
|
72
|
+
sample: '$15.99'
|
|
73
|
+
},
|
|
74
|
+
renewalPrice: {
|
|
75
|
+
name: 'domain.renewalPrice',
|
|
76
|
+
description: 'The yearly renewal price',
|
|
77
|
+
sample: '$15.99'
|
|
78
|
+
},
|
|
79
|
+
renewsOn: {
|
|
80
|
+
name: 'domain.renewsOn',
|
|
81
|
+
description: 'The date the domain renews',
|
|
82
|
+
sample: 'Oct 19, 2027'
|
|
83
|
+
},
|
|
84
|
+
chargeOn: {
|
|
85
|
+
name: 'domain.chargeOn',
|
|
86
|
+
description: 'About when the renewal is charged',
|
|
87
|
+
sample: 'Sep 19, 2027'
|
|
88
|
+
},
|
|
89
|
+
expiresOn: {
|
|
90
|
+
name: 'domain.expiresOn',
|
|
91
|
+
description: 'The date the domain expires',
|
|
92
|
+
sample: 'Oct 19, 2027'
|
|
93
|
+
},
|
|
94
|
+
registrant: {
|
|
95
|
+
name: 'domain.registrant',
|
|
96
|
+
description: 'Who the domain is registered to',
|
|
97
|
+
sample: 'Alex Test'
|
|
98
|
+
},
|
|
99
|
+
registrantEmail: {
|
|
100
|
+
name: 'domain.registrantEmail',
|
|
101
|
+
description: "The registrant's email, which the registrar verifies",
|
|
102
|
+
sample: 'alex@testbakery.com'
|
|
103
|
+
},
|
|
104
|
+
verifyBy: {
|
|
105
|
+
name: 'domain.verifyBy',
|
|
106
|
+
description: 'The date the registrant email must be confirmed by',
|
|
107
|
+
sample: 'Nov 2, 2026'
|
|
108
|
+
},
|
|
109
|
+
amount: {
|
|
110
|
+
name: 'domain.amount',
|
|
111
|
+
description: 'An amount charged',
|
|
112
|
+
sample: '$15.99'
|
|
113
|
+
},
|
|
114
|
+
refund: {
|
|
115
|
+
name: 'domain.refund',
|
|
116
|
+
description: 'What was refunded, or that nothing was charged, in a sentence',
|
|
117
|
+
sample: 'We refunded $15.99 to the card it was charged to. A refund usually reaches the card within 5 to 10 business days.'
|
|
118
|
+
},
|
|
119
|
+
failure: {
|
|
120
|
+
name: 'domain.failure',
|
|
121
|
+
description: 'Why it did not happen, in a sentence',
|
|
122
|
+
sample: 'Someone else registered it a moment before your order reached the registrar.'
|
|
123
|
+
},
|
|
124
|
+
nextAttempt: {
|
|
125
|
+
name: 'domain.nextAttempt',
|
|
126
|
+
description: 'When the renewal charge will be tried again',
|
|
127
|
+
sample: 'Sep 22, 2027'
|
|
128
|
+
},
|
|
129
|
+
expiryReason: {
|
|
130
|
+
name: 'domain.expiryReason',
|
|
131
|
+
description: 'Why the domain will not renew, in a sentence',
|
|
132
|
+
sample: 'Auto-renew is turned off for it.'
|
|
133
|
+
},
|
|
134
|
+
requestedBy: {
|
|
135
|
+
name: 'domain.requestedBy',
|
|
136
|
+
description: 'Who asked for the transfer code',
|
|
137
|
+
sample: 'alex@testbakery.com'
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export function domainSystemEmailTemplates(origin) {
|
|
142
|
+
const t = tokens(origin);
|
|
143
|
+
const footer = 'You’re receiving this because you manage {{org.name}} on ' + '{{brand.productName}} and it bought {{domain.name}} through it.';
|
|
144
|
+
return [
|
|
145
|
+
{
|
|
146
|
+
key: DOMAIN_EMAIL_KEYS.purchased,
|
|
147
|
+
name: 'Domain purchased',
|
|
148
|
+
description: "Sent to a workspace's owners and admins when a domain bought for one " + 'of its sites is registered.',
|
|
149
|
+
deliveredBy: 'resend',
|
|
150
|
+
defaultSubject: '{{domain.name}} is yours',
|
|
151
|
+
mergeTokens: [
|
|
152
|
+
t.domain,
|
|
153
|
+
t.site,
|
|
154
|
+
t.org,
|
|
155
|
+
t.firstYear,
|
|
156
|
+
t.renewalPrice,
|
|
157
|
+
t.renewsOn,
|
|
158
|
+
t.registrant,
|
|
159
|
+
t.registrantEmail,
|
|
160
|
+
t.manageUrl
|
|
161
|
+
],
|
|
162
|
+
defaultBody: [
|
|
163
|
+
{
|
|
164
|
+
block: 'text',
|
|
165
|
+
text: '{{site.name}}',
|
|
166
|
+
variant: 'eyebrow'
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
block: 'text',
|
|
170
|
+
text: '{{domain.name}} is yours',
|
|
171
|
+
variant: 'heading'
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
block: 'text',
|
|
175
|
+
text: '{{domain.name}} is registered to you and is being connected to {{site.name}}. It usually serves within a few minutes, with its security certificate set up for you. There are no DNS records to add.',
|
|
176
|
+
variant: 'body'
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
block: 'text',
|
|
180
|
+
text: 'Domain: {{domain.name}}\nFirst year: {{domain.firstYear}}\nRenews: {{domain.renewsOn}} for {{domain.renewalPrice}} a year\nRegistered to: {{domain.registrant}}',
|
|
181
|
+
variant: 'details'
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
block: 'text',
|
|
185
|
+
text: 'One thing for you to do',
|
|
186
|
+
variant: 'subheading'
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
block: 'text',
|
|
190
|
+
text: 'The registrar will email {{domain.registrantEmail}} asking you to confirm the address. ICANN, which oversees domain names, requires it, and a domain whose owner never confirms can be suspended. Open that email and confirm when it arrives.',
|
|
191
|
+
variant: 'body'
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
block: 'button',
|
|
195
|
+
label: 'Manage your domain',
|
|
196
|
+
href: '{{domain.manageUrl}}'
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
block: 'text',
|
|
200
|
+
text: 'Auto-renew is on. You can turn it off, or move the domain to another registrar, at any time from the site’s Custom Domain page.',
|
|
201
|
+
variant: 'caption'
|
|
202
|
+
}
|
|
203
|
+
],
|
|
204
|
+
footerReason: footer,
|
|
205
|
+
source: SOURCE
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
key: DOMAIN_EMAIL_KEYS.refunded,
|
|
209
|
+
name: 'Domain purchase refunded',
|
|
210
|
+
description: 'Sent when a domain could not be registered after it was paid for, ' + 'and the charge was refunded.',
|
|
211
|
+
deliveredBy: 'resend',
|
|
212
|
+
defaultSubject: 'We couldn’t register {{domain.name}}',
|
|
213
|
+
mergeTokens: [
|
|
214
|
+
t.domain,
|
|
215
|
+
t.site,
|
|
216
|
+
t.org,
|
|
217
|
+
t.failure,
|
|
218
|
+
t.refund,
|
|
219
|
+
t.manageUrl
|
|
220
|
+
],
|
|
221
|
+
defaultBody: [
|
|
222
|
+
{
|
|
223
|
+
block: 'text',
|
|
224
|
+
text: '{{site.name}}',
|
|
225
|
+
variant: 'eyebrow'
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
block: 'text',
|
|
229
|
+
text: 'We couldn’t register {{domain.name}}',
|
|
230
|
+
variant: 'heading'
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
block: 'text',
|
|
234
|
+
text: '{{domain.failure}}',
|
|
235
|
+
variant: 'body'
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
block: 'text',
|
|
239
|
+
text: '{{domain.refund}}',
|
|
240
|
+
variant: 'body'
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
block: 'text',
|
|
244
|
+
text: 'Another name may well be free. The Custom Domain page searches as you type.',
|
|
245
|
+
variant: 'body'
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
block: 'button',
|
|
249
|
+
label: 'Find another domain',
|
|
250
|
+
href: '{{domain.manageUrl}}'
|
|
251
|
+
}
|
|
252
|
+
],
|
|
253
|
+
footerReason: footer,
|
|
254
|
+
source: SOURCE
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
key: DOMAIN_EMAIL_KEYS.verifyRegistrant,
|
|
258
|
+
name: 'Confirm the domain’s registrant email',
|
|
259
|
+
description: "Reminds a workspace's owners that ICANN's registrant email check for " + 'a bought domain is still outstanding.',
|
|
260
|
+
deliveredBy: 'resend',
|
|
261
|
+
defaultSubject: 'Confirm your email to keep {{domain.name}}',
|
|
262
|
+
mergeTokens: [
|
|
263
|
+
t.domain,
|
|
264
|
+
t.site,
|
|
265
|
+
t.org,
|
|
266
|
+
t.registrantEmail,
|
|
267
|
+
t.verifyBy,
|
|
268
|
+
t.manageUrl
|
|
269
|
+
],
|
|
270
|
+
defaultBody: [
|
|
271
|
+
{
|
|
272
|
+
block: 'text',
|
|
273
|
+
text: '{{domain.name}}',
|
|
274
|
+
variant: 'eyebrow'
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
block: 'text',
|
|
278
|
+
text: 'Confirm your email to keep {{domain.name}}',
|
|
279
|
+
variant: 'heading'
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
block: 'text',
|
|
283
|
+
text: 'The registrar sent a confirmation email to {{domain.registrantEmail}}, and it has not been confirmed yet. ICANN requires every domain owner to confirm this address, and a domain that is not confirmed by {{domain.verifyBy}} can be suspended, which takes the site offline at that address.',
|
|
284
|
+
variant: 'body'
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
block: 'text',
|
|
288
|
+
text: 'Look for an email about verifying your domain contact information, including in your spam folder, and follow its link. If it never arrived, contact support: {{brand.supportUrl}}',
|
|
289
|
+
variant: 'body'
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
block: 'button',
|
|
293
|
+
label: 'Open the Custom Domain page',
|
|
294
|
+
href: '{{domain.manageUrl}}'
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
footerReason: footer,
|
|
298
|
+
source: SOURCE
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
key: DOMAIN_EMAIL_KEYS.renewalNotice,
|
|
302
|
+
name: 'Domain renewal notice',
|
|
303
|
+
description: 'Sent about 45 days before a bought domain renews, naming the price ' + 'and the date it will be charged.',
|
|
304
|
+
deliveredBy: 'resend',
|
|
305
|
+
defaultSubject: '{{domain.name}} renews on {{domain.renewsOn}}',
|
|
306
|
+
mergeTokens: [
|
|
307
|
+
t.domain,
|
|
308
|
+
t.site,
|
|
309
|
+
t.org,
|
|
310
|
+
t.renewalPrice,
|
|
311
|
+
t.renewsOn,
|
|
312
|
+
t.chargeOn,
|
|
313
|
+
t.manageUrl
|
|
314
|
+
],
|
|
315
|
+
defaultBody: [
|
|
316
|
+
{
|
|
317
|
+
block: 'text',
|
|
318
|
+
text: '{{site.name}}',
|
|
319
|
+
variant: 'eyebrow'
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
block: 'text',
|
|
323
|
+
text: '{{domain.name}} renews on {{domain.renewsOn}}',
|
|
324
|
+
variant: 'heading'
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
block: 'text',
|
|
328
|
+
text: 'Auto-renew is on for {{domain.name}}, so it will renew for another year and keep {{site.name}} at the same address.',
|
|
329
|
+
variant: 'body'
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
block: 'text',
|
|
333
|
+
text: 'Renewal: {{domain.renewalPrice}} for one year\nCharged: around {{domain.chargeOn}}, to the card on file\nRenews: {{domain.renewsOn}}',
|
|
334
|
+
variant: 'details'
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
block: 'text',
|
|
338
|
+
text: 'You will not be charged more than this for this renewal. If you no longer want the domain, turn auto-renew off before {{domain.chargeOn}} and it will expire on {{domain.renewsOn}}.',
|
|
339
|
+
variant: 'body'
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
block: 'button',
|
|
343
|
+
label: 'Manage auto-renew',
|
|
344
|
+
href: '{{domain.manageUrl}}'
|
|
345
|
+
}
|
|
346
|
+
],
|
|
347
|
+
footerReason: footer,
|
|
348
|
+
source: SOURCE
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
key: DOMAIN_EMAIL_KEYS.renewed,
|
|
352
|
+
name: 'Domain renewed',
|
|
353
|
+
description: 'Confirms a bought domain renewed for another year.',
|
|
354
|
+
deliveredBy: 'resend',
|
|
355
|
+
defaultSubject: '{{domain.name}} is renewed until {{domain.expiresOn}}',
|
|
356
|
+
mergeTokens: [
|
|
357
|
+
t.domain,
|
|
358
|
+
t.site,
|
|
359
|
+
t.org,
|
|
360
|
+
t.amount,
|
|
361
|
+
t.expiresOn,
|
|
362
|
+
t.manageUrl
|
|
363
|
+
],
|
|
364
|
+
defaultBody: [
|
|
365
|
+
{
|
|
366
|
+
block: 'text',
|
|
367
|
+
text: '{{site.name}}',
|
|
368
|
+
variant: 'eyebrow'
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
block: 'text',
|
|
372
|
+
text: '{{domain.name}} is renewed',
|
|
373
|
+
variant: 'heading'
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
block: 'text',
|
|
377
|
+
text: '{{domain.name}} renewed for another year, so {{site.name}} keeps its address.',
|
|
378
|
+
variant: 'body'
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
block: 'text',
|
|
382
|
+
text: 'Charged: {{domain.amount}}\nRegistered until: {{domain.expiresOn}}',
|
|
383
|
+
variant: 'details'
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
block: 'button',
|
|
387
|
+
label: 'Manage your domain',
|
|
388
|
+
href: '{{domain.manageUrl}}'
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
block: 'text',
|
|
392
|
+
text: 'The receipt is with your other invoices on the Billing page.',
|
|
393
|
+
variant: 'caption'
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
footerReason: footer,
|
|
397
|
+
source: SOURCE
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
key: DOMAIN_EMAIL_KEYS.renewalFailed,
|
|
401
|
+
name: 'Domain renewal payment failed',
|
|
402
|
+
description: 'Sent when the charge for a domain renewal fails, with the next try ' + 'and the date the domain expires.',
|
|
403
|
+
deliveredBy: 'resend',
|
|
404
|
+
defaultSubject: 'We couldn’t renew {{domain.name}}',
|
|
405
|
+
mergeTokens: [
|
|
406
|
+
t.domain,
|
|
407
|
+
t.site,
|
|
408
|
+
t.org,
|
|
409
|
+
t.renewalPrice,
|
|
410
|
+
t.nextAttempt,
|
|
411
|
+
t.expiresOn,
|
|
412
|
+
t.billingUrl,
|
|
413
|
+
t.manageUrl
|
|
414
|
+
],
|
|
415
|
+
defaultBody: [
|
|
416
|
+
{
|
|
417
|
+
block: 'text',
|
|
418
|
+
text: '{{site.name}}',
|
|
419
|
+
variant: 'eyebrow'
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
block: 'text',
|
|
423
|
+
text: 'We couldn’t renew {{domain.name}}',
|
|
424
|
+
variant: 'heading'
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
block: 'text',
|
|
428
|
+
text: 'The {{domain.renewalPrice}} renewal for {{domain.name}} could not be charged to the card on file.',
|
|
429
|
+
variant: 'body'
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
block: 'text',
|
|
433
|
+
text: 'Next try: {{domain.nextAttempt}}\nExpires if not renewed: {{domain.expiresOn}}',
|
|
434
|
+
variant: 'details'
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
block: 'text',
|
|
438
|
+
text: 'Update the card on the Billing page and we will try again on {{domain.nextAttempt}}, or renew it right away from the Custom Domain page. If the domain expires, {{site.name}} goes back to its free address.',
|
|
439
|
+
variant: 'body'
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
block: 'button',
|
|
443
|
+
label: 'Update payment method',
|
|
444
|
+
href: '{{billingUrl}}'
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
block: 'text',
|
|
448
|
+
text: 'Renew now: {{domain.manageUrl}}',
|
|
449
|
+
variant: 'caption'
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
footerReason: footer,
|
|
453
|
+
source: SOURCE
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
key: DOMAIN_EMAIL_KEYS.expiring,
|
|
457
|
+
name: 'Domain expiring',
|
|
458
|
+
description: 'Sent before a bought domain expires because it will not renew: ' + 'auto-renew is off, or its renewal could not be charged.',
|
|
459
|
+
deliveredBy: 'resend',
|
|
460
|
+
defaultSubject: '{{domain.name}} expires on {{domain.expiresOn}}',
|
|
461
|
+
mergeTokens: [
|
|
462
|
+
t.domain,
|
|
463
|
+
t.site,
|
|
464
|
+
t.org,
|
|
465
|
+
t.expiresOn,
|
|
466
|
+
t.expiryReason,
|
|
467
|
+
t.manageUrl
|
|
468
|
+
],
|
|
469
|
+
defaultBody: [
|
|
470
|
+
{
|
|
471
|
+
block: 'text',
|
|
472
|
+
text: '{{site.name}}',
|
|
473
|
+
variant: 'eyebrow'
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
block: 'text',
|
|
477
|
+
text: '{{domain.name}} expires on {{domain.expiresOn}}',
|
|
478
|
+
variant: 'heading'
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
block: 'text',
|
|
482
|
+
text: '{{domain.expiryReason}} After {{domain.expiresOn}}, {{site.name}} goes back to its free address, and the domain may become available for anyone to register.',
|
|
483
|
+
variant: 'body'
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
block: 'text',
|
|
487
|
+
text: 'To keep it, turn auto-renew on or renew it now from the Custom Domain page.',
|
|
488
|
+
variant: 'body'
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
block: 'button',
|
|
492
|
+
label: 'Keep {{domain.name}}',
|
|
493
|
+
href: '{{domain.manageUrl}}'
|
|
494
|
+
}
|
|
495
|
+
],
|
|
496
|
+
footerReason: footer,
|
|
497
|
+
source: SOURCE
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
key: DOMAIN_EMAIL_KEYS.expired,
|
|
501
|
+
name: 'Domain expired',
|
|
502
|
+
description: 'Sent when a bought domain has expired.',
|
|
503
|
+
deliveredBy: 'resend',
|
|
504
|
+
defaultSubject: '{{domain.name}} has expired',
|
|
505
|
+
mergeTokens: [
|
|
506
|
+
t.domain,
|
|
507
|
+
t.site,
|
|
508
|
+
t.org,
|
|
509
|
+
t.manageUrl
|
|
510
|
+
],
|
|
511
|
+
defaultBody: [
|
|
512
|
+
{
|
|
513
|
+
block: 'text',
|
|
514
|
+
text: '{{site.name}}',
|
|
515
|
+
variant: 'eyebrow'
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
block: 'text',
|
|
519
|
+
text: '{{domain.name}} has expired',
|
|
520
|
+
variant: 'heading'
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
block: 'text',
|
|
524
|
+
text: '{{domain.name}} reached the end of its registration and was not renewed. {{site.name}} is back on its free address, so it is still online.',
|
|
525
|
+
variant: 'body'
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
block: 'text',
|
|
529
|
+
text: 'For a short while after it expires, a domain can usually still be renewed by its owner. The Custom Domain page shows whether yours can.',
|
|
530
|
+
variant: 'body'
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
block: 'button',
|
|
534
|
+
label: 'Open the Custom Domain page',
|
|
535
|
+
href: '{{domain.manageUrl}}'
|
|
536
|
+
}
|
|
537
|
+
],
|
|
538
|
+
footerReason: footer,
|
|
539
|
+
source: SOURCE
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
key: DOMAIN_EMAIL_KEYS.transferCode,
|
|
543
|
+
name: 'Domain transfer code requested',
|
|
544
|
+
description: 'Tells a workspace’s owners that someone asked for the code that moves ' + 'a bought domain to another registrar.',
|
|
545
|
+
deliveredBy: 'resend',
|
|
546
|
+
defaultSubject: 'A transfer code was requested for {{domain.name}}',
|
|
547
|
+
mergeTokens: [
|
|
548
|
+
t.domain,
|
|
549
|
+
t.site,
|
|
550
|
+
t.org,
|
|
551
|
+
t.requestedBy,
|
|
552
|
+
t.manageUrl
|
|
553
|
+
],
|
|
554
|
+
defaultBody: [
|
|
555
|
+
{
|
|
556
|
+
block: 'text',
|
|
557
|
+
text: 'Security · {{domain.name}}',
|
|
558
|
+
variant: 'eyebrow'
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
block: 'text',
|
|
562
|
+
text: 'A transfer code was requested for {{domain.name}}',
|
|
563
|
+
variant: 'heading'
|
|
564
|
+
},
|
|
565
|
+
{
|
|
566
|
+
block: 'text',
|
|
567
|
+
text: '{{domain.requestedBy}} asked for the code that moves {{domain.name}} to another registrar. The code was shown to them in the console.',
|
|
568
|
+
variant: 'body'
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
block: 'text',
|
|
572
|
+
text: 'If that was expected, there is nothing to do. If not, tell your workspace’s owner and contact support right away: {{brand.supportUrl}}',
|
|
573
|
+
variant: 'body'
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
block: 'button',
|
|
577
|
+
label: 'Open the Custom Domain page',
|
|
578
|
+
href: '{{domain.manageUrl}}'
|
|
579
|
+
}
|
|
580
|
+
],
|
|
581
|
+
footerReason: footer,
|
|
582
|
+
source: SOURCE
|
|
583
|
+
}
|
|
584
|
+
];
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
//# sourceMappingURL=domain-emails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../libs/shared/util/email/src/lib/domain-emails.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*==========================================\n * A DOMAIN BOUGHT THROUGH THE PLATFORM, AS SYSTEM EMAILS (AGL-3962).\n *\n * The domains plugin writes every one of these: the purchase, the refund\n * when a registration fails, ICANN's registrant check, the renewal notice\n * and its outcome, the expiry, and the transfer code. Each is a key of its\n * own so staff can redesign one without touching the others.\n *\n * They live here, beside the catalog, because system emails have no plugin\n * seam: the staff System emails page reads this registry before any plugin\n * loads. `source` names the plugin file that sends each one.\n *\n * Prices and dates arrive formatted (`$15.99`, `Oct 19, 2027`), because the\n * sender knows the currency and the reader's locale and a template does not.\n *=========================================*/\n\nimport type {\n SystemEmailMergeToken,\n SystemEmailTemplateDefinition,\n} from './system-email-catalog'\n\nexport const DOMAIN_EMAIL_KEYS = {\n purchased: 'domain-purchased',\n refunded: 'domain-refunded',\n verifyRegistrant: 'domain-verify-registrant',\n renewalNotice: 'domain-renewal-notice',\n renewed: 'domain-renewed',\n renewalFailed: 'domain-renewal-failed',\n expiring: 'domain-expiring',\n expired: 'domain-expired',\n transferCode: 'domain-transfer-code',\n} as const\n\nconst SOURCE = 'libs/plugins/domains/src/lib/server/domain-emails.ts'\n\nfunction tokens(origin: string): Record<string, SystemEmailMergeToken> {\n return {\n domain: { name: 'domain.name', description: 'The domain name', sample: 'testbakery.com' },\n site: { name: 'site.name', description: 'The site the domain belongs to', sample: 'Test Bakery' },\n org: { name: 'org.name', description: 'The workspace', sample: 'Test Org' },\n manageUrl: {\n name: 'domain.manageUrl',\n description: \"The site's Custom Domain page\",\n sample: `${origin}/test-org/hosts/test-bakery/admin/domain`,\n },\n billingUrl: {\n name: 'billingUrl',\n description: \"The workspace's Billing page\",\n sample: `${origin}/test-org/billing`,\n },\n firstYear: {\n name: 'domain.firstYear',\n description: 'What the first year cost',\n sample: '$15.99',\n },\n renewalPrice: { name: 'domain.renewalPrice', description: 'The yearly renewal price', sample: '$15.99' },\n renewsOn: { name: 'domain.renewsOn', description: 'The date the domain renews', sample: 'Oct 19, 2027' },\n chargeOn: {\n name: 'domain.chargeOn',\n description: 'About when the renewal is charged',\n sample: 'Sep 19, 2027',\n },\n expiresOn: { name: 'domain.expiresOn', description: 'The date the domain expires', sample: 'Oct 19, 2027' },\n registrant: {\n name: 'domain.registrant',\n description: 'Who the domain is registered to',\n sample: 'Alex Test',\n },\n registrantEmail: {\n name: 'domain.registrantEmail',\n description: \"The registrant's email, which the registrar verifies\",\n sample: 'alex@testbakery.com',\n },\n verifyBy: {\n name: 'domain.verifyBy',\n description: 'The date the registrant email must be confirmed by',\n sample: 'Nov 2, 2026',\n },\n amount: { name: 'domain.amount', description: 'An amount charged', sample: '$15.99' },\n refund: {\n name: 'domain.refund',\n description: 'What was refunded, or that nothing was charged, in a sentence',\n sample:\n 'We refunded $15.99 to the card it was charged to. A refund usually reaches the card within 5 to 10 business days.',\n },\n failure: {\n name: 'domain.failure',\n description: 'Why it did not happen, in a sentence',\n sample: 'Someone else registered it a moment before your order reached the registrar.',\n },\n nextAttempt: {\n name: 'domain.nextAttempt',\n description: 'When the renewal charge will be tried again',\n sample: 'Sep 22, 2027',\n },\n expiryReason: {\n name: 'domain.expiryReason',\n description: 'Why the domain will not renew, in a sentence',\n sample: 'Auto-renew is turned off for it.',\n },\n requestedBy: {\n name: 'domain.requestedBy',\n description: 'Who asked for the transfer code',\n sample: 'alex@testbakery.com',\n },\n }\n}\n\nexport function domainSystemEmailTemplates(\n origin: string,\n): SystemEmailTemplateDefinition[] {\n const t = tokens(origin)\n const footer =\n 'You’re receiving this because you manage {{org.name}} on ' +\n '{{brand.productName}} and it bought {{domain.name}} through it.'\n return [\n {\n key: DOMAIN_EMAIL_KEYS.purchased,\n name: 'Domain purchased',\n description:\n \"Sent to a workspace's owners and admins when a domain bought for one \" +\n 'of its sites is registered.',\n deliveredBy: 'resend',\n defaultSubject: '{{domain.name}} is yours',\n mergeTokens: [\n t.domain, t.site, t.org, t.firstYear, t.renewalPrice, t.renewsOn,\n t.registrant, t.registrantEmail, t.manageUrl,\n ],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: '{{domain.name}} is yours', variant: 'heading' },\n { block: 'text', text: '{{domain.name}} is registered to you and is being connected to {{site.name}}. It usually serves within a few minutes, with its security certificate set up for you. There are no DNS records to add.', variant: 'body' },\n { block: 'text', text: 'Domain: {{domain.name}}\\nFirst year: {{domain.firstYear}}\\nRenews: {{domain.renewsOn}} for {{domain.renewalPrice}} a year\\nRegistered to: {{domain.registrant}}', variant: 'details' },\n { block: 'text', text: 'One thing for you to do', variant: 'subheading' },\n { block: 'text', text: 'The registrar will email {{domain.registrantEmail}} asking you to confirm the address. ICANN, which oversees domain names, requires it, and a domain whose owner never confirms can be suspended. Open that email and confirm when it arrives.', variant: 'body' },\n { block: 'button', label: 'Manage your domain', href: '{{domain.manageUrl}}' },\n { block: 'text', text: 'Auto-renew is on. You can turn it off, or move the domain to another registrar, at any time from the site’s Custom Domain page.', variant: 'caption' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.refunded,\n name: 'Domain purchase refunded',\n description:\n 'Sent when a domain could not be registered after it was paid for, ' +\n 'and the charge was refunded.',\n deliveredBy: 'resend',\n defaultSubject: 'We couldn’t register {{domain.name}}',\n mergeTokens: [t.domain, t.site, t.org, t.failure, t.refund, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: 'We couldn’t register {{domain.name}}', variant: 'heading' },\n { block: 'text', text: '{{domain.failure}}', variant: 'body' },\n { block: 'text', text: '{{domain.refund}}', variant: 'body' },\n { block: 'text', text: 'Another name may well be free. The Custom Domain page searches as you type.', variant: 'body' },\n { block: 'button', label: 'Find another domain', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.verifyRegistrant,\n name: 'Confirm the domain’s registrant email',\n description:\n \"Reminds a workspace's owners that ICANN's registrant email check for \" +\n 'a bought domain is still outstanding.',\n deliveredBy: 'resend',\n defaultSubject: 'Confirm your email to keep {{domain.name}}',\n mergeTokens: [t.domain, t.site, t.org, t.registrantEmail, t.verifyBy, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{domain.name}}', variant: 'eyebrow' },\n { block: 'text', text: 'Confirm your email to keep {{domain.name}}', variant: 'heading' },\n { block: 'text', text: 'The registrar sent a confirmation email to {{domain.registrantEmail}}, and it has not been confirmed yet. ICANN requires every domain owner to confirm this address, and a domain that is not confirmed by {{domain.verifyBy}} can be suspended, which takes the site offline at that address.', variant: 'body' },\n { block: 'text', text: 'Look for an email about verifying your domain contact information, including in your spam folder, and follow its link. If it never arrived, contact support: {{brand.supportUrl}}', variant: 'body' },\n { block: 'button', label: 'Open the Custom Domain page', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.renewalNotice,\n name: 'Domain renewal notice',\n description:\n 'Sent about 45 days before a bought domain renews, naming the price ' +\n 'and the date it will be charged.',\n deliveredBy: 'resend',\n defaultSubject: '{{domain.name}} renews on {{domain.renewsOn}}',\n mergeTokens: [t.domain, t.site, t.org, t.renewalPrice, t.renewsOn, t.chargeOn, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: '{{domain.name}} renews on {{domain.renewsOn}}', variant: 'heading' },\n { block: 'text', text: 'Auto-renew is on for {{domain.name}}, so it will renew for another year and keep {{site.name}} at the same address.', variant: 'body' },\n { block: 'text', text: 'Renewal: {{domain.renewalPrice}} for one year\\nCharged: around {{domain.chargeOn}}, to the card on file\\nRenews: {{domain.renewsOn}}', variant: 'details' },\n { block: 'text', text: 'You will not be charged more than this for this renewal. If you no longer want the domain, turn auto-renew off before {{domain.chargeOn}} and it will expire on {{domain.renewsOn}}.', variant: 'body' },\n { block: 'button', label: 'Manage auto-renew', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.renewed,\n name: 'Domain renewed',\n description: 'Confirms a bought domain renewed for another year.',\n deliveredBy: 'resend',\n defaultSubject: '{{domain.name}} is renewed until {{domain.expiresOn}}',\n mergeTokens: [t.domain, t.site, t.org, t.amount, t.expiresOn, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: '{{domain.name}} is renewed', variant: 'heading' },\n { block: 'text', text: '{{domain.name}} renewed for another year, so {{site.name}} keeps its address.', variant: 'body' },\n { block: 'text', text: 'Charged: {{domain.amount}}\\nRegistered until: {{domain.expiresOn}}', variant: 'details' },\n { block: 'button', label: 'Manage your domain', href: '{{domain.manageUrl}}' },\n { block: 'text', text: 'The receipt is with your other invoices on the Billing page.', variant: 'caption' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.renewalFailed,\n name: 'Domain renewal payment failed',\n description:\n 'Sent when the charge for a domain renewal fails, with the next try ' +\n 'and the date the domain expires.',\n deliveredBy: 'resend',\n defaultSubject: 'We couldn’t renew {{domain.name}}',\n mergeTokens: [t.domain, t.site, t.org, t.renewalPrice, t.nextAttempt, t.expiresOn, t.billingUrl, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: 'We couldn’t renew {{domain.name}}', variant: 'heading' },\n { block: 'text', text: 'The {{domain.renewalPrice}} renewal for {{domain.name}} could not be charged to the card on file.', variant: 'body' },\n { block: 'text', text: 'Next try: {{domain.nextAttempt}}\\nExpires if not renewed: {{domain.expiresOn}}', variant: 'details' },\n { block: 'text', text: 'Update the card on the Billing page and we will try again on {{domain.nextAttempt}}, or renew it right away from the Custom Domain page. If the domain expires, {{site.name}} goes back to its free address.', variant: 'body' },\n { block: 'button', label: 'Update payment method', href: '{{billingUrl}}' },\n { block: 'text', text: 'Renew now: {{domain.manageUrl}}', variant: 'caption' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.expiring,\n name: 'Domain expiring',\n description:\n 'Sent before a bought domain expires because it will not renew: ' +\n 'auto-renew is off, or its renewal could not be charged.',\n deliveredBy: 'resend',\n defaultSubject: '{{domain.name}} expires on {{domain.expiresOn}}',\n mergeTokens: [t.domain, t.site, t.org, t.expiresOn, t.expiryReason, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: '{{domain.name}} expires on {{domain.expiresOn}}', variant: 'heading' },\n { block: 'text', text: '{{domain.expiryReason}} After {{domain.expiresOn}}, {{site.name}} goes back to its free address, and the domain may become available for anyone to register.', variant: 'body' },\n { block: 'text', text: 'To keep it, turn auto-renew on or renew it now from the Custom Domain page.', variant: 'body' },\n { block: 'button', label: 'Keep {{domain.name}}', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.expired,\n name: 'Domain expired',\n description: 'Sent when a bought domain has expired.',\n deliveredBy: 'resend',\n defaultSubject: '{{domain.name}} has expired',\n mergeTokens: [t.domain, t.site, t.org, t.manageUrl],\n defaultBody: [\n { block: 'text', text: '{{site.name}}', variant: 'eyebrow' },\n { block: 'text', text: '{{domain.name}} has expired', variant: 'heading' },\n { block: 'text', text: '{{domain.name}} reached the end of its registration and was not renewed. {{site.name}} is back on its free address, so it is still online.', variant: 'body' },\n { block: 'text', text: 'For a short while after it expires, a domain can usually still be renewed by its owner. The Custom Domain page shows whether yours can.', variant: 'body' },\n { block: 'button', label: 'Open the Custom Domain page', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n {\n key: DOMAIN_EMAIL_KEYS.transferCode,\n name: 'Domain transfer code requested',\n description:\n 'Tells a workspace’s owners that someone asked for the code that moves ' +\n 'a bought domain to another registrar.',\n deliveredBy: 'resend',\n defaultSubject: 'A transfer code was requested for {{domain.name}}',\n mergeTokens: [t.domain, t.site, t.org, t.requestedBy, t.manageUrl],\n defaultBody: [\n { block: 'text', text: 'Security · {{domain.name}}', variant: 'eyebrow' },\n { block: 'text', text: 'A transfer code was requested for {{domain.name}}', variant: 'heading' },\n { block: 'text', text: '{{domain.requestedBy}} asked for the code that moves {{domain.name}} to another registrar. The code was shown to them in the console.', variant: 'body' },\n { block: 'text', text: 'If that was expected, there is nothing to do. If not, tell your workspace’s owner and contact support right away: {{brand.supportUrl}}', variant: 'body' },\n { block: 'button', label: 'Open the Custom Domain page', href: '{{domain.manageUrl}}' },\n ],\n footerReason: footer,\n source: SOURCE,\n },\n ]\n}\n"],"names":["DOMAIN_EMAIL_KEYS","purchased","refunded","verifyRegistrant","renewalNotice","renewed","renewalFailed","expiring","expired","transferCode","SOURCE","tokens","origin","domain","name","description","sample","site","org","manageUrl","billingUrl","firstYear","renewalPrice","renewsOn","chargeOn","expiresOn","registrant","registrantEmail","verifyBy","amount","refund","failure","nextAttempt","expiryReason","requestedBy","domainSystemEmailTemplates","t","footer","key","deliveredBy","defaultSubject","mergeTokens","defaultBody","block","text","variant","label","href","footerReason","source"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Aglyn LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import type { SystemEmailTemplateDefinition } from './system-email-catalog';
|
|
18
|
+
export declare const SITE_CARE_REQUEST_RECEIVED_EMAIL_KEY = "site-care-request-received";
|
|
19
|
+
export declare const SITE_CARE_REQUEST_DONE_EMAIL_KEY = "site-care-request-done";
|
|
20
|
+
export declare const SITE_CARE_REQUEST_CORRECTED_EMAIL_KEY = "site-care-request-corrected";
|
|
21
|
+
export declare const SITE_CARE_APPROVAL_EMAIL_KEY = "site-care-approval-confirmation";
|
|
22
|
+
export declare const SITE_CARE_CHARGE_REVERSED_EMAIL_KEY = "site-care-charge-reversed";
|
|
23
|
+
export declare const SITE_CARE_STATEMENT_EMAIL_KEY = "site-care-statement";
|
|
24
|
+
export declare const SITE_CARE_QUOTE_EMAIL_KEY = "site-care-quote";
|
|
25
|
+
export declare const SITE_CARE_UNKNOWN_SENDER_EMAIL_KEY = "site-care-unknown-sender";
|
|
26
|
+
export declare const SITE_CARE_SYSTEM_EMAIL_TEMPLATES: readonly SystemEmailTemplateDefinition[];
|