forked from gov-suite/governed-text-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmod_test-html-email-messages.tmpl.ts
86 lines (78 loc) · 2.26 KB
/
mod_test-html-email-messages.tmpl.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { safety } from "./deps.ts";
import * as mod from "./mod.ts";
import {
anchorTip,
callToActionButton,
executeTemplate as layout,
p,
} from "./mod_test-html-email-layout.tmpl.ts";
export interface AuthnMessageContent {
readonly authnUrl: string;
}
export const [isValidAuthnMessageContent, onInvalidAuthnMessageContent] = mod
.contentGuard<AuthnMessageContent>(
"authnUrl",
);
export function prepareCreatePasswordEmailMessage(
content: AuthnMessageContent,
): string {
return layout({
heading: "Create Password",
body: `${p`Hi`}
${p`Welcome to Medigy, please click below to create your password.`}
${callToActionButton("Create a new password", content.authnUrl)}
${anchorTip(content.authnUrl)}`,
});
}
export function prepareResetPasswordEmailMessage(
content: AuthnMessageContent,
): string {
return layout({
heading: "Reset Password",
body: `${p`Hi`}
${p
`We're sorry you had trouble logging in, please tap below to reset your password.`}
${callToActionButton("Reset your password", content.authnUrl)}
${anchorTip(content.authnUrl)}`,
});
}
export const templateIdentities = [
"create-password",
"reset-password",
] as const;
export type TemplateIdentity = typeof templateIdentities[number];
export const contentGuards: Record<TemplateIdentity, [
safety.TypeGuard<unknown>,
mod.ContentGuardIssueReporter,
]> = {
"create-password": [isValidAuthnMessageContent, onInvalidAuthnMessageContent],
"reset-password": [isValidAuthnMessageContent, onInvalidAuthnMessageContent],
};
export const [
isValidContent,
onInvalidContent,
isValidTemplateID,
onInvalidTemplateID,
] = mod
.templateIdentityGuard<TemplateIdentity>(templateIdentities, contentGuards);
export function executeTemplate(
content: AuthnMessageContent,
templateIdentity: TemplateIdentity,
): string {
if (!isValidTemplateID(templateIdentity)) {
return onInvalidTemplateID(templateIdentity, content);
}
switch (templateIdentity) {
case "create-password":
return prepareCreatePasswordEmailMessage(content);
case "reset-password":
return prepareResetPasswordEmailMessage(content);
}
}
export default [
executeTemplate,
isValidContent,
onInvalidContent,
isValidTemplateID,
onInvalidTemplateID,
];