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,185 @@
1
+ # Workers Configuration
2
+
3
+ ## wrangler.jsonc (Recommended)
4
+
5
+ ```jsonc
6
+ {
7
+ "$schema": "./node_modules/wrangler/config-schema.json",
8
+ "name": "my-worker",
9
+ "main": "src/index.ts",
10
+ "compatibility_date": "2025-01-01", // Use current date for new projects
11
+
12
+ // Bindings (non-inheritable)
13
+ "vars": { "ENVIRONMENT": "production" },
14
+ "kv_namespaces": [{ "binding": "MY_KV", "id": "abc123" }],
15
+ "r2_buckets": [{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }],
16
+ "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xyz789" }],
17
+
18
+ // Environments
19
+ "env": {
20
+ "staging": {
21
+ "vars": { "ENVIRONMENT": "staging" },
22
+ "kv_namespaces": [{ "binding": "MY_KV", "id": "staging-id" }]
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## Configuration Rules
29
+
30
+ **Inheritable**: `name`, `main`, `compatibility_date`, `routes`, `workers_dev`
31
+ **Non-inheritable**: All bindings (`vars`, `kv_namespaces`, `r2_buckets`, etc.)
32
+ **Top-level only**: `migrations`, `keep_vars`, `send_metrics`
33
+
34
+ **ALWAYS set `compatibility_date` to current date for new projects**
35
+
36
+ ## Bindings
37
+
38
+ ```jsonc
39
+ {
40
+ // Environment variables - access via env.VAR_NAME
41
+ "vars": { "ENVIRONMENT": "production" },
42
+
43
+ // KV (key-value storage)
44
+ "kv_namespaces": [{ "binding": "MY_KV", "id": "abc123" }],
45
+
46
+ // R2 (object storage)
47
+ "r2_buckets": [{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }],
48
+
49
+ // D1 (SQL database)
50
+ "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xyz789" }],
51
+
52
+ // Durable Objects (stateful coordination)
53
+ "durable_objects": {
54
+ "bindings": [{ "name": "COUNTER", "class_name": "Counter" }]
55
+ },
56
+
57
+ // Queues (message queues)
58
+ "queues": {
59
+ "producers": [{ "binding": "MY_QUEUE", "queue": "my-queue" }],
60
+ "consumers": [{ "queue": "my-queue", "max_batch_size": 10 }]
61
+ },
62
+
63
+ // Service bindings (worker-to-worker RPC)
64
+ "services": [{ "binding": "SERVICE_B", "service": "service-b" }],
65
+
66
+ // Analytics Engine
67
+ "analytics_engine_datasets": [{ "binding": "ANALYTICS" }]
68
+ }
69
+ ```
70
+
71
+ ### Secrets
72
+
73
+ Set via CLI (never in config):
74
+
75
+ ```bash
76
+ npx wrangler secret put API_KEY
77
+ ```
78
+
79
+ Access: `env.API_KEY`
80
+
81
+ ### Automatic Provisioning (Beta)
82
+
83
+ Bindings without IDs are auto-created:
84
+
85
+ ```jsonc
86
+ { "kv_namespaces": [{ "binding": "MY_KV" }] } // ID added on deploy
87
+ ```
88
+
89
+ ## Routes & Triggers
90
+
91
+ ```jsonc
92
+ {
93
+ "routes": [
94
+ { "pattern": "example.com/*", "zone_name": "example.com" }
95
+ ],
96
+ "triggers": {
97
+ "crons": ["0 */6 * * *"] // Every 6 hours
98
+ }
99
+ }
100
+ ```
101
+
102
+ ## TypeScript Setup
103
+
104
+ ### Automatic Type Generation (Recommended)
105
+
106
+ ```bash
107
+ npm install -D @cloudflare/workers-types
108
+ npx wrangler types # Generates .wrangler/types/runtime.d.ts from wrangler.jsonc
109
+ ```
110
+
111
+ `tsconfig.json`:
112
+
113
+ ```jsonc
114
+ {
115
+ "compilerOptions": {
116
+ "target": "ES2022",
117
+ "lib": ["ES2022"],
118
+ "types": ["@cloudflare/workers-types"]
119
+ },
120
+ "include": [".wrangler/types/**/*.ts", "src/**/*"]
121
+ }
122
+ ```
123
+
124
+ Import generated types:
125
+
126
+ ```typescript
127
+ import type { Env } from './.wrangler/types/runtime';
128
+
129
+ export default {
130
+ async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
131
+ await env.MY_KV.get('key'); // Fully typed, autocomplete works
132
+ return new Response('OK');
133
+ },
134
+ };
135
+ ```
136
+
137
+ Re-run `npx wrangler types` after changing bindings in wrangler.jsonc
138
+
139
+ ### Manual Type Definition (Legacy)
140
+
141
+ ```typescript
142
+ interface Env {
143
+ MY_KV: KVNamespace;
144
+ DB: D1Database;
145
+ API_KEY: string;
146
+ }
147
+ ```
148
+
149
+ ## Advanced Options
150
+
151
+ ```jsonc
152
+ {
153
+ // Auto-locate compute near data sources
154
+ "placement": { "mode": "smart" },
155
+
156
+ // Enable Node.js built-ins (Buffer, process, path, etc.)
157
+ "compatibility_flags": ["nodejs_compat"],
158
+
159
+ // Observability (10% sampling)
160
+ "observability": { "enabled": true, "head_sampling_rate": 0.1 }
161
+ }
162
+ ```
163
+
164
+ ### Node.js Compatibility
165
+
166
+ `nodejs_compat` enables:
167
+ - `Buffer`, `process.env`, `path`, `stream`
168
+ - CommonJS `require()` for Node modules
169
+ - `node:` imports (e.g., `import { Buffer } from 'node:buffer'`)
170
+
171
+ **Note:** Adds ~1-2ms cold start overhead. Use Workers APIs (R2, KV) when possible
172
+
173
+ ## Deployment Commands
174
+
175
+ ```bash
176
+ npx wrangler deploy # Production
177
+ npx wrangler deploy --env staging
178
+ npx wrangler deploy --dry-run # Validate only
179
+ ```
180
+
181
+ ## See Also
182
+
183
+ - [API](./api.md) - Runtime APIs and bindings usage
184
+ - [Patterns](./patterns.md) - Deployment strategies
185
+ - [Wrangler](../wrangler/README.md) - CLI reference
@@ -0,0 +1,197 @@
1
+ # Workers Frameworks
2
+
3
+ ## Hono (Recommended)
4
+
5
+ Workers-native web framework with excellent TypeScript support and middleware ecosystem.
6
+
7
+ ```bash
8
+ npm install hono
9
+ ```
10
+
11
+ ### Basic Setup
12
+
13
+ ```typescript
14
+ import { Hono } from 'hono';
15
+
16
+ const app = new Hono();
17
+
18
+ app.get('/', (c) => c.text('Hello World!'));
19
+ app.post('/api/users', async (c) => {
20
+ const body = await c.req.json();
21
+ return c.json({ id: 1, ...body }, 201);
22
+ });
23
+
24
+ export default app;
25
+ ```
26
+
27
+ ### Typed Environment
28
+
29
+ ```typescript
30
+ import type { Env } from './.wrangler/types/runtime';
31
+
32
+ const app = new Hono<{ Bindings: Env }>();
33
+
34
+ app.get('/data', async (c) => {
35
+ const value = await c.env.MY_KV.get('key'); // Fully typed
36
+ return c.text(value || 'Not found');
37
+ });
38
+ ```
39
+
40
+ ### Middleware
41
+
42
+ ```typescript
43
+ import { cors } from 'hono/cors';
44
+ import { logger } from 'hono/logger';
45
+
46
+ app.use('*', logger());
47
+ app.use('/api/*', cors({ origin: '*' }));
48
+
49
+ // Custom middleware
50
+ app.use('/protected/*', async (c, next) => {
51
+ const auth = c.req.header('Authorization');
52
+ if (!auth?.startsWith('Bearer ')) return c.text('Unauthorized', 401);
53
+ await next();
54
+ });
55
+ ```
56
+
57
+ ### Request Validation (Zod)
58
+
59
+ ```typescript
60
+ import { zValidator } from '@hono/zod-validator';
61
+ import { z } from 'zod';
62
+
63
+ const schema = z.object({
64
+ name: z.string().min(1),
65
+ email: z.string().email(),
66
+ });
67
+
68
+ app.post('/users', zValidator('json', schema), async (c) => {
69
+ const validated = c.req.valid('json'); // Type-safe, validated data
70
+ return c.json({ id: 1, ...validated });
71
+ });
72
+ ```
73
+
74
+ **Error handling**: Automatic 400 response with validation errors
75
+
76
+ ### Route Groups
77
+
78
+ ```typescript
79
+ const api = new Hono().basePath('/api');
80
+
81
+ api.get('/users', (c) => c.json([]));
82
+ api.post('/users', (c) => c.json({ id: 1 }));
83
+
84
+ app.route('/', api); // Mounts at /api/*
85
+ ```
86
+
87
+ ### Error Handling
88
+
89
+ ```typescript
90
+ app.onError((err, c) => {
91
+ console.error(err);
92
+ return c.json({ error: err.message }, 500);
93
+ });
94
+
95
+ app.notFound((c) => c.json({ error: 'Not Found' }, 404));
96
+ ```
97
+
98
+ ### Accessing ExecutionContext
99
+
100
+ ```typescript
101
+ export default {
102
+ fetch(request: Request, env: Env, ctx: ExecutionContext) {
103
+ return app.fetch(request, env, ctx);
104
+ },
105
+ };
106
+
107
+ // In route handlers:
108
+ app.get('/log', (c) => {
109
+ c.executionCtx.waitUntil(logRequest(c.req));
110
+ return c.text('OK');
111
+ });
112
+ ```
113
+
114
+ ### OpenAPI/Swagger (Hono OpenAPI)
115
+
116
+ ```typescript
117
+ import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi';
118
+
119
+ const app = new OpenAPIHono();
120
+
121
+ const route = createRoute({
122
+ method: 'get',
123
+ path: '/users/{id}',
124
+ request: { params: z.object({ id: z.string() }) },
125
+ responses: {
126
+ 200: { description: 'User found', content: { 'application/json': { schema: z.object({ id: z.string() }) } } },
127
+ },
128
+ });
129
+
130
+ app.openapi(route, (c) => {
131
+ const { id } = c.req.valid('param');
132
+ return c.json({ id });
133
+ });
134
+
135
+ app.doc('/openapi.json', { openapi: '3.0.0', info: { version: '1.0.0', title: 'API' } });
136
+ ```
137
+
138
+ ### Testing with Hono
139
+
140
+ ```typescript
141
+ import { describe, it, expect } from 'vitest';
142
+ import app from '../src/index';
143
+
144
+ describe('API', () => {
145
+ it('GET /', async () => {
146
+ const res = await app.request('/');
147
+ expect(res.status).toBe(200);
148
+ expect(await res.text()).toBe('Hello World!');
149
+ });
150
+ });
151
+ ```
152
+
153
+ ## Other Frameworks
154
+
155
+ ### itty-router (Minimalist)
156
+
157
+ ```typescript
158
+ import { Router } from 'itty-router';
159
+
160
+ const router = Router();
161
+
162
+ router.get('/users/:id', ({ params }) => new Response(params.id));
163
+
164
+ export default { fetch: router.handle };
165
+ ```
166
+
167
+ **Use case**: Tiny bundle size (~500 bytes), simple routing needs
168
+
169
+ ### Worktop (Advanced)
170
+
171
+ ```typescript
172
+ import { Router } from 'worktop';
173
+
174
+ const router = new Router();
175
+
176
+ router.add('GET', '/users/:id', (req, res) => {
177
+ res.send(200, { id: req.params.id });
178
+ });
179
+
180
+ router.listen();
181
+ ```
182
+
183
+ **Use case**: Advanced routing, built-in CORS/cache utilities
184
+
185
+ ## Framework Comparison
186
+
187
+ | Framework | Bundle Size | TypeScript | Middleware | Validation | Best For |
188
+ |-----------|-------------|------------|------------|------------|----------|
189
+ | Hono | ~12KB | Excellent | Rich | Zod | Production apps |
190
+ | itty-router | ~500B | Good | Basic | Manual | Minimal APIs |
191
+ | Worktop | ~8KB | Good | Advanced | Manual | Complex routing |
192
+
193
+ ## See Also
194
+
195
+ - [Patterns](./patterns.md) - Common workflows
196
+ - [API](./api.md) - Runtime APIs
197
+ - [Gotchas](./gotchas.md) - Framework-specific issues
@@ -0,0 +1,137 @@
1
+ # Workers Gotchas
2
+
3
+ ## Common Errors
4
+
5
+ ### "Too much CPU time used"
6
+
7
+ **Cause:** Worker exceeded CPU time limit (10ms on Free plan, 30s default / 5min max on Paid)
8
+ **Solution:** Use `ctx.waitUntil()` for background work, offload heavy compute to Durable Objects, or consider Workers AI for ML workloads
9
+
10
+ ### "Module-Level State Lost"
11
+
12
+ **Cause:** Workers are stateless between requests; module-level variables reset unpredictably
13
+ **Solution:** Use KV, D1, or Durable Objects for persistent state; don't rely on module-level variables
14
+
15
+ ### "Body has already been used"
16
+
17
+ **Cause:** Attempting to read response body twice (bodies are streams)
18
+ **Solution:** Clone response before reading: `response.clone()` or read once and create new Response with the text
19
+
20
+ ### "Node.js module not found"
21
+
22
+ **Cause:** Node.js built-ins not available by default
23
+ **Solution:** Use Workers APIs (e.g., R2 for file storage) or enable Node.js compat with `"compatibility_flags": ["nodejs_compat"]`
24
+
25
+ ### "Cannot fetch in global scope"
26
+
27
+ **Cause:** Attempting to use fetch during module initialization
28
+ **Solution:** Move fetch calls inside handler functions (fetch, scheduled, etc.) where they're allowed
29
+
30
+ ### "Subrequest depth limit exceeded"
31
+
32
+ **Cause:** Too many nested subrequests creating deep call chain
33
+ **Solution:** Flatten request chain or use service bindings for direct Worker-to-Worker communication
34
+
35
+ ### "D1 read-after-write inconsistency"
36
+
37
+ **Cause:** D1 is eventually consistent; reads may not reflect recent writes
38
+ **Solution:** Use D1 Sessions (2024+) to guarantee read-after-write consistency within a session:
39
+
40
+ ```typescript
41
+ const session = env.DB.withSession();
42
+ await session.prepare('INSERT INTO users (name) VALUES (?)').bind('Alice').run();
43
+ const user = await session.prepare('SELECT * FROM users WHERE name = ?').bind('Alice').first(); // Guaranteed to see Alice
44
+ ```
45
+
46
+ **When to use sessions:** Write → Read patterns, transactions requiring consistency
47
+
48
+ ### "wrangler types not generating TypeScript definitions"
49
+
50
+ **Cause:** Type generation not configured or outdated
51
+ **Solution:** Run `npx wrangler types` after changing bindings in wrangler.jsonc:
52
+
53
+ ```bash
54
+ npx wrangler types # Generates .wrangler/types/runtime.d.ts
55
+ ```
56
+
57
+ Add to `tsconfig.json`: `"include": [".wrangler/types/**/*.ts"]`
58
+
59
+ Then import: `import type { Env } from './.wrangler/types/runtime';`
60
+
61
+ ### "Durable Object RPC errors with deprecated fetch pattern"
62
+
63
+ **Cause:** Using old `stub.fetch()` pattern instead of RPC (2024+)
64
+ **Solution:** Export methods directly, call via RPC:
65
+
66
+ ```typescript
67
+ // ❌ Old fetch pattern
68
+ export class MyDO {
69
+ async fetch(request: Request) {
70
+ const { method } = await request.json();
71
+ if (method === 'increment') return new Response(String(await this.increment()));
72
+ }
73
+ async increment() { return ++this.value; }
74
+ }
75
+ const stub = env.DO.get(id);
76
+ const res = await stub.fetch('http://x', { method: 'POST', body: JSON.stringify({ method: 'increment' }) });
77
+
78
+ // ✅ RPC pattern (type-safe, no serialization overhead)
79
+ export class MyDO {
80
+ async increment() { return ++this.value; }
81
+ }
82
+ const stub = env.DO.get(id);
83
+ const count = await stub.increment(); // Direct method call
84
+ ```
85
+
86
+ ### "WebSocket connection closes unexpectedly"
87
+
88
+ **Cause:** Worker reaches CPU limit while maintaining WebSocket connection
89
+ **Solution:** Use WebSocket hibernation (2024+) to offload idle connections:
90
+
91
+ ```typescript
92
+ export class WebSocketDO {
93
+ async webSocketMessage(ws: WebSocket, message: string) {
94
+ // Handle message
95
+ }
96
+ async webSocketClose(ws: WebSocket, code: number) {
97
+ // Cleanup
98
+ }
99
+ }
100
+ ```
101
+
102
+ Hibernation automatically suspends inactive connections, wakes on events
103
+
104
+ ### "Framework middleware not working with Workers"
105
+
106
+ **Cause:** Framework expects Node.js primitives (e.g., Express uses Node streams)
107
+ **Solution:** Use Workers-native frameworks (Hono, itty-router, Worktop) or adapt middleware:
108
+
109
+ ```typescript
110
+ // ✅ Hono (Workers-native)
111
+ import { Hono } from 'hono';
112
+ const app = new Hono();
113
+ app.use('*', async (c, next) => { /* middleware */ await next(); });
114
+ ```
115
+
116
+ See [frameworks.md](./frameworks.md) for full patterns
117
+
118
+ ## Limits
119
+
120
+ | Limit | Value | Notes |
121
+ |-------|-------|-------|
122
+ | Request size | 100 MB | Maximum incoming request size |
123
+ | Response size | Unlimited | Supports streaming |
124
+ | CPU time (Free) | 10ms | Free plan |
125
+ | CPU time (Paid) | 30s default / 5min max | Configurable via `limits.cpu_ms` |
126
+ | Subrequests (Free) | 50 | Per invocation |
127
+ | Subrequests (Paid) | 10,000 | Per invocation |
128
+ | Subrequest operations (KV, R2, Cache API) | 1,000 | Shared across KV reads, R2 ops, Cache API calls per request |
129
+ | KV value size | 25 MiB | Maximum per key |
130
+ | Environment variable size | 5 KB | Per variable |
131
+
132
+ ## See Also
133
+
134
+ - [Patterns](./patterns.md) - Best practices
135
+ - [API](./api.md) - Runtime APIs
136
+ - [Configuration](./configuration.md) - Setup
137
+ - [Frameworks](./frameworks.md) - Hono, routing, validation
@@ -0,0 +1,198 @@
1
+ # Workers Patterns
2
+
3
+ ## Error Handling
4
+
5
+ ```typescript
6
+ class HTTPError extends Error {
7
+ constructor(public status: number, message: string) { super(message); }
8
+ }
9
+
10
+ export default {
11
+ async fetch(request: Request, env: Env): Promise<Response> {
12
+ try {
13
+ return await handleRequest(request, env);
14
+ } catch (error) {
15
+ if (error instanceof HTTPError) {
16
+ return new Response(JSON.stringify({ error: error.message }), {
17
+ status: error.status, headers: { 'Content-Type': 'application/json' }
18
+ });
19
+ }
20
+ return new Response('Internal Server Error', { status: 500 });
21
+ }
22
+ },
23
+ };
24
+ ```
25
+
26
+ ## CORS
27
+
28
+ ```typescript
29
+ const corsHeaders = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS' };
30
+ if (request.method === 'OPTIONS') return new Response(null, { headers: corsHeaders });
31
+ ```
32
+
33
+ ## Routing
34
+
35
+ ```typescript
36
+ const router = { 'GET /api/users': handleGetUsers, 'POST /api/users': handleCreateUser };
37
+
38
+ const handler = router[`${request.method} ${url.pathname}`];
39
+ return handler ? handler(request, env) : new Response('Not Found', { status: 404 });
40
+ ```
41
+
42
+ **Production**: Use Hono, itty-router, or Worktop (see [frameworks.md](./frameworks.md))
43
+
44
+ ## Request Validation (Zod)
45
+
46
+ ```typescript
47
+ import { z } from 'zod';
48
+
49
+ const userSchema = z.object({
50
+ name: z.string().min(1).max(100),
51
+ email: z.string().email(),
52
+ age: z.number().int().positive().optional(),
53
+ });
54
+
55
+ async function handleCreateUser(request: Request) {
56
+ try {
57
+ const body = await request.json();
58
+ const validated = userSchema.parse(body); // Throws on invalid data
59
+ return new Response(JSON.stringify({ id: 1, ...validated }), {
60
+ status: 201,
61
+ headers: { 'Content-Type': 'application/json' },
62
+ });
63
+ } catch (err) {
64
+ if (err instanceof z.ZodError) {
65
+ return new Response(JSON.stringify({ errors: err.errors }), { status: 400 });
66
+ }
67
+ throw err;
68
+ }
69
+ }
70
+ ```
71
+
72
+ **With Hono**: Use `@hono/zod-validator` for automatic validation (see [frameworks.md](./frameworks.md))
73
+
74
+ ## Performance
75
+
76
+ ```typescript
77
+ // ❌ Sequential
78
+ const user = await fetch('/api/user/1');
79
+ const posts = await fetch('/api/posts?user=1');
80
+
81
+ // ✅ Parallel
82
+ const [user, posts] = await Promise.all([fetch('/api/user/1'), fetch('/api/posts?user=1')]);
83
+ ```
84
+
85
+ ## Streaming
86
+
87
+ ```typescript
88
+ const stream = new ReadableStream({
89
+ async start(controller) {
90
+ for (let i = 0; i < 1000; i++) {
91
+ controller.enqueue(new TextEncoder().encode(`Item ${i}\n`));
92
+ if (i % 100 === 0) await new Promise(r => setTimeout(r, 0));
93
+ }
94
+ controller.close();
95
+ }
96
+ });
97
+ ```
98
+
99
+ ## Transform Streams
100
+
101
+ ```typescript
102
+ response.body.pipeThrough(new TextDecoderStream()).pipeThrough(
103
+ new TransformStream({ transform(chunk, c) { c.enqueue(chunk.toUpperCase()); } })
104
+ ).pipeThrough(new TextEncoderStream());
105
+ ```
106
+
107
+ ## Testing
108
+
109
+ ```typescript
110
+ import { describe, it, expect } from 'vitest';
111
+ import worker from '../src/index';
112
+
113
+ describe('Worker', () => {
114
+ it('returns 200', async () => {
115
+ const req = new Request('http://localhost/');
116
+ const env = { MY_VAR: 'test' };
117
+ const ctx = { waitUntil: () => {}, passThroughOnException: () => {} };
118
+ expect((await worker.fetch(req, env, ctx)).status).toBe(200);
119
+ });
120
+ });
121
+ ```
122
+
123
+ ## Deployment
124
+
125
+ ```bash
126
+ npx wrangler deploy # production
127
+ npx wrangler deploy --env staging
128
+ npx wrangler versions upload --message "Add feature"
129
+ npx wrangler rollback
130
+ ```
131
+
132
+ ## Monitoring
133
+
134
+ ```typescript
135
+ const start = Date.now();
136
+ const response = await handleRequest(request, env);
137
+ ctx.waitUntil(env.ANALYTICS.writeDataPoint({
138
+ doubles: [Date.now() - start], blobs: [request.url, String(response.status)]
139
+ }));
140
+ ```
141
+
142
+ ## Security & Rate Limiting
143
+
144
+ ```typescript
145
+ // Security headers
146
+ const security = { 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'DENY' };
147
+
148
+ // Auth
149
+ const auth = request.headers.get('Authorization');
150
+ if (!auth?.startsWith('Bearer ')) return new Response('Unauthorized', { status: 401 });
151
+
152
+ // Gradual rollouts (deterministic user bucketing)
153
+ const hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(userId));
154
+ if (new Uint8Array(hash)[0] % 100 < rolloutPercent) return newFeature(request);
155
+ ```
156
+
157
+ Rate limiting: See [Durable Objects](../durable-objects/README.md)
158
+
159
+ ## R2 Multipart Upload
160
+
161
+ ```typescript
162
+ // For files > 100MB
163
+ const upload = await env.MY_BUCKET.createMultipartUpload('large-file.bin');
164
+ try {
165
+ const parts = [];
166
+ for (let i = 0; i < chunks.length; i++) {
167
+ parts.push(await upload.uploadPart(i + 1, chunks[i]));
168
+ }
169
+ await upload.complete(parts);
170
+ } catch (err) { await upload.abort(); throw err; }
171
+ ```
172
+
173
+ Parallel uploads, resume on failure, handle files > 5GB
174
+
175
+ ## Workflows (Step Orchestration)
176
+
177
+ ```typescript
178
+ import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
179
+
180
+ export class MyWorkflow extends WorkflowEntrypoint {
181
+ async run(event: WorkflowEvent<{ userId: string }>, step: WorkflowStep) {
182
+ const user = await step.do('fetch-user', async () =>
183
+ fetch(`/api/users/${event.payload.userId}`).then(r => r.json())
184
+ );
185
+ await step.sleep('wait', '1 hour');
186
+ await step.do('notify', async () => sendEmail(user.email));
187
+ }
188
+ }
189
+ ```
190
+
191
+ Multi-step jobs with automatic retries, state persistence, resume from failure
192
+
193
+ ## See Also
194
+
195
+ - [API](./api.md) - Runtime APIs
196
+ - [Gotchas](./gotchas.md) - Common issues
197
+ - [Configuration](./configuration.md) - Setup
198
+ - [Frameworks](./frameworks.md) - Hono, routing, validation