@ydtb/core-layer-resend
v0.13.10
Published
Resend email layer for Anvil — transactional email sending via the Resend API
Readme
@ydtb/core-layer-resend
Transactional email layer for Anvil apps.
This package currently owns the shared email layer contract plus three provider styles:
consoleEmail— tests and simple stdout/local loggingsmtpEmail/localInboxEmail— local inbox delivery via SMTP, such as Supabase Inbucket or Mailpitresend— production delivery through Resend
The package name is historical; do not interpret it as meaning Resend is the only supported provider.
Email layer contract
Tools and app code send transactional email through the layer, not by importing a provider directly:
import { getLayer } from "@ydtb/core-server"
const email = getLayer("email")
await email.send({
to: "[email protected]",
subject: "Welcome",
body: "Thanks for signing up.",
html: "<p>Thanks for signing up.</p>",
})from can be passed per message, or supplied as a provider defaultFrom.
Console provider
Use consoleEmail for tests and for simple local debugging where stdout is enough:
import { consoleEmail } from "@ydtb/core-layer-resend/console"
email: consoleEmail({ silent: false })Use silent: true in tests when you only need the layer contract and do not want log noise.
Local inbox / SMTP provider
Use localInboxEmail for Supabase Inbucket / Mailpit-style local development where developers need a clickable inbox UI:
import { localInboxEmail } from "@ydtb/core-layer-resend/local-inbox"
email: localInboxEmail({
port: 54324,
defaultFrom: "YDTB Dev <dev@localhost>",
})For explicit SMTP settings, use smtpEmail:
import { smtpEmail } from "@ydtb/core-layer-resend/smtp"
email: smtpEmail({
host: "127.0.0.1",
port: 54324,
secure: false,
defaultFrom: "YDTB Dev <dev@localhost>",
})Known local inbox examples in the YDTB deployments workspace:
apps/main: Supabase local inbox UI on54324apps/dev: Supabase local inbox UI on54354apps/lbl: Supabase local inbox UI on54364
Check the app's supabase/config.toml for the authoritative local ports before wiring an app.
Resend provider
Use resend for production transactional delivery:
import { resend } from "@ydtb/core-layer-resend"
email: resend({
apiKey: env.RESEND_API_KEY as string,
defaultFrom: "YDTB <[email protected]>",
})Choosing a provider
- Tests:
consoleEmail({ silent: true }) - Local development with clickable messages:
localInboxEmail(...)orsmtpEmail(...) - Production:
resend(...)
Consumer flows such as better-auth password reset emails or scope invitations still need to call getLayer("email").send(...) at their own codepaths.
