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,64 @@
1
+ # Cloudflare R2 SQL
2
+
3
+ Serverless, distributed, **read-only** query engine (Apache DataFusion) for Apache Iceberg tables in R2 Data Catalog.
4
+
5
+ ## Documentation
6
+
7
+ For full function lists, data types, and pricing, **retrieve the live docs** — use the Cloudflare MCP `docs` tool if available, otherwise `webfetch`.
8
+
9
+ | Topic | URL |
10
+ |-------|-----|
11
+ | Overview / get started | `https://developers.cloudflare.com/r2-sql/get-started/` |
12
+ | Query data | `https://developers.cloudflare.com/r2-sql/query-data/` |
13
+ | SQL reference | `https://developers.cloudflare.com/r2-sql/sql-reference/` |
14
+ | Aggregate functions | `https://developers.cloudflare.com/r2-sql/sql-reference/aggregate-functions/` |
15
+ | Scalar functions | `https://developers.cloudflare.com/r2-sql/sql-reference/scalar-functions/` |
16
+ | Complex types | `https://developers.cloudflare.com/r2-sql/sql-reference/complex-types/` |
17
+ | Limitations & best practices | `https://developers.cloudflare.com/r2-sql/reference/limitations-best-practices/` |
18
+ | Wrangler commands | `https://developers.cloudflare.com/r2-sql/reference/wrangler-commands/` |
19
+ | Pricing | `https://developers.cloudflare.com/r2-sql/platform/pricing/` |
20
+
21
+ ## Connection Values
22
+
23
+ | Value | Format |
24
+ |-------|--------|
25
+ | REST endpoint | `https://api.sql.cloudflarestorage.com/api/v1/accounts/{ACCOUNT_ID}/r2-sql/query/{BUCKET}` |
26
+ | Wrangler | `npx wrangler r2 sql query "{WAREHOUSE}" "<SQL>"` with `WRANGLER_R2_SQL_AUTH_TOKEN` set |
27
+ | Warehouse | `{ACCOUNT_ID}_{BUCKET}` |
28
+
29
+ > The REST endpoint is `api.sql.cloudflarestorage.com` — **not** `api.cloudflare.com/.../r2/sql`.
30
+
31
+ ## Quick Start
32
+
33
+ ```bash
34
+ npx wrangler r2 bucket catalog enable my-bucket # 1. enable catalog
35
+ export WRANGLER_R2_SQL_AUTH_TOKEN=<r2-token> # 2. auth (Admin R&W + R2 SQL Read)
36
+ npx wrangler r2 sql query "$ACCOUNT_ID"_my-bucket \
37
+ "SELECT * FROM default.my_table LIMIT 10" # 3. query
38
+ ```
39
+
40
+ ## SQL Surface
41
+
42
+ R2 SQL is read-only and supports a broad analytical SQL surface (SELECT, JOINs, subqueries, CTEs, set operations, window functions, and aggregate/scalar/JSON functions over complex types). For the authoritative, current list of supported syntax, functions, and limitations, see the SQL reference and limitations docs linked above. [api.md](api.md) has query templates.
43
+
44
+ ## When to Use
45
+
46
+ **Use for:** SQL analytics over Iceberg (logs, BI, fraud, ad-hoc), multi-cloud queries without egress, dashboards (query from a Worker via HTTP).
47
+
48
+ **Don't use for:** writes (use PySpark/PyIceberg) or real-time OLTP (<100 ms).
49
+
50
+ ## No Workers Binding
51
+
52
+ There is no `env.R2_SQL` binding. Query from a Worker via `fetch()` to the REST endpoint with the token as a secret (see [patterns.md](patterns.md#dashboard-worker)).
53
+
54
+ ## Reading Order
55
+
56
+ 1. [configuration.md](configuration.md) — enable catalog, tokens, env setup
57
+ 2. [api.md](api.md) — SQL syntax templates, JOIN/window examples, response format, data types
58
+ 3. [patterns.md](patterns.md) — CLI/REST/Worker queries, use cases, pagination, performance
59
+ 4. [gotchas.md](gotchas.md) — what works vs. not, performance, troubleshooting
60
+
61
+ ## See Also
62
+
63
+ - [r2-data-catalog](../r2-data-catalog/) — PyIceberg/PySpark, table management
64
+ - [pipelines](../pipelines/) — streaming ingest into queryable tables
@@ -0,0 +1,121 @@
1
+ # R2 SQL API Reference
2
+
3
+ Read-only SQL over Iceberg (Apache DataFusion). Query templates only. For the authoritative list of supported syntax, functions, data types, and limitations, pull the SQL reference (`sql-reference/`, `.../aggregate-functions/`, `.../scalar-functions/`, `.../complex-types/`) and `reference/limitations-best-practices/`.
4
+
5
+ ## Query Endpoint
6
+
7
+ ```
8
+ POST https://api.sql.cloudflarestorage.com/api/v1/accounts/{ACCOUNT_ID}/r2-sql/query/{BUCKET}
9
+ Authorization: Bearer <token>
10
+ Content-Type: application/json
11
+ Body: {"query": "<SQL>"}
12
+ ```
13
+
14
+ CLI: `npx wrangler r2 sql query "{WAREHOUSE}" "<SQL>"` (with `WRANGLER_R2_SQL_AUTH_TOKEN`).
15
+
16
+ ## Response Format
17
+
18
+ ```json
19
+ {
20
+ "result": {
21
+ "request_id": "dqe-prod-01...",
22
+ "schema": [{"name": "cnt", "descriptor": {"type": {"name": "int64"}, "nullable": false}}],
23
+ "rows": [{"category": "Electronics", "cnt": 12345}],
24
+ "metrics": {"r2_requests_count": 5, "files_scanned": 29, "bytes_scanned": 12345678, "cache_hits": 0}
25
+ },
26
+ "success": true, "errors": []
27
+ }
28
+ ```
29
+
30
+ Error: `{"result": null, "success": false, "errors": [{"code": 40003, "message": "..."}]}`. `bytes_scanned` ≈ billable data.
31
+
32
+ ## Query Structure
33
+
34
+ ```sql
35
+ SELECT [DISTINCT] columns | expressions | aggregations
36
+ FROM namespace.table [alias]
37
+ [ [INNER|LEFT|RIGHT|FULL OUTER|CROSS] JOIN namespace.table2 alias2 ON ... ]
38
+ [WHERE ...] [GROUP BY ...] [HAVING ...]
39
+ [QUALIFY window_predicate]
40
+ [ORDER BY expr [ASC|DESC]]
41
+ [LIMIT n] -- default 500, max 10,000
42
+ ```
43
+
44
+ ## Schema Discovery
45
+
46
+ ```sql
47
+ SHOW DATABASES; -- list namespaces (aliases: SHOW NAMESPACES / SHOW SCHEMAS)
48
+ SHOW TABLES IN namespace;
49
+ DESCRIBE namespace.table; -- columns, types, partition keys
50
+ EXPLAIN [FORMAT JSON] SELECT ...; -- execution plan (free; no data scanned)
51
+ ```
52
+
53
+ ## JOINs / Subqueries / CTEs / Set Ops
54
+
55
+ ```sql
56
+ -- JOINs: all types + multi-way
57
+ SELECT z.domain, COUNT(*) AS cnt
58
+ FROM ns.zones z
59
+ INNER JOIN ns.http_requests h ON z.zone_id = h.zone_id
60
+ LEFT JOIN ns.firewall_events f ON z.zone_id = f.zone_id
61
+ GROUP BY z.domain ORDER BY cnt DESC LIMIT 20;
62
+
63
+ -- Subqueries: IN / EXISTS / scalar / derived
64
+ SELECT * FROM ns.t1 WHERE id IN (SELECT id FROM ns.t2 WHERE x > 0);
65
+ SELECT col, (SELECT COUNT(*) FROM ns.t2 s WHERE s.id = t.id) AS cnt FROM ns.t1 t;
66
+
67
+ -- Multi-table CTE with JOIN
68
+ WITH top AS (SELECT zone_id, COUNT(*) AS req FROM ns.http_requests GROUP BY zone_id ORDER BY req DESC LIMIT 50)
69
+ SELECT t.zone_id, t.req FROM top t LEFT JOIN ns.zones z ON t.zone_id = z.zone_id;
70
+
71
+ -- Set ops: UNION / UNION ALL / INTERSECT / EXCEPT
72
+ SELECT zone_id FROM ns.firewall_events WHERE action = 'block'
73
+ UNION SELECT zone_id FROM ns.http_requests WHERE risk_score > 0.8;
74
+ ```
75
+
76
+ ## Window Functions
77
+
78
+ Use inline `OVER (...)`. See the SQL reference for the full list of supported window functions and frame syntax.
79
+
80
+ ```sql
81
+ SELECT event_id,
82
+ ROW_NUMBER() OVER (PARTITION BY mag_type ORDER BY magnitude DESC) AS rn,
83
+ LAG(magnitude, 2, 0.0) OVER (ORDER BY occurred_at) AS prev2, -- offset + default
84
+ NTH_VALUE(magnitude, 2) OVER (ORDER BY magnitude DESC) AS n2,
85
+ SUM(magnitude) OVER (ORDER BY occurred_at) AS running,
86
+ AVG(magnitude) OVER (ORDER BY magnitude ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg
87
+ FROM ns.earthquakes;
88
+
89
+ -- QUALIFY: filter on a window result (top row per partition)
90
+ SELECT event_id, mag_type, magnitude FROM ns.earthquakes
91
+ QUALIFY ROW_NUMBER() OVER (PARTITION BY mag_type ORDER BY magnitude DESC) = 1;
92
+ ```
93
+
94
+ ## Functions
95
+
96
+ Aggregate, scalar, JSON, and array/map function catalogs are in the docs — pull `sql-reference/aggregate-functions/` and `.../scalar-functions/`. JSON functions accept variadic paths, e.g. `json_get_int(doc, 'user', 'profile', 'level')`.
97
+
98
+ ## Data Types
99
+
100
+ `integer`, `float`, `string` (single quotes), `boolean`, `timestamp` (RFC3339 **with timezone**), `date` (ISO 8601), `struct`, `array` (1-indexed), `map`. No implicit conversions — quote strings, include timezone on timestamps, don't quote integers. Full type docs: `sql-reference/`.
101
+
102
+ ```sql
103
+ WHERE status = 200 AND method = 'GET' -- not '200', not GET
104
+ AND ts >= '2026-01-01T00:00:00Z' -- not '2026-01-01'
105
+ ```
106
+
107
+ ## Complex Types (quick examples; full ref in docs)
108
+
109
+ ```sql
110
+ SELECT pricing['price'] AS price, get_field(pricing, 'discount') AS disc FROM ns.t; -- struct
111
+ SELECT tags[1] AS first_tag, array_length(tags) AS n FROM ns.t; -- array (1-indexed)
112
+ SELECT map_keys(meta), map_extract(meta, 'source') FROM ns.t; -- map
113
+ ```
114
+
115
+ ## Errors
116
+
117
+ Failed queries return `{"success": false, "errors": [{"code": ..., "message": ...}]}`. For error codes and troubleshooting, see `https://developers.cloudflare.com/r2-sql/troubleshooting/`.
118
+
119
+ ## See Also
120
+
121
+ - [patterns.md](patterns.md) — query examples · [gotchas.md](gotchas.md) — limits & workarounds · [configuration.md](configuration.md)
@@ -0,0 +1,50 @@
1
+ # R2 SQL Configuration
2
+
3
+ Auth and setup. For the current permission matrix and wrangler flags, pull `https://developers.cloudflare.com/r2-sql/reference/wrangler-commands/` and the R2 Data Catalog manage-catalogs doc.
4
+
5
+ ## Prerequisites
6
+
7
+ - R2 bucket with Data Catalog enabled ([r2-data-catalog/configuration.md](../r2-data-catalog/configuration.md))
8
+ - R2 API token: **R2 Storage Admin Read & Write** (includes R2 SQL Read), or add **R2 SQL Read** explicitly
9
+ - Wrangler CLI (for CLI queries)
10
+
11
+ > Open-beta limitation: R2 Storage **Admin Read & Write is required even for read-only R2 SQL queries**.
12
+
13
+ ## Enable Catalog + Get Warehouse
14
+
15
+ ```bash
16
+ npx wrangler r2 bucket catalog enable my-bucket
17
+ ```
18
+
19
+ You query by **warehouse** name (`{ACCOUNT_ID}_{BUCKET}`), shown in the output alongside the Catalog URI.
20
+
21
+ ## Configure Auth
22
+
23
+ ### Wrangler CLI
24
+
25
+ ```bash
26
+ export WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
27
+ # or a .env file in the project dir (auto-loaded): WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
28
+ ```
29
+
30
+ > Wrangler does **not** use the `wrangler login` OAuth session for R2 SQL — the env var is required.
31
+
32
+ ### REST API
33
+
34
+ ```bash
35
+ curl -X POST \
36
+ "https://api.sql.cloudflarestorage.com/api/v1/accounts/$ACCOUNT_ID/r2-sql/query/$BUCKET" \
37
+ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
38
+ -d '{"query": "SELECT * FROM default.my_table LIMIT 10"}'
39
+ ```
40
+
41
+ ## Verify Setup
42
+
43
+ ```bash
44
+ npx wrangler r2 sql query "${ACCOUNT_ID}_my-bucket" "SHOW DATABASES"
45
+ npx wrangler r2 sql query "${ACCOUNT_ID}_my-bucket" "SHOW TABLES IN default"
46
+ ```
47
+
48
+ ## See Also
49
+
50
+ - [api.md](api.md) — SQL syntax · [patterns.md](patterns.md) — query examples · [gotchas.md](gotchas.md) — troubleshooting
@@ -0,0 +1,39 @@
1
+ # R2 SQL Gotchas
2
+
3
+ Operational pitfalls. For the authoritative list of supported features, unsupported features, and recommended workarounds, pull `https://developers.cloudflare.com/r2-sql/reference/limitations-best-practices/` and `https://developers.cloudflare.com/r2-sql/troubleshooting/`.
4
+
5
+ ## Access
6
+
7
+ - **No Workers binding.** There is no `env.R2_SQL`. Query the REST endpoint via `fetch()` from a Worker ([patterns.md](patterns.md#dashboard-worker)), or use D1 / an external DB for OLTP.
8
+ - Wrangler needs `WRANGLER_R2_SQL_AUTH_TOKEN` — it does **not** reuse the `wrangler login` OAuth session.
9
+ - Open beta: R2 Storage **Admin Read & Write is required even for read-only** queries.
10
+
11
+ ## Type Safety
12
+
13
+ ```sql
14
+ -- ❌ wrong -- ✅ right
15
+ WHERE status = '200' WHERE status = 200
16
+ WHERE ts > '2026-01-01' WHERE ts > '2026-01-01T00:00:00Z' -- need time + tz
17
+ WHERE method = GET WHERE method = 'GET'
18
+ ```
19
+
20
+ No implicit conversions. Timestamps must be RFC3339 with timezone; dates ISO 8601.
21
+
22
+ ## Performance
23
+
24
+ - **File count dominates latency** — enable automatic compaction.
25
+ - **Partition-filter + narrow time windows + always `LIMIT`.**
26
+ - **Multi-way JOINs on large tables** can exceed resource limits — filter heavily, join through dimension tables.
27
+ - Per-query `metrics` (`files_scanned`, `bytes_scanned`, `cache_hits`) are the primary observability signal; `bytes_scanned` ≈ billable data. For LIMIT bounds, pagination, and other guidance, see the limitations-best-practices doc.
28
+
29
+ ## Debug Checklist
30
+
31
+ 1. `wrangler r2 bucket catalog enable <bucket>` — catalog on?
32
+ 2. `echo $WRANGLER_R2_SQL_AUTH_TOKEN` — token set?
33
+ 3. `SHOW DATABASES` → `SHOW TABLES IN ns` → `DESCRIBE ns.table`
34
+ 4. `SELECT COUNT(*) FROM ns.table` — data present?
35
+ 5. Add filters incrementally; read `metrics` to tune.
36
+
37
+ ## See Also
38
+
39
+ - [api.md](api.md) · [patterns.md](patterns.md) · [configuration.md](configuration.md)
@@ -0,0 +1,118 @@
1
+ # R2 SQL Patterns
2
+
3
+ Code templates for CLI, REST, and Worker access. For performance/partitioning best practices, pull `https://developers.cloudflare.com/r2-sql/reference/limitations-best-practices/`.
4
+
5
+ ## Wrangler CLI
6
+
7
+ ```bash
8
+ export WRANGLER_R2_SQL_AUTH_TOKEN=$API_TOKEN
9
+
10
+ npx wrangler r2 sql query "${ACCOUNT_ID}_my-bucket" "
11
+ SELECT category, COUNT(*) AS cnt, round(AVG(amount), 2) AS avg_amount
12
+ FROM analytics.events
13
+ WHERE __ingest_ts >= '2026-01-01T00:00:00Z'
14
+ GROUP BY category ORDER BY cnt DESC LIMIT 100"
15
+ ```
16
+
17
+ ## REST API (Python)
18
+
19
+ ```python
20
+ import requests
21
+
22
+ API = f"https://api.sql.cloudflarestorage.com/api/v1/accounts/{ACCOUNT_ID}/r2-sql/query/{BUCKET}"
23
+ HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
24
+
25
+ def r2sql(query):
26
+ body = requests.post(API, headers=HEADERS, json={"query": query}, timeout=180).json()
27
+ if body["success"]:
28
+ return body["result"]["rows"], body["result"]["metrics"]
29
+ raise RuntimeError(body["errors"])
30
+
31
+ rows, metrics = r2sql("SELECT category, COUNT(*) AS cnt FROM analytics.events GROUP BY category LIMIT 10")
32
+ ```
33
+
34
+ ## REST API (curl)
35
+
36
+ ```bash
37
+ curl -X POST \
38
+ "https://api.sql.cloudflarestorage.com/api/v1/accounts/$ACCOUNT_ID/r2-sql/query/$BUCKET" \
39
+ -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
40
+ -d '{"query": "SELECT COUNT(*) AS total FROM analytics.events"}'
41
+ ```
42
+
43
+ ## Dashboard Worker
44
+
45
+ No R2 SQL binding exists — query the REST endpoint via `fetch()`.
46
+
47
+ ```typescript
48
+ interface Env { ACCOUNT_ID: string; BUCKET: string; R2_SQL_TOKEN: string; }
49
+
50
+ async function queryR2SQL(env: Env, query: string) {
51
+ const url = `https://api.sql.cloudflarestorage.com/api/v1/accounts/${env.ACCOUNT_ID}/r2-sql/query/${env.BUCKET}`;
52
+ const resp = await fetch(url, {
53
+ method: "POST",
54
+ headers: { Authorization: `Bearer ${env.R2_SQL_TOKEN}`, "Content-Type": "application/json" },
55
+ body: JSON.stringify({ query }),
56
+ });
57
+ if (!resp.ok) throw new Error(`R2 SQL ${resp.status}: ${await resp.text()}`);
58
+ return (await resp.json() as any).result;
59
+ }
60
+
61
+ export default {
62
+ async fetch(req: Request, env: Env): Promise<Response> {
63
+ if (new URL(req.url).pathname === "/api/analytics") {
64
+ const result = await queryR2SQL(env, `
65
+ SELECT category, COUNT(*) AS cnt FROM analytics.events
66
+ GROUP BY category ORDER BY cnt DESC LIMIT 10`);
67
+ return Response.json(result.rows);
68
+ }
69
+ return new Response("Not found", { status: 404 });
70
+ },
71
+ };
72
+ ```
73
+
74
+ ```bash
75
+ npx wrangler secret put R2_SQL_TOKEN
76
+ ```
77
+
78
+ ## Example Queries
79
+
80
+ ```sql
81
+ -- Error rate by endpoint
82
+ SELECT path, COUNT(*) AS total, SUM(CASE WHEN status >= 400 THEN 1 ELSE 0 END) AS errors
83
+ FROM logs.http_requests WHERE __ingest_ts >= '2026-01-01T00:00:00Z'
84
+ GROUP BY path ORDER BY errors DESC LIMIT 20;
85
+
86
+ -- Top-3 slowest requests per method (window + QUALIFY)
87
+ SELECT method, path, response_time_ms FROM logs.http_requests
88
+ QUALIFY ROW_NUMBER() OVER (PARTITION BY method ORDER BY response_time_ms DESC) <= 3;
89
+
90
+ -- Cross-table analytics with approx distinct
91
+ SELECT z.domain, COUNT(*) AS requests, approx_distinct(h.client_ip) AS uniques
92
+ FROM ns.zones z INNER JOIN ns.http_requests h ON z.zone_id = h.zone_id
93
+ WHERE h.__ingest_ts >= '2026-06-01T00:00:00Z'
94
+ GROUP BY z.domain ORDER BY requests DESC LIMIT 25;
95
+ ```
96
+
97
+ ## Cursor-Based Pagination
98
+
99
+ Paginate on a sortable (ideally partition) column rather than `OFFSET`:
100
+
101
+ ```sql
102
+ SELECT * FROM logs.requests ORDER BY __ingest_ts DESC LIMIT 500; -- page 1
103
+ SELECT * FROM logs.requests WHERE __ingest_ts < '<last_ts>' ORDER BY __ingest_ts DESC LIMIT 500; -- page 2
104
+ ```
105
+
106
+ ## Performance (essentials)
107
+
108
+ - **Always `LIMIT`** (early termination); **filter on partition keys first** (`__ingest_ts` range), then add predicates.
109
+ - **Narrow time ranges**; **compact tables** (file count dominates latency — enable automatic compaction in [r2-data-catalog](../r2-data-catalog/configuration.md)).
110
+ - Read response `metrics` (`files_scanned`, `bytes_scanned`) to tune. Full guidance: limitations-best-practices doc.
111
+
112
+ ## Pipelines → R2 SQL
113
+
114
+ After `npx wrangler pipelines setup` (Data Catalog destination), wait for first flush (3–7 min), then query the table. See [pipelines/patterns.md](../pipelines/patterns.md).
115
+
116
+ ## See Also
117
+
118
+ - [api.md](api.md) · [gotchas.md](gotchas.md) · [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md)
@@ -0,0 +1,65 @@
1
+ # Cloudflare Realtime SFU Reference
2
+
3
+ Expert guidance for building real-time audio/video/data applications using Cloudflare Realtime SFU (Selective Forwarding Unit).
4
+
5
+ ## Reading Order
6
+
7
+ | Task | Files | ~Tokens |
8
+ |------|-------|---------|
9
+ | New project | README → configuration | ~1200 |
10
+ | Implement publish/subscribe | README → api | ~1600 |
11
+ | Add PartyTracks | patterns (PartyTracks section) | ~800 |
12
+ | Build presence system | patterns (DO section) | ~800 |
13
+ | Debug connection issues | gotchas | ~700 |
14
+ | Scale to millions | patterns (Cascading section) | ~600 |
15
+ | Add simulcast | patterns (Advanced section) | ~500 |
16
+ | Configure TURN | configuration (TURN section) | ~400 |
17
+
18
+ ## In This Reference
19
+
20
+ - **[configuration.md](configuration.md)** - Setup, deployment, environment variables, Wrangler config
21
+ - **[api.md](api.md)** - Sessions, tracks, endpoints, request/response patterns
22
+ - **[patterns.md](patterns.md)** - Architecture patterns, use cases, integration examples
23
+ - **[gotchas.md](gotchas.md)** - Common issues, debugging, performance, security
24
+
25
+ ## Quick Start
26
+
27
+ Cloudflare Realtime SFU: WebRTC infrastructure on global network (310+ cities). Anycast routing, no regional constraints, pub/sub model.
28
+
29
+ **Core concepts:**
30
+ - **Sessions:** WebRTC PeerConnection to Cloudflare edge
31
+ - **Tracks:** Audio/video/data channels you publish or subscribe to
32
+ - **No rooms:** Build presence layer yourself via track sharing (see patterns.md)
33
+
34
+ **Mental model:** Your client establishes one WebRTC session, publishes tracks (audio/video), shares track IDs via your backend, others subscribe to your tracks using track IDs + your session ID.
35
+
36
+ ## Choose Your Approach
37
+
38
+ | Approach | When to Use | Complexity |
39
+ |----------|-------------|------------|
40
+ | **PartyTracks** | Production apps with device switching, React | Low - Observable-based, handles reconnections |
41
+ | **Raw API** | Custom requirements, non-browser, learning | Medium - Full control, manual WebRTC lifecycle |
42
+ | **RealtimeKit** | End-to-end SDK with UI components | Lowest - Managed state, React hooks |
43
+
44
+ **Recommendation:** Start with PartyTracks for most production applications. See patterns.md for PartyTracks examples.
45
+
46
+ ## SFU vs RealtimeKit
47
+
48
+ - **Realtime SFU:** WebRTC infrastructure (this reference). Build your own signaling, presence, UI.
49
+ - **RealtimeKit:** SDK layer on top of SFU. Includes React hooks, state management, UI components. Part of Cloudflare AI platform.
50
+
51
+ Use SFU directly when you need custom signaling or non-React framework. Use RealtimeKit for faster development with React.
52
+
53
+ ## Setup
54
+
55
+ Dashboard: https://dash.cloudflare.com/?to=/:account/calls
56
+
57
+ Get `CALLS_APP_ID` and `CALLS_APP_SECRET` from dashboard, then see configuration.md for deployment.
58
+
59
+ ## See Also
60
+
61
+ - [Orange Meets Demo](https://demo.orange.cloudflare.dev/)
62
+ - [Orange Source](https://github.com/cloudflare/orange)
63
+ - [Calls Examples](https://github.com/cloudflare/calls-examples)
64
+ - [API Reference](https://developers.cloudflare.com/api/resources/calls/)
65
+ - [RealtimeKit Docs](https://developers.cloudflare.com/workers-ai/realtimekit/)
@@ -0,0 +1,158 @@
1
+ # API Reference
2
+
3
+ ## Authentication
4
+
5
+ ```bash
6
+ curl -X POST 'https://rtc.live/v1/apps/${CALLS_APP_ID}/sessions/new' \
7
+ -H "Authorization: Bearer ${CALLS_APP_SECRET}"
8
+ ```
9
+
10
+ ## Core Concepts
11
+
12
+ **Sessions:** PeerConnection to Cloudflare edge
13
+ **Tracks:** Media/data channels (audio/video/datachannel)
14
+ **No rooms:** Build presence via track sharing
15
+
16
+ ## Client Libraries
17
+
18
+ **PartyTracks (Recommended):** Observable-based client library for production use. Handles device changes, network switches, ICE restarts automatically. Push/pull API with React hooks. See patterns.md for full examples.
19
+
20
+ ```bash
21
+ npm install partytracks @cloudflare/calls
22
+ ```
23
+
24
+ **Raw API:** Direct HTTP + WebRTC for custom requirements (documented below).
25
+
26
+ ## Endpoints
27
+
28
+ ### Create Session
29
+ ```http
30
+ POST /v1/apps/{appId}/sessions/new
31
+ → {sessionId, sessionDescription}
32
+ ```
33
+
34
+ ### Add Track (Publish)
35
+ ```http
36
+ POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
37
+ Body: {
38
+ sessionDescription: {sdp, type: "offer"},
39
+ tracks: [{location: "local", trackName: "my-video"}]
40
+ }
41
+ → {sessionDescription, tracks: [{trackName}]}
42
+ ```
43
+
44
+ ### Add Track (Subscribe)
45
+ ```http
46
+ POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
47
+ Body: {
48
+ tracks: [{
49
+ location: "remote",
50
+ trackName: "remote-track-id",
51
+ sessionId: "other-session-id"
52
+ }]
53
+ }
54
+ → {sessionDescription} (server offer)
55
+ ```
56
+
57
+ ### Renegotiate
58
+ ```http
59
+ PUT /v1/apps/{appId}/sessions/{sessionId}/renegotiate
60
+ Body: {sessionDescription: {sdp, type: "answer"}}
61
+ ```
62
+
63
+ ### Close Tracks
64
+ ```http
65
+ PUT /v1/apps/{appId}/sessions/{sessionId}/tracks/close
66
+ Body: {tracks: [{trackName}]}
67
+ → {requiresImmediateRenegotiation: boolean}
68
+ ```
69
+
70
+ ### Get Session
71
+ ```http
72
+ GET /v1/apps/{appId}/sessions/{sessionId}
73
+ → {sessionId, tracks: TrackMetadata[]}
74
+ ```
75
+
76
+ ## TypeScript Types
77
+
78
+ ```typescript
79
+ interface TrackMetadata {
80
+ trackName: string;
81
+ location: "local" | "remote";
82
+ sessionId?: string; // For remote tracks
83
+ mid?: string; // WebRTC mid
84
+ }
85
+ ```
86
+
87
+ ## WebRTC Flow
88
+
89
+ ```typescript
90
+ // 1. Create PeerConnection
91
+ const pc = new RTCPeerConnection({
92
+ iceServers: [{urls: 'stun:stun.cloudflare.com:3478'}]
93
+ });
94
+
95
+ // 2. Add tracks
96
+ const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
97
+ stream.getTracks().forEach(track => pc.addTrack(track, stream));
98
+
99
+ // 3. Create offer
100
+ const offer = await pc.createOffer();
101
+ await pc.setLocalDescription(offer);
102
+
103
+ // 4. Send to backend → Cloudflare API
104
+ const response = await fetch('/api/new-session', {
105
+ method: 'POST',
106
+ body: JSON.stringify({sdp: offer.sdp})
107
+ });
108
+
109
+ // 5. Set remote answer
110
+ const {sessionDescription} = await response.json();
111
+ await pc.setRemoteDescription(sessionDescription);
112
+ ```
113
+
114
+ ## Publishing
115
+
116
+ ```typescript
117
+ const offer = await pc.createOffer();
118
+ await pc.setLocalDescription(offer);
119
+
120
+ const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
121
+ method: 'POST',
122
+ body: JSON.stringify({
123
+ sdp: offer.sdp,
124
+ tracks: [{location: 'local', trackName: 'my-video'}]
125
+ })
126
+ });
127
+
128
+ const {sessionDescription, tracks} = await res.json();
129
+ await pc.setRemoteDescription(sessionDescription);
130
+ const publishedTrackId = tracks[0].trackName; // Share with others
131
+ ```
132
+
133
+ ## Subscribing
134
+
135
+ ```typescript
136
+ const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
137
+ method: 'POST',
138
+ body: JSON.stringify({
139
+ tracks: [{location: 'remote', trackName: remoteTrackId, sessionId: remoteSessionId}]
140
+ })
141
+ });
142
+
143
+ const {sessionDescription} = await res.json();
144
+ await pc.setRemoteDescription(sessionDescription);
145
+
146
+ const answer = await pc.createAnswer();
147
+ await pc.setLocalDescription(answer);
148
+
149
+ await fetch(`/api/sessions/${sessionId}/renegotiate`, {
150
+ method: 'PUT',
151
+ body: JSON.stringify({sdp: answer.sdp})
152
+ });
153
+
154
+ pc.ontrack = (event) => {
155
+ const [remoteStream] = event.streams;
156
+ videoElement.srcObject = remoteStream;
157
+ };
158
+ ```