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.
- package/LICENSE +674 -0
- package/README.md +67 -0
- package/bin/setup.mjs +103 -0
- package/dist/auth-flow.d.ts +15 -0
- package/dist/auth-flow.d.ts.map +1 -0
- package/dist/auth-flow.js +90 -0
- package/dist/auth-flow.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +47 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +44 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +135 -0
- package/dist/oauth.js.map +1 -0
- package/dist/proxy.d.ts +29 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +39 -0
- package/dist/proxy.js.map +1 -0
- package/dist/servers.d.ts +19 -0
- package/dist/servers.d.ts.map +1 -0
- package/dist/servers.js +40 -0
- package/dist/servers.js.map +1 -0
- package/dist/token-store.d.ts +23 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +47 -0
- package/dist/token-store.js.map +1 -0
- package/package.json +67 -0
- package/skills/agents-sdk/SKILL.md +221 -0
- package/skills/agents-sdk/references/browse-the-web.md +63 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/client-sdk.md +110 -0
- package/skills/agents-sdk/references/codemode.md +110 -0
- package/skills/agents-sdk/references/configuration.md +72 -0
- package/skills/agents-sdk/references/durable-execution.md +51 -0
- package/skills/agents-sdk/references/email.md +146 -0
- package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
- package/skills/agents-sdk/references/mcp.md +188 -0
- package/skills/agents-sdk/references/observability.md +44 -0
- package/skills/agents-sdk/references/queue-retries.md +79 -0
- package/skills/agents-sdk/references/routing.md +75 -0
- package/skills/agents-sdk/references/server-driven-messages.md +63 -0
- package/skills/agents-sdk/references/state-scheduling.md +171 -0
- package/skills/agents-sdk/references/streaming-chat.md +198 -0
- package/skills/agents-sdk/references/think.md +112 -0
- package/skills/agents-sdk/references/voice.md +68 -0
- package/skills/agents-sdk/references/webhooks-push.md +86 -0
- package/skills/agents-sdk/references/workflows.md +132 -0
- package/skills/cloudflare/SKILL.md +248 -0
- package/skills/cloudflare/references/agents-sdk/README.md +89 -0
- package/skills/cloudflare/references/agents-sdk/api.md +190 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
- package/skills/cloudflare/references/ai-gateway/README.md +175 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
- package/skills/cloudflare/references/ai-search/README.md +138 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +88 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
- package/skills/cloudflare/references/ai-search/patterns.md +85 -0
- package/skills/cloudflare/references/analytics-engine/README.md +94 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +204 -0
- package/skills/cloudflare/references/api/configuration.md +160 -0
- package/skills/cloudflare/references/api/gotchas.md +225 -0
- package/skills/cloudflare/references/api/patterns.md +204 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +141 -0
- package/skills/cloudflare/references/api-shield/configuration.md +192 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
- package/skills/cloudflare/references/api-shield/patterns.md +180 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
- package/skills/cloudflare/references/artifacts/README.md +79 -0
- package/skills/cloudflare/references/artifacts/api.md +128 -0
- package/skills/cloudflare/references/artifacts/configuration.md +92 -0
- package/skills/cloudflare/references/bindings/README.md +122 -0
- package/skills/cloudflare/references/bindings/api.md +203 -0
- package/skills/cloudflare/references/bindings/configuration.md +188 -0
- package/skills/cloudflare/references/bindings/gotchas.md +208 -0
- package/skills/cloudflare/references/bindings/patterns.md +200 -0
- package/skills/cloudflare/references/bot-management/README.md +94 -0
- package/skills/cloudflare/references/bot-management/api.md +169 -0
- package/skills/cloudflare/references/bot-management/configuration.md +163 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
- package/skills/cloudflare/references/bot-management/patterns.md +182 -0
- package/skills/cloudflare/references/browser-rendering/README.md +78 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +81 -0
- package/skills/cloudflare/references/c3/gotchas.md +92 -0
- package/skills/cloudflare/references/c3/patterns.md +82 -0
- package/skills/cloudflare/references/cache-reserve/README.md +147 -0
- package/skills/cloudflare/references/cache-reserve/api.md +194 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +85 -0
- package/skills/cloudflare/references/containers/api.md +187 -0
- package/skills/cloudflare/references/containers/configuration.md +188 -0
- package/skills/cloudflare/references/containers/gotchas.md +178 -0
- package/skills/cloudflare/references/containers/patterns.md +202 -0
- package/skills/cloudflare/references/cron-triggers/README.md +99 -0
- package/skills/cloudflare/references/cron-triggers/api.md +196 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
- package/skills/cloudflare/references/d1/README.md +133 -0
- package/skills/cloudflare/references/d1/api.md +196 -0
- package/skills/cloudflare/references/d1/configuration.md +191 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +189 -0
- package/skills/cloudflare/references/ddos/README.md +41 -0
- package/skills/cloudflare/references/ddos/api.md +164 -0
- package/skills/cloudflare/references/ddos/configuration.md +93 -0
- package/skills/cloudflare/references/ddos/gotchas.md +107 -0
- package/skills/cloudflare/references/ddos/patterns.md +174 -0
- package/skills/cloudflare/references/do-storage/README.md +75 -0
- package/skills/cloudflare/references/do-storage/api.md +102 -0
- package/skills/cloudflare/references/do-storage/configuration.md +112 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
- package/skills/cloudflare/references/do-storage/patterns.md +194 -0
- package/skills/cloudflare/references/do-storage/testing.md +183 -0
- package/skills/cloudflare/references/durable-objects/README.md +185 -0
- package/skills/cloudflare/references/durable-objects/api.md +187 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +195 -0
- package/skills/cloudflare/references/email-routing/configuration.md +186 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
- package/skills/cloudflare/references/email-routing/patterns.md +229 -0
- package/skills/cloudflare/references/email-workers/README.md +151 -0
- package/skills/cloudflare/references/email-workers/api.md +237 -0
- package/skills/cloudflare/references/email-workers/configuration.md +112 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
- package/skills/cloudflare/references/email-workers/patterns.md +102 -0
- package/skills/cloudflare/references/flagship/README.md +59 -0
- package/skills/cloudflare/references/flagship/api.md +390 -0
- package/skills/cloudflare/references/flagship/configuration.md +202 -0
- package/skills/cloudflare/references/flagship/gotchas.md +178 -0
- package/skills/cloudflare/references/flagship/patterns.md +469 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
- package/skills/cloudflare/references/hyperdrive/README.md +82 -0
- package/skills/cloudflare/references/hyperdrive/api.md +143 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
- package/skills/cloudflare/references/images/README.md +61 -0
- package/skills/cloudflare/references/images/api.md +96 -0
- package/skills/cloudflare/references/images/configuration.md +211 -0
- package/skills/cloudflare/references/images/gotchas.md +99 -0
- package/skills/cloudflare/references/images/patterns.md +115 -0
- package/skills/cloudflare/references/kv/README.md +89 -0
- package/skills/cloudflare/references/kv/api.md +160 -0
- package/skills/cloudflare/references/kv/configuration.md +144 -0
- package/skills/cloudflare/references/kv/gotchas.md +131 -0
- package/skills/cloudflare/references/kv/patterns.md +196 -0
- package/skills/cloudflare/references/miniflare/README.md +105 -0
- package/skills/cloudflare/references/miniflare/api.md +187 -0
- package/skills/cloudflare/references/miniflare/configuration.md +173 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
- package/skills/cloudflare/references/miniflare/patterns.md +181 -0
- package/skills/cloudflare/references/network-interconnect/README.md +99 -0
- package/skills/cloudflare/references/network-interconnect/api.md +199 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
- package/skills/cloudflare/references/observability/README.md +88 -0
- package/skills/cloudflare/references/observability/api.md +164 -0
- package/skills/cloudflare/references/observability/configuration.md +169 -0
- package/skills/cloudflare/references/observability/gotchas.md +115 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +88 -0
- package/skills/cloudflare/references/pages/api.md +204 -0
- package/skills/cloudflare/references/pages/configuration.md +201 -0
- package/skills/cloudflare/references/pages/gotchas.md +203 -0
- package/skills/cloudflare/references/pages/patterns.md +204 -0
- package/skills/cloudflare/references/pages-functions/README.md +98 -0
- package/skills/cloudflare/references/pages-functions/api.md +143 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
- package/skills/cloudflare/references/pipelines/README.md +90 -0
- package/skills/cloudflare/references/pipelines/api.md +124 -0
- package/skills/cloudflare/references/pipelines/configuration.md +155 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
- package/skills/cloudflare/references/pipelines/patterns.md +130 -0
- package/skills/cloudflare/references/pulumi/README.md +100 -0
- package/skills/cloudflare/references/pulumi/api.md +200 -0
- package/skills/cloudflare/references/pulumi/configuration.md +198 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
- package/skills/cloudflare/references/pulumi/patterns.md +191 -0
- package/skills/cloudflare/references/queues/README.md +96 -0
- package/skills/cloudflare/references/queues/api.md +206 -0
- package/skills/cloudflare/references/queues/configuration.md +144 -0
- package/skills/cloudflare/references/queues/gotchas.md +206 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +95 -0
- package/skills/cloudflare/references/r2/api.md +200 -0
- package/skills/cloudflare/references/r2/configuration.md +165 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +193 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
- package/skills/cloudflare/references/r2-sql/README.md +64 -0
- package/skills/cloudflare/references/r2-sql/api.md +121 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
- package/skills/cloudflare/references/realtimekit/README.md +113 -0
- package/skills/cloudflare/references/realtimekit/api.md +212 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
- package/skills/cloudflare/references/sandbox/README.md +96 -0
- package/skills/cloudflare/references/sandbox/api.md +198 -0
- package/skills/cloudflare/references/sandbox/configuration.md +143 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
- package/skills/cloudflare/references/sandbox/patterns.md +201 -0
- package/skills/cloudflare/references/secrets-store/README.md +74 -0
- package/skills/cloudflare/references/secrets-store/api.md +200 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
- package/skills/cloudflare/references/smart-placement/README.md +138 -0
- package/skills/cloudflare/references/smart-placement/api.md +183 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
- package/skills/cloudflare/references/snippets/README.md +68 -0
- package/skills/cloudflare/references/snippets/api.md +198 -0
- package/skills/cloudflare/references/snippets/configuration.md +227 -0
- package/skills/cloudflare/references/snippets/gotchas.md +86 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +181 -0
- package/skills/cloudflare/references/spectrum/configuration.md +194 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
- package/skills/cloudflare/references/spectrum/patterns.md +196 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +199 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +114 -0
- package/skills/cloudflare/references/stream/api-live.md +195 -0
- package/skills/cloudflare/references/stream/api.md +199 -0
- package/skills/cloudflare/references/stream/configuration.md +141 -0
- package/skills/cloudflare/references/stream/gotchas.md +130 -0
- package/skills/cloudflare/references/stream/patterns.md +184 -0
- package/skills/cloudflare/references/tail-workers/README.md +89 -0
- package/skills/cloudflare/references/tail-workers/api.md +200 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
- package/skills/cloudflare/references/terraform/README.md +102 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +129 -0
- package/skills/cloudflare/references/tunnel/api.md +193 -0
- package/skills/cloudflare/references/tunnel/configuration.md +157 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
- package/skills/cloudflare/references/tunnel/networking.md +168 -0
- package/skills/cloudflare/references/tunnel/patterns.md +192 -0
- package/skills/cloudflare/references/turn/README.md +82 -0
- package/skills/cloudflare/references/turn/api.md +239 -0
- package/skills/cloudflare/references/turn/configuration.md +179 -0
- package/skills/cloudflare/references/turn/gotchas.md +231 -0
- package/skills/cloudflare/references/turn/patterns.md +213 -0
- package/skills/cloudflare/references/turnstile/README.md +99 -0
- package/skills/cloudflare/references/turnstile/api.md +240 -0
- package/skills/cloudflare/references/turnstile/configuration.md +222 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
- package/skills/cloudflare/references/turnstile/patterns.md +193 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +88 -0
- package/skills/cloudflare/references/vectorize/configuration.md +88 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
- package/skills/cloudflare/references/vectorize/patterns.md +90 -0
- package/skills/cloudflare/references/waf/README.md +113 -0
- package/skills/cloudflare/references/waf/api.md +202 -0
- package/skills/cloudflare/references/waf/configuration.md +203 -0
- package/skills/cloudflare/references/waf/gotchas.md +204 -0
- package/skills/cloudflare/references/waf/patterns.md +197 -0
- package/skills/cloudflare/references/web-analytics/README.md +141 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
- package/skills/cloudflare/references/web-analytics/integration.md +60 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
- package/skills/cloudflare/references/workerd/README.md +78 -0
- package/skills/cloudflare/references/workerd/api.md +185 -0
- package/skills/cloudflare/references/workerd/configuration.md +183 -0
- package/skills/cloudflare/references/workerd/gotchas.md +139 -0
- package/skills/cloudflare/references/workerd/patterns.md +192 -0
- package/skills/cloudflare/references/workers/README.md +108 -0
- package/skills/cloudflare/references/workers/api.md +195 -0
- package/skills/cloudflare/references/workers/configuration.md +185 -0
- package/skills/cloudflare/references/workers/frameworks.md +197 -0
- package/skills/cloudflare/references/workers/gotchas.md +137 -0
- package/skills/cloudflare/references/workers/patterns.md +198 -0
- package/skills/cloudflare/references/workers-ai/README.md +197 -0
- package/skills/cloudflare/references/workers-ai/api.md +112 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
- package/skills/cloudflare/references/workers-playground/README.md +127 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
- package/skills/cloudflare/references/workers-vpc/README.md +127 -0
- package/skills/cloudflare/references/workers-vpc/api.md +202 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
- package/skills/cloudflare/references/workflows/README.md +77 -0
- package/skills/cloudflare/references/workflows/api.md +218 -0
- package/skills/cloudflare/references/workflows/configuration.md +152 -0
- package/skills/cloudflare/references/workflows/gotchas.md +90 -0
- package/skills/cloudflare/references/workflows/patterns.md +175 -0
- package/skills/cloudflare/references/wrangler/README.md +135 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +197 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
- package/skills/cloudflare/references/wrangler/patterns.md +209 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
- package/skills/cloudflare/references/zaraz/README.md +111 -0
- package/skills/cloudflare/references/zaraz/api.md +112 -0
- package/skills/cloudflare/references/zaraz/configuration.md +90 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
- package/skills/cloudflare/references/zaraz/patterns.md +74 -0
- package/skills/cloudflare-email-service/SKILL.md +103 -0
- package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
- package/skills/cloudflare-email-service/references/deliverability.md +285 -0
- package/skills/cloudflare-email-service/references/rest-api.md +184 -0
- package/skills/cloudflare-email-service/references/routing.md +199 -0
- package/skills/cloudflare-email-service/references/sending.md +252 -0
- package/skills/cloudflare-one/SKILL.md +176 -0
- package/skills/cloudflare-one-migrations/SKILL.md +110 -0
- package/skills/durable-objects/SKILL.md +186 -0
- package/skills/durable-objects/references/rules.md +295 -0
- package/skills/durable-objects/references/testing.md +264 -0
- package/skills/durable-objects/references/workers.md +346 -0
- package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
- package/skills/sandbox-next/SKILL.md +91 -0
- package/skills/sandbox-next/references/api-quick-ref.md +94 -0
- package/skills/sandbox-next/references/examples.md +15 -0
- package/skills/sandbox-stable/SKILL.md +110 -0
- package/skills/turnstile-spin/README.md +51 -0
- package/skills/turnstile-spin/SKILL.md +330 -0
- package/skills/turnstile-spin/references/astro.md +199 -0
- package/skills/turnstile-spin/references/hugo.md +114 -0
- package/skills/turnstile-spin/references/nextjs-app.md +261 -0
- package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
- package/skills/turnstile-spin/references/sveltekit.md +191 -0
- package/skills/turnstile-spin/references/vanilla-html.md +157 -0
- package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
- package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
- package/skills/turnstile-spin/scripts/validate.sh +137 -0
- package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
- package/skills/turnstile-spin/tests/validation.md +62 -0
- package/skills/workers-best-practices/SKILL.md +127 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +467 -0
- 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
|
+
```
|