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,124 @@
1
+ # Pipelines API Reference
2
+
3
+ Code templates and verified behavior. For the full SQL function set and HTTP status semantics, pull `https://developers.cloudflare.com/pipelines/sql-reference/` and the streams docs.
4
+
5
+ ## Worker Binding Interface
6
+
7
+ ```typescript
8
+ // from cloudflare:pipelines / @cloudflare/workers-types
9
+ interface Pipeline<T = any> { send(records: T[]): Promise<void>; }
10
+
11
+ interface Env { MY_STREAM: Pipeline; }
12
+
13
+ export default {
14
+ async fetch(req: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
15
+ await env.MY_STREAM.send([{ event_id: crypto.randomUUID(), amount: 29.99 }]);
16
+ return new Response("OK");
17
+ }
18
+ } satisfies ExportedHandler<Env>;
19
+ ```
20
+
21
+ - `send()` takes an **array**, returns `Promise<void>` (no confirmation payload).
22
+ - Throws on network errors — wrap in try/catch or use `ctx.waitUntil()` for fire-and-forget.
23
+ - Validation errors are **not** thrown here (deferred during processing — see [gotchas.md](gotchas.md)).
24
+ - Payload/rate limits apply — check `https://developers.cloudflare.com/pipelines/platform/limits/` before sizing batches.
25
+
26
+ ## HTTP Ingest
27
+
28
+ ```
29
+ https://{stream-id}.ingest.cloudflare.com
30
+ ```
31
+
32
+ Get `{stream-id}` from `npx wrangler pipelines streams list`.
33
+
34
+ ```bash
35
+ # Batch (preferred)
36
+ curl -X POST https://{stream-id}.ingest.cloudflare.com \
37
+ -H "Content-Type: application/json" \
38
+ -d '[{"event_id":"evt-1","amount":29.99},{"event_id":"evt-2","amount":14.99}]'
39
+
40
+ # Single event — auto-wrapped in an array
41
+ curl -X POST https://{stream-id}.ingest.cloudflare.com \
42
+ -H "Content-Type: application/json" -d '{"event_id":"evt-3","amount":9.99}'
43
+ ```
44
+
45
+ If stream auth is enabled, add `-H "Authorization: Bearer $TOKEN"` (token needs **Workers Pipelines Send**). Standard HTTP status codes apply (400 invalid, 401 auth, 413 too large, 429 rate-limited, 5xx retry).
46
+
47
+ > **JSON only** — no Avro, Protobuf, or CSV input.
48
+
49
+ ## REST Management API
50
+
51
+ Base: `https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pipelines/v1`
52
+
53
+ ```bash
54
+ # List
55
+ curl -s "$BASE_URL/streams" -H "Authorization: Bearer $API_TOKEN"
56
+ curl -s "$BASE_URL/sinks" -H "Authorization: Bearer $API_TOKEN"
57
+ curl -s "$BASE_URL/pipelines" -H "Authorization: Bearer $API_TOKEN"
58
+
59
+ # Get one (pipeline GET includes status + failure_reason — useful for debugging)
60
+ curl -s "$BASE_URL/pipelines/{pipeline-id}" -H "Authorization: Bearer $API_TOKEN"
61
+
62
+ # Delete in reverse order: pipeline → sink → stream
63
+ curl -X DELETE "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
64
+ curl -X DELETE "$BASE_URL/sinks/{id}" -H "Authorization: Bearer $API_TOKEN"
65
+ curl -X DELETE "$BASE_URL/streams/{id}" -H "Authorization: Bearer $API_TOKEN"
66
+ ```
67
+
68
+ > `wrangler pipelines delete` defaults to "no" non-interactively — use the REST API for automated cleanup. Deleting a stream removes buffered events and dependent pipelines.
69
+
70
+ ### Pipeline Lifecycle States
71
+
72
+ | Status | Meaning |
73
+ |--------|---------|
74
+ | `running` | Active, processing events |
75
+ | `initializing` | Starting up (minutes after creation or recovery) |
76
+ | `failed` | Stopped on error — check `failure_reason` (expired token, deleted bucket, disabled catalog) |
77
+
78
+ > A `GET` on a sink shows `schema.fields: []` — expected. The sink inherits schema from the stream via the pipeline SQL.
79
+
80
+ ## Pipeline SQL (Transforms)
81
+
82
+ Row-level only — no GROUP BY/aggregation. CTEs (`WITH`) and `UNNEST` are supported. Full function list: `https://developers.cloudflare.com/pipelines/sql-reference/`.
83
+
84
+ ```sql
85
+ -- Passthrough / filter / enrich
86
+ INSERT INTO my_sink SELECT * FROM my_stream;
87
+ INSERT INTO my_sink SELECT * FROM my_stream WHERE amount > 10;
88
+ INSERT INTO my_sink
89
+ SELECT event_id, UPPER(category) AS category, amount * 1.1 AS amount_with_tax
90
+ FROM my_stream;
91
+
92
+ -- CTE
93
+ WITH filtered AS (SELECT event_id, amount FROM my_stream WHERE amount > 50)
94
+ INSERT INTO my_sink SELECT * FROM filtered;
95
+
96
+ -- UNNEST arrays (one per SELECT)
97
+ SELECT UNNEST(tags) AS tag FROM my_stream;
98
+ ```
99
+
100
+ Supported categories: string, regex, hashing (`sha256`), JSON extraction, timestamp conversion, conditional (`CASE`), `CAST`, `COALESCE`, math/comparison operators.
101
+
102
+ ## Verifying End-to-End Data Flow
103
+
104
+ ```bash
105
+ # 1. Pipeline running (not initializing/failed)?
106
+ curl -s "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
107
+
108
+ # 2. Table created yet? (3–7 min on first flush)
109
+ curl -s "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/r2-catalog/$BUCKET/namespaces/my_ns/tables" \
110
+ -H "Authorization: Bearer $API_TOKEN"
111
+
112
+ # 3. Data present? (R2 SQL)
113
+ curl -s -X POST \
114
+ "https://api.sql.cloudflarestorage.com/api/v1/accounts/$ACCOUNT_ID/r2-sql/query/$BUCKET" \
115
+ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \
116
+ -d '{"query": "SELECT COUNT(*) AS total FROM my_ns.my_table"}'
117
+ ```
118
+
119
+ > Expect **3–7 minutes** from first send to first queryable data. Subsequent flushes are much faster.
120
+
121
+ ## See Also
122
+
123
+ - [configuration.md](configuration.md) — creating resources · [patterns.md](patterns.md) — producers, Logpush, observability
124
+ - [r2-sql/api.md](../r2-sql/api.md) — querying results
@@ -0,0 +1,155 @@
1
+ # Pipelines Configuration
2
+
3
+ Templates for creating streams, sinks, and pipelines via CLI, REST, or Terraform. For the full flag/field list and allowed values, pull `https://developers.cloudflare.com/pipelines/reference/wrangler-commands/` and the streams/sinks/pipelines docs.
4
+
5
+ ## Naming Rules
6
+
7
+ - **Streams, sinks, pipelines** use underscores: `my_stream`, `my_sink`, `my_pipeline`.
8
+ - **Buckets** use hyphens: `my-bucket`.
9
+
10
+ ## Schema (Structured Streams)
11
+
12
+ Schema is a JSON object with a `fields` array; each field has `name`, `type`, `required`.
13
+
14
+ ```json
15
+ {
16
+ "fields": [
17
+ { "name": "event_id", "type": "string", "required": true },
18
+ { "name": "amount", "type": "float64", "required": false }
19
+ ]
20
+ }
21
+ ```
22
+
23
+ Field types include `string`, `bool`, `int32/64`, `float32/64`, `timestamp`, `json`, `binary`, `list`, `struct` (with nested `items`/`fields`). For the authoritative type list, see `https://developers.cloudflare.com/pipelines/sql-reference/sql-data-types/`.
24
+
25
+ Unstructured streams (no schema) store everything in a single `value` column.
26
+
27
+ > Pipelines auto-adds `__ingest_ts` (TIMESTAMP, day-partitioned). Do **not** include it in your schema.
28
+
29
+ ## Option A: Interactive (Simplest)
30
+
31
+ ```bash
32
+ npx wrangler pipelines setup # creates stream + sink + pipeline, optionally bucket + catalog
33
+ ```
34
+
35
+ ## Option B: Wrangler CLI (Explicit)
36
+
37
+ ```bash
38
+ # 1. Stream
39
+ npx wrangler pipelines streams create my_stream --schema-file schema.json
40
+
41
+ # 2. Sink — R2 Data Catalog (Iceberg). Creates the namespace + table.
42
+ npx wrangler pipelines sinks create my_sink \
43
+ --type r2-data-catalog \
44
+ --bucket my-bucket --namespace my_namespace --table my_table \
45
+ --catalog-token $API_TOKEN \
46
+ --compression zstd --roll-interval 300
47
+
48
+ # 2b. Sink — R2 raw Parquet (alternative)
49
+ npx wrangler pipelines sinks create my_sink \
50
+ --type r2 --bucket my-bucket --format parquet \
51
+ --path analytics/events --partitioning "year=%Y/month=%m/day=%d" \
52
+ --access-key-id $KEY --secret-access-key $SECRET
53
+
54
+ # 3. Pipeline (SQL connects stream → sink)
55
+ npx wrangler pipelines create my_pipeline \
56
+ --sql "INSERT INTO my_sink SELECT * FROM my_stream"
57
+ ```
58
+
59
+ Tuning knobs (`--compression`, `--roll-interval`, `--roll-size`, etc.) and their allowed values/defaults change — pull the wrangler-commands and sinks docs rather than hardcoding. Rule of thumb: prod `--roll-interval 300+`, dev `10` (creates many small files).
60
+
61
+ > **⚠️ Pipelines are immutable.** SQL, schema, and sink config can't be changed — delete and recreate.
62
+
63
+ ## Option C: REST API (Programmatic)
64
+
65
+ Base: `https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pipelines/v1`
66
+
67
+ ```bash
68
+ # Stream
69
+ curl -X POST "$BASE_URL/streams" -H "Authorization: Bearer $API_TOKEN" \
70
+ -H "Content-Type: application/json" -d '{
71
+ "name": "my_stream",
72
+ "http": {"enabled": true, "authentication": false},
73
+ "schema": {"fields": [{"name": "event_id", "type": "string", "required": true}]}
74
+ }'
75
+
76
+ # Sink — NOTE REST field names differ from CLI flags (see table)
77
+ curl -X POST "$BASE_URL/sinks" -H "Authorization: Bearer $API_TOKEN" \
78
+ -H "Content-Type: application/json" -d '{
79
+ "name": "my_sink", "type": "r2_data_catalog",
80
+ "config": {"bucket": "my-bucket", "namespace": "my_namespace",
81
+ "table_name": "my_table", "token": "'$API_TOKEN'",
82
+ "rolling_policy": {"interval_seconds": 300}},
83
+ "format": {"type": "parquet"}
84
+ }'
85
+
86
+ # Pipeline
87
+ curl -X POST "$BASE_URL/pipelines" -H "Authorization: Bearer $API_TOKEN" \
88
+ -H "Content-Type: application/json" \
89
+ -d '{"name": "my_pipeline", "sql": "INSERT INTO my_sink SELECT * FROM my_stream;"}'
90
+ ```
91
+
92
+ **REST field names ≠ CLI flags** (common failure — not obvious from docs):
93
+
94
+ | REST (config body) | CLI flag | Gotcha |
95
+ |--------------------|----------|--------|
96
+ | `"type": "r2_data_catalog"` | `--type r2-data-catalog` | underscores vs hyphens |
97
+ | `"table_name"` | `--table` | different key |
98
+ | `"token"` | `--catalog-token` | different key |
99
+ | `"format": {"type": "parquet"}` | (implied) | required in REST, omitted in CLI |
100
+
101
+ ## Worker Binding
102
+
103
+ ```jsonc
104
+ // wrangler.jsonc
105
+ { "pipelines": [ { "stream": "<STREAM_ID>", "binding": "MY_STREAM" } ] }
106
+ ```
107
+
108
+ > Binding field is `"stream"` as of June 2026 (was `"pipeline"`, still accepted). Use the **stream ID** (`wrangler pipelines streams list`), not the pipeline ID. Redeploy after adding. Generate typed bindings with `npx wrangler types` → `Pipeline<Cloudflare.MyStreamRecord>` from `cloudflare:pipelines`.
109
+
110
+ ## Terraform
111
+
112
+ Resources: `cloudflare_pipeline_stream`, `cloudflare_pipeline_sink`, `cloudflare_pipeline`. For current attribute schemas pull `https://developers.cloudflare.com/pipelines/reference/terraform/`.
113
+
114
+ ```hcl
115
+ resource "cloudflare_pipeline_stream" "my_stream" {
116
+ account_id = var.cloudflare_account_id
117
+ name = "my_stream"
118
+ format = { type = "json" }
119
+ schema = { fields = [{ name = "value", type = "json", required = true }] }
120
+ http = { enabled = true, authentication = false, cors = {} }
121
+ worker_binding = { enabled = false }
122
+ }
123
+
124
+ resource "cloudflare_pipeline_sink" "my_sink" {
125
+ account_id = var.cloudflare_account_id
126
+ name = "my_sink"
127
+ type = "r2_data_catalog"
128
+ format = { type = "parquet" }
129
+ schema = { fields = [] }
130
+ config = {
131
+ account_id = var.cloudflare_account_id
132
+ bucket = cloudflare_r2_bucket.pipeline_bucket.name
133
+ table_name = "my_table"
134
+ token = var.catalog_token
135
+ }
136
+ }
137
+
138
+ resource "cloudflare_pipeline" "my_pipeline" {
139
+ account_id = var.cloudflare_account_id
140
+ name = "my_pipeline"
141
+ sql = "INSERT INTO ${cloudflare_pipeline_sink.my_sink.name} SELECT * FROM ${cloudflare_pipeline_stream.my_stream.name}"
142
+ }
143
+ ```
144
+
145
+ ## Credentials
146
+
147
+ | Type | Permission |
148
+ |------|------------|
149
+ | Catalog token (Iceberg sink) | R2 Storage Admin R&W + R2 Data Catalog R&W |
150
+ | R2 credentials (raw sink) | Object Read & Write |
151
+ | HTTP ingest token | Workers Pipelines Send (only if stream auth enabled) |
152
+
153
+ ## See Also
154
+
155
+ - [api.md](api.md) — sending events, REST API, lifecycle · [gotchas.md](gotchas.md) — immutability, REST≠CLI
@@ -0,0 +1,58 @@
1
+ # Pipelines Gotchas
2
+
3
+ Non-obvious failure modes (not well covered by docs). For current limits and error semantics, pull `https://developers.cloudflare.com/pipelines/platform/limits/`.
4
+
5
+ ## Events accepted but never appear (most common)
6
+
7
+ HTTP 200 / `send()` resolves, but no data in the sink. Causes:
8
+
9
+ 1. **Schema validation failure** — structured streams accept then **silently drop** invalid events during processing. Validate client-side (Zod) and monitor `pipelinesUserErrorsAdaptiveGroups`.
10
+ 2. **First-flush warm-up** — first data takes **3–7 minutes** (warm-up + namespace/table creation) even with `--roll-interval 10`. Poll ≥5 min in tests.
11
+ 3. **Roll interval not elapsed** — default 300s.
12
+ 4. **Silent sink failure** — deleted bucket or expired token. Check `recordsWritten > 0` but `filesWritten = 0`; inspect `failure_reason` via `GET /pipelines/{id}`.
13
+
14
+ ## Everything is immutable
15
+
16
+ Cannot modify stream schema, pipeline SQL, or sink config — delete and recreate. Use version naming (`events_v1`) and keep SQL in version control.
17
+
18
+ ```bash
19
+ curl -X DELETE "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
20
+ curl -X DELETE "$BASE_URL/sinks/{id}" -H "Authorization: Bearer $API_TOKEN"
21
+ curl -X DELETE "$BASE_URL/streams/{id}" -H "Authorization: Bearer $API_TOKEN"
22
+ ```
23
+
24
+ ## Worker binding undefined (`env.MY_STREAM`)
25
+
26
+ 1. Use the **stream ID**, not pipeline ID, in `wrangler.jsonc`.
27
+ 2. Binding field is `"stream"` (June 2026); old `"pipeline"` still works.
28
+ 3. Redeploy after adding the binding.
29
+
30
+ ## REST API field names ≠ CLI flags
31
+
32
+ `r2_data_catalog` vs `--type r2-data-catalog`, `table_name` vs `--table`, `token` vs `--catalog-token`, and `format` is required in REST but implied in CLI. See [configuration.md](configuration.md#option-c-rest-api-programmatic).
33
+
34
+ ## `wrangler pipelines delete` defaults to "no"
35
+
36
+ Non-interactive environments answer "no" automatically — use REST `DELETE` for CI/automation.
37
+
38
+ ## Behavioral Notes
39
+
40
+ - **`__ingest_ts` auto-added** (TIMESTAMP, day-partitioned). Don't put it in your schema.
41
+ - **Sinks can't target existing tables** — the sink creates its own. Use PySpark to write to existing tables.
42
+ - **JSON-only input** — no Avro/Protobuf/CSV.
43
+ - **Naming:** streams/sinks/pipelines use underscores; buckets use hyphens.
44
+ - **Metrics lag 5–10 min** after creation.
45
+ - **Pipeline SQL is row-level only** — no GROUP BY/aggregation/window functions (do aggregation in [R2 SQL](../r2-sql/) at query time). CTEs and `UNNEST` are supported.
46
+
47
+ ## Debug Checklist
48
+
49
+ - [ ] Stream exists: `wrangler pipelines streams list`
50
+ - [ ] Pipeline `running` (not `initializing`/`failed`): `GET /pipelines/{id}`, check `failure_reason`
51
+ - [ ] SQL matches schema; sink token valid; bucket + catalog exist
52
+ - [ ] Worker redeployed; binding uses **stream ID** under `"stream"`
53
+ - [ ] Waited ≥5 min (first flush)
54
+ - [ ] Sink metrics: `filesWritten > 0`; error metrics show no drops
55
+
56
+ ## See Also
57
+
58
+ - [configuration.md](configuration.md) · [api.md](api.md) · [patterns.md](patterns.md)
@@ -0,0 +1,130 @@
1
+ # Pipelines Patterns
2
+
3
+ Code-first patterns. For observability dataset/field schemas and Logpush dataset lists, pull `https://developers.cloudflare.com/pipelines/observability/metrics/` and `https://developers.cloudflare.com/pipelines/streams/logpush/`.
4
+
5
+ ## Fire-and-Forget Producer
6
+
7
+ ```typescript
8
+ export default {
9
+ async fetch(req, env, ctx) {
10
+ const event = { event_id: crypto.randomUUID(), event_type: "page_view", timestamp: new Date().toISOString() };
11
+ ctx.waitUntil(env.MY_STREAM.send([event])); // don't block the response
12
+ return new Response("OK");
13
+ }
14
+ };
15
+ ```
16
+
17
+ ## Client-Side Validation with Zod
18
+
19
+ Structured streams drop invalid events silently during processing. Validate before sending for immediate feedback.
20
+
21
+ ```typescript
22
+ import { z } from "zod";
23
+
24
+ const EventSchema = z.object({
25
+ event_id: z.string(),
26
+ category: z.enum(["purchase", "view"]),
27
+ amount: z.number().positive().optional(),
28
+ });
29
+
30
+ const validated = EventSchema.parse(rawEvent); // throws synchronously
31
+ await env.MY_STREAM.send([validated]);
32
+ ```
33
+
34
+ ## Scheduled Collector Worker
35
+
36
+ ```jsonc
37
+ // wrangler.jsonc
38
+ {
39
+ "name": "collector",
40
+ "pipelines": [{ "stream": "<STREAM_ID>", "binding": "EVENT_STREAM" }],
41
+ "triggers": { "crons": ["*/5 * * * *"] }
42
+ }
43
+ ```
44
+
45
+ ```typescript
46
+ export default {
47
+ async scheduled(event, env, ctx) {
48
+ const items = await (await fetch("https://api.example.com/data")).json();
49
+ const events = items.map(i => ({
50
+ event_id: crypto.randomUUID(),
51
+ timestamp: new Date().toISOString(),
52
+ category: i.type, amount: i.value,
53
+ }));
54
+ await env.EVENT_STREAM.send(events);
55
+ },
56
+ };
57
+ ```
58
+
59
+ ## Logpush → Pipelines
60
+
61
+ Pipelines is a native Logpush destination — ingest Cloudflare logs, transform with SQL, store as Iceberg/Parquet. For the current supported dataset list and field names, pull the Logpush doc above.
62
+
63
+ ```sql
64
+ INSERT INTO http_logs_sink
65
+ SELECT
66
+ ClientIP,
67
+ EdgeResponseStatus,
68
+ to_timestamp_micros(EdgeStartTimestamp) AS event_time,
69
+ upper(ClientRequestMethod) AS method,
70
+ sha256(ClientIP) AS hashed_ip -- redact PII at ingest
71
+ FROM http_logs_stream
72
+ WHERE EdgeResponseStatus >= 400;
73
+ ```
74
+
75
+ Configure via Dashboard (**Logpush → Create a job → Pipelines** destination) or API.
76
+
77
+ ## Pipelines + Queues Fan-out
78
+
79
+ ```typescript
80
+ await Promise.all([
81
+ env.ANALYTICS_STREAM.send([event]), // long-term storage + SQL
82
+ env.PROCESS_QUEUE.send(event), // immediate processing + retries
83
+ ]);
84
+ ```
85
+
86
+ Use Pipelines for long-term storage + SQL; Queues for immediate processing/retries/DLQ; both for fan-out.
87
+
88
+ ## Observability (GraphQL Analytics)
89
+
90
+ Same R2 API token works. Endpoint: `https://api.cloudflare.com/client/v4/graphql`. Datasets cover ingestion, processing (incl. `decodeErrors`), delivery, sink writes (`filesWritten`), and user/validation errors — see the metrics doc for the full dataset/field catalog.
91
+
92
+ ```bash
93
+ curl -X POST "https://api.cloudflare.com/client/v4/graphql" \
94
+ -H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \
95
+ -d '{"query": "query { viewer { accounts(filter: {accountTag: \"'$ACCOUNT_ID'\"}) { pipelinesIngestionAdaptiveGroups(filter: {pipelineId: \"PIPELINE-UUID-WITH-DASHES\", datetime_geq: \"2026-03-01T00:00:00Z\"}, limit: 10) { sum { ingestedRecords ingestedBytes } dimensions { datetimeHour } } } } }"}'
96
+ ```
97
+
98
+ > **Sink/pipeline IDs need dashes for GraphQL** but wrangler may show them without: `b909fe6e544844abbd63f6dcbc81d602` → `b909fe6e-5448-44ab-bd63-f6dcbc81d602`. Metrics take 5–10 min to populate.
99
+
100
+ ### Detecting Silent Data Loss
101
+
102
+ If a sink's bucket is deleted or its token expires, events are accepted but lost. Tell-tale: `recordsWritten > 0` but `filesWritten = 0`. Always verify data lands in R2 within the roll interval and R2 SQL returns expected counts.
103
+
104
+ ## Schema Evolution (Immutable Pipelines)
105
+
106
+ Pipelines can't change. Version + dual-write:
107
+
108
+ ```bash
109
+ npx wrangler pipelines streams create events_v2 --schema-file v2.json
110
+ ```
111
+ ```typescript
112
+ await Promise.all([env.EVENTS_V1.send([event]), env.EVENTS_V2.send([event])]);
113
+ // query across versions with UNION ALL in R2 SQL
114
+ ```
115
+
116
+ ## End-to-End: Streaming Analytics Dashboard
117
+
118
+ ```
119
+ External APIs → Collector Worker (cron) → Pipeline → R2 (Iceberg) → Dashboard Worker → R2 SQL
120
+ ```
121
+
122
+ 1. Create bucket + enable catalog ([r2-data-catalog](../r2-data-catalog/configuration.md))
123
+ 2. Create stream + sink + pipeline (here)
124
+ 3. Collector Worker with cron + stream binding (above)
125
+ 4. Dashboard Worker querying R2 SQL ([r2-sql/patterns.md](../r2-sql/patterns.md))
126
+ 5. Enable automatic compaction
127
+
128
+ ## See Also
129
+
130
+ - [configuration.md](configuration.md) · [api.md](api.md) · [gotchas.md](gotchas.md) · [r2-sql](../r2-sql/)
@@ -0,0 +1,100 @@
1
+ # Cloudflare Pulumi Provider
2
+
3
+ Expert guidance for Cloudflare Pulumi Provider (@pulumi/cloudflare).
4
+
5
+ ## Overview
6
+
7
+ Programmatic management of Cloudflare resources: Workers, Pages, D1, KV, R2, DNS, Queues, etc.
8
+
9
+ **Packages:**
10
+ - TypeScript/JS: `@pulumi/cloudflare`
11
+ - Python: `pulumi-cloudflare`
12
+ - Go: `github.com/pulumi/pulumi-cloudflare/sdk/v6/go/cloudflare`
13
+ - .NET: `Pulumi.Cloudflare`
14
+
15
+ **Version:** v6.x
16
+
17
+ ## Core Principles
18
+
19
+ 1. Use API tokens (not legacy API keys)
20
+ 2. Store accountId in stack config
21
+ 3. Match binding names across code/config
22
+ 4. Use `module: true` for ES modules
23
+ 5. Set `compatibilityDate` to lock behavior
24
+
25
+ ## Authentication
26
+
27
+ ```typescript
28
+ import * as cloudflare from "@pulumi/cloudflare";
29
+
30
+ // API Token (recommended): CLOUDFLARE_API_TOKEN env
31
+ const provider = new cloudflare.Provider("cf", { apiToken: process.env.CLOUDFLARE_API_TOKEN });
32
+
33
+ // API Key (legacy): CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL env
34
+ const provider = new cloudflare.Provider("cf", { apiKey: process.env.CLOUDFLARE_API_KEY, email: process.env.CLOUDFLARE_EMAIL });
35
+
36
+ // API User Service Key: CLOUDFLARE_API_USER_SERVICE_KEY env
37
+ const provider = new cloudflare.Provider("cf", { apiUserServiceKey: process.env.CLOUDFLARE_API_USER_SERVICE_KEY });
38
+ ```
39
+
40
+ ## Setup
41
+
42
+ **Pulumi.yaml:**
43
+ ```yaml
44
+ name: my-cloudflare-app
45
+ runtime: nodejs
46
+ config:
47
+ cloudflare:apiToken:
48
+ value: ${CLOUDFLARE_API_TOKEN}
49
+ ```
50
+
51
+ **Pulumi.<stack>.yaml:**
52
+ ```yaml
53
+ config:
54
+ cloudflare:accountId: "abc123..."
55
+ ```
56
+
57
+ **index.ts:**
58
+ ```typescript
59
+ import * as pulumi from "@pulumi/pulumi";
60
+ import * as cloudflare from "@pulumi/cloudflare";
61
+ const accountId = new pulumi.Config("cloudflare").require("accountId");
62
+ ```
63
+
64
+ ## Common Resource Types
65
+ - `Provider` - Provider config
66
+ - `WorkerScript` - Worker
67
+ - `WorkersKvNamespace` - KV
68
+ - `R2Bucket` - R2
69
+ - `D1Database` - D1
70
+ - `Queue` - Queue
71
+ - `PagesProject` - Pages
72
+ - `DnsRecord` - DNS
73
+ - `WorkerRoute` - Worker route
74
+ - `WorkersDomain` - Custom domain
75
+
76
+ ## Key Properties
77
+ - `accountId` - Required for most resources
78
+ - `zoneId` - Required for DNS/domain
79
+ - `name`/`title` - Resource identifier
80
+ - `*Bindings` - Connect resources to Workers
81
+
82
+ ## Reading Order
83
+
84
+ | Order | File | What | When to Read |
85
+ |-------|------|------|--------------|
86
+ | 1 | [configuration.md](./configuration.md) | Resource config for Workers/KV/D1/R2/Queues/Pages | First time setup, resource reference |
87
+ | 2 | [patterns.md](./patterns.md) | Architecture patterns, multi-env, component resources | Building complex apps, best practices |
88
+ | 3 | [api.md](./api.md) | Outputs, dependencies, imports, dynamic providers | Advanced features, integrations |
89
+ | 4 | [gotchas.md](./gotchas.md) | Common errors, troubleshooting, limits | Debugging, deployment issues |
90
+
91
+ ## In This Reference
92
+ - [configuration.md](./configuration.md) - Provider config, stack setup, Workers/bindings
93
+ - [api.md](./api.md) - Resource types, Workers script, KV/D1/R2/queues/Pages
94
+ - [patterns.md](./patterns.md) - Multi-env, secrets, CI/CD, stack management
95
+ - [gotchas.md](./gotchas.md) - State issues, deployment failures, limits
96
+
97
+ ## See Also
98
+ - [terraform](../terraform/) - Alternative IaC for Cloudflare
99
+ - [wrangler](../wrangler/) - CLI deployment alternative
100
+ - [workers](../workers/) - Worker runtime documentation