81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
/**
|
|
* Renders the email that greets a new account. `sendWelcomeEmail`
|
|
* (`user-service.ts`) sends it after sign-up, in the instance's style and
|
|
* language. It opens with the instance's `GERBEUR_WELCOME_EMAIL_BODY`, or the
|
|
* built-in body, then says the digests are on, since they are by default, and
|
|
* where to turn them off.
|
|
*
|
|
* @module
|
|
*/
|
|
|
|
import { FRONTEND_URL, OG_SITE_NAME, WELCOME_EMAIL_BODY } from "../config.ts";
|
|
import { i18n } from "./i18n.ts";
|
|
import {
|
|
EmailKit,
|
|
escMd,
|
|
lookOf,
|
|
mdLink,
|
|
type RenderedEmail,
|
|
} from "./layout.ts";
|
|
|
|
/**
|
|
* Returns the welcome email of `username`. The instance's body has
|
|
* `{{username}}` and `{{site_name}}` filled in; raw HTML in it passes
|
|
* through, since it comes from whoever runs the instance, never from a user.
|
|
*/
|
|
export function renderWelcomeEmail(username: string): RenderedEmail {
|
|
// A username may hold a `_`, which Markdown would read as emphasis.
|
|
const body = WELCOME_EMAIL_BODY
|
|
? WELCOME_EMAIL_BODY
|
|
.replaceAll("{{username}}", escMd(username))
|
|
.replaceAll("{{site_name}}", escMd(OG_SITE_NAME))
|
|
: i18n._({
|
|
id: "email.welcome.body",
|
|
message:
|
|
"# Welcome to {site}!\n\nHi **{username}**,\n\nYour account has been created successfully. Welcome aboard!",
|
|
values: { site: escMd(OG_SITE_NAME), username: escMd(username) },
|
|
});
|
|
const markdown = [
|
|
body,
|
|
mdLink(
|
|
i18n._({
|
|
id: "email.welcome.button",
|
|
message: "Open {site}",
|
|
values: { site: OG_SITE_NAME },
|
|
}),
|
|
FRONTEND_URL,
|
|
),
|
|
`*${
|
|
escMd(
|
|
i18n._({
|
|
id: "email.welcome.digests",
|
|
message:
|
|
"Once a week you'll get a digest of what happened here, and once a month a recap of the most upvoted dumps. You can turn either off in your settings.",
|
|
}),
|
|
)
|
|
}*`,
|
|
"---",
|
|
escMd(
|
|
i18n._({
|
|
id: "email.welcome.reason",
|
|
message:
|
|
"You're getting this email because an account was created on {site} with this address.",
|
|
values: { site: OG_SITE_NAME },
|
|
}),
|
|
),
|
|
].join("\n\n");
|
|
|
|
return new EmailKit(lookOf()).render({
|
|
subject: i18n._({
|
|
id: "email.welcome.subject",
|
|
message: "Welcome to {site}",
|
|
values: { site: OG_SITE_NAME },
|
|
}),
|
|
preheader: i18n._({
|
|
id: "email.welcome.preheader",
|
|
message: "Your account is ready.",
|
|
}),
|
|
markdown,
|
|
});
|
|
}
|