void 0.10.12 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS_TEMPLATE.md +6 -0
- package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
- package/README.md +34 -8
- package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
- package/dist/auth-W9WII-mN.mjs +630 -0
- package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
- package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
- package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
- package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
- package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
- package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
- package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
- package/dist/cf-access-AJ1ehiFR.mjs +42 -0
- package/dist/cf-access-DsSsZUPr.mjs +67 -0
- package/dist/cli/cli.d.mts +1 -1
- package/dist/cli/cli.mjs +1592 -153
- package/dist/cli/env-schema-probe.d.mts +48 -61
- package/dist/cli/env-schema-probe.mjs +10 -58
- package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
- package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
- package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
- package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
- package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
- package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
- package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
- package/dist/connect-D9Yr-T5f.mjs +79 -0
- package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
- package/dist/database-provider.d.mts +21 -0
- package/dist/database-provider.mjs +6 -0
- package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
- package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
- package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
- package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
- package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
- package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
- package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
- package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
- package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
- package/dist/dotenv-VQxupEUv.mjs +181 -0
- package/dist/edge.d.mts +2 -0
- package/dist/edge.mjs +2 -0
- package/dist/email-Ce6SQq-i.mjs +182 -0
- package/dist/email-r6DHJyAB.mjs +262 -0
- package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
- package/dist/env-D4Emu-M_.mjs +95 -0
- package/dist/env-DmU2To0C.mjs +73 -0
- package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
- package/dist/env-public-D_6u46fX.d.mts +135 -0
- package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
- package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
- package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
- package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
- package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
- package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
- package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
- package/dist/inbound-BJ70in1n.d.mts +354 -0
- package/dist/inbound-CNKxb3FY.mjs +694 -0
- package/dist/index.d.mts +61 -34
- package/dist/index.mjs +1048 -321
- package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
- package/dist/link-D_rm5sRH.mjs +52 -0
- package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
- package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
- package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
- package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
- package/dist/mime-BJD7d_qL.mjs +1216 -0
- package/dist/neon-DHwd2zvC.mjs +54 -0
- package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
- package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
- package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
- package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
- package/dist/pages/client.d.mts +43 -41
- package/dist/pages/client.mjs +40 -33
- package/dist/pages/head-client.d.mts +10 -12
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/index.d.mts +37 -14
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.d.mts +25 -27
- package/dist/pages/islands-plugin.mjs +6 -4
- package/dist/pages/prefetch.d.mts +6 -7
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -1
- package/dist/pages/serialize.d.mts +7 -8
- package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
- package/dist/platform-domain-BszUfiS8.mjs +228 -0
- package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
- package/dist/platform-management-W30iCaTL.mjs +698 -0
- package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
- package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
- package/dist/prepare-BfJvFUtJ.mjs +14 -0
- package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
- package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
- package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
- package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
- package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
- package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
- package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
- package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
- package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
- package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
- package/dist/rollback-CtlPXEBi.mjs +166 -0
- package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
- package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
- package/dist/routes-stub.d.mts +22 -23
- package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
- package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
- package/dist/runtime/ai.d.mts +21 -14
- package/dist/runtime/ai.mjs +5 -4
- package/dist/runtime/auth-client-react.d.mts +3 -5
- package/dist/runtime/auth-client-solid.d.mts +3 -5
- package/dist/runtime/auth-client-svelte.d.mts +3 -5
- package/dist/runtime/auth-client-vue.d.mts +3 -5
- package/dist/runtime/auth-client.d.mts +3 -5
- package/dist/runtime/auth.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.d.mts +10 -0
- package/dist/runtime/better-auth-mysql.mjs +49 -0
- package/dist/runtime/better-auth-pg.d.mts +8 -9
- package/dist/runtime/better-auth-pg.mjs +2 -2
- package/dist/runtime/better-auth.d.mts +8 -9
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +1 -1
- package/dist/runtime/client-solid.d.mts +1 -1
- package/dist/runtime/client-svelte.d.mts +1 -1
- package/dist/runtime/client-vue.d.mts +1 -1
- package/dist/runtime/client.d.mts +1 -1
- package/dist/runtime/db-mysql.d.mts +2 -0
- package/dist/runtime/db-mysql.mjs +1 -0
- package/dist/runtime/db.d.mts +10 -11
- package/dist/runtime/durable.d.mts +47 -0
- package/dist/runtime/durable.mjs +146 -0
- package/dist/runtime/email/testing.d.mts +112 -0
- package/dist/runtime/email/testing.mjs +283 -0
- package/dist/runtime/email.d.mts +30 -0
- package/dist/runtime/email.mjs +573 -0
- package/dist/runtime/env-helpers.d.mts +2 -2
- package/dist/runtime/env-helpers.mjs +5 -42
- package/dist/runtime/env-public-client.d.mts +10 -11
- package/dist/runtime/env-public-client.mjs +1 -1
- package/dist/runtime/env-public.d.mts +2 -2
- package/dist/runtime/env-public.mjs +104 -49
- package/dist/runtime/env.d.mts +19 -18
- package/dist/runtime/env.mjs +15 -2
- package/dist/runtime/fetch-stream.d.mts +20 -21
- package/dist/runtime/fetch.d.mts +15 -16
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/isr.d.mts +21 -22
- package/dist/runtime/isr.mjs +26 -8
- package/dist/runtime/kv.d.mts +9 -10
- package/dist/runtime/live-client.d.mts +5 -7
- package/dist/runtime/live-client.mjs +9 -7
- package/dist/runtime/live-server.d.mts +4 -5
- package/dist/runtime/live.d.mts +22 -24
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/log.d.mts +16 -17
- package/dist/runtime/migration-handler-mysql.d.mts +4 -0
- package/dist/runtime/migration-handler-mysql.mjs +81 -0
- package/dist/runtime/migration-handler-pg.d.mts +2 -4
- package/dist/runtime/migration-handler.d.mts +5 -6
- package/dist/runtime/migration-handler.mjs +4 -3
- package/dist/runtime/queues.d.mts +3 -4
- package/dist/runtime/queues.mjs +2 -1
- package/dist/runtime/remote/binding-handler.d.mts +10 -12
- package/dist/runtime/remote/binding-handler.mjs +24 -3
- package/dist/runtime/remote/index.d.mts +5 -6
- package/dist/runtime/remote/index.mjs +21 -18
- package/dist/runtime/response.d.mts +10 -11
- package/dist/runtime/sandbox.d.mts +56 -55
- package/dist/runtime/sandbox.mjs +57 -49
- package/dist/runtime/schema-mysql.d.mts +1 -0
- package/dist/runtime/schema-mysql.mjs +2 -0
- package/dist/runtime/seed.d.mts +14 -9
- package/dist/runtime/sse-client.d.mts +6 -7
- package/dist/runtime/sse.d.mts +11 -12
- package/dist/runtime/storage.d.mts +3 -4
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +12 -12
- package/dist/runtime/ws-server.mjs +32 -4
- package/dist/runtime/ws.d.mts +19 -21
- package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
- package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
- package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
- package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
- package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
- package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
- package/dist/sveltekit.d.mts +12 -11
- package/dist/sveltekit.mjs +1 -1
- package/dist/types-BAp5AEBU.d.mts +79 -0
- package/dist/types-CKWnYgfy.d.mts +1 -0
- package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
- package/dist/wrangler--imS8n0d.mjs +1796 -0
- package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
- package/package.json +79 -65
- package/schema.json +35 -3
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
- package/skills/void/SKILL.md +59 -2
- package/skills/void/docs/guide/ai.md +32 -14
- package/skills/void/docs/guide/app-types.md +6 -6
- package/skills/void/docs/guide/auth.md +14 -16
- package/skills/void/docs/guide/database/d1.md +6 -0
- package/skills/void/docs/guide/database/mysql.md +60 -0
- package/skills/void/docs/guide/database/postgresql.md +14 -9
- package/skills/void/docs/guide/database.md +39 -26
- package/skills/void/docs/guide/deployment.md +163 -22
- package/skills/void/docs/guide/durable-state.md +140 -0
- package/skills/void/docs/guide/edge/headers.md +5 -5
- package/skills/void/docs/guide/edge/prerendering.md +2 -0
- package/skills/void/docs/guide/edge/revalidation.md +21 -6
- package/skills/void/docs/guide/edge/rewrites.md +18 -14
- package/skills/void/docs/guide/edge/static-assets.md +23 -8
- package/skills/void/docs/guide/email.md +609 -0
- package/skills/void/docs/guide/env-migration.md +109 -0
- package/skills/void/docs/guide/env-vars.md +70 -248
- package/skills/void/docs/guide/index.md +15 -17
- package/skills/void/docs/guide/jobs.md +8 -5
- package/skills/void/docs/guide/live.md +7 -15
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
- package/skills/void/docs/guide/pages-routing/islands.md +3 -3
- package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
- package/skills/void/docs/guide/pages-routing/overview.md +7 -7
- package/skills/void/docs/guide/platform-administration.md +212 -0
- package/skills/void/docs/guide/platform-development.md +235 -0
- package/skills/void/docs/guide/queues.md +10 -10
- package/skills/void/docs/guide/quickstart.md +46 -67
- package/skills/void/docs/guide/remote-dev.md +8 -6
- package/skills/void/docs/guide/sandboxes.md +33 -16
- package/skills/void/docs/guide/self-hosted-platform.md +553 -0
- package/skills/void/docs/guide/server-routing.md +25 -5
- package/skills/void/docs/guide/sse.md +4 -4
- package/skills/void/docs/guide/ssg.md +5 -3
- package/skills/void/docs/guide/storage.md +2 -2
- package/skills/void/docs/guide/websockets.md +18 -7
- package/skills/void/docs/index.md +3 -3
- package/skills/void/docs/integrations/agents.md +6 -64
- package/skills/void/docs/integrations/cloudflare.md +165 -146
- package/skills/void/docs/integrations/frameworks/analog.md +4 -4
- package/skills/void/docs/integrations/frameworks/astro.md +5 -5
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
- package/skills/void/docs/integrations/frameworks/overview.md +3 -3
- package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
- package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
- package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
- package/skills/void/docs/reference/api.md +42 -6
- package/skills/void/docs/reference/cli.md +637 -159
- package/skills/void/docs/reference/config.md +80 -25
- package/skills/void/docs/reference/resource-inference.md +13 -9
- package/skills/void/docs/reference/structure.md +10 -11
- package/AGENT_PROMPT.md +0 -19
- package/dist/cf-access-Bqw81xAf.mjs +0 -22
- package/dist/env-CZy5MorI.mjs +0 -299
- package/dist/env-helpers-z4stu8uc.d.mts +0 -52
- package/dist/env-mask-Dd47NbR6.mjs +0 -90
- package/dist/env-public-BfiLcMBk.d.mts +0 -140
- package/dist/link-CdGHSIy-.mjs +0 -45
- package/dist/mcp-DoM3_nhd.mjs +0 -377
- package/dist/project-paths-GpziKeQQ.d.mts +0 -25
- package/dist/providers-BNKRacMr.d.mts +0 -7
- package/dist/proxy-D-3_D-Gl.mjs +0 -5
- package/dist/rollback-CkvTFXx5.mjs +0 -90
- package/dist/runtime/isr-cache.d.mts +0 -207
- package/dist/runtime/isr-cache.mjs +0 -523
- package/dist/types-lLjNE9Qp.d.mts +0 -51
- package/getting-started-prompt.txt +0 -28
- package/skills/void/command/void.md +0 -7
- package/skills/void/docs/integrations/auth-providers.md +0 -0
- package/skills/void/docs/integrations/payment-processors.md +0 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
- package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
- package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
- package/skills/void/docs/node_modules/vitepress/README.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
- package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
- package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
- package/skills/void/docs/node_modules/void/README.md +0 -90
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
- package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
- package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { Email } from "postal-mime";
|
|
2
|
+
//#region src/runtime/email/types.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Public types for the void/email module.
|
|
5
|
+
*
|
|
6
|
+
* The runtime entrypoint (../email.ts) re-exports these so that consumers
|
|
7
|
+
* can import them via `import type { SendEmailOptions } from "void/email"`.
|
|
8
|
+
*/
|
|
9
|
+
type Address = string | {
|
|
10
|
+
email: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
};
|
|
13
|
+
interface Attachment {
|
|
14
|
+
filename: string;
|
|
15
|
+
content: string | Uint8Array | ArrayBuffer | Blob;
|
|
16
|
+
contentType?: string;
|
|
17
|
+
contentId?: string;
|
|
18
|
+
disposition?: "attachment" | "inline";
|
|
19
|
+
}
|
|
20
|
+
interface SendEmailOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Sender envelope address. Optional — when omitted, the framework
|
|
23
|
+
* substitutes `<__VOID_PROJECT_SLUG>+noreply@<__VOID_EMAIL_DOMAIN>`
|
|
24
|
+
* from the two platform-injected bindings (the project slug and the
|
|
25
|
+
* mail domain configured for this environment). Outside a deployed
|
|
26
|
+
* worker, or whenever either binding is missing, `sendEmail` returns
|
|
27
|
+
* `INVALID_FROM` — it never falls back to a baked-in domain.
|
|
28
|
+
*/
|
|
29
|
+
from?: Address;
|
|
30
|
+
to: Address | Array<Address>;
|
|
31
|
+
subject: string;
|
|
32
|
+
text?: string;
|
|
33
|
+
html?: string;
|
|
34
|
+
replyTo?: Address;
|
|
35
|
+
cc?: Address | Array<Address>;
|
|
36
|
+
bcc?: Address | Array<Address>;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
attachments?: Array<Attachment>;
|
|
39
|
+
/**
|
|
40
|
+
* Per-call escape hatch for local development. When true, bypasses the
|
|
41
|
+
* `void dev` in-memory inbox for this one send.
|
|
42
|
+
*
|
|
43
|
+
* It does not deliver. `void dev` binds no send transport at all: the
|
|
44
|
+
* platform's `__VOID_PROXY` service binding is added only on a deployed
|
|
45
|
+
* worker, and the own-account `SEND_EMAIL` binding is stripped under
|
|
46
|
+
* `serve`. With the inbox skipped there is nothing to fall through to,
|
|
47
|
+
* so the call returns `BINDING_MISSING`. To verify real delivery, deploy
|
|
48
|
+
* and send from the deployed worker.
|
|
49
|
+
*
|
|
50
|
+
* Has no effect outside `void dev` (production always sends; the dev
|
|
51
|
+
* inbox is registered only when `void dev` is running).
|
|
52
|
+
*/
|
|
53
|
+
sendInDev?: boolean;
|
|
54
|
+
}
|
|
55
|
+
type SendEmailErrorCode = "BINDING_MISSING" | "INVALID_FROM" | "INVALID_TO" | "UNVERIFIED_DESTINATION" | "MIME_ERROR" | "QUOTA_EXCEEDED" | "UPSTREAM_ERROR";
|
|
56
|
+
interface SendEmailError {
|
|
57
|
+
code: SendEmailErrorCode;
|
|
58
|
+
message: string;
|
|
59
|
+
cause?: unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* One successful CF envelope send. The `to`/`cc`/`bcc` fan-out produces one
|
|
63
|
+
* of these per recipient, since the CF `EmailMessage` envelope is
|
|
64
|
+
* single-recipient.
|
|
65
|
+
*/
|
|
66
|
+
interface SendEmailDelivery {
|
|
67
|
+
recipient: string;
|
|
68
|
+
messageId: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Per-recipient outcome for a multi-recipient send. `ok: true` carries the
|
|
72
|
+
* CF-issued messageId; `ok: false` carries the error for that specific
|
|
73
|
+
* recipient (e.g. one address is unverified while others succeed).
|
|
74
|
+
*/
|
|
75
|
+
type SendEmailRecipientResult = {
|
|
76
|
+
recipient: string;
|
|
77
|
+
ok: true;
|
|
78
|
+
messageId: string;
|
|
79
|
+
} | {
|
|
80
|
+
recipient: string;
|
|
81
|
+
ok: false;
|
|
82
|
+
error: SendEmailError;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Result of `sendEmail`.
|
|
86
|
+
*
|
|
87
|
+
* Three discriminated cases — narrow with `result.ok`, then check whether
|
|
88
|
+
* `'error' in result` (pre-flight failure, no sends attempted) or
|
|
89
|
+
* `'deliveries' in result` (per-recipient failure, some may have succeeded):
|
|
90
|
+
*
|
|
91
|
+
* - `{ ok: true, ids }` — every envelope succeeded.
|
|
92
|
+
* - `{ ok: false, error }` — pre-flight failure (validation, MIME,
|
|
93
|
+
* missing binding); no envelopes attempted.
|
|
94
|
+
* - `{ ok: false, deliveries }` — sends were attempted; at least one failed.
|
|
95
|
+
* `deliveries` carries the per-recipient
|
|
96
|
+
* outcome so callers can safely retry only
|
|
97
|
+
* the failed ones. There is no aggregate
|
|
98
|
+
* top-level error — distinct recipients can
|
|
99
|
+
* fail with distinct errors, and picking one
|
|
100
|
+
* would be arbitrary.
|
|
101
|
+
*/
|
|
102
|
+
type SendEmailResult = {
|
|
103
|
+
ok: true;
|
|
104
|
+
ids: Array<SendEmailDelivery>;
|
|
105
|
+
} | {
|
|
106
|
+
ok: false;
|
|
107
|
+
error: SendEmailError;
|
|
108
|
+
} | {
|
|
109
|
+
ok: false;
|
|
110
|
+
deliveries: Array<SendEmailRecipientResult>;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Normalized representation produced by validation, consumed by both the
|
|
114
|
+
* MIME builder and the dev inbox.
|
|
115
|
+
*/
|
|
116
|
+
interface NormalizedEmail {
|
|
117
|
+
from: {
|
|
118
|
+
email: string;
|
|
119
|
+
name?: string;
|
|
120
|
+
};
|
|
121
|
+
to: Array<{
|
|
122
|
+
email: string;
|
|
123
|
+
name?: string;
|
|
124
|
+
}>;
|
|
125
|
+
cc: Array<{
|
|
126
|
+
email: string;
|
|
127
|
+
name?: string;
|
|
128
|
+
}>;
|
|
129
|
+
bcc: Array<{
|
|
130
|
+
email: string;
|
|
131
|
+
name?: string;
|
|
132
|
+
}>;
|
|
133
|
+
replyTo?: {
|
|
134
|
+
email: string;
|
|
135
|
+
name?: string;
|
|
136
|
+
};
|
|
137
|
+
subject: string;
|
|
138
|
+
text?: string;
|
|
139
|
+
html?: string;
|
|
140
|
+
headers: Record<string, string>;
|
|
141
|
+
attachments: Array<NormalizedAttachment>;
|
|
142
|
+
/**
|
|
143
|
+
* Internal-only threading headers, set by `replyEmail`/`buildReplyMessage`.
|
|
144
|
+
* The MIME builder emits these as proper `In-Reply-To` / `References`
|
|
145
|
+
* top-level headers. User-supplied `headers` with these names are
|
|
146
|
+
* always dropped (they're in `RESERVED_HEADERS`); this field is the
|
|
147
|
+
* supported channel for the trusted reply path.
|
|
148
|
+
*/
|
|
149
|
+
threading?: {
|
|
150
|
+
inReplyTo?: string;
|
|
151
|
+
references?: string;
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
interface NormalizedAttachment {
|
|
155
|
+
filename: string;
|
|
156
|
+
contentType: string;
|
|
157
|
+
bytes: Uint8Array;
|
|
158
|
+
contentId?: string;
|
|
159
|
+
disposition: "attachment" | "inline";
|
|
160
|
+
}
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/runtime/email/inbound.d.ts
|
|
163
|
+
interface EmailHandlerInfo {
|
|
164
|
+
/**
|
|
165
|
+
* Captured params from dynamic / tagged route segments. For example, a
|
|
166
|
+
* handler at `email/support+[ticket].ts` invoked for `support+abc-123@…`
|
|
167
|
+
* receives `{ ticket: "abc-123" }`. Empty `{}` for static handlers and
|
|
168
|
+
* `_default`.
|
|
169
|
+
*/
|
|
170
|
+
params: Record<string, string>;
|
|
171
|
+
}
|
|
172
|
+
type EmailHandler = (message: ForwardableEmailMessage, env: unknown, ctx: ExecutionContext, info?: EmailHandlerInfo) => void | Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Identity helper that types the inbound email handler. Use as the default
|
|
175
|
+
* export of `email/<address>.ts` or `email/_default.ts`.
|
|
176
|
+
*/
|
|
177
|
+
declare function defineEmail(handler: EmailHandler): EmailHandler;
|
|
178
|
+
type ParsedEmail = Email;
|
|
179
|
+
type ParseEmailErrorCode = "INBOUND_TOO_LARGE" | "PARSE_FAILED";
|
|
180
|
+
/**
|
|
181
|
+
* Typed error thrown by `parseEmail`. Lets handler authors distinguish
|
|
182
|
+
* "too big" from "malformed body" without string-matching error messages.
|
|
183
|
+
*/
|
|
184
|
+
declare class ParseEmailError extends Error {
|
|
185
|
+
readonly code: ParseEmailErrorCode;
|
|
186
|
+
constructor(code: ParseEmailErrorCode, message: string, options?: {
|
|
187
|
+
cause?: unknown;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Parse a `ForwardableEmailMessage` into structured fields. postal-mime is
|
|
192
|
+
* loaded lazily so workers that never call this don't bundle it.
|
|
193
|
+
*
|
|
194
|
+
* For proxy messages (built via `createMessageProxy`) the raw bytes are
|
|
195
|
+
* cached on first read so subsequent `parseEmail`/`message.raw` accesses
|
|
196
|
+
* still work. For real CF `ForwardableEmailMessage`s the raw stream is
|
|
197
|
+
* one-shot.
|
|
198
|
+
*/
|
|
199
|
+
declare function parseEmail(message: ForwardableEmailMessage): Promise<ParsedEmail>;
|
|
200
|
+
/**
|
|
201
|
+
* Serialized inbound email message — sent from the platform router to the
|
|
202
|
+
* user worker over RPC. Every field is in workerd's RPC `BaseType`
|
|
203
|
+
* allowlist (string, plain object, ReadableStream<Uint8Array>, number).
|
|
204
|
+
*/
|
|
205
|
+
interface EmailEnvelope {
|
|
206
|
+
from: string;
|
|
207
|
+
to: string;
|
|
208
|
+
/** Headers serialized as a plain object so they cross RPC. */
|
|
209
|
+
headers: Record<string, string>;
|
|
210
|
+
/**
|
|
211
|
+
* Raw RFC 5322 bytes. Pre-buffered by the router so it's replayable on the
|
|
212
|
+
* receiving side (`parseEmail` consumes the stream once; if the handler
|
|
213
|
+
* also calls `parseEmail` directly, the platform tee'd a fresh stream per
|
|
214
|
+
* delivery).
|
|
215
|
+
*/
|
|
216
|
+
raw: ReadableStream<Uint8Array> | Uint8Array;
|
|
217
|
+
rawSize: number;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* What the user handler decided to do with a message. Returned from the
|
|
221
|
+
* worker's `email(envelope)` RPC method as an array (handlers may chain
|
|
222
|
+
* multiple actions, e.g. forward then reply); the router enacts each on the
|
|
223
|
+
* real `ForwardableEmailMessage` in order.
|
|
224
|
+
*/
|
|
225
|
+
type EmailAction = {
|
|
226
|
+
type: "reject";
|
|
227
|
+
reason: string;
|
|
228
|
+
} | {
|
|
229
|
+
type: "forward";
|
|
230
|
+
to: string;
|
|
231
|
+
headers?: Record<string, string>;
|
|
232
|
+
} | {
|
|
233
|
+
type: "reply";
|
|
234
|
+
from: string;
|
|
235
|
+
to: string;
|
|
236
|
+
raw: Uint8Array;
|
|
237
|
+
};
|
|
238
|
+
interface MessageProxy {
|
|
239
|
+
message: ForwardableEmailMessage;
|
|
240
|
+
getActions(): Array<EmailAction>;
|
|
241
|
+
}
|
|
242
|
+
interface CreateMessageProxyOptions {
|
|
243
|
+
/**
|
|
244
|
+
* Project slug stripped from the `<slug>+<tag>` recipient by the
|
|
245
|
+
* dispatcher. When set, `message.to` is rewritten to the bare
|
|
246
|
+
* `<tag>@<domain>` form so user handlers see clean addresses (the slug
|
|
247
|
+
* is platform-internal). The original `<slug>+<tag>@<domain>` is
|
|
248
|
+
* preserved on a non-enumerable `__voidPlatformTo` property for
|
|
249
|
+
* diagnostics.
|
|
250
|
+
*/
|
|
251
|
+
slug?: string;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Build a proxy `ForwardableEmailMessage` from an envelope. The proxy's
|
|
255
|
+
* `setReject` / `forward` / `reply` methods don't dispatch directly — they
|
|
256
|
+
* record `EmailAction` entries that the router (which holds the real
|
|
257
|
+
* message) enacts after the handler returns.
|
|
258
|
+
*
|
|
259
|
+
* `reply()` accepts a duck-typed `{ from, to, raw }` with `raw` a
|
|
260
|
+
* `Uint8Array` or `ReadableStream` — what `replyEmail()` passes. It does NOT
|
|
261
|
+
* accept a native `EmailMessage` from `cloudflare:email`: that class exposes
|
|
262
|
+
* only `from` and `to` (workers-types declares nothing else, and the body
|
|
263
|
+
* has no public accessor), so its bytes cannot be recorded here, and nothing
|
|
264
|
+
* could carry them over RPC to the platform router. The reply MIME bytes are
|
|
265
|
+
* buffered before being recorded so the action is fully self-contained.
|
|
266
|
+
*
|
|
267
|
+
* When `opts.slug` is provided, `message.to` is rewritten to remove the
|
|
268
|
+
* platform-injected `<slug>+` prefix so handlers see `<tag>@<domain>`
|
|
269
|
+
* instead of `<slug>+<tag>@<domain>`. The original wire-form recipient is
|
|
270
|
+
* preserved on a non-enumerable `__voidPlatformTo` property.
|
|
271
|
+
*/
|
|
272
|
+
declare function createMessageProxy(envelope: EmailEnvelope, opts?: CreateMessageProxyOptions): MessageProxy;
|
|
273
|
+
interface ReplyEmailOptions {
|
|
274
|
+
/**
|
|
275
|
+
* On the managed platform (a `__VOID_PROJECT_SLUG` is injected) defaults
|
|
276
|
+
* to `<__VOID_PROJECT_SLUG>+noreply@<__VOID_EMAIL_DOMAIN>`, and THROWS
|
|
277
|
+
* when the domain binding is absent — a reply sender is never guessed.
|
|
278
|
+
*
|
|
279
|
+
* There, an override must stay on your own slug. The platform accepts a
|
|
280
|
+
* reply sender whose local-part before the first `+` equals the slug the
|
|
281
|
+
* message was delivered to; anything else is dropped silently. In
|
|
282
|
+
* particular `message.to` is the STRIPPED address (`<tag>@<domain>`), so
|
|
283
|
+
* passing it here is exactly the shape the platform rejects.
|
|
284
|
+
*
|
|
285
|
+
* Without a slug (your own Cloudflare account, local harnesses) the
|
|
286
|
+
* default is the address the message was delivered to, `message.to` —
|
|
287
|
+
* a real address on your own zone.
|
|
288
|
+
*/
|
|
289
|
+
from?: Address;
|
|
290
|
+
/**
|
|
291
|
+
* Defaults to the original `message.from` envelope address. A reply is a
|
|
292
|
+
* single-recipient message — for fan-out, build a fresh `sendEmail()` call.
|
|
293
|
+
*/
|
|
294
|
+
to?: Address;
|
|
295
|
+
/**
|
|
296
|
+
* Defaults to `Re: <original-subject>` (no double-prefix). The original is
|
|
297
|
+
* remote-sender controlled, so the default is best-effort: control
|
|
298
|
+
* characters become a space, and a subject over 4096 characters, or an
|
|
299
|
+
* ASCII one too long to fold, falls back to a bare `Re:`. Pass `subject`
|
|
300
|
+
* to control it exactly.
|
|
301
|
+
*/
|
|
302
|
+
subject?: string;
|
|
303
|
+
text?: string;
|
|
304
|
+
html?: string;
|
|
305
|
+
/**
|
|
306
|
+
* Custom headers; threading headers (`In-Reply-To`, `References`) are
|
|
307
|
+
* added automatically, best-effort: an inbound id too long for a header
|
|
308
|
+
* line is dropped, and a `References` chain over 8 KiB keeps only its
|
|
309
|
+
* newest ids.
|
|
310
|
+
*/
|
|
311
|
+
headers?: Record<string, string>;
|
|
312
|
+
attachments?: Array<Attachment>;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Send a threading-aware reply to an inbound message. Builds the reply MIME
|
|
316
|
+
* (correct `In-Reply-To` / `References` / `Subject: Re: …`) and records a
|
|
317
|
+
* reply intent on the message proxy. The platform router enacts the reply
|
|
318
|
+
* via the real `ForwardableEmailMessage.reply()` once the handler returns.
|
|
319
|
+
*
|
|
320
|
+
* The threading headers are best-effort, since the inbound values they are
|
|
321
|
+
* built from are remote-sender controlled: an id no header line can carry
|
|
322
|
+
* is dropped, and a `References` chain over 8 KiB keeps only its newest
|
|
323
|
+
* ids. The reply is sent either way.
|
|
324
|
+
*/
|
|
325
|
+
declare function replyEmail(message: ForwardableEmailMessage, opts: ReplyEmailOptions): Promise<void>;
|
|
326
|
+
/**
|
|
327
|
+
* Whether `value` is a real `ForwardableEmailMessage` — one Cloudflare
|
|
328
|
+
* delivered to this worker's `email()` directly — rather than an
|
|
329
|
+
* `EmailEnvelope` from the platform router. Functions do not survive RPC,
|
|
330
|
+
* so their presence is the discriminator.
|
|
331
|
+
*/
|
|
332
|
+
declare function isForwardableEmailMessage(value: unknown): value is ForwardableEmailMessage;
|
|
333
|
+
/**
|
|
334
|
+
* Replay recorded `EmailAction`s on a real `ForwardableEmailMessage`, in
|
|
335
|
+
* order. The proxy already made `setReject` terminal (earlier forward/reply
|
|
336
|
+
* entries are purged, later ones dropped), so a reject is never followed by
|
|
337
|
+
* anything. `reply` needs a genuine `EmailMessage` — Cloudflare rejects a
|
|
338
|
+
* duck-typed object — so `cloudflare:email` is loaded here, and only when
|
|
339
|
+
* a reply was recorded.
|
|
340
|
+
*
|
|
341
|
+
* The `new Headers()` below is the one step this loop constructs from
|
|
342
|
+
* handler input, and it cannot fail on a recorded action: the proxy's
|
|
343
|
+
* `forward()` already ran the record through that constructor, so a bad
|
|
344
|
+
* record failed inside the handler, before any replay. (`EmailMessage`
|
|
345
|
+
* construction neither validates nor reads its stream — measured under
|
|
346
|
+
* workerd.) A reject's reason reaches the native `setReject()` as the proxy
|
|
347
|
+
* recorded it — already sliced and stripped the way the platform router
|
|
348
|
+
* would (`normalizeRejectReason`), so the SMTP reply is the same in both
|
|
349
|
+
* deployments. What Cloudflare itself refuses at `forward()` / `reply()`
|
|
350
|
+
* still throws out of the loop, as any native call would.
|
|
351
|
+
*/
|
|
352
|
+
declare function enactEmailActions(message: ForwardableEmailMessage, actions: ReadonlyArray<EmailAction>): Promise<void>;
|
|
353
|
+
//#endregion
|
|
354
|
+
export { SendEmailRecipientResult as C, SendEmailOptions as S, Attachment as _, MessageProxy as a, SendEmailError as b, ParsedEmail as c, defineEmail as d, enactEmailActions as f, Address as g, replyEmail as h, EmailHandlerInfo as i, ReplyEmailOptions as l, parseEmail as m, EmailEnvelope as n, ParseEmailError as o, isForwardableEmailMessage as p, EmailHandler as r, ParseEmailErrorCode as s, EmailAction as t, createMessageProxy as u, NormalizedEmail as v, SendEmailResult as w, SendEmailErrorCode as x, SendEmailDelivery as y };
|