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,143 @@
1
+ # Function API
2
+
3
+ ## EventContext
4
+
5
+ ```typescript
6
+ interface EventContext<Env = any> {
7
+ request: Request; // Incoming request
8
+ functionPath: string; // Request path
9
+ waitUntil(promise: Promise<any>): void; // Background tasks (non-blocking)
10
+ passThroughOnException(): void; // Fallback to static on error
11
+ next(input?: Request | string, init?: RequestInit): Promise<Response>;
12
+ env: Env; // Bindings, vars, secrets
13
+ params: Record<string, string | string[]>; // Route params ([user] or [[catchall]])
14
+ data: any; // Middleware shared state
15
+ }
16
+ ```
17
+
18
+ **TypeScript:** See [configuration.md](./configuration.md) for `wrangler types` setup
19
+
20
+ ## Handlers
21
+
22
+ ```typescript
23
+ // Generic (fallback for any method)
24
+ export async function onRequest(ctx: EventContext): Promise<Response> {
25
+ return new Response('Any method');
26
+ }
27
+
28
+ // Method-specific (takes precedence over generic)
29
+ export async function onRequestGet(ctx: EventContext): Promise<Response> {
30
+ return Response.json({ message: 'GET' });
31
+ }
32
+
33
+ export async function onRequestPost(ctx: EventContext): Promise<Response> {
34
+ const body = await ctx.request.json();
35
+ return Response.json({ received: body });
36
+ }
37
+ // Also: onRequestPut, onRequestPatch, onRequestDelete, onRequestHead, onRequestOptions
38
+ ```
39
+
40
+ ## Bindings Reference
41
+
42
+ | Binding Type | Interface | Config Key | Use Case |
43
+ |--------------|-----------|------------|----------|
44
+ | KV | `KVNamespace` | `kv_namespaces` | Key-value cache, sessions, config |
45
+ | D1 | `D1Database` | `d1_databases` | Relational data, SQL queries |
46
+ | R2 | `R2Bucket` | `r2_buckets` | Large files, user uploads, assets |
47
+ | Durable Objects | `DurableObjectNamespace` | `durable_objects.bindings` | Stateful coordination, websockets |
48
+ | Workers AI | `Ai` | `ai.binding` | LLM inference, embeddings |
49
+ | Vectorize | `VectorizeIndex` | `vectorize` | Vector search, embeddings |
50
+ | Service Binding | `Fetcher` | `services` | Worker-to-worker RPC |
51
+ | Analytics Engine | `AnalyticsEngineDataset` | `analytics_engine_datasets` | Event logging, metrics |
52
+ | Environment Vars | `string` | `vars` | Non-sensitive config |
53
+
54
+ See [configuration.md](./configuration.md) for wrangler.jsonc examples.
55
+
56
+ ## Bindings
57
+
58
+ ### KV
59
+
60
+ ```typescript
61
+ interface Env { KV: KVNamespace; }
62
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
63
+ await ctx.env.KV.put('key', 'value', { expirationTtl: 3600 });
64
+ const val = await ctx.env.KV.get('key', { type: 'json' });
65
+ const keys = await ctx.env.KV.list({ prefix: 'user:' });
66
+ return Response.json({ val });
67
+ };
68
+ ```
69
+
70
+ ### D1
71
+
72
+ ```typescript
73
+ interface Env { DB: D1Database; }
74
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
75
+ const user = await ctx.env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(123).first();
76
+ return Response.json(user);
77
+ };
78
+ ```
79
+
80
+ ### R2
81
+
82
+ ```typescript
83
+ interface Env { BUCKET: R2Bucket; }
84
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
85
+ const obj = await ctx.env.BUCKET.get('file.txt');
86
+ if (!obj) return new Response('Not found', { status: 404 });
87
+ await ctx.env.BUCKET.put('file.txt', ctx.request.body);
88
+ return new Response(obj.body);
89
+ };
90
+ ```
91
+
92
+ ### Durable Objects
93
+
94
+ ```typescript
95
+ interface Env { COUNTER: DurableObjectNamespace; }
96
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
97
+ const stub = ctx.env.COUNTER.get(ctx.env.COUNTER.idFromName('global'));
98
+ return stub.fetch(ctx.request);
99
+ };
100
+ ```
101
+
102
+ ### Workers AI
103
+
104
+ ```typescript
105
+ interface Env { AI: Ai; }
106
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
107
+ const resp = await ctx.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { prompt: 'Hello' });
108
+ return Response.json(resp);
109
+ };
110
+ ```
111
+
112
+ ### Service Bindings & Env Vars
113
+
114
+ ```typescript
115
+ interface Env { AUTH: Fetcher; API_KEY: string; }
116
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
117
+ // Service binding: forward to another Worker
118
+ return ctx.env.AUTH.fetch(ctx.request);
119
+
120
+ // Environment variable
121
+ return Response.json({ key: ctx.env.API_KEY });
122
+ };
123
+ ```
124
+
125
+ ## Advanced Mode (env.ASSETS)
126
+
127
+ When using `_worker.js`, access static assets via `env.ASSETS.fetch()`:
128
+
129
+ ```typescript
130
+ interface Env { ASSETS: Fetcher; KV: KVNamespace; }
131
+
132
+ export default {
133
+ async fetch(request: Request, env: Env): Promise<Response> {
134
+ const url = new URL(request.url);
135
+ if (url.pathname.startsWith('/api/')) {
136
+ return Response.json({ data: await env.KV.get('key') });
137
+ }
138
+ return env.ASSETS.fetch(request); // Fallback to static
139
+ }
140
+ } satisfies ExportedHandler<Env>;
141
+ ```
142
+
143
+ **See also:** [configuration.md](./configuration.md) for TypeScript setup and wrangler.jsonc | [patterns.md](./patterns.md) for middleware and auth patterns
@@ -0,0 +1,122 @@
1
+ # Configuration
2
+
3
+ ## TypeScript Setup
4
+
5
+ **Generate types from wrangler.jsonc** (replaces deprecated `@cloudflare/workers-types`):
6
+
7
+ ```bash
8
+ npx wrangler types
9
+ ```
10
+
11
+ Creates `worker-configuration.d.ts` with typed `Env` interface based on your bindings.
12
+
13
+ ```typescript
14
+ // functions/api.ts
15
+ export const onRequest: PagesFunction<Env> = async (ctx) => {
16
+ // ctx.env.KV, ctx.env.DB, etc. are fully typed
17
+ return Response.json({ ok: true });
18
+ };
19
+ ```
20
+
21
+ **Manual types** (if not using wrangler types):
22
+
23
+ ```typescript
24
+ interface Env {
25
+ KV: KVNamespace;
26
+ DB: D1Database;
27
+ API_KEY: string;
28
+ }
29
+ export const onRequest: PagesFunction<Env> = async (ctx) => { /* ... */ };
30
+ ```
31
+
32
+ ## wrangler.jsonc
33
+
34
+ ```jsonc
35
+ {
36
+ "$schema": "./node_modules/wrangler/config-schema.json",
37
+ "name": "my-pages-app",
38
+ "pages_build_output_dir": "./dist",
39
+ "compatibility_date": "2025-01-01",
40
+ "compatibility_flags": ["nodejs_compat"],
41
+
42
+ "vars": { "API_URL": "https://api.example.com" },
43
+ "kv_namespaces": [{ "binding": "KV", "id": "abc123" }],
44
+ "d1_databases": [{ "binding": "DB", "database_name": "prod-db", "database_id": "xyz789" }],
45
+ "r2_buckets": [{ "binding": "BUCKET", "bucket_name": "my-bucket" }],
46
+ "durable_objects": { "bindings": [{ "name": "COUNTER", "class_name": "Counter", "script_name": "counter-worker" }] },
47
+ "services": [{ "binding": "AUTH", "service": "auth-worker" }],
48
+ "ai": { "binding": "AI" },
49
+ "vectorize": [{ "binding": "VECTORIZE", "index_name": "my-index" }],
50
+ "analytics_engine_datasets": [{ "binding": "ANALYTICS" }]
51
+ }
52
+ ```
53
+
54
+ ## Environment Overrides
55
+
56
+ Top-level → local dev, `env.preview` → preview, `env.production` → production
57
+
58
+ ```jsonc
59
+ {
60
+ "vars": { "API_URL": "http://localhost:8787" },
61
+ "env": {
62
+ "production": { "vars": { "API_URL": "https://api.example.com" } }
63
+ }
64
+ }
65
+ ```
66
+
67
+ **Note:** If overriding `vars`, `kv_namespaces`, `d1_databases`, etc., ALL must be redefined (non-inheritable)
68
+
69
+ ## Local Secrets (.dev.vars)
70
+
71
+ **Local dev only** - NOT deployed:
72
+
73
+ ```bash
74
+ # .dev.vars (add to .gitignore)
75
+ SECRET_KEY="my-secret-value"
76
+ ```
77
+
78
+ Accessed via `ctx.env.SECRET_KEY`. Set production secrets:
79
+ ```bash
80
+ echo "value" | npx wrangler pages secret put SECRET_KEY --project-name=my-app
81
+ ```
82
+
83
+ ## Static Config Files
84
+
85
+ **_routes.json** - Custom routing:
86
+ ```json
87
+ { "version": 1, "include": ["/api/*"], "exclude": ["/static/*"] }
88
+ ```
89
+
90
+ **_headers** - Static headers:
91
+ ```
92
+ /static/*
93
+ Cache-Control: public, max-age=31536000
94
+ ```
95
+
96
+ **_redirects** - Redirects:
97
+ ```
98
+ /old /new 301
99
+ ```
100
+
101
+ ## Local Dev & Deployment
102
+
103
+ ```bash
104
+ # Dev server
105
+ npx wrangler pages dev ./dist
106
+
107
+ # With bindings
108
+ npx wrangler pages dev ./dist --kv=KV --d1=DB=db-id --r2=BUCKET
109
+
110
+ # Durable Objects (2 terminals)
111
+ cd do-worker && npx wrangler dev
112
+ cd pages-project && npx wrangler pages dev ./dist --do COUNTER=Counter@do-worker
113
+
114
+ # Deploy
115
+ npx wrangler pages deploy ./dist
116
+ npx wrangler pages deploy ./dist --branch preview
117
+
118
+ # Download config
119
+ npx wrangler pages download config my-project
120
+ ```
121
+
122
+ **See also:** [api.md](./api.md) for binding usage examples
@@ -0,0 +1,94 @@
1
+ # Gotchas & Debugging
2
+
3
+ ## Error Diagnosis
4
+
5
+ | Symptom | Likely Cause | Solution |
6
+ |---------|--------------|----------|
7
+ | **Function not invoking** | Wrong `/functions` location, wrong extension, or `_routes.json` excludes path | Check `pages_build_output_dir`, use `.js`/`.ts`, verify `_routes.json` |
8
+ | **`ctx.env.BINDING` undefined** | Binding not configured or name mismatch | Add to `wrangler.jsonc`, verify exact name (case-sensitive), redeploy |
9
+ | **TypeScript errors on `ctx.env`** | Missing type definition | Run `wrangler types` or define `interface Env {}` |
10
+ | **Middleware not running** | Wrong filename/location or missing `ctx.next()` | Name exactly `_middleware.js`, export `onRequest`, call `ctx.next()` |
11
+ | **Secrets missing in production** | `.dev.vars` not deployed | `.dev.vars` is local only - set production secrets via dashboard or `wrangler secret put` |
12
+ | **Type mismatch on binding** | Wrong interface type | See [api.md](./api.md) bindings table for correct types |
13
+ | **"KV key not found" but exists** | Key in wrong namespace or env | Verify namespace binding, check preview vs production env |
14
+ | **Function times out** | Synchronous wait or missing `await` | All I/O must be async/await, use `ctx.waitUntil()` for background tasks |
15
+
16
+ ## Common Errors
17
+
18
+ ### TypeScript type errors
19
+
20
+ **Problem:** `ctx.env.MY_BINDING` shows type error
21
+ **Cause:** No type definition for `Env`
22
+ **Solution:** Run `npx wrangler types` or manually define:
23
+ ```typescript
24
+ interface Env { MY_BINDING: KVNamespace; }
25
+ export const onRequest: PagesFunction<Env> = async (ctx) => { /* ... */ };
26
+ ```
27
+
28
+ ### Secrets not available in production
29
+
30
+ **Problem:** `ctx.env.SECRET_KEY` is undefined in production
31
+ **Cause:** `.dev.vars` is local-only, not deployed
32
+ **Solution:** Set production secrets:
33
+ ```bash
34
+ echo "value" | npx wrangler pages secret put SECRET_KEY --project-name=my-app
35
+ ```
36
+
37
+ ## Debugging
38
+
39
+ ```typescript
40
+ // Console logging
41
+ export async function onRequest(ctx) {
42
+ console.log('Request:', ctx.request.method, ctx.request.url);
43
+ const res = await ctx.next();
44
+ console.log('Status:', res.status);
45
+ return res;
46
+ }
47
+ ```
48
+
49
+ ```bash
50
+ # Stream real-time logs
51
+ npx wrangler pages deployment tail
52
+ npx wrangler pages deployment tail --status error
53
+ ```
54
+
55
+ ```jsonc
56
+ // Source maps (wrangler.jsonc)
57
+ { "upload_source_maps": true }
58
+ ```
59
+
60
+ ## Limits
61
+
62
+ | Resource | Free | Paid |
63
+ |----------|------|------|
64
+ | CPU time | 10ms | 30s (default), 5min (max) |
65
+ | Memory | 128 MB | 128 MB |
66
+ | Script size | 10 MB compressed | 10 MB compressed |
67
+ | Env vars | 5 KB per var, 64 max | 5 KB per var, 64 max |
68
+ | Requests | 100k/day | Unlimited ($0.50/million) |
69
+
70
+ ## Best Practices
71
+
72
+ **Performance:** Minimize deps (cold start), use KV for cache/D1 for relational/R2 for large files, set `Cache-Control` headers, batch DB ops, handle errors gracefully
73
+
74
+ **Security:** Never commit secrets (use `.dev.vars` + gitignore), validate input, sanitize before DB, implement auth middleware, set CORS headers, rate limit per-IP
75
+
76
+ ## Migration
77
+
78
+ **Workers → Pages Functions:**
79
+ - `export default { fetch(req, env) {} }` → `export function onRequest(ctx) { const { request, env } = ctx; }`
80
+ - Use `_worker.js` for complex routing: `env.ASSETS.fetch(request)` for static files
81
+
82
+ **Other platforms → Pages:**
83
+ - File-based routing: `/functions/api/users.js` → `/api/users`
84
+ - Dynamic routes: `[param]` not `:param`
85
+ - Replace Node.js deps with Workers APIs or add `nodejs_compat` flag
86
+
87
+ ## Resources
88
+
89
+ - [Official Docs](https://developers.cloudflare.com/pages/functions/)
90
+ - [Workers APIs](https://developers.cloudflare.com/workers/runtime-apis/)
91
+ - [Examples](https://github.com/cloudflare/pages-example-projects)
92
+ - [Discord](https://discord.gg/cloudflaredev)
93
+
94
+ **See also:** [configuration.md](./configuration.md) for TypeScript setup | [patterns.md](./patterns.md) for middleware/auth | [api.md](./api.md) for bindings
@@ -0,0 +1,137 @@
1
+ # Common Patterns
2
+
3
+ ## Background Tasks (waitUntil)
4
+
5
+ Non-blocking tasks after response sent (analytics, cleanup, webhooks):
6
+
7
+ ```typescript
8
+ export async function onRequest(ctx: EventContext<Env>) {
9
+ const res = Response.json({ success: true });
10
+
11
+ ctx.waitUntil(ctx.env.KV.put('last-visit', new Date().toISOString()));
12
+ ctx.waitUntil(Promise.all([
13
+ ctx.env.ANALYTICS.writeDataPoint({ event: 'view' }),
14
+ fetch('https://webhook.site/...', { method: 'POST' })
15
+ ]));
16
+
17
+ return res; // Returned immediately
18
+ }
19
+ ```
20
+
21
+ ## Middleware & Auth
22
+
23
+ ```typescript
24
+ // functions/_middleware.js (global) or functions/users/_middleware.js (scoped)
25
+ export async function onRequest(ctx) {
26
+ try { return await ctx.next(); }
27
+ catch (err) { return new Response(err.message, { status: 500 }); }
28
+ }
29
+
30
+ // Chained: export const onRequest = [errorHandler, auth, logger];
31
+
32
+ // Auth
33
+ async function auth(ctx: EventContext<Env>) {
34
+ const token = ctx.request.headers.get('authorization')?.replace('Bearer ', '');
35
+ if (!token) return new Response('Unauthorized', { status: 401 });
36
+ const session = await ctx.env.KV.get(`session:${token}`);
37
+ if (!session) return new Response('Invalid', { status: 401 });
38
+ ctx.data.user = JSON.parse(session);
39
+ return ctx.next();
40
+ }
41
+ ```
42
+
43
+ ## CORS & Rate Limiting
44
+
45
+ ```typescript
46
+ // CORS middleware
47
+ const cors = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST' };
48
+ export async function onRequestOptions() { return new Response(null, { headers: cors }); }
49
+ export async function onRequest(ctx) {
50
+ const res = await ctx.next();
51
+ Object.entries(cors).forEach(([k, v]) => res.headers.set(k, v));
52
+ return res;
53
+ }
54
+
55
+ // Rate limiting (KV-based)
56
+ async function rateLimit(ctx: EventContext<Env>) {
57
+ const ip = ctx.request.headers.get('CF-Connecting-IP') || 'unknown';
58
+ const count = parseInt(await ctx.env.KV.get(`rate:${ip}`) || '0');
59
+ if (count >= 100) return new Response('Rate limited', { status: 429 });
60
+ await ctx.env.KV.put(`rate:${ip}`, (count + 1).toString(), { expirationTtl: 3600 });
61
+ return ctx.next();
62
+ }
63
+ ```
64
+
65
+ ## Forms, Caching, Redirects
66
+
67
+ ```typescript
68
+ // JSON & file upload
69
+ export async function onRequestPost(ctx) {
70
+ const ct = ctx.request.headers.get('content-type') || '';
71
+ if (ct.includes('application/json')) return Response.json(await ctx.request.json());
72
+ if (ct.includes('multipart/form-data')) {
73
+ const file = (await ctx.request.formData()).get('file') as File;
74
+ await ctx.env.BUCKET.put(file.name, file.stream());
75
+ return Response.json({ uploaded: file.name });
76
+ }
77
+ }
78
+
79
+ // Cache API
80
+ export async function onRequest(ctx) {
81
+ let res = await caches.default.match(ctx.request);
82
+ if (!res) {
83
+ res = new Response('Data');
84
+ res.headers.set('Cache-Control', 'public, max-age=3600');
85
+ ctx.waitUntil(caches.default.put(ctx.request, res.clone()));
86
+ }
87
+ return res;
88
+ }
89
+
90
+ // Redirects
91
+ export async function onRequest(ctx) {
92
+ if (new URL(ctx.request.url).pathname === '/old') {
93
+ return Response.redirect(new URL('/new', ctx.request.url), 301);
94
+ }
95
+ return ctx.next();
96
+ }
97
+ ```
98
+
99
+ ## Testing
100
+
101
+ **Unit tests** (Vitest + cloudflare:test):
102
+ ```typescript
103
+ import { env } from 'cloudflare:test';
104
+ import { it, expect } from 'vitest';
105
+ import { onRequest } from '../functions/api';
106
+
107
+ it('returns JSON', async () => {
108
+ const req = new Request('http://localhost/api');
109
+ const ctx = { request: req, env, params: {}, data: {} } as EventContext;
110
+ const res = await onRequest(ctx);
111
+ expect(res.status).toBe(200);
112
+ });
113
+ ```
114
+
115
+ **Integration:** `wrangler pages dev` + Playwright/Cypress
116
+
117
+ ## Advanced Mode (_worker.js)
118
+
119
+ Use `_worker.js` for complex routing (replaces `/functions`):
120
+
121
+ ```typescript
122
+ interface Env { ASSETS: Fetcher; KV: KVNamespace; }
123
+
124
+ export default {
125
+ async fetch(request: Request, env: Env): Promise<Response> {
126
+ const url = new URL(request.url);
127
+ if (url.pathname.startsWith('/api/')) {
128
+ return Response.json({ data: await env.KV.get('key') });
129
+ }
130
+ return env.ASSETS.fetch(request); // Static files
131
+ }
132
+ } satisfies ExportedHandler<Env>;
133
+ ```
134
+
135
+ **When:** Existing Worker, framework-generated (Next.js/SvelteKit), custom routing logic
136
+
137
+ **See also:** [api.md](./api.md) for `env.ASSETS.fetch()` | [gotchas.md](./gotchas.md) for debugging
@@ -0,0 +1,90 @@
1
+ # Cloudflare Pipelines
2
+
3
+ Streaming ingest: receive events over HTTP/Workers/Logpush, transform with SQL, write to R2 as Iceberg tables or Parquet/JSON files.
4
+
5
+ ## Documentation
6
+
7
+ This reference is a fast-start with verified code and gotchas. For limits, settings, full SQL syntax, and pricing, **retrieve the live docs** — use the Cloudflare MCP `docs` tool if available, otherwise `webfetch` the URL. Docs are source of truth over this file.
8
+
9
+ | Topic | URL |
10
+ |-------|-----|
11
+ | Overview / getting started | `https://developers.cloudflare.com/pipelines/getting-started/` |
12
+ | Streams (write, manage, Logpush) | `https://developers.cloudflare.com/pipelines/streams/` |
13
+ | Sinks | `https://developers.cloudflare.com/pipelines/sinks/` |
14
+ | Pipelines & SQL transforms | `https://developers.cloudflare.com/pipelines/pipelines/` |
15
+ | SQL reference (statements, types) | `https://developers.cloudflare.com/pipelines/sql-reference/` |
16
+ | Wrangler commands | `https://developers.cloudflare.com/pipelines/reference/wrangler-commands/` |
17
+ | Terraform | `https://developers.cloudflare.com/pipelines/reference/terraform/` |
18
+ | Limits | `https://developers.cloudflare.com/pipelines/platform/limits/` |
19
+ | Pricing | `https://developers.cloudflare.com/pipelines/platform/pricing/` |
20
+ | Metrics (GraphQL) | `https://developers.cloudflare.com/pipelines/observability/metrics/` |
21
+
22
+ ## Three Components
23
+
24
+ ```
25
+ Sources → Stream → Pipeline (SQL) → Sink → R2
26
+ ↑ ↓ ↓
27
+ HTTP / Workers / Transform Iceberg (Data Catalog)
28
+ Logpush (row-level) or Parquet/JSON files
29
+ ```
30
+
31
+ | Component | Purpose |
32
+ |-----------|---------|
33
+ | **Stream** | Receives events (HTTP endpoint, Worker binding, or Logpush). Structured (schema-validated) or unstructured. |
34
+ | **Pipeline** | SQL connecting a stream to a sink. Row-level transforms only — no GROUP BY/aggregation. |
35
+ | **Sink** | Writes to R2 — Iceberg via Data Catalog, or raw Parquet/JSON. |
36
+
37
+ **Status:** Open beta (Workers Paid for production). Pricing announced; verify billing status in docs.
38
+
39
+ ## Quick Start
40
+
41
+ ```bash
42
+ # Interactive — creates stream + sink + pipeline, optionally bucket + catalog
43
+ npx wrangler pipelines setup
44
+ ```
45
+
46
+ Minimal Worker producer:
47
+ ```typescript
48
+ interface Env { MY_STREAM: Pipeline; }
49
+
50
+ export default {
51
+ async fetch(req: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
52
+ ctx.waitUntil(env.MY_STREAM.send([{ event_id: crypto.randomUUID(), amount: 29.99 }]));
53
+ return new Response("OK");
54
+ }
55
+ } satisfies ExportedHandler<Env>;
56
+ ```
57
+
58
+ ## Which Sink Type?
59
+
60
+ ```
61
+ Need SQL queries / ACID / time-travel on the data?
62
+ → R2 Data Catalog (Iceberg) ✅ R2 SQL, schema evolution ❌ more setup
63
+
64
+ Just archival / external tools (Spark, Athena)?
65
+ → R2 raw files (Parquet/JSON) ✅ simple, partitioned files ❌ no built-in SQL
66
+ ```
67
+
68
+ ## Critical Behaviors (read before building)
69
+
70
+ These are non-obvious and prevent most failures — see [gotchas.md](gotchas.md) for detail.
71
+
72
+ - **Everything is immutable after creation** — stream schema, pipeline SQL, sink config. To change, delete and recreate.
73
+ - **Sinks create their own table** — they cannot target an existing Iceberg table.
74
+ - **`__ingest_ts` is added automatically** (TIMESTAMP, partitioned by day). Don't define it in your schema.
75
+ - **Data isn't queryable immediately** — first flush takes **3–7 minutes** (warm-up + table creation) even with a short roll interval.
76
+ - **Schema validation is deferred** — invalid events are accepted then silently dropped. Monitor via GraphQL error metrics.
77
+ - **Binding field renamed `pipeline` → `stream`** (June 2026); old field still accepted.
78
+
79
+ ## Reading Order
80
+
81
+ 1. [configuration.md](configuration.md) — schema, streams, sinks, pipelines (CLI + REST + Terraform), bindings
82
+ 2. [api.md](api.md) — `send()`, HTTP ingest, REST API, pipeline SQL, lifecycle states
83
+ 3. [patterns.md](patterns.md) — fire-and-forget, validation, Logpush, observability, end-to-end
84
+ 4. [gotchas.md](gotchas.md) — silent drops, immutability, REST≠CLI field names
85
+
86
+ ## See Also
87
+
88
+ - [r2-data-catalog](../r2-data-catalog/) — Iceberg sink destination
89
+ - [r2-sql](../r2-sql/) — query the ingested data
90
+ - [r2](../r2/) · [queues](../queues/) · [workers](../workers/)