pi-cloudflare 0.1.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.
Files changed (410) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +67 -0
  3. package/bin/setup.mjs +103 -0
  4. package/dist/auth-flow.d.ts +15 -0
  5. package/dist/auth-flow.d.ts.map +1 -0
  6. package/dist/auth-flow.js +90 -0
  7. package/dist/auth-flow.js.map +1 -0
  8. package/dist/client.d.ts +18 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +47 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +10 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +24 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +109 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/oauth.d.ts +44 -0
  21. package/dist/oauth.d.ts.map +1 -0
  22. package/dist/oauth.js +135 -0
  23. package/dist/oauth.js.map +1 -0
  24. package/dist/proxy.d.ts +29 -0
  25. package/dist/proxy.d.ts.map +1 -0
  26. package/dist/proxy.js +39 -0
  27. package/dist/proxy.js.map +1 -0
  28. package/dist/servers.d.ts +19 -0
  29. package/dist/servers.d.ts.map +1 -0
  30. package/dist/servers.js +40 -0
  31. package/dist/servers.js.map +1 -0
  32. package/dist/token-store.d.ts +23 -0
  33. package/dist/token-store.d.ts.map +1 -0
  34. package/dist/token-store.js +47 -0
  35. package/dist/token-store.js.map +1 -0
  36. package/package.json +67 -0
  37. package/skills/agents-sdk/SKILL.md +221 -0
  38. package/skills/agents-sdk/references/browse-the-web.md +63 -0
  39. package/skills/agents-sdk/references/callable.md +92 -0
  40. package/skills/agents-sdk/references/client-sdk.md +110 -0
  41. package/skills/agents-sdk/references/codemode.md +110 -0
  42. package/skills/agents-sdk/references/configuration.md +72 -0
  43. package/skills/agents-sdk/references/durable-execution.md +51 -0
  44. package/skills/agents-sdk/references/email.md +146 -0
  45. package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
  46. package/skills/agents-sdk/references/mcp.md +188 -0
  47. package/skills/agents-sdk/references/observability.md +44 -0
  48. package/skills/agents-sdk/references/queue-retries.md +79 -0
  49. package/skills/agents-sdk/references/routing.md +75 -0
  50. package/skills/agents-sdk/references/server-driven-messages.md +63 -0
  51. package/skills/agents-sdk/references/state-scheduling.md +171 -0
  52. package/skills/agents-sdk/references/streaming-chat.md +198 -0
  53. package/skills/agents-sdk/references/think.md +112 -0
  54. package/skills/agents-sdk/references/voice.md +68 -0
  55. package/skills/agents-sdk/references/webhooks-push.md +86 -0
  56. package/skills/agents-sdk/references/workflows.md +132 -0
  57. package/skills/cloudflare/SKILL.md +248 -0
  58. package/skills/cloudflare/references/agents-sdk/README.md +89 -0
  59. package/skills/cloudflare/references/agents-sdk/api.md +190 -0
  60. package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
  61. package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
  62. package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
  63. package/skills/cloudflare/references/ai-gateway/README.md +175 -0
  64. package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
  65. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
  66. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  67. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
  68. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
  69. package/skills/cloudflare/references/ai-search/README.md +138 -0
  70. package/skills/cloudflare/references/ai-search/api.md +87 -0
  71. package/skills/cloudflare/references/ai-search/configuration.md +88 -0
  72. package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
  73. package/skills/cloudflare/references/ai-search/patterns.md +85 -0
  74. package/skills/cloudflare/references/analytics-engine/README.md +94 -0
  75. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  76. package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
  77. package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
  78. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  79. package/skills/cloudflare/references/api/README.md +66 -0
  80. package/skills/cloudflare/references/api/api.md +204 -0
  81. package/skills/cloudflare/references/api/configuration.md +160 -0
  82. package/skills/cloudflare/references/api/gotchas.md +225 -0
  83. package/skills/cloudflare/references/api/patterns.md +204 -0
  84. package/skills/cloudflare/references/api-shield/README.md +44 -0
  85. package/skills/cloudflare/references/api-shield/api.md +141 -0
  86. package/skills/cloudflare/references/api-shield/configuration.md +192 -0
  87. package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
  88. package/skills/cloudflare/references/api-shield/patterns.md +180 -0
  89. package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
  90. package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
  91. package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
  92. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
  93. package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
  94. package/skills/cloudflare/references/artifacts/README.md +79 -0
  95. package/skills/cloudflare/references/artifacts/api.md +128 -0
  96. package/skills/cloudflare/references/artifacts/configuration.md +92 -0
  97. package/skills/cloudflare/references/bindings/README.md +122 -0
  98. package/skills/cloudflare/references/bindings/api.md +203 -0
  99. package/skills/cloudflare/references/bindings/configuration.md +188 -0
  100. package/skills/cloudflare/references/bindings/gotchas.md +208 -0
  101. package/skills/cloudflare/references/bindings/patterns.md +200 -0
  102. package/skills/cloudflare/references/bot-management/README.md +94 -0
  103. package/skills/cloudflare/references/bot-management/api.md +169 -0
  104. package/skills/cloudflare/references/bot-management/configuration.md +163 -0
  105. package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
  106. package/skills/cloudflare/references/bot-management/patterns.md +182 -0
  107. package/skills/cloudflare/references/browser-rendering/README.md +78 -0
  108. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  109. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  110. package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
  111. package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
  112. package/skills/cloudflare/references/c3/README.md +111 -0
  113. package/skills/cloudflare/references/c3/api.md +71 -0
  114. package/skills/cloudflare/references/c3/configuration.md +81 -0
  115. package/skills/cloudflare/references/c3/gotchas.md +92 -0
  116. package/skills/cloudflare/references/c3/patterns.md +82 -0
  117. package/skills/cloudflare/references/cache-reserve/README.md +147 -0
  118. package/skills/cloudflare/references/cache-reserve/api.md +194 -0
  119. package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
  120. package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
  121. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  122. package/skills/cloudflare/references/containers/README.md +85 -0
  123. package/skills/cloudflare/references/containers/api.md +187 -0
  124. package/skills/cloudflare/references/containers/configuration.md +188 -0
  125. package/skills/cloudflare/references/containers/gotchas.md +178 -0
  126. package/skills/cloudflare/references/containers/patterns.md +202 -0
  127. package/skills/cloudflare/references/cron-triggers/README.md +99 -0
  128. package/skills/cloudflare/references/cron-triggers/api.md +196 -0
  129. package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
  130. package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
  131. package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
  132. package/skills/cloudflare/references/d1/README.md +133 -0
  133. package/skills/cloudflare/references/d1/api.md +196 -0
  134. package/skills/cloudflare/references/d1/configuration.md +191 -0
  135. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  136. package/skills/cloudflare/references/d1/patterns.md +189 -0
  137. package/skills/cloudflare/references/ddos/README.md +41 -0
  138. package/skills/cloudflare/references/ddos/api.md +164 -0
  139. package/skills/cloudflare/references/ddos/configuration.md +93 -0
  140. package/skills/cloudflare/references/ddos/gotchas.md +107 -0
  141. package/skills/cloudflare/references/ddos/patterns.md +174 -0
  142. package/skills/cloudflare/references/do-storage/README.md +75 -0
  143. package/skills/cloudflare/references/do-storage/api.md +102 -0
  144. package/skills/cloudflare/references/do-storage/configuration.md +112 -0
  145. package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
  146. package/skills/cloudflare/references/do-storage/patterns.md +194 -0
  147. package/skills/cloudflare/references/do-storage/testing.md +183 -0
  148. package/skills/cloudflare/references/durable-objects/README.md +185 -0
  149. package/skills/cloudflare/references/durable-objects/api.md +187 -0
  150. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  151. package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
  152. package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
  153. package/skills/cloudflare/references/email-routing/README.md +89 -0
  154. package/skills/cloudflare/references/email-routing/api.md +195 -0
  155. package/skills/cloudflare/references/email-routing/configuration.md +186 -0
  156. package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
  157. package/skills/cloudflare/references/email-routing/patterns.md +229 -0
  158. package/skills/cloudflare/references/email-workers/README.md +151 -0
  159. package/skills/cloudflare/references/email-workers/api.md +237 -0
  160. package/skills/cloudflare/references/email-workers/configuration.md +112 -0
  161. package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
  162. package/skills/cloudflare/references/email-workers/patterns.md +102 -0
  163. package/skills/cloudflare/references/flagship/README.md +59 -0
  164. package/skills/cloudflare/references/flagship/api.md +390 -0
  165. package/skills/cloudflare/references/flagship/configuration.md +202 -0
  166. package/skills/cloudflare/references/flagship/gotchas.md +178 -0
  167. package/skills/cloudflare/references/flagship/patterns.md +469 -0
  168. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  169. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  170. package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
  171. package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
  172. package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
  173. package/skills/cloudflare/references/hyperdrive/README.md +82 -0
  174. package/skills/cloudflare/references/hyperdrive/api.md +143 -0
  175. package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
  176. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  177. package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
  178. package/skills/cloudflare/references/images/README.md +61 -0
  179. package/skills/cloudflare/references/images/api.md +96 -0
  180. package/skills/cloudflare/references/images/configuration.md +211 -0
  181. package/skills/cloudflare/references/images/gotchas.md +99 -0
  182. package/skills/cloudflare/references/images/patterns.md +115 -0
  183. package/skills/cloudflare/references/kv/README.md +89 -0
  184. package/skills/cloudflare/references/kv/api.md +160 -0
  185. package/skills/cloudflare/references/kv/configuration.md +144 -0
  186. package/skills/cloudflare/references/kv/gotchas.md +131 -0
  187. package/skills/cloudflare/references/kv/patterns.md +196 -0
  188. package/skills/cloudflare/references/miniflare/README.md +105 -0
  189. package/skills/cloudflare/references/miniflare/api.md +187 -0
  190. package/skills/cloudflare/references/miniflare/configuration.md +173 -0
  191. package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
  192. package/skills/cloudflare/references/miniflare/patterns.md +181 -0
  193. package/skills/cloudflare/references/network-interconnect/README.md +99 -0
  194. package/skills/cloudflare/references/network-interconnect/api.md +199 -0
  195. package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
  196. package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
  197. package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
  198. package/skills/cloudflare/references/observability/README.md +88 -0
  199. package/skills/cloudflare/references/observability/api.md +164 -0
  200. package/skills/cloudflare/references/observability/configuration.md +169 -0
  201. package/skills/cloudflare/references/observability/gotchas.md +115 -0
  202. package/skills/cloudflare/references/observability/patterns.md +105 -0
  203. package/skills/cloudflare/references/pages/README.md +88 -0
  204. package/skills/cloudflare/references/pages/api.md +204 -0
  205. package/skills/cloudflare/references/pages/configuration.md +201 -0
  206. package/skills/cloudflare/references/pages/gotchas.md +203 -0
  207. package/skills/cloudflare/references/pages/patterns.md +204 -0
  208. package/skills/cloudflare/references/pages-functions/README.md +98 -0
  209. package/skills/cloudflare/references/pages-functions/api.md +143 -0
  210. package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
  211. package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
  212. package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
  213. package/skills/cloudflare/references/pipelines/README.md +90 -0
  214. package/skills/cloudflare/references/pipelines/api.md +124 -0
  215. package/skills/cloudflare/references/pipelines/configuration.md +155 -0
  216. package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
  217. package/skills/cloudflare/references/pipelines/patterns.md +130 -0
  218. package/skills/cloudflare/references/pulumi/README.md +100 -0
  219. package/skills/cloudflare/references/pulumi/api.md +200 -0
  220. package/skills/cloudflare/references/pulumi/configuration.md +198 -0
  221. package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
  222. package/skills/cloudflare/references/pulumi/patterns.md +191 -0
  223. package/skills/cloudflare/references/queues/README.md +96 -0
  224. package/skills/cloudflare/references/queues/api.md +206 -0
  225. package/skills/cloudflare/references/queues/configuration.md +144 -0
  226. package/skills/cloudflare/references/queues/gotchas.md +206 -0
  227. package/skills/cloudflare/references/queues/patterns.md +220 -0
  228. package/skills/cloudflare/references/r2/README.md +95 -0
  229. package/skills/cloudflare/references/r2/api.md +200 -0
  230. package/skills/cloudflare/references/r2/configuration.md +165 -0
  231. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  232. package/skills/cloudflare/references/r2/patterns.md +193 -0
  233. package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
  234. package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
  235. package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
  236. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
  237. package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
  238. package/skills/cloudflare/references/r2-sql/README.md +64 -0
  239. package/skills/cloudflare/references/r2-sql/api.md +121 -0
  240. package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
  241. package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
  242. package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
  243. package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
  244. package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
  245. package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
  246. package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
  247. package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
  248. package/skills/cloudflare/references/realtimekit/README.md +113 -0
  249. package/skills/cloudflare/references/realtimekit/api.md +212 -0
  250. package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
  251. package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
  252. package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
  253. package/skills/cloudflare/references/sandbox/README.md +96 -0
  254. package/skills/cloudflare/references/sandbox/api.md +198 -0
  255. package/skills/cloudflare/references/sandbox/configuration.md +143 -0
  256. package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
  257. package/skills/cloudflare/references/sandbox/patterns.md +201 -0
  258. package/skills/cloudflare/references/secrets-store/README.md +74 -0
  259. package/skills/cloudflare/references/secrets-store/api.md +200 -0
  260. package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
  261. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  262. package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
  263. package/skills/cloudflare/references/smart-placement/README.md +138 -0
  264. package/skills/cloudflare/references/smart-placement/api.md +183 -0
  265. package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
  266. package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
  267. package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
  268. package/skills/cloudflare/references/snippets/README.md +68 -0
  269. package/skills/cloudflare/references/snippets/api.md +198 -0
  270. package/skills/cloudflare/references/snippets/configuration.md +227 -0
  271. package/skills/cloudflare/references/snippets/gotchas.md +86 -0
  272. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  273. package/skills/cloudflare/references/spectrum/README.md +52 -0
  274. package/skills/cloudflare/references/spectrum/api.md +181 -0
  275. package/skills/cloudflare/references/spectrum/configuration.md +194 -0
  276. package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
  277. package/skills/cloudflare/references/spectrum/patterns.md +196 -0
  278. package/skills/cloudflare/references/static-assets/README.md +65 -0
  279. package/skills/cloudflare/references/static-assets/api.md +199 -0
  280. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  281. package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
  282. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  283. package/skills/cloudflare/references/stream/README.md +114 -0
  284. package/skills/cloudflare/references/stream/api-live.md +195 -0
  285. package/skills/cloudflare/references/stream/api.md +199 -0
  286. package/skills/cloudflare/references/stream/configuration.md +141 -0
  287. package/skills/cloudflare/references/stream/gotchas.md +130 -0
  288. package/skills/cloudflare/references/stream/patterns.md +184 -0
  289. package/skills/cloudflare/references/tail-workers/README.md +89 -0
  290. package/skills/cloudflare/references/tail-workers/api.md +200 -0
  291. package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
  292. package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
  293. package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
  294. package/skills/cloudflare/references/terraform/README.md +102 -0
  295. package/skills/cloudflare/references/terraform/api.md +178 -0
  296. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  297. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  298. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  299. package/skills/cloudflare/references/tunnel/README.md +129 -0
  300. package/skills/cloudflare/references/tunnel/api.md +193 -0
  301. package/skills/cloudflare/references/tunnel/configuration.md +157 -0
  302. package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
  303. package/skills/cloudflare/references/tunnel/networking.md +168 -0
  304. package/skills/cloudflare/references/tunnel/patterns.md +192 -0
  305. package/skills/cloudflare/references/turn/README.md +82 -0
  306. package/skills/cloudflare/references/turn/api.md +239 -0
  307. package/skills/cloudflare/references/turn/configuration.md +179 -0
  308. package/skills/cloudflare/references/turn/gotchas.md +231 -0
  309. package/skills/cloudflare/references/turn/patterns.md +213 -0
  310. package/skills/cloudflare/references/turnstile/README.md +99 -0
  311. package/skills/cloudflare/references/turnstile/api.md +240 -0
  312. package/skills/cloudflare/references/turnstile/configuration.md +222 -0
  313. package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
  314. package/skills/cloudflare/references/turnstile/patterns.md +193 -0
  315. package/skills/cloudflare/references/vectorize/README.md +133 -0
  316. package/skills/cloudflare/references/vectorize/api.md +88 -0
  317. package/skills/cloudflare/references/vectorize/configuration.md +88 -0
  318. package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
  319. package/skills/cloudflare/references/vectorize/patterns.md +90 -0
  320. package/skills/cloudflare/references/waf/README.md +113 -0
  321. package/skills/cloudflare/references/waf/api.md +202 -0
  322. package/skills/cloudflare/references/waf/configuration.md +203 -0
  323. package/skills/cloudflare/references/waf/gotchas.md +204 -0
  324. package/skills/cloudflare/references/waf/patterns.md +197 -0
  325. package/skills/cloudflare/references/web-analytics/README.md +141 -0
  326. package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
  327. package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
  328. package/skills/cloudflare/references/web-analytics/integration.md +60 -0
  329. package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
  330. package/skills/cloudflare/references/workerd/README.md +78 -0
  331. package/skills/cloudflare/references/workerd/api.md +185 -0
  332. package/skills/cloudflare/references/workerd/configuration.md +183 -0
  333. package/skills/cloudflare/references/workerd/gotchas.md +139 -0
  334. package/skills/cloudflare/references/workerd/patterns.md +192 -0
  335. package/skills/cloudflare/references/workers/README.md +108 -0
  336. package/skills/cloudflare/references/workers/api.md +195 -0
  337. package/skills/cloudflare/references/workers/configuration.md +185 -0
  338. package/skills/cloudflare/references/workers/frameworks.md +197 -0
  339. package/skills/cloudflare/references/workers/gotchas.md +137 -0
  340. package/skills/cloudflare/references/workers/patterns.md +198 -0
  341. package/skills/cloudflare/references/workers-ai/README.md +197 -0
  342. package/skills/cloudflare/references/workers-ai/api.md +112 -0
  343. package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
  344. package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
  345. package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
  346. package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
  347. package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
  348. package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
  349. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  350. package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
  351. package/skills/cloudflare/references/workers-playground/README.md +127 -0
  352. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  353. package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
  354. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  355. package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
  356. package/skills/cloudflare/references/workers-vpc/README.md +127 -0
  357. package/skills/cloudflare/references/workers-vpc/api.md +202 -0
  358. package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
  359. package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
  360. package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
  361. package/skills/cloudflare/references/workflows/README.md +77 -0
  362. package/skills/cloudflare/references/workflows/api.md +218 -0
  363. package/skills/cloudflare/references/workflows/configuration.md +152 -0
  364. package/skills/cloudflare/references/workflows/gotchas.md +90 -0
  365. package/skills/cloudflare/references/workflows/patterns.md +175 -0
  366. package/skills/cloudflare/references/wrangler/README.md +135 -0
  367. package/skills/cloudflare/references/wrangler/api.md +188 -0
  368. package/skills/cloudflare/references/wrangler/configuration.md +197 -0
  369. package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
  370. package/skills/cloudflare/references/wrangler/patterns.md +209 -0
  371. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
  372. package/skills/cloudflare/references/zaraz/README.md +111 -0
  373. package/skills/cloudflare/references/zaraz/api.md +112 -0
  374. package/skills/cloudflare/references/zaraz/configuration.md +90 -0
  375. package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
  376. package/skills/cloudflare/references/zaraz/patterns.md +74 -0
  377. package/skills/cloudflare-email-service/SKILL.md +103 -0
  378. package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
  379. package/skills/cloudflare-email-service/references/deliverability.md +285 -0
  380. package/skills/cloudflare-email-service/references/rest-api.md +184 -0
  381. package/skills/cloudflare-email-service/references/routing.md +199 -0
  382. package/skills/cloudflare-email-service/references/sending.md +252 -0
  383. package/skills/cloudflare-one/SKILL.md +176 -0
  384. package/skills/cloudflare-one-migrations/SKILL.md +110 -0
  385. package/skills/durable-objects/SKILL.md +186 -0
  386. package/skills/durable-objects/references/rules.md +295 -0
  387. package/skills/durable-objects/references/testing.md +264 -0
  388. package/skills/durable-objects/references/workers.md +346 -0
  389. package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
  390. package/skills/sandbox-next/SKILL.md +91 -0
  391. package/skills/sandbox-next/references/api-quick-ref.md +94 -0
  392. package/skills/sandbox-next/references/examples.md +15 -0
  393. package/skills/sandbox-stable/SKILL.md +110 -0
  394. package/skills/turnstile-spin/README.md +51 -0
  395. package/skills/turnstile-spin/SKILL.md +330 -0
  396. package/skills/turnstile-spin/references/astro.md +199 -0
  397. package/skills/turnstile-spin/references/hugo.md +114 -0
  398. package/skills/turnstile-spin/references/nextjs-app.md +261 -0
  399. package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
  400. package/skills/turnstile-spin/references/sveltekit.md +191 -0
  401. package/skills/turnstile-spin/references/vanilla-html.md +157 -0
  402. package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
  403. package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
  404. package/skills/turnstile-spin/scripts/validate.sh +137 -0
  405. package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
  406. package/skills/turnstile-spin/tests/validation.md +62 -0
  407. package/skills/workers-best-practices/SKILL.md +127 -0
  408. package/skills/workers-best-practices/references/review.md +174 -0
  409. package/skills/workers-best-practices/references/rules.md +467 -0
  410. package/skills/wrangler/SKILL.md +922 -0
@@ -0,0 +1,229 @@
1
+ # Common Patterns
2
+
3
+ ## 1. Allowlist/Blocklist
4
+
5
+ ```typescript
6
+ // Allowlist
7
+ const allowed = ["user@example.com", "trusted@corp.com"];
8
+ if (!allowed.includes(message.from)) {
9
+ message.setReject("Not allowed");
10
+ return;
11
+ }
12
+ await message.forward("inbox@corp.com");
13
+ ```
14
+
15
+ ## 2. Parse Email Body
16
+
17
+ ```typescript
18
+ import PostalMime from 'postal-mime';
19
+
20
+ export default {
21
+ async email(message, env, ctx) {
22
+ // CRITICAL: Consume stream immediately
23
+ const raw = await message.raw.arrayBuffer();
24
+
25
+ const parser = new PostalMime();
26
+ const email = await parser.parse(raw);
27
+
28
+ console.log({
29
+ subject: email.subject,
30
+ text: email.text,
31
+ html: email.html,
32
+ from: email.from.address,
33
+ attachments: email.attachments.length
34
+ });
35
+
36
+ await message.forward("inbox@corp.com");
37
+ }
38
+ } satisfies ExportedHandler;
39
+ ```
40
+
41
+ ## 3. Spam Filter
42
+
43
+ ```typescript
44
+ const score = parseFloat(message.headers.get("x-cf-spamh-score") || "0");
45
+ if (score > 5) {
46
+ message.setReject("Spam detected");
47
+ return;
48
+ }
49
+ await message.forward("inbox@corp.com");
50
+ ```
51
+
52
+ ## 4. Archive to R2
53
+
54
+ ```typescript
55
+ interface Env { R2: R2Bucket; }
56
+
57
+ export default {
58
+ async email(message, env, ctx) {
59
+ const raw = await message.raw.arrayBuffer();
60
+
61
+ const key = `${new Date().toISOString()}-${message.from}.eml`;
62
+ await env.R2.put(key, raw, {
63
+ httpMetadata: { contentType: "message/rfc822" }
64
+ });
65
+
66
+ await message.forward("inbox@corp.com");
67
+ }
68
+ } satisfies ExportedHandler<Env>;
69
+ ```
70
+
71
+ ## 5. Store Metadata in KV
72
+
73
+ ```typescript
74
+ import PostalMime from 'postal-mime';
75
+
76
+ interface Env { KV: KVNamespace; }
77
+
78
+ export default {
79
+ async email(message, env, ctx) {
80
+ const raw = await message.raw.arrayBuffer();
81
+ const parser = new PostalMime();
82
+ const email = await parser.parse(raw);
83
+
84
+ const metadata = {
85
+ from: email.from.address,
86
+ subject: email.subject,
87
+ timestamp: new Date().toISOString(),
88
+ size: raw.byteLength
89
+ };
90
+
91
+ await env.KV.put(`email:${Date.now()}`, JSON.stringify(metadata));
92
+ await message.forward("inbox@corp.com");
93
+ }
94
+ } satisfies ExportedHandler<Env>;
95
+ ```
96
+
97
+ ## 6. Subject-Based Routing
98
+
99
+ ```typescript
100
+ export default {
101
+ async email(message, env, ctx) {
102
+ const subject = message.headers.get("subject")?.toLowerCase() || "";
103
+
104
+ if (subject.includes("[urgent]")) {
105
+ await message.forward("oncall@corp.com");
106
+ } else if (subject.includes("[billing]")) {
107
+ await message.forward("billing@corp.com");
108
+ } else if (subject.includes("[support]")) {
109
+ await message.forward("support@corp.com");
110
+ } else {
111
+ await message.forward("general@corp.com");
112
+ }
113
+ }
114
+ } satisfies ExportedHandler;
115
+ ```
116
+
117
+ ## 7. Auto-Reply
118
+
119
+ ```typescript
120
+ interface Env {
121
+ EMAIL: SendEmail;
122
+ REPLIED: KVNamespace;
123
+ }
124
+
125
+ export default {
126
+ async email(message, env, ctx) {
127
+ const msgId = message.headers.get("message-id");
128
+
129
+ if (msgId && await env.REPLIED.get(msgId)) {
130
+ await message.forward("archive@corp.com");
131
+ return;
132
+ }
133
+
134
+ ctx.waitUntil((async () => {
135
+ await env.EMAIL.send({
136
+ from: "noreply@yourdomain.com",
137
+ to: message.from,
138
+ subject: "Re: " + (message.headers.get("subject") || ""),
139
+ text: "Thank you. We'll respond within 24h."
140
+ });
141
+ if (msgId) await env.REPLIED.put(msgId, "1", { expirationTtl: 604800 });
142
+ })());
143
+
144
+ await message.forward("support@corp.com");
145
+ }
146
+ } satisfies ExportedHandler<Env>;
147
+ ```
148
+
149
+ ## 8. Extract Attachments
150
+
151
+ ```typescript
152
+ import PostalMime from 'postal-mime';
153
+
154
+ interface Env { ATTACHMENTS: R2Bucket; }
155
+
156
+ export default {
157
+ async email(message, env, ctx) {
158
+ const parser = new PostalMime();
159
+ const email = await parser.parse(await message.raw.arrayBuffer());
160
+
161
+ for (const att of email.attachments) {
162
+ const key = `${Date.now()}-${att.filename}`;
163
+ await env.ATTACHMENTS.put(key, att.content, {
164
+ httpMetadata: { contentType: att.mimeType }
165
+ });
166
+ }
167
+
168
+ await message.forward("inbox@corp.com");
169
+ }
170
+ } satisfies ExportedHandler<Env>;
171
+ ```
172
+
173
+ ## 9. Log to D1
174
+
175
+ ```typescript
176
+ import PostalMime from 'postal-mime';
177
+
178
+ interface Env { DB: D1Database; }
179
+
180
+ export default {
181
+ async email(message, env, ctx) {
182
+ const parser = new PostalMime();
183
+ const email = await parser.parse(await message.raw.arrayBuffer());
184
+
185
+ ctx.waitUntil(
186
+ env.DB.prepare("INSERT INTO log (ts, from_addr, subj) VALUES (?, ?, ?)")
187
+ .bind(new Date().toISOString(), email.from.address, email.subject || "")
188
+ .run()
189
+ );
190
+
191
+ await message.forward("inbox@corp.com");
192
+ }
193
+ } satisfies ExportedHandler<Env>;
194
+ ```
195
+
196
+ ## 10. Multi-Tenant
197
+
198
+ ```typescript
199
+ interface Env { TENANTS: KVNamespace; }
200
+
201
+ export default {
202
+ async email(message, env, ctx) {
203
+ const subdomain = message.to.split("@")[1].split(".")[0];
204
+ const config = await env.TENANTS.get(subdomain, "json") as { forward: string } | null;
205
+
206
+ if (!config) {
207
+ message.setReject("Unknown tenant");
208
+ return;
209
+ }
210
+
211
+ await message.forward(config.forward);
212
+ }
213
+ } satisfies ExportedHandler<Env>;
214
+ ```
215
+
216
+ ## Summary
217
+
218
+ | Pattern | Use Case | Storage |
219
+ |---------|----------|---------|
220
+ | Allowlist | Security | None |
221
+ | Parse | Body/attachments | None |
222
+ | Spam Filter | Reduce spam | None |
223
+ | R2 Archive | Email storage | R2 |
224
+ | KV Meta | Analytics | KV |
225
+ | Subject Route | Dept routing | None |
226
+ | Auto-Reply | Support | KV |
227
+ | Attachments | Doc mgmt | R2 |
228
+ | D1 Log | Audit trail | D1 |
229
+ | Multi-Tenant | SaaS | KV |
@@ -0,0 +1,151 @@
1
+ # Cloudflare Email Workers
2
+
3
+ Process incoming emails programmatically using Cloudflare Workers runtime.
4
+
5
+ ## Overview
6
+
7
+ Email Workers enable custom email processing logic at the edge. Build spam filters, auto-responders, ticket systems, notification handlers, and more using the same Workers runtime you use for HTTP requests.
8
+
9
+ **Key capabilities**:
10
+ - Process inbound emails with full message access
11
+ - Forward to verified destinations
12
+ - Send replies with proper threading
13
+ - Parse MIME content and attachments
14
+ - Integrate with KV, R2, D1, and external APIs
15
+
16
+ ## Quick Start
17
+
18
+ ### Minimal ES Modules Handler
19
+
20
+ ```typescript
21
+ export default {
22
+ async email(message, env, ctx) {
23
+ // Reject spam
24
+ if (message.from.includes('spam.com')) {
25
+ message.setReject('Blocked');
26
+ return;
27
+ }
28
+
29
+ // Forward to inbox
30
+ await message.forward('inbox@example.com');
31
+ }
32
+ };
33
+ ```
34
+
35
+ ### Core Operations
36
+
37
+ | Operation | Method | Use Case |
38
+ |-----------|--------|----------|
39
+ | Forward | `message.forward(to, headers?)` | Route to verified destination |
40
+ | Reject | `message.setReject(reason)` | Block with SMTP error |
41
+ | Reply | `message.reply(emailMessage)` | Auto-respond with threading |
42
+ | Parse | postal-mime library | Extract subject, body, attachments |
43
+
44
+ ## Reading Order
45
+
46
+ For comprehensive understanding, read files in this order:
47
+
48
+ 1. **README.md** (this file) - Overview and quick start
49
+ 2. **configuration.md** - Setup, deployment, bindings
50
+ 3. **api.md** - Complete API reference
51
+ 4. **patterns.md** - Real-world implementation examples
52
+ 5. **gotchas.md** - Critical pitfalls and debugging
53
+
54
+ ## In This Reference
55
+
56
+ | File | Description | Key Topics |
57
+ |------|-------------|------------|
58
+ | [api.md](./api.md) | Complete API reference | ForwardableEmailMessage, SendEmail bindings, reply() method, postal-mime/mimetext APIs |
59
+ | [configuration.md](./configuration.md) | Setup and configuration | wrangler.jsonc, bindings, deployment, dependencies |
60
+ | [patterns.md](./patterns.md) | Real-world examples | Allowlists from KV, auto-reply with threading, attachment extraction, webhook notifications |
61
+ | [gotchas.md](./gotchas.md) | Pitfalls and debugging | Stream consumption, ctx.waitUntil errors, security, limits |
62
+
63
+ ## Architecture
64
+
65
+ ```
66
+ Incoming Email → Email Routing → Email Worker
67
+
68
+ Process + Decide
69
+
70
+ ┌───────────────┼───────────────┐
71
+ ↓ ↓ ↓
72
+ Forward Reply Reject
73
+ ```
74
+
75
+ **Event flow**:
76
+ 1. Email arrives at your domain
77
+ 2. Email Routing matches route (e.g., `support@example.com`)
78
+ 3. Bound Email Worker receives `ForwardableEmailMessage`
79
+ 4. Worker processes and takes action (forward/reply/reject)
80
+ 5. Email delivered or rejected based on worker logic
81
+
82
+ ## Key Concepts
83
+
84
+ ### Envelope vs Headers
85
+
86
+ - **Envelope addresses** (`message.from`, `message.to`): SMTP transport addresses (trusted)
87
+ - **Header addresses** (parsed from body): Display addresses (can be spoofed)
88
+
89
+ Use envelope addresses for security decisions.
90
+
91
+ ### Single-Use Streams
92
+
93
+ `message.raw` is a ReadableStream that can only be read once. Buffer to ArrayBuffer for multiple uses.
94
+
95
+ ```typescript
96
+ // Buffer first
97
+ const buffer = await new Response(message.raw).arrayBuffer();
98
+ const email = await PostalMime.parse(buffer);
99
+ ```
100
+
101
+ See [gotchas.md](./gotchas.md#readablestream-can-only-be-consumed-once) for details.
102
+
103
+ ### Verified Destinations
104
+
105
+ `forward()` only works with addresses verified in the Cloudflare Email Routing dashboard. Add destinations before deployment.
106
+
107
+ ## Use Cases
108
+
109
+ - **Spam filtering**: Block based on sender, content, or reputation
110
+ - **Auto-responders**: Send acknowledgment replies with threading
111
+ - **Ticket creation**: Parse emails and create support tickets
112
+ - **Email archival**: Store in KV, R2, or D1
113
+ - **Notification routing**: Forward to Slack, Discord, or webhooks
114
+ - **Attachment processing**: Extract files to R2 storage
115
+ - **Multi-tenant routing**: Route based on recipient subdomain
116
+ - **Size filtering**: Reject oversized attachments
117
+
118
+ ## Limits
119
+
120
+ | Limit | Value |
121
+ |-------|-------|
122
+ | Max message size | 25 MiB |
123
+ | Max routing rules | 200 |
124
+ | Max destinations | 200 |
125
+ | CPU time (free tier) | 10ms |
126
+ | CPU time (paid tier) | 30s (default), 5min (max) |
127
+
128
+ See [gotchas.md](./gotchas.md#limits-reference) for complete limits table.
129
+
130
+ ## Prerequisites
131
+
132
+ Before deploying Email Workers:
133
+
134
+ 1. **Enable Email Routing** in Cloudflare dashboard for your domain
135
+ 2. **Verify destination addresses** for forwarding
136
+ 3. **Configure DMARC/SPF** for sending domains (required for replies)
137
+ 4. **Set up wrangler.jsonc** with SendEmail binding
138
+
139
+ See [configuration.md](./configuration.md) for detailed setup.
140
+
141
+ ## Service Worker Syntax (Deprecated)
142
+
143
+ Modern projects should use ES modules format shown above. Service Worker syntax (`addEventListener('email', ...)`) is deprecated but still supported.
144
+
145
+ ## See Also
146
+
147
+ - [Email Routing Documentation](https://developers.cloudflare.com/email-routing/)
148
+ - [Workers Platform](https://developers.cloudflare.com/workers/)
149
+ - [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)
150
+ - [postal-mime on npm](https://www.npmjs.com/package/postal-mime)
151
+ - [mimetext on npm](https://www.npmjs.com/package/mimetext)
@@ -0,0 +1,237 @@
1
+ # Email Workers API Reference
2
+
3
+ Complete API reference for Cloudflare Email Workers runtime.
4
+
5
+ ## ForwardableEmailMessage Interface
6
+
7
+ The main interface passed to email handlers.
8
+
9
+ ```typescript
10
+ interface ForwardableEmailMessage {
11
+ readonly from: string; // Envelope MAIL FROM (SMTP sender)
12
+ readonly to: string; // Envelope RCPT TO (SMTP recipient)
13
+ readonly headers: Headers; // Web-standard Headers object
14
+ readonly raw: ReadableStream; // Raw MIME message (single-use stream)
15
+ readonly rawSize: number; // Total message size in bytes
16
+
17
+ setReject(reason: string): void;
18
+ forward(rcptTo: string, headers?: Headers): Promise<void>;
19
+ reply(message: EmailMessage): Promise<void>;
20
+ }
21
+ ```
22
+
23
+ ### Properties
24
+
25
+ | Property | Type | Description |
26
+ |----------|------|-------------|
27
+ | `from` | string | Envelope sender (SMTP MAIL FROM) - use for security |
28
+ | `to` | string | Envelope recipient (SMTP RCPT TO) |
29
+ | `headers` | Headers | Message headers (Subject, Message-ID, etc.) |
30
+ | `raw` | ReadableStream | Raw MIME message (**single-use**, buffer first) |
31
+ | `rawSize` | number | Message size in bytes |
32
+
33
+ ### Methods
34
+
35
+ #### setReject(reason: string): void
36
+
37
+ Reject with permanent SMTP 5xx error. Email not delivered, sender may receive bounce.
38
+
39
+ ```typescript
40
+ if (blockList.includes(message.from)) {
41
+ message.setReject('Sender blocked');
42
+ }
43
+ ```
44
+
45
+ #### forward(rcptTo: string, headers?: Headers): Promise<void>
46
+
47
+ Forward to verified destination. Only `X-*` custom headers allowed.
48
+
49
+ ```typescript
50
+ await message.forward('inbox@example.com');
51
+
52
+ // With custom headers
53
+ const h = new Headers();
54
+ h.set('X-Processed-By', 'worker');
55
+ await message.forward('inbox@example.com', h);
56
+ ```
57
+
58
+ #### reply(message: EmailMessage): Promise<void>
59
+
60
+ Send a reply to the original sender (March 2025 feature).
61
+
62
+ ```typescript
63
+ import { EmailMessage } from 'cloudflare:email';
64
+ import { createMimeMessage } from 'mimetext';
65
+
66
+ const msg = createMimeMessage();
67
+ msg.setSender({ name: 'Support', addr: 'support@example.com' });
68
+ msg.setRecipient(message.from);
69
+ msg.setSubject(`Re: ${message.headers.get('Subject')}`);
70
+ msg.setHeader('In-Reply-To', message.headers.get('Message-ID'));
71
+ msg.setHeader('References', message.headers.get('References') || '');
72
+ msg.addMessage({
73
+ contentType: 'text/plain',
74
+ data: 'Thank you for your message.'
75
+ });
76
+
77
+ await message.reply(new EmailMessage(
78
+ 'support@example.com',
79
+ message.from,
80
+ msg.asRaw()
81
+ ));
82
+ ```
83
+
84
+ **Requirements**:
85
+ - Incoming email needs valid DMARC
86
+ - Reply once per event, recipient = `message.from`
87
+ - Sender domain = receiving domain, with DMARC/SPF/DKIM
88
+ - Max 100 `References` entries
89
+ - Threading: `In-Reply-To` (original Message-ID), `References`, new `Message-ID`
90
+
91
+ ## EmailMessage Constructor
92
+
93
+ ```typescript
94
+ import { EmailMessage } from 'cloudflare:email';
95
+
96
+ new EmailMessage(from: string, to: string, raw: ReadableStream | string)
97
+ ```
98
+
99
+ Used for sending emails (replies or via SendEmail binding). Domain must be verified.
100
+
101
+ ## SendEmail Interface
102
+
103
+ ```typescript
104
+ interface SendEmail {
105
+ send(message: EmailMessage): Promise<void>;
106
+ }
107
+
108
+ // Usage
109
+ await env.EMAIL.send(new EmailMessage(from, to, mimeContent));
110
+ ```
111
+
112
+ ## SendEmail Binding Types
113
+
114
+ ```jsonc
115
+ {
116
+ "send_email": [
117
+ { "name": "EMAIL" }, // Type 1: Any verified address
118
+ { "name": "LOGS", "destination_address": "logs@example.com" }, // Type 2: Single dest
119
+ { "name": "TEAM", "allowed_destination_addresses": ["a@ex.com", "b@ex.com"] }, // Type 3: Dest allowlist
120
+ { "name": "NOREPLY", "allowed_sender_addresses": ["noreply@ex.com"] } // Type 4: Sender allowlist
121
+ ]
122
+ }
123
+ ```
124
+
125
+ ## postal-mime Parsed Output
126
+
127
+ postal-mime v2.7.3 parses incoming emails into structured data.
128
+
129
+ ```typescript
130
+ interface ParsedEmail {
131
+ headers: Array<{ key: string; value: string }>;
132
+ from: { name: string; address: string } | null;
133
+ to: Array<{ name: string; address: string }> | { name: string; address: string } | null;
134
+ cc: Array<{ name: string; address: string }> | null;
135
+ bcc: Array<{ name: string; address: string }> | null;
136
+ subject: string;
137
+ messageId: string | null;
138
+ inReplyTo: string | null;
139
+ references: string | null;
140
+ date: string | null;
141
+ html: string | null;
142
+ text: string | null;
143
+ attachments: Array<{
144
+ filename: string;
145
+ mimeType: string;
146
+ disposition: string | null;
147
+ related: boolean;
148
+ contentId: string | null;
149
+ content: Uint8Array;
150
+ }>;
151
+ }
152
+ ```
153
+
154
+ ### Usage
155
+
156
+ ```typescript
157
+ import PostalMime from 'postal-mime';
158
+
159
+ const buffer = await new Response(message.raw).arrayBuffer();
160
+ const email = await PostalMime.parse(buffer);
161
+
162
+ console.log(email.subject);
163
+ console.log(email.from?.address);
164
+ console.log(email.text);
165
+ console.log(email.attachments.length);
166
+ ```
167
+
168
+ ## mimetext API Quick Reference
169
+
170
+ mimetext v3.0.27 composes outgoing emails.
171
+
172
+ ```typescript
173
+ import { createMimeMessage } from 'mimetext';
174
+
175
+ const msg = createMimeMessage();
176
+
177
+ // Sender
178
+ msg.setSender({ name: 'John Doe', addr: 'john@example.com' });
179
+
180
+ // Recipients
181
+ msg.setRecipient('alice@example.com');
182
+ msg.setRecipients(['bob@example.com', 'carol@example.com']);
183
+ msg.setCc('manager@example.com');
184
+ msg.setBcc(['audit@example.com']);
185
+
186
+ // Headers
187
+ msg.setSubject('Meeting Notes');
188
+ msg.setHeader('In-Reply-To', '<previous-message-id>');
189
+ msg.setHeader('References', '<msg1> <msg2>');
190
+ msg.setHeader('Message-ID', `<${crypto.randomUUID()}@example.com>`);
191
+
192
+ // Content
193
+ msg.addMessage({
194
+ contentType: 'text/plain',
195
+ data: 'Plain text content'
196
+ });
197
+
198
+ msg.addMessage({
199
+ contentType: 'text/html',
200
+ data: '<p>HTML content</p>'
201
+ });
202
+
203
+ // Attachments
204
+ msg.addAttachment({
205
+ filename: 'report.pdf',
206
+ contentType: 'application/pdf',
207
+ data: pdfBuffer // Uint8Array or base64 string
208
+ });
209
+
210
+ // Generate raw MIME
211
+ const raw = msg.asRaw(); // Returns string
212
+ ```
213
+
214
+ ## TypeScript Types
215
+
216
+ ```typescript
217
+ import {
218
+ ForwardableEmailMessage,
219
+ EmailMessage
220
+ } from 'cloudflare:email';
221
+
222
+ interface Env {
223
+ EMAIL: SendEmail;
224
+ EMAIL_ARCHIVE: KVNamespace;
225
+ ALLOWED_SENDERS: KVNamespace;
226
+ }
227
+
228
+ export default {
229
+ async email(
230
+ message: ForwardableEmailMessage,
231
+ env: Env,
232
+ ctx: ExecutionContext
233
+ ): Promise<void> {
234
+ // Fully typed
235
+ }
236
+ };
237
+ ```