Every subject and body moves out of `mailer.js` into `engagement_templates` rows an operator can edit. A relocation, not a regression: nothing that sends mail today starts depending on an operator authoring something first. - `email.*` block family in its own registry, sharing the page family's envelope walk and validate-then-sanitize order by binding rather than by copy. - A server-side renderer producing both parts of a multipart message; the text part is byte-identical to the literals this commit deletes. - Nine seeded templates, six of them wired now; the seeder's `customized = 0` guard lives in the UPDATE's own WHERE. - `renderByKey` falls back to the shipped seed when a row is missing or unusable, so no failure of the table can stop a password reset. Also fixes `check:hosts` reading the template key `auth.email-verify` as the hostname `auth.email`. Co-Authored-By: Claude <noreply@anthropic.com>
27 lines
1017 B
JavaScript
27 lines
1017 B
JavaScript
// Email block registry entrypoint. Requiring this module registers every
|
|
// `email.*` block definition exactly once, then re-exports the registry API, the
|
|
// renderer and the registry-bound validator/sanitizer. Anything that needs to
|
|
// validate or render a mail template's blocks should require THIS module, not
|
|
// ./registry or ./render directly, so the definitions are guaranteed loaded.
|
|
//
|
|
// Same shape as `blocks/index.js`, on purpose — the two families are siblings
|
|
// (see ./registry.js for why they are not one registry).
|
|
|
|
const registry = require('./registry')
|
|
const render = require('./render')
|
|
const interpolate = require('./interpolate')
|
|
|
|
// ── Block definitions (self-register on require) ───────────────────────────
|
|
require('./types/heading')
|
|
require('./types/text')
|
|
require('./types/button')
|
|
require('./types/divider')
|
|
require('./types/image')
|
|
require('./types/itemList')
|
|
|
|
module.exports = {
|
|
...registry,
|
|
...render,
|
|
...interpolate,
|
|
}
|