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,147 @@
|
|
|
1
|
+
# Cloudflare GraphQL Analytics API
|
|
2
|
+
|
|
3
|
+
Query analytics data across all Cloudflare products via a single GraphQL endpoint. Covers HTTP requests, Workers metrics, DNS, Firewall events, Network Analytics, and 70+ other datasets.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
- **Single endpoint** for all analytics: `https://api.cloudflare.com/client/v4/graphql`
|
|
8
|
+
- **1,400+ schema types** spanning every Cloudflare product
|
|
9
|
+
- **Two scopes**: zone-level (per-domain) and account-level (cross-domain)
|
|
10
|
+
- **Adaptive sampling** on high-traffic datasets with confidence intervals
|
|
11
|
+
- **No mutations** - read-only analytics (the Mutation type is a stub)
|
|
12
|
+
- **Cost-based rate limiting** - default 300 queries per 5 minutes per user (max 320, varies by query cost)
|
|
13
|
+
|
|
14
|
+
## Quick Decision Tree
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Need analytics data from Cloudflare?
|
|
18
|
+
├─ HTTP traffic (requests, bandwidth, cache) → httpRequestsAdaptiveGroups (zone or account)
|
|
19
|
+
├─ Workers performance (CPU, wall time, errors) → workersInvocationsAdaptive (account)
|
|
20
|
+
├─ Firewall/WAF events → firewallEventsAdaptive / firewallEventsAdaptiveGroups (zone or account)
|
|
21
|
+
├─ DNS query analytics → dnsAnalyticsAdaptive / dnsAnalyticsAdaptiveGroups (zone or account)
|
|
22
|
+
├─ Network layer (DDoS, Magic Transit) → *NetworkAnalyticsAdaptiveGroups (account)
|
|
23
|
+
├─ Storage (R2, KV, D1, DO) → r2OperationsAdaptiveGroups / kvOperationsAdaptiveGroups / etc. (account)
|
|
24
|
+
├─ AI (Workers AI, AI Gateway) → aiInferenceAdaptive / aiGatewayRequestsAdaptiveGroups (account)
|
|
25
|
+
├─ Load Balancing → loadBalancingRequestsAdaptiveGroups (zone)
|
|
26
|
+
├─ Custom high-cardinality metrics → Workers Analytics Engine (see ../analytics-engine/)
|
|
27
|
+
└─ Need raw logs, not aggregates → Logpush (see Cloudflare docs)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Core Concepts
|
|
31
|
+
|
|
32
|
+
| Concept | Description |
|
|
33
|
+
|---------|-------------|
|
|
34
|
+
| **Endpoint** | `POST https://api.cloudflare.com/client/v4/graphql` |
|
|
35
|
+
| **Explorer** | [graphql.cloudflare.com](https://graphql.cloudflare.com/) - interactive query builder |
|
|
36
|
+
| **Viewer** | Root query object: `viewer { zones(...) { ... } }` or `viewer { accounts(...) { ... } }` |
|
|
37
|
+
| **Dataset (Node)** | A queryable table under a zone or account (e.g., `httpRequestsAdaptiveGroups`) |
|
|
38
|
+
| **Dimensions** | Fields to group by (time buckets, country, status code, script name, etc.) |
|
|
39
|
+
| **Metrics** | Aggregation fields: `count`, `sum { ... }`, `avg { ... }`, `quantiles { ... }`, `ratio { ... }` |
|
|
40
|
+
| **Filter** | Input object constraining results by time range, dimensions, etc. |
|
|
41
|
+
| **Limit** | Maximum rows returned per dataset node (required, max varies by dataset) |
|
|
42
|
+
| **OrderBy** | Enum-based sorting: `[field_ASC]` or `[field_DESC]` |
|
|
43
|
+
| **Adaptive Sampling** | Nodes with `Adaptive` in the name use ABR sampling; results are statistically representative |
|
|
44
|
+
|
|
45
|
+
## Query Structure
|
|
46
|
+
|
|
47
|
+
Every query follows this pattern:
|
|
48
|
+
|
|
49
|
+
```graphql
|
|
50
|
+
{
|
|
51
|
+
viewer {
|
|
52
|
+
# Zone-scoped
|
|
53
|
+
zones(filter: { zoneTag: "ZONE_ID" }) {
|
|
54
|
+
datasetName(
|
|
55
|
+
filter: { datetime_gt: "...", datetime_lt: "..." }
|
|
56
|
+
limit: 1000
|
|
57
|
+
orderBy: [datetimeFiveMinutes_DESC]
|
|
58
|
+
) {
|
|
59
|
+
count
|
|
60
|
+
dimensions { ... }
|
|
61
|
+
sum { ... }
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
# Account-scoped
|
|
65
|
+
accounts(filter: { accountTag: "ACCOUNT_ID" }) {
|
|
66
|
+
datasetName(filter: { ... }, limit: 100) {
|
|
67
|
+
count
|
|
68
|
+
dimensions { ... }
|
|
69
|
+
sum { ... }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Dataset Naming Convention
|
|
77
|
+
|
|
78
|
+
Dataset names follow a consistent pattern visible in the schema:
|
|
79
|
+
|
|
80
|
+
| Pattern | Meaning | Example |
|
|
81
|
+
|---------|---------|---------|
|
|
82
|
+
| `*Adaptive` | Raw rows with adaptive sampling; some (e.g., `workersInvocationsAdaptive`) also support aggregation fields (`sum`, `quantiles`, `avg`) | `httpRequestsAdaptive`, `workersInvocationsAdaptive` |
|
|
83
|
+
| `*AdaptiveGroups` | Aggregated data with adaptive sampling | `httpRequestsAdaptiveGroups` |
|
|
84
|
+
| `*1hGroups` | Hourly rollups (pre-aggregated) | `httpRequests1hGroups` |
|
|
85
|
+
| `*1dGroups` | Daily rollups (pre-aggregated) | `httpRequests1dGroups` |
|
|
86
|
+
| `*1mGroups` | Minutely rollups | `httpRequests1mGroups` |
|
|
87
|
+
| `Zone*` prefix | Zone-scoped dataset | `ZoneHttpRequestsAdaptiveGroups` |
|
|
88
|
+
| `Account*` prefix | Account-scoped dataset | `AccountWorkersInvocationsAdaptive` |
|
|
89
|
+
|
|
90
|
+
**Prefer `*AdaptiveGroups` nodes** for most use cases - they support flexible time grouping via dimension fields (`datetimeFiveMinutes`, `datetimeHour`, etc.) and are the most commonly used.
|
|
91
|
+
|
|
92
|
+
## Key Datasets by Product
|
|
93
|
+
|
|
94
|
+
### Zone-Scoped (per-domain)
|
|
95
|
+
|
|
96
|
+
| Dataset | Description |
|
|
97
|
+
|---------|-------------|
|
|
98
|
+
| `httpRequestsAdaptiveGroups` | HTTP traffic: requests, bytes, cache status, bot scores, WAF scores |
|
|
99
|
+
| `httpRequests1hGroups` / `1dGroups` / `1mGroups` | Pre-aggregated HTTP rollups (hourly/daily/minutely) |
|
|
100
|
+
| `firewallEventsAdaptiveGroups` | WAF, rate limiting, bot management, firewall rule events |
|
|
101
|
+
| `dnsAnalyticsAdaptiveGroups` | DNS query volumes, response codes, query types |
|
|
102
|
+
| `loadBalancingRequestsAdaptiveGroups` | Load Balancer origin request metrics |
|
|
103
|
+
| `pageShieldReportsAdaptiveGroups` | Page Shield CSP reports |
|
|
104
|
+
|
|
105
|
+
### Account-Scoped (cross-domain)
|
|
106
|
+
|
|
107
|
+
| Dataset | Description |
|
|
108
|
+
|---------|-------------|
|
|
109
|
+
| `workersInvocationsAdaptive` | Workers: requests, errors, CPU time, wall time, subrequests |
|
|
110
|
+
| `durableObjectsInvocationsAdaptiveGroups` | DO invocations |
|
|
111
|
+
| `durableObjectsStorageGroups` / `durableObjectsPeriodicGroups` | DO storage and periodic metrics |
|
|
112
|
+
| `d1AnalyticsAdaptiveGroups` / `d1QueriesAdaptiveGroups` | D1 database analytics |
|
|
113
|
+
| `r2OperationsAdaptiveGroups` / `r2StorageAdaptiveGroups` | R2 operations and storage |
|
|
114
|
+
| `kvOperationsAdaptiveGroups` / `kvStorageAdaptiveGroups` | KV operations and storage |
|
|
115
|
+
| `aiInferenceAdaptiveGroups` | Workers AI inference metrics |
|
|
116
|
+
| `aiGatewayRequestsAdaptiveGroups` | AI Gateway request analytics |
|
|
117
|
+
| `pagesFunctionsInvocationsAdaptiveGroups` | Pages Functions metrics |
|
|
118
|
+
| `magicTransitNetworkAnalyticsAdaptiveGroups` | Magic Transit packet/byte analytics |
|
|
119
|
+
| `spectrumNetworkAnalyticsAdaptiveGroups` | Spectrum TCP/UDP analytics |
|
|
120
|
+
| `gatewayL7RequestsAdaptiveGroups` | Zero Trust Gateway HTTP metrics |
|
|
121
|
+
| `gatewayResolverQueriesAdaptiveGroups` | Zero Trust Gateway DNS metrics |
|
|
122
|
+
|
|
123
|
+
## Reading Order
|
|
124
|
+
|
|
125
|
+
| Task | Start Here | Then Read |
|
|
126
|
+
|------|------------|-----------|
|
|
127
|
+
| **First query** | [configuration.md](configuration.md) (auth) -> this README (structure) | [api.md](api.md) |
|
|
128
|
+
| **Build a dashboard** | [patterns.md](patterns.md) (time-series, top-N) | [api.md](api.md) (aggregation fields) |
|
|
129
|
+
| **Debug query issues** | [gotchas.md](gotchas.md) | [api.md](api.md) (filtering) |
|
|
130
|
+
| **Understand sampling** | [gotchas.md](gotchas.md) (sampling section) | [api.md](api.md) (confidence intervals) |
|
|
131
|
+
| **Product-specific metrics** | [patterns.md](patterns.md) (per-product examples) | [api.md](api.md) (dataset reference) |
|
|
132
|
+
|
|
133
|
+
## In This Reference
|
|
134
|
+
|
|
135
|
+
- **[api.md](api.md)** - Query structure, aggregation fields (sum/avg/quantiles/count), filtering operators, dimensions, dataset details
|
|
136
|
+
- **[configuration.md](configuration.md)** - Authentication, API tokens, client setup (curl, JS, Python), introspection
|
|
137
|
+
- **[patterns.md](patterns.md)** - Common queries: time-series, top-N, Workers metrics, HTTP analytics, firewall events, multi-zone
|
|
138
|
+
- **[gotchas.md](gotchas.md)** - Rate limits, sampling caveats, query cost, common errors, plan-based limits
|
|
139
|
+
|
|
140
|
+
## See Also
|
|
141
|
+
|
|
142
|
+
- [GraphQL Analytics API Docs](https://developers.cloudflare.com/analytics/graphql-api/)
|
|
143
|
+
- [GraphQL API Explorer](https://graphql.cloudflare.com/)
|
|
144
|
+
- [Observability Reference](../observability/) - Workers Logs, Tail Workers, console logging
|
|
145
|
+
- [Analytics Engine Reference](../analytics-engine/) - Custom high-cardinality analytics via Workers
|
|
146
|
+
- [Web Analytics Reference](../web-analytics/) - Client-side (RUM) analytics
|
|
147
|
+
- [API Reference](../api/) - REST API, SDKs, authentication basics
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# GraphQL Analytics API Reference
|
|
2
|
+
|
|
3
|
+
## Query Root
|
|
4
|
+
|
|
5
|
+
The schema has a single entry point: `Query.viewer`. Mutations are not supported.
|
|
6
|
+
|
|
7
|
+
```graphql
|
|
8
|
+
{
|
|
9
|
+
cost # uint64 -- query cost (returned in response)
|
|
10
|
+
viewer {
|
|
11
|
+
budget # uint64 -- remaining budget
|
|
12
|
+
zones(filter: { zoneTag: "..." }) { ... }
|
|
13
|
+
accounts(filter: { accountTag: "..." }) { ... }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Aggregation Fields
|
|
19
|
+
|
|
20
|
+
Aggregated dataset nodes (`*Groups`) return these field categories. Not every node has all — use introspection to check.
|
|
21
|
+
|
|
22
|
+
### count
|
|
23
|
+
|
|
24
|
+
Total events in the group. Available on `*Groups` nodes but **not** on raw `*Adaptive` nodes (e.g., `workersInvocationsAdaptive` — use `sum { requests }` instead).
|
|
25
|
+
|
|
26
|
+
### sum
|
|
27
|
+
|
|
28
|
+
Cumulative metrics. Fields vary by dataset:
|
|
29
|
+
|
|
30
|
+
```graphql
|
|
31
|
+
# HTTP requests
|
|
32
|
+
sum { edgeResponseBytes edgeRequestBytes visits edgeTimeToFirstByteMs originResponseDurationMs }
|
|
33
|
+
|
|
34
|
+
# Workers invocations
|
|
35
|
+
sum { requests errors subrequests cpuTimeUs wallTime duration responseBodySize clientDisconnects requestDuration }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### quantiles
|
|
39
|
+
|
|
40
|
+
Percentile distributions (on datasets like `workersInvocationsAdaptive`). Available percentiles: P25, P50, P75, P90, P95, P99, P999 for `cpuTime`, `wallTime`, `requestDuration`, `duration`, `responseBodySize`.
|
|
41
|
+
|
|
42
|
+
```graphql
|
|
43
|
+
quantiles { cpuTimeP50 cpuTimeP99 wallTimeP50 wallTimeP99 }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### ratio, avg, uniq, confidence
|
|
47
|
+
|
|
48
|
+
```graphql
|
|
49
|
+
ratio { status4xx status5xx } # float64 (0 to 1) -- HTTP datasets only
|
|
50
|
+
avg { sampleInterval } # useful for understanding sampling resolution
|
|
51
|
+
uniq { uniques } # unique IP count -- rollup datasets (*1hGroups, *1dGroups) only
|
|
52
|
+
confidence(level: 0.95) { # Adaptive datasets only; works on count and sum fields
|
|
53
|
+
count { estimate lower upper sampleSize }
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Dimensions
|
|
58
|
+
|
|
59
|
+
Dimensions are fields you can group by via the `dimensions` sub-selection.
|
|
60
|
+
|
|
61
|
+
### Time Dimensions
|
|
62
|
+
|
|
63
|
+
| Dimension | Granularity |
|
|
64
|
+
|-----------|------------|
|
|
65
|
+
| `date` | Day |
|
|
66
|
+
| `datetime` | Exact timestamp |
|
|
67
|
+
| `datetimeMinute` | 1 minute |
|
|
68
|
+
| `datetimeFiveMinutes` | 5 minutes |
|
|
69
|
+
| `datetimeFifteenMinutes` | 15 minutes |
|
|
70
|
+
| `datetimeHour` | 1 hour |
|
|
71
|
+
|
|
72
|
+
Workers datasets also support `datetimeSixHours`.
|
|
73
|
+
|
|
74
|
+
### HTTP Request Dimensions (httpRequestsAdaptiveGroups)
|
|
75
|
+
|
|
76
|
+
83 dimensions available. Key ones:
|
|
77
|
+
|
|
78
|
+
| Dimension | Description |
|
|
79
|
+
|-----------|-------------|
|
|
80
|
+
| `clientCountryName` | Country of origin |
|
|
81
|
+
| `clientRequestHTTPHost` | Requested hostname |
|
|
82
|
+
| `clientRequestHTTPMethodName` | HTTP method |
|
|
83
|
+
| `clientRequestPath` | URI path |
|
|
84
|
+
| `edgeResponseStatus` | Edge HTTP status code |
|
|
85
|
+
| `cacheStatus` | Cache status (hit, miss, dynamic, etc.) |
|
|
86
|
+
| `coloCode` | Cloudflare datacenter IATA code |
|
|
87
|
+
| `clientIP` / `clientAsn` | Client IP address / ASN |
|
|
88
|
+
| `botScore` / `botManagementDecision` | Bot management score (0-99) / verdict |
|
|
89
|
+
| `wafAttackScore` / `securityAction` | WAF score / firewall action taken |
|
|
90
|
+
| `ja3Hash` / `ja4` | TLS fingerprints |
|
|
91
|
+
| `sampleInterval` | ABR sample interval |
|
|
92
|
+
|
|
93
|
+
### Workers Dimensions (workersInvocationsAdaptive)
|
|
94
|
+
|
|
95
|
+
`scriptName`, `scriptTag`, `scriptVersion`, `environmentName`, `status`, `usageModel`, `coloCode`, `dispatchNamespaceName`, `isDispatcher`
|
|
96
|
+
|
|
97
|
+
### Firewall Dimensions (firewallEventsAdaptive)
|
|
98
|
+
|
|
99
|
+
`action`, `source`, `ruleId`, `clientCountryName`, `clientIP`, `clientAsn`, `userAgent`
|
|
100
|
+
|
|
101
|
+
## Filtering
|
|
102
|
+
|
|
103
|
+
### Scope Filters
|
|
104
|
+
|
|
105
|
+
```graphql
|
|
106
|
+
zones(filter: { zoneTag: "ZONE_ID" }) # up to 10 zones
|
|
107
|
+
zones(filter: { zoneTag_in: ["Z1", "Z2"] })
|
|
108
|
+
accounts(filter: { accountTag: "ACCOUNT_ID" }) # exactly 1 account
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Dataset Filters
|
|
112
|
+
|
|
113
|
+
**Always include a time range filter.** Multiple filters at the same level are implicitly AND-ed.
|
|
114
|
+
|
|
115
|
+
```graphql
|
|
116
|
+
httpRequestsAdaptiveGroups(
|
|
117
|
+
filter: { datetime_gt: "2025-01-01T00:00:00Z", datetime_lt: "2025-01-02T00:00:00Z", clientCountryName: "US" }
|
|
118
|
+
limit: 1000
|
|
119
|
+
)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Filter Operators
|
|
123
|
+
|
|
124
|
+
| Operator | Meaning | Example |
|
|
125
|
+
|----------|---------|---------|
|
|
126
|
+
| (none) | equals | `clientCountryName: "US"` |
|
|
127
|
+
| `_gt` / `_lt` | greater / less than | `datetime_gt: "..."` |
|
|
128
|
+
| `_geq` / `_leq` | greater/less or equal | `datetime_geq: "..."` |
|
|
129
|
+
| `_neq` | not equal | `cacheStatus_neq: "hit"` |
|
|
130
|
+
| `_in` / `_notin` | in / not in list | `clientCountryName_in: ["US", "GB"]` |
|
|
131
|
+
| `_like` / `_notlike` | SQL LIKE with `%` | `clientRequestPath_like: "/api/%"` |
|
|
132
|
+
| `_has` / `_hasall` / `_hasany` | array contains | `botDetectionIds_has: "abc"` |
|
|
133
|
+
|
|
134
|
+
> `_notin` and `_notlike` are in the schema but not in official docs. Confirmed via introspection.
|
|
135
|
+
|
|
136
|
+
### Boolean Operators (AND / OR)
|
|
137
|
+
|
|
138
|
+
```graphql
|
|
139
|
+
# Explicit AND
|
|
140
|
+
filter: { AND: [{ datetime_gt: "..." }, { datetime_lt: "..." }, { clientCountryName: "US" }] }
|
|
141
|
+
|
|
142
|
+
# Explicit OR
|
|
143
|
+
filter: { datetime_gt: "...", OR: [{ edgeResponseStatus: 403 }, { edgeResponseStatus: 429 }] }
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Pagination & Sorting
|
|
147
|
+
|
|
148
|
+
No cursor-based pagination. Use `limit`, `orderBy`, and filter-based offsets:
|
|
149
|
+
|
|
150
|
+
```graphql
|
|
151
|
+
# First page
|
|
152
|
+
httpRequestsAdaptiveGroups(filter: { datetime_gt: "..." }, limit: 100, orderBy: [datetime_ASC])
|
|
153
|
+
|
|
154
|
+
# Next page: filter by last seen value from previous page
|
|
155
|
+
httpRequestsAdaptiveGroups(filter: { datetime_gt: "2025-01-01T01:35:00Z" }, limit: 100, orderBy: [datetime_ASC])
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Sort with `orderBy: [field_ASC]` or `[field_DESC]`. Multiple sort fields supported.
|
|
159
|
+
|
|
160
|
+
## Settings Node
|
|
161
|
+
|
|
162
|
+
Query per-node limits and availability:
|
|
163
|
+
|
|
164
|
+
```graphql
|
|
165
|
+
viewer { zones(filter: { zoneTag: "..." }) { settings {
|
|
166
|
+
httpRequestsAdaptiveGroups { enabled maxDuration maxNumberOfFields maxPageSize notOlderThan }
|
|
167
|
+
} } }
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## See Also
|
|
171
|
+
|
|
172
|
+
- [README.md](README.md) - Overview, decision tree, dataset index
|
|
173
|
+
- [configuration.md](configuration.md) - Authentication, client setup, introspection queries
|
|
174
|
+
- [patterns.md](patterns.md) - Common query patterns (time-series, top-N, per-product)
|
|
175
|
+
- [gotchas.md](gotchas.md) - Rate limits, sampling, troubleshooting
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# GraphQL Analytics API Configuration
|
|
2
|
+
|
|
3
|
+
## Authentication
|
|
4
|
+
|
|
5
|
+
### API Token (Recommended)
|
|
6
|
+
|
|
7
|
+
| Permission | Scope | Use Case |
|
|
8
|
+
|------------|-------|----------|
|
|
9
|
+
| **Account Analytics: Read** | Account-wide | Workers, R2, KV, D1, DO, AI, Network Analytics |
|
|
10
|
+
| **Zone Analytics: Read** | Per-zone | HTTP requests, Firewall, DNS, Load Balancing |
|
|
11
|
+
| **All zones - Analytics: Read** | All zones | Multi-zone HTTP/Firewall/DNS queries |
|
|
12
|
+
|
|
13
|
+
Create tokens at: [dash.cloudflare.com > Account API Tokens](https://dash.cloudflare.com/?to=/:account/api-tokens)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Verify token
|
|
17
|
+
curl -s https://api.cloudflare.com/client/v4/graphql \
|
|
18
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
19
|
+
-H "Content-Type: application/json" \
|
|
20
|
+
--data '{"query":"{ viewer { zones(filter: {zoneTag: \"ZONE_ID\"}) { httpRequestsAdaptiveGroups(limit: 1, filter: {datetime_gt: \"2025-01-01T00:00:00Z\"}) { count } } } }"}'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### API Key + Email (Legacy)
|
|
24
|
+
|
|
25
|
+
Not recommended. Use `X-Auth-Email` + `X-Auth-Key` headers instead of `Authorization: Bearer`.
|
|
26
|
+
|
|
27
|
+
## Client Setup
|
|
28
|
+
|
|
29
|
+
### curl
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
curl -s https://api.cloudflare.com/client/v4/graphql \
|
|
33
|
+
-H "Authorization: Bearer $CF_API_TOKEN" \
|
|
34
|
+
-H "Content-Type: application/json" \
|
|
35
|
+
--data '{
|
|
36
|
+
"query": "query($zoneTag: string!, $start: Time!, $end: Time!) { viewer { zones(filter: {zoneTag: $zoneTag}) { httpRequestsAdaptiveGroups(filter: {datetime_gt: $start, datetime_lt: $end}, limit: 10, orderBy: [datetimeFiveMinutes_DESC]) { count dimensions { datetimeFiveMinutes } } } } }",
|
|
37
|
+
"variables": { "zoneTag": "ZONE_ID", "start": "2025-01-01T00:00:00Z", "end": "2025-01-02T00:00:00Z" }
|
|
38
|
+
}' | jq .
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### TypeScript / JavaScript
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
const GRAPHQL_ENDPOINT = "https://api.cloudflare.com/client/v4/graphql";
|
|
45
|
+
|
|
46
|
+
async function queryGraphQL<T>(query: string, variables: Record<string, unknown> = {}): Promise<T> {
|
|
47
|
+
const response = await fetch(GRAPHQL_ENDPOINT, {
|
|
48
|
+
method: "POST",
|
|
49
|
+
headers: { Authorization: `Bearer ${process.env.CF_API_TOKEN}`, "Content-Type": "application/json" },
|
|
50
|
+
body: JSON.stringify({ query, variables }),
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
53
|
+
const json = await response.json() as { data: T | null; errors?: { message: string }[] };
|
|
54
|
+
if (json.errors?.length) throw new Error(json.errors.map((e) => e.message).join("; "));
|
|
55
|
+
return json.data!;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Python
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
import requests, os
|
|
63
|
+
|
|
64
|
+
def query_graphql(query: str, variables: dict = None) -> dict:
|
|
65
|
+
r = requests.post("https://api.cloudflare.com/client/v4/graphql",
|
|
66
|
+
headers={"Authorization": f"Bearer {os.environ['CF_API_TOKEN']}", "Content-Type": "application/json"},
|
|
67
|
+
json={"query": query, "variables": variables or {}})
|
|
68
|
+
r.raise_for_status()
|
|
69
|
+
result = r.json()
|
|
70
|
+
if result.get("errors"):
|
|
71
|
+
raise Exception("; ".join(e["message"] for e in result["errors"]))
|
|
72
|
+
return result["data"]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### From a Cloudflare Worker
|
|
76
|
+
|
|
77
|
+
Store the API token as a secret (`CF_API_TOKEN`). Use standard `fetch` to POST to `https://api.cloudflare.com/client/v4/graphql` with the same JSON body format as above. Always check `response.errors` — GraphQL returns 200 even on query failures.
|
|
78
|
+
|
|
79
|
+
## GraphQL API Explorer
|
|
80
|
+
|
|
81
|
+
Interactive explorer at [graphql.cloudflare.com](https://graphql.cloudflare.com/) — provides schema docs, autocomplete, variable panel, and shareable queries. Authenticates via your Cloudflare dashboard session.
|
|
82
|
+
|
|
83
|
+
## Schema Introspection
|
|
84
|
+
|
|
85
|
+
```graphql
|
|
86
|
+
# List zone-scoped datasets
|
|
87
|
+
{ __type(name: "zone") { fields { name description } } }
|
|
88
|
+
|
|
89
|
+
# List account-scoped datasets
|
|
90
|
+
{ __type(name: "account") { fields { name description } } }
|
|
91
|
+
|
|
92
|
+
# Discover dimensions for a dataset
|
|
93
|
+
{ __type(name: "ZoneHttpRequestsAdaptiveGroupsDimensions") {
|
|
94
|
+
fields { name type { name kind } }
|
|
95
|
+
} }
|
|
96
|
+
|
|
97
|
+
# Discover filter operators for a dataset
|
|
98
|
+
{ __type(name: "ZoneHttpRequestsAdaptiveGroupsFilter_InputObject") {
|
|
99
|
+
inputFields { name type { name kind } }
|
|
100
|
+
} }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Finding Your Zone and Account IDs
|
|
104
|
+
|
|
105
|
+
- **Zone ID**: Dashboard > select zone > Overview (right sidebar), or via API
|
|
106
|
+
- **Account ID**: Dashboard > Account Home URL, or via API
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
curl -s https://api.cloudflare.com/client/v4/zones -H "Authorization: Bearer $CF_API_TOKEN" | jq '.result[] | {name, id}'
|
|
110
|
+
curl -s https://api.cloudflare.com/client/v4/accounts -H "Authorization: Bearer $CF_API_TOKEN" | jq '.result[] | {name, id}'
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## See Also
|
|
114
|
+
|
|
115
|
+
- [README.md](README.md) - Overview, decision tree, dataset index
|
|
116
|
+
- [api.md](api.md) - Query structure, aggregation fields, filtering operators
|
|
117
|
+
- [patterns.md](patterns.md) - Common query patterns (time-series, top-N, per-product)
|
|
118
|
+
- [gotchas.md](gotchas.md) - Rate limits, sampling, troubleshooting
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# GraphQL Analytics API Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Rate Limits
|
|
4
|
+
|
|
5
|
+
| Limit | Value |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| GraphQL queries per user | **Default 300 per 5 minutes** (max 320, at least 1/sec) |
|
|
8
|
+
| General API rate limit | 1200 requests per 5 minutes (shared across all API calls) |
|
|
9
|
+
| Zone scope per query | Up to **10 zones** |
|
|
10
|
+
| Account scope per query | Exactly **1 account** |
|
|
11
|
+
|
|
12
|
+
The GraphQL rate limit is separate from the general API limit. Exceeding either results in `HTTP 429` and blocks all API calls for 5 minutes. Enterprise customers can contact support to raise limits.
|
|
13
|
+
|
|
14
|
+
### "429 Too Many Requests"
|
|
15
|
+
|
|
16
|
+
**Cause:** Exceeded rate limit.
|
|
17
|
+
|
|
18
|
+
**Solution:** Batch multiple datasets into single queries, cache results, increase intervals between queries. Use `{ viewer { budget } }` to monitor remaining budget.
|
|
19
|
+
|
|
20
|
+
## Sampling & Data Accuracy
|
|
21
|
+
|
|
22
|
+
### Adaptive Bit Rate (ABR) Sampling
|
|
23
|
+
|
|
24
|
+
Datasets with `Adaptive` in the name use adaptive sampling:
|
|
25
|
+
- Results are **statistically representative**, not exact
|
|
26
|
+
- Same query may return **slightly different numbers** each run
|
|
27
|
+
- Higher traffic = higher sampling rate = more accurate
|
|
28
|
+
- `sampleInterval` dimension shows the ratio (1 = no sampling, 10 = ~1-in-10 sampled)
|
|
29
|
+
|
|
30
|
+
For high-confidence numbers, use `confidence(level: 0.95)` to get estimate bounds. For exact counts, use rollup nodes (`httpRequests1hGroups`, `httpRequests1dGroups`) which are pre-aggregated without sampling.
|
|
31
|
+
|
|
32
|
+
### Rollup vs. Adaptive
|
|
33
|
+
|
|
34
|
+
| Feature | Rollup (`*1hGroups`, `*1dGroups`) | Adaptive (`*AdaptiveGroups`) |
|
|
35
|
+
|---------|-----------------------------------|-----------------------------|
|
|
36
|
+
| Sampling | No (pre-aggregated) | Yes (ABR) |
|
|
37
|
+
| Flexibility | Fixed time buckets | Any granularity |
|
|
38
|
+
| Dimensions | Fewer | Many more |
|
|
39
|
+
| Accuracy | Exact | Statistical estimate |
|
|
40
|
+
|
|
41
|
+
## Common Errors
|
|
42
|
+
|
|
43
|
+
### "Access denied" / "authentication error"
|
|
44
|
+
|
|
45
|
+
**Cause:** Token lacks required permission or wrong scope.
|
|
46
|
+
|
|
47
|
+
**Solution:** Account-scoped queries need **Account Analytics: Read**. Zone-scoped queries need **Zone Analytics: Read**. Verify: `curl -s https://api.cloudflare.com/client/v4/user/tokens/verify -H "Authorization: Bearer $TOKEN"`
|
|
48
|
+
|
|
49
|
+
### "field not found" / "Cannot query field"
|
|
50
|
+
|
|
51
|
+
**Cause:** Wrong dataset name, nonexistent field, or wrong scope (zone vs. account).
|
|
52
|
+
|
|
53
|
+
**Solution:** Names are case-sensitive camelCase (`httpRequestsAdaptiveGroups`). Zone datasets go under `zones(...)`, account datasets under `accounts(...)`. Use introspection to verify.
|
|
54
|
+
|
|
55
|
+
### "filter is required" / empty results
|
|
56
|
+
|
|
57
|
+
**Cause:** Missing required time range filter or incorrect zone/account tag.
|
|
58
|
+
|
|
59
|
+
**Solution:** Always include `datetime_gt` / `datetime_lt` (or `_geq` / `_leq`).
|
|
60
|
+
|
|
61
|
+
### "limit is required" / "limit exceeds maximum"
|
|
62
|
+
|
|
63
|
+
**Cause:** Missing `limit` or exceeding node's max page size.
|
|
64
|
+
|
|
65
|
+
**Solution:** Always specify `limit`. Max varies by dataset (typically 10,000 for groups, 100 for raw events). Check via settings query.
|
|
66
|
+
|
|
67
|
+
### "query is too complex" / "query exceeds budget"
|
|
68
|
+
|
|
69
|
+
**Cause:** Too many fields, datasets, or too broad a time range.
|
|
70
|
+
|
|
71
|
+
**Solution:** Reduce time range, request fewer dimensions/metrics, break into smaller queries. Monitor `cost` and `budget` in responses.
|
|
72
|
+
|
|
73
|
+
### 200 Response with Errors
|
|
74
|
+
|
|
75
|
+
GraphQL returns HTTP 200 even on failures. **Always check `response.errors`:**
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{ "data": null, "errors": [{ "message": "filter is required for httpRequestsAdaptiveGroups" }] }
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Plan-Based Availability
|
|
82
|
+
|
|
83
|
+
Not all datasets are available on all plans. Higher plans get more datasets, longer retention (`notOlderThan`), wider time ranges (`maxDuration`), more fields, and larger page sizes.
|
|
84
|
+
|
|
85
|
+
### "node is not available" / "node is disabled"
|
|
86
|
+
|
|
87
|
+
**Cause:** Dataset not on your plan, or product not enabled.
|
|
88
|
+
|
|
89
|
+
**Solution:** Check `settings { <nodeName> { enabled } }`. Some datasets require specific subscriptions (e.g., Network Analytics requires Magic Transit/Spectrum).
|
|
90
|
+
|
|
91
|
+
## DateTime & Timezone Handling
|
|
92
|
+
|
|
93
|
+
- All times are **UTC only** (ISO 8601: `"2025-01-15T10:30:00Z"`)
|
|
94
|
+
- `Date` type: `"2025-01-15"` (used in `date_geq`/`date_leq` for storage datasets)
|
|
95
|
+
- `Time` type: `"2025-01-15T10:30:00Z"` (used in `datetime_gt`/`datetime_lt`)
|
|
96
|
+
- Filters are start-inclusive: events that start within the window are included
|
|
97
|
+
|
|
98
|
+
## Performance Tips
|
|
99
|
+
|
|
100
|
+
- **Narrow time ranges** are faster and cheaper
|
|
101
|
+
- **Select only needed dimensions** — each additional dimension increases cost
|
|
102
|
+
- **Use rollup nodes** (`*1dGroups`) for simple daily totals without dimension breakdowns
|
|
103
|
+
- **Batch datasets** into one query instead of separate HTTP requests
|
|
104
|
+
|
|
105
|
+
## See Also
|
|
106
|
+
|
|
107
|
+
- [README.md](README.md) - Overview, decision tree, dataset index
|
|
108
|
+
- [api.md](api.md) - Query structure, aggregation fields, filtering operators
|
|
109
|
+
- [configuration.md](configuration.md) - Authentication, client setup, introspection queries
|
|
110
|
+
- [patterns.md](patterns.md) - Common query patterns (time-series, top-N, per-product)
|