github emdash-cms/emdash @emdash-cms/cloudflare@0.40.0

Minor Changes

  • #3333 26f2076 Thanks @swissky! - Adds optional cc and replyTo fields to plugin email messages, including from sandboxed plugins:

    await ctx.email.send({ to, cc: ["team@example.com"], replyTo: visitorEmail, subject, text });

    ctx.email.send() throws when cc is not an array of strings or replyTo is not a string. email:beforeSend, email:deliver, and email:afterSend hooks receive both fields on event.message, and the development console provider prints them. The Cloudflare email provider delivers both, and a message's replyTo overrides the provider's configured replyTo. Custom email:deliver providers should pass cc and replyTo to their email service.

Patch Changes

  • #3352 d177c5e Thanks @eisenbruch! - Fixes emdash migrate on Cloudflare D1 failing with D1 response is too large in 079_datetime_normalization. The REST transport refused any response over 1 MiB, and a batch of fifty revisions with their bodies is several MiB on a site with real content. The default bound is now 64 MiB; maxResponseBytes still tightens it.

  • #3151 08e93b8 Thanks @emdashbot! - Fix cloudflareEmail() silently failing to reach binding.send() on some Astro Cloudflare builds, and make email delivery errors visible in runtime logs.

    • The provider now resolves cloudflare:workers env through a dedicated helper module (cloudflare-email-env.ts) so the Worker runtime evaluates it as a static import rather than a direct dynamic import of the built-in specifier. This avoids bundler/runtime paths where import("cloudflare:workers") inside the bundled Worker did not resolve.
    • EmailPipeline.send() now console.errors the provider and recipient before re-throwing a delivery error, so failures are not lost when callers (e.g. magic-link routes) intentionally swallow the error to avoid leaking whether an account exists.

    No configuration changes are required; existing send_email bindings continue to work.

  • #3346 1796cd5 Thanks @ascorbic! - Updates sandboxed plugin content writes to respect the site transfer write fence. While a site import is writing, or after a failed or cancelled import until it is abandoned, ctx.content create, update, and delete calls fail with 503 TRANSFER_IMPORT_IN_PROGRESS. When the fence cannot be checked, they now fail with TRANSFER_FENCE_CHECK_FAILED instead of MEDIA_USAGE_ACTIVATION_CHECK_FAILED.

  • #3114 0327f77 Thanks @logelog! - Fixes ctx.kv.set() and storage collection put() and putMany() writes for sandboxed plugins on Cloudflare. Overwrites retain creation timestamps, and unique constraint failures preserve existing records.

  • Updated dependencies [f58b8f6, 5a9d822, c99bcd3, b8fae35, 678b848, 1b1d443, 043960e, f3f7cc3, 5eaf095, 2e8e063, 840a9d3, 9a5d5b9, 08e93b8, 6f1b046, ed51c68, 7df822b, 21ee693, c78a6cb, ecef5a9, bf6b0a9, ad1465d, f832fe9, 4a5241a, 2db6c98, e9b70ec, 14e9fdd, 931b40d, 19488ec, 26f2076, 6ebd4ef, b2f6c06, e4b0d81, baf3010, b804977, 4028ee4, 90ed23f, 66f50dd, 6f83886, 1796cd5, 3be2921, 4a69cc6, 20858ed, d9f0d85, 86a33ee, b5ad2fe, ff0ef63]:

    • emdash@0.40.0

Don't miss a new emdash release

NewReleases is sending notifications on new releases.