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,87 @@
|
|
|
1
|
+
# AI Search API Reference
|
|
2
|
+
|
|
3
|
+
## Workers Binding
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
const answer = await env.AI.autorag("instance-name").aiSearch(options);
|
|
7
|
+
const results = await env.AI.autorag("instance-name").search(options);
|
|
8
|
+
const instances = await env.AI.autorag("_").listInstances();
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## aiSearch() Options
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
interface AiSearchOptions {
|
|
15
|
+
query: string; // User query
|
|
16
|
+
model: string; // Workers AI model ID
|
|
17
|
+
system_prompt?: string; // LLM instructions
|
|
18
|
+
rewrite_query?: boolean; // Fix typos (default: false)
|
|
19
|
+
max_num_results?: number; // Max chunks (default: 10)
|
|
20
|
+
ranking_options?: { score_threshold?: number }; // 0.0-1.0 (default: 0.3)
|
|
21
|
+
reranking?: { enabled: boolean; model: string };
|
|
22
|
+
stream?: boolean; // Stream response (default: false)
|
|
23
|
+
filters?: Filter; // Metadata filters
|
|
24
|
+
page?: string; // Pagination token
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Response
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
interface AiSearchResponse {
|
|
32
|
+
search_query: string; // Query used (rewritten if enabled)
|
|
33
|
+
response: string; // AI-generated answer
|
|
34
|
+
data: SearchResult[]; // Retrieved chunks
|
|
35
|
+
has_more: boolean;
|
|
36
|
+
next_page?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface SearchResult {
|
|
40
|
+
id: string;
|
|
41
|
+
score: number;
|
|
42
|
+
content: string;
|
|
43
|
+
metadata: { filename: string; folder: string; timestamp: number };
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Filters
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// Comparison
|
|
51
|
+
{ column: "folder", operator: "gte", value: "docs/" }
|
|
52
|
+
|
|
53
|
+
// Compound
|
|
54
|
+
{ operator: "and", filters: [
|
|
55
|
+
{ column: "folder", operator: "gte", value: "docs/" },
|
|
56
|
+
{ column: "timestamp", operator: "gte", value: 1704067200 }
|
|
57
|
+
]}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Operators:** `eq`, `ne`, `gt`, `gte`, `lt`, `lte`
|
|
61
|
+
|
|
62
|
+
**Built-in metadata:** `filename`, `folder`, `timestamp` (Unix seconds)
|
|
63
|
+
|
|
64
|
+
## Streaming
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const stream = await env.AI.autorag("docs").aiSearch({ query, model, stream: true });
|
|
68
|
+
return new Response(stream, { headers: { "Content-Type": "text/event-stream" } });
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Error Types
|
|
72
|
+
|
|
73
|
+
| Error | Cause |
|
|
74
|
+
|-------|-------|
|
|
75
|
+
| `AutoRAGNotFoundError` | Instance doesn't exist |
|
|
76
|
+
| `AutoRAGUnauthorizedError` | Invalid/missing token |
|
|
77
|
+
| `AutoRAGValidationError` | Invalid parameters |
|
|
78
|
+
|
|
79
|
+
## REST API
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{NAME}/ai-search \
|
|
83
|
+
-H "Authorization: Bearer {TOKEN}" \
|
|
84
|
+
-d '{"query": "...", "model": "@cf/meta/llama-3.3-70b-instruct-fp8-fast"}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Requires Service API token with "AI Search - Read" permission.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# AI Search Configuration
|
|
2
|
+
|
|
3
|
+
## Worker Setup
|
|
4
|
+
|
|
5
|
+
```jsonc
|
|
6
|
+
// wrangler.jsonc
|
|
7
|
+
{
|
|
8
|
+
"ai": { "binding": "AI" }
|
|
9
|
+
}
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
interface Env {
|
|
14
|
+
AI: Ai;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const answer = await env.AI.autorag("my-instance").aiSearch({
|
|
18
|
+
query: "How do I configure caching?",
|
|
19
|
+
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast"
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Data Sources
|
|
24
|
+
|
|
25
|
+
### R2 Bucket
|
|
26
|
+
|
|
27
|
+
Dashboard: AI Search → Create Instance → Select R2 bucket
|
|
28
|
+
|
|
29
|
+
**Supported formats:** `.md`, `.txt`, `.html`, `.pdf`, `.doc`, `.docx`, `.csv`, `.json`
|
|
30
|
+
|
|
31
|
+
**Auto-indexed metadata:** `filename`, `folder`, `timestamp`
|
|
32
|
+
|
|
33
|
+
### Website Crawler
|
|
34
|
+
|
|
35
|
+
Requirements:
|
|
36
|
+
- Domain on Cloudflare
|
|
37
|
+
- `sitemap.xml` at root
|
|
38
|
+
- Bot protection must allow `CloudflareAISearch` user agent
|
|
39
|
+
|
|
40
|
+
## Path Filtering (R2)
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
docs/**/*.md # All .md in docs/ recursively
|
|
44
|
+
**/*.draft.md # Exclude (use in exclude patterns)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Indexing
|
|
48
|
+
|
|
49
|
+
- **Automatic:** Every 6 hours
|
|
50
|
+
- **Force Sync:** Dashboard button (30s rate limit between syncs)
|
|
51
|
+
- **Pause:** Settings → Pause Indexing (existing index remains searchable)
|
|
52
|
+
|
|
53
|
+
## Service API Token
|
|
54
|
+
|
|
55
|
+
Dashboard: AI Search → Instance → Use AI Search → API → Create Token
|
|
56
|
+
|
|
57
|
+
Permissions:
|
|
58
|
+
- **Read** - search operations
|
|
59
|
+
- **Edit** - instance management
|
|
60
|
+
|
|
61
|
+
Store securely:
|
|
62
|
+
```bash
|
|
63
|
+
wrangler secret put AI_SEARCH_TOKEN
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Multi-Environment
|
|
67
|
+
|
|
68
|
+
```toml
|
|
69
|
+
# wrangler.toml
|
|
70
|
+
[env.production.vars]
|
|
71
|
+
AI_SEARCH_INSTANCE = "prod-docs"
|
|
72
|
+
|
|
73
|
+
[env.staging.vars]
|
|
74
|
+
AI_SEARCH_INSTANCE = "staging-docs"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
const answer = await env.AI.autorag(env.AI_SEARCH_INSTANCE).aiSearch({ query });
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Monitoring
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const instances = await env.AI.autorag("_").listInstances();
|
|
85
|
+
console.log(instances.find(i => i.name === "docs"));
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Dashboard shows: files indexed, status, last index time, storage usage.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# AI Search Gotchas
|
|
2
|
+
|
|
3
|
+
## Type Safety
|
|
4
|
+
|
|
5
|
+
**Timestamp precision:** Use seconds (10-digit), not milliseconds.
|
|
6
|
+
```typescript
|
|
7
|
+
const nowInSeconds = Math.floor(Date.now() / 1000); // Correct
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
**Folder prefix matching:** Use `gte` for "starts with" on paths.
|
|
11
|
+
```typescript
|
|
12
|
+
filters: { column: "folder", operator: "gte", value: "docs/api/" } // Matches nested
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Filter Limitations
|
|
16
|
+
|
|
17
|
+
| Limit | Value |
|
|
18
|
+
|-------|-------|
|
|
19
|
+
| Max nesting depth | 2 levels |
|
|
20
|
+
| Filters per compound | 10 |
|
|
21
|
+
| `or` operator | Same column, `eq` only |
|
|
22
|
+
|
|
23
|
+
**OR restriction example:**
|
|
24
|
+
```typescript
|
|
25
|
+
// ✅ Valid: same column, eq only
|
|
26
|
+
{ operator: "or", filters: [
|
|
27
|
+
{ column: "folder", operator: "eq", value: "docs/" },
|
|
28
|
+
{ column: "folder", operator: "eq", value: "guides/" }
|
|
29
|
+
]}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Indexing Issues
|
|
33
|
+
|
|
34
|
+
| Problem | Cause | Solution |
|
|
35
|
+
|---------|-------|----------|
|
|
36
|
+
| File not indexed | Unsupported format or >4MB | Check format (.md/.txt/.html/.pdf/.doc/.csv/.json) |
|
|
37
|
+
| Index out of sync | 6-hour index cycle | Wait or use "Force Sync" (30s rate limit) |
|
|
38
|
+
| Empty results | Index incomplete | Check dashboard for indexing status |
|
|
39
|
+
|
|
40
|
+
## Auth Errors
|
|
41
|
+
|
|
42
|
+
| Error | Cause | Fix |
|
|
43
|
+
|-------|-------|-----|
|
|
44
|
+
| `AutoRAGUnauthorizedError` | Invalid/missing token | Create Service API token with AI Search permissions |
|
|
45
|
+
| `AutoRAGNotFoundError` | Wrong instance name | Verify exact name from dashboard |
|
|
46
|
+
|
|
47
|
+
## Performance
|
|
48
|
+
|
|
49
|
+
**Slow responses (>3s):**
|
|
50
|
+
```typescript
|
|
51
|
+
// Add score threshold + limit results
|
|
52
|
+
ranking_options: { score_threshold: 0.5 },
|
|
53
|
+
max_num_results: 10
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Empty results debug:**
|
|
57
|
+
1. Remove filters, test basic query
|
|
58
|
+
2. Lower `score_threshold` to 0.1
|
|
59
|
+
3. Check index is populated
|
|
60
|
+
|
|
61
|
+
## Limits
|
|
62
|
+
|
|
63
|
+
| Resource | Limit |
|
|
64
|
+
|----------|-------|
|
|
65
|
+
| Instances per account | 10 |
|
|
66
|
+
| Files per instance | 100,000 |
|
|
67
|
+
| Max file size | 4 MB |
|
|
68
|
+
| Index frequency | 6 hours |
|
|
69
|
+
|
|
70
|
+
## Anti-Patterns
|
|
71
|
+
|
|
72
|
+
**Use env vars for instance names:**
|
|
73
|
+
```typescript
|
|
74
|
+
const answer = await env.AI.autorag(env.AI_SEARCH_INSTANCE).aiSearch({...});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Handle specific error types:**
|
|
78
|
+
```typescript
|
|
79
|
+
if (error instanceof AutoRAGNotFoundError) { /* 404 */ }
|
|
80
|
+
if (error instanceof AutoRAGUnauthorizedError) { /* 401 */ }
|
|
81
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# AI Search Patterns
|
|
2
|
+
|
|
3
|
+
## search() vs aiSearch()
|
|
4
|
+
|
|
5
|
+
| Use | Method | Returns |
|
|
6
|
+
|-----|--------|---------|
|
|
7
|
+
| Custom UI, analytics | `search()` | Raw chunks only (~100-300ms) |
|
|
8
|
+
| Chatbots, Q&A | `aiSearch()` | AI response + chunks (~500-2000ms) |
|
|
9
|
+
|
|
10
|
+
## rewrite_query
|
|
11
|
+
|
|
12
|
+
| Setting | Use When |
|
|
13
|
+
|---------|----------|
|
|
14
|
+
| `true` | User input (typos, vague queries) |
|
|
15
|
+
| `false` | LLM-generated queries (already optimized) |
|
|
16
|
+
|
|
17
|
+
## Multitenancy (Folder-Based)
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
const answer = await env.AI.autorag("saas-docs").aiSearch({
|
|
21
|
+
query: "refund policy",
|
|
22
|
+
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
23
|
+
filters: {
|
|
24
|
+
column: "folder",
|
|
25
|
+
operator: "gte", // "starts with" pattern
|
|
26
|
+
value: `tenants/${tenantId}/`
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Streaming
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
const stream = await env.AI.autorag("docs").aiSearch({
|
|
35
|
+
query, model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", stream: true
|
|
36
|
+
});
|
|
37
|
+
return new Response(stream, { headers: { "Content-Type": "text/event-stream" } });
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Score Threshold
|
|
41
|
+
|
|
42
|
+
| Threshold | Use |
|
|
43
|
+
|-----------|-----|
|
|
44
|
+
| 0.3 (default) | Broad recall, exploratory |
|
|
45
|
+
| 0.5 | Balanced, production default |
|
|
46
|
+
| 0.7 | High precision, critical accuracy |
|
|
47
|
+
|
|
48
|
+
## System Prompt Template
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
const systemPrompt = `You are a documentation assistant.
|
|
52
|
+
- Answer ONLY based on provided context
|
|
53
|
+
- If context doesn't contain answer, say "I don't have information"
|
|
54
|
+
- Include code examples from context`;
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Compound Filters
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
// OR: Multiple folders
|
|
61
|
+
filters: {
|
|
62
|
+
operator: "or",
|
|
63
|
+
filters: [
|
|
64
|
+
{ column: "folder", operator: "gte", value: "docs/api/" },
|
|
65
|
+
{ column: "folder", operator: "gte", value: "docs/auth/" }
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// AND: Folder + date
|
|
70
|
+
filters: {
|
|
71
|
+
operator: "and",
|
|
72
|
+
filters: [
|
|
73
|
+
{ column: "folder", operator: "gte", value: "docs/" },
|
|
74
|
+
{ column: "timestamp", operator: "gte", value: oneWeekAgoSeconds }
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Reranking
|
|
80
|
+
|
|
81
|
+
Enable for high-stakes use cases (adds ~300ms latency):
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
reranking: { enabled: true, model: "@cf/baai/bge-reranker-base" }
|
|
85
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Cloudflare Workers Analytics Engine Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing unlimited-cardinality analytics at scale using Cloudflare Workers Analytics Engine.
|
|
4
|
+
|
|
5
|
+
## What is Analytics Engine?
|
|
6
|
+
|
|
7
|
+
Time-series analytics database designed for high-cardinality data (millions of unique dimensions). Write data points from Workers, query via SQL API. Use for:
|
|
8
|
+
- Custom user-facing analytics dashboards
|
|
9
|
+
- Usage-based billing & metering
|
|
10
|
+
- Per-customer/per-feature monitoring
|
|
11
|
+
- High-frequency instrumentation without performance impact
|
|
12
|
+
|
|
13
|
+
**Key Capability:** Track metrics with unlimited unique values (e.g., millions of user IDs, API keys) without performance degradation.
|
|
14
|
+
|
|
15
|
+
## Core Concepts
|
|
16
|
+
|
|
17
|
+
| Concept | Description | Example |
|
|
18
|
+
|---------|-------------|---------|
|
|
19
|
+
| **Dataset** | Logical table for related metrics | `api_requests`, `user_events` |
|
|
20
|
+
| **Data Point** | Single measurement with timestamp | One API request's metrics |
|
|
21
|
+
| **Blobs** | String dimensions (max 20) | endpoint, method, status, user_id |
|
|
22
|
+
| **Doubles** | Numeric values (max 20) | latency_ms, request_count, bytes |
|
|
23
|
+
| **Indexes** | Filtered blobs for efficient queries | customer_id, api_key |
|
|
24
|
+
|
|
25
|
+
## Reading Order
|
|
26
|
+
|
|
27
|
+
| Task | Start Here | Then Read |
|
|
28
|
+
|------|------------|-----------|
|
|
29
|
+
| **First-time setup** | [configuration.md](configuration.md) → [api.md](api.md) → [patterns.md](patterns.md) | |
|
|
30
|
+
| **Writing data** | [api.md](api.md) → [gotchas.md](gotchas.md) (sampling) | |
|
|
31
|
+
| **Querying data** | [api.md](api.md) (SQL API) → [patterns.md](patterns.md) (examples) | |
|
|
32
|
+
| **Debugging** | [gotchas.md](gotchas.md) → [api.md](api.md) (limits) | |
|
|
33
|
+
| **Optimization** | [patterns.md](patterns.md) (anti-patterns) → [gotchas.md](gotchas.md) | |
|
|
34
|
+
|
|
35
|
+
## When to Use Analytics Engine
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Need to track metrics? → Yes
|
|
39
|
+
↓
|
|
40
|
+
Millions of unique dimension values? → Yes
|
|
41
|
+
↓
|
|
42
|
+
Need real-time queries? → Yes
|
|
43
|
+
↓
|
|
44
|
+
Use Analytics Engine ✓
|
|
45
|
+
|
|
46
|
+
Alternative scenarios:
|
|
47
|
+
- Low cardinality (<10k unique values) → Workers Analytics (free tier)
|
|
48
|
+
- Complex joins/relations → D1 Database
|
|
49
|
+
- Logs/debugging → Tail Workers (logpush)
|
|
50
|
+
- External tools → Send to external analytics (Datadog, etc.)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Quick Start
|
|
54
|
+
|
|
55
|
+
1. Add binding to `wrangler.jsonc`:
|
|
56
|
+
```jsonc
|
|
57
|
+
{
|
|
58
|
+
"analytics_engine_datasets": [
|
|
59
|
+
{ "binding": "ANALYTICS", "dataset": "my_events" }
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
2. Write data points (fire-and-forget, no await):
|
|
65
|
+
```typescript
|
|
66
|
+
env.ANALYTICS.writeDataPoint({
|
|
67
|
+
blobs: ["/api/users", "GET", "200"],
|
|
68
|
+
doubles: [145.2, 1], // latency_ms, count
|
|
69
|
+
indexes: [customerId]
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
3. Query via SQL API (HTTP):
|
|
74
|
+
```sql
|
|
75
|
+
SELECT blob1, SUM(double2) AS total_requests
|
|
76
|
+
FROM my_events
|
|
77
|
+
WHERE index1 = 'customer_123'
|
|
78
|
+
AND timestamp >= NOW() - INTERVAL '7' DAY
|
|
79
|
+
GROUP BY blob1
|
|
80
|
+
ORDER BY total_requests DESC
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## In This Reference
|
|
84
|
+
|
|
85
|
+
- **[configuration.md](configuration.md)** - Setup, bindings, TypeScript types, limits
|
|
86
|
+
- **[api.md](api.md)** - `writeDataPoint()`, SQL API, query syntax
|
|
87
|
+
- **[patterns.md](patterns.md)** - Use cases, examples, anti-patterns
|
|
88
|
+
- **[gotchas.md](gotchas.md)** - Sampling, index selection, troubleshooting
|
|
89
|
+
|
|
90
|
+
## See Also
|
|
91
|
+
|
|
92
|
+
- [Cloudflare Analytics Engine Docs](https://developers.cloudflare.com/analytics/analytics-engine/)
|
|
93
|
+
- [GraphQL Analytics API Reference](../graphql-api/) - Query built-in Cloudflare analytics (HTTP, Workers, DNS, Firewall, etc.)
|
|
94
|
+
- [Observability Reference](../observability/) - Workers Logs, Traces, and real-time debugging
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Analytics Engine API Reference
|
|
2
|
+
|
|
3
|
+
## Writing Data
|
|
4
|
+
|
|
5
|
+
### `writeDataPoint()`
|
|
6
|
+
|
|
7
|
+
Fire-and-forget (returns `void`, not Promise). Writes happen asynchronously.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
interface AnalyticsEngineDataPoint {
|
|
11
|
+
blobs?: string[]; // Up to 20 strings (dimensions), 16KB each
|
|
12
|
+
doubles?: number[]; // Up to 20 numbers (metrics)
|
|
13
|
+
indexes?: string[]; // 1 indexed string for high-cardinality filtering
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
env.ANALYTICS.writeDataPoint({
|
|
17
|
+
blobs: ["/api/users", "GET", "200"],
|
|
18
|
+
doubles: [145.2, 1], // latency_ms, count
|
|
19
|
+
indexes: ["customer_abc123"]
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Behaviors:** No await needed, no error thrown (check tail logs), auto-sampled at high volumes, auto-timestamped.
|
|
24
|
+
|
|
25
|
+
**Blob vs Index:** Blob for GROUP BY (<100k unique), Index for filter-only (millions unique).
|
|
26
|
+
|
|
27
|
+
### Full Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
export default {
|
|
31
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
32
|
+
const start = Date.now();
|
|
33
|
+
const url = new URL(request.url);
|
|
34
|
+
try {
|
|
35
|
+
const response = await handleRequest(request);
|
|
36
|
+
env.ANALYTICS.writeDataPoint({
|
|
37
|
+
blobs: [url.pathname, request.method, response.status.toString()],
|
|
38
|
+
doubles: [Date.now() - start, 1],
|
|
39
|
+
indexes: [request.headers.get("x-api-key") || "anonymous"]
|
|
40
|
+
});
|
|
41
|
+
return response;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
env.ANALYTICS.writeDataPoint({
|
|
44
|
+
blobs: [url.pathname, request.method, "500"],
|
|
45
|
+
doubles: [Date.now() - start, 1, 0],
|
|
46
|
+
});
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## SQL API (External Only)
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql \
|
|
57
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
58
|
+
-d "SELECT blob1 AS endpoint, COUNT(*) AS requests FROM dataset WHERE timestamp >= NOW() - INTERVAL '1' HOUR GROUP BY blob1"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Column References
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
-- blob1..blob20, double1..double20, index1, timestamp
|
|
65
|
+
SELECT blob1 AS endpoint, SUM(double1) AS latency, COUNT(*) AS requests
|
|
66
|
+
FROM my_dataset
|
|
67
|
+
WHERE index1 = 'customer_123' AND timestamp >= NOW() - INTERVAL '7' DAY
|
|
68
|
+
GROUP BY blob1
|
|
69
|
+
HAVING COUNT(*) > 100
|
|
70
|
+
ORDER BY requests DESC LIMIT 100
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Aggregations:** `SUM()`, `AVG()`, `COUNT()`, `MIN()`, `MAX()`, `quantile(0.95)()`
|
|
74
|
+
|
|
75
|
+
**Time ranges:** `NOW() - INTERVAL '1' HOUR`, `BETWEEN '2026-01-01' AND '2026-01-31'`
|
|
76
|
+
|
|
77
|
+
### Query Examples
|
|
78
|
+
|
|
79
|
+
```sql
|
|
80
|
+
-- Top endpoints
|
|
81
|
+
SELECT blob1, COUNT(*) AS requests, AVG(double1) AS avg_latency
|
|
82
|
+
FROM api_requests WHERE timestamp >= NOW() - INTERVAL '24' HOUR
|
|
83
|
+
GROUP BY blob1 ORDER BY requests DESC LIMIT 20
|
|
84
|
+
|
|
85
|
+
-- Error rate
|
|
86
|
+
SELECT blob1, COUNT(*) AS total,
|
|
87
|
+
SUM(CASE WHEN blob3 LIKE '5%' THEN 1 ELSE 0 END) AS errors
|
|
88
|
+
FROM api_requests WHERE timestamp >= NOW() - INTERVAL '1' HOUR
|
|
89
|
+
GROUP BY blob1 HAVING total > 50
|
|
90
|
+
|
|
91
|
+
-- P95 latency
|
|
92
|
+
SELECT blob1, quantile(0.95)(double1) AS p95
|
|
93
|
+
FROM api_requests GROUP BY blob1
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Response Format
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{"data": [{"endpoint": "/api/users", "requests": 1523}], "rows": 2}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Limits
|
|
103
|
+
|
|
104
|
+
| Resource | Limit |
|
|
105
|
+
|----------|-------|
|
|
106
|
+
| Blobs/Doubles per point | 20 each |
|
|
107
|
+
| Indexes per point | 1 |
|
|
108
|
+
| Blob/Index size | 16KB |
|
|
109
|
+
| Data retention | 90 days |
|
|
110
|
+
| Query timeout | 30s |
|
|
111
|
+
|
|
112
|
+
**Critical:** High write volumes (>1M/min) trigger automatic sampling.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Analytics Engine Configuration
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
1. Add binding to `wrangler.jsonc`
|
|
6
|
+
2. Deploy Worker
|
|
7
|
+
3. Dataset created automatically on first write
|
|
8
|
+
4. Query via SQL API
|
|
9
|
+
|
|
10
|
+
## wrangler.jsonc
|
|
11
|
+
|
|
12
|
+
```jsonc
|
|
13
|
+
{
|
|
14
|
+
"name": "my-worker",
|
|
15
|
+
"analytics_engine_datasets": [
|
|
16
|
+
{ "binding": "ANALYTICS", "dataset": "my_events" }
|
|
17
|
+
]
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Multiple datasets for separate concerns:
|
|
22
|
+
```jsonc
|
|
23
|
+
{
|
|
24
|
+
"analytics_engine_datasets": [
|
|
25
|
+
{ "binding": "API_ANALYTICS", "dataset": "api_requests" },
|
|
26
|
+
{ "binding": "USER_EVENTS", "dataset": "user_activity" }
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## TypeScript
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface Env {
|
|
35
|
+
ANALYTICS: AnalyticsEngineDataset;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default {
|
|
39
|
+
async fetch(request: Request, env: Env) {
|
|
40
|
+
// No await - returns void, fire-and-forget
|
|
41
|
+
env.ANALYTICS.writeDataPoint({
|
|
42
|
+
blobs: [pathname, method, status], // String dimensions (max 20)
|
|
43
|
+
doubles: [latency, 1], // Numeric metrics (max 20)
|
|
44
|
+
indexes: [apiKey] // High-cardinality filter (max 1)
|
|
45
|
+
});
|
|
46
|
+
return response;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Data Point Limits
|
|
52
|
+
|
|
53
|
+
| Field | Limit | SQL Access |
|
|
54
|
+
|-------|-------|------------|
|
|
55
|
+
| blobs | 20 strings, 16KB each | `blob1`...`blob20` |
|
|
56
|
+
| doubles | 20 numbers | `double1`...`double20` |
|
|
57
|
+
| indexes | 1 string, 16KB | `index1` |
|
|
58
|
+
|
|
59
|
+
## Write Behavior
|
|
60
|
+
|
|
61
|
+
| Scenario | Behavior |
|
|
62
|
+
|----------|----------|
|
|
63
|
+
| <1M writes/min | All accepted |
|
|
64
|
+
| >1M writes/min | Automatic sampling |
|
|
65
|
+
| Invalid data | Silent failure (check tail logs) |
|
|
66
|
+
|
|
67
|
+
**Mitigate sampling:** Pre-aggregate, use multiple datasets, write only critical metrics.
|
|
68
|
+
|
|
69
|
+
## Query Limits
|
|
70
|
+
|
|
71
|
+
| Resource | Limit |
|
|
72
|
+
|----------|-------|
|
|
73
|
+
| Query timeout | 30 seconds |
|
|
74
|
+
| Data retention | 90 days (default) |
|
|
75
|
+
| Result size | ~10MB |
|
|
76
|
+
|
|
77
|
+
## Cost
|
|
78
|
+
|
|
79
|
+
**Free tier:** 10M writes/month, 1M reads/month
|
|
80
|
+
|
|
81
|
+
**Paid:** $0.05 per 1M writes, $1.00 per 1M reads
|
|
82
|
+
|
|
83
|
+
## Environment-Specific
|
|
84
|
+
|
|
85
|
+
```jsonc
|
|
86
|
+
{
|
|
87
|
+
"analytics_engine_datasets": [
|
|
88
|
+
{ "binding": "ANALYTICS", "dataset": "prod_events" }
|
|
89
|
+
],
|
|
90
|
+
"env": {
|
|
91
|
+
"staging": {
|
|
92
|
+
"analytics_engine_datasets": [
|
|
93
|
+
{ "binding": "ANALYTICS", "dataset": "staging_events" }
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Monitoring
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npx wrangler tail # Check for sampling/write errors
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
```sql
|
|
107
|
+
-- Check write activity
|
|
108
|
+
SELECT DATE_TRUNC('hour', timestamp) AS hour, COUNT(*) AS writes
|
|
109
|
+
FROM my_dataset
|
|
110
|
+
WHERE timestamp >= NOW() - INTERVAL '24' HOUR
|
|
111
|
+
GROUP BY hour
|
|
112
|
+
```
|