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,225 @@
|
|
|
1
|
+
# Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Rate Limits & 429 Errors
|
|
4
|
+
|
|
5
|
+
**Actual Limits:**
|
|
6
|
+
- **1200 requests / 5 minutes** per user/token (global)
|
|
7
|
+
- **200 requests / second** per IP address
|
|
8
|
+
- **GraphQL: 320 / 5 minutes** (cost-based)
|
|
9
|
+
|
|
10
|
+
**SDK Behavior:**
|
|
11
|
+
- Auto-retry with exponential backoff (default 2 retries, Go: 10)
|
|
12
|
+
- Respects `Retry-After` header
|
|
13
|
+
- Throws `RateLimitError` after exhausting retries
|
|
14
|
+
|
|
15
|
+
**Solution:**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Increase retries for rate-limit-heavy workflows
|
|
19
|
+
const client = new Cloudflare({ maxRetries: 5 });
|
|
20
|
+
|
|
21
|
+
// Add application-level throttling
|
|
22
|
+
import pLimit from 'p-limit';
|
|
23
|
+
const limit = pLimit(10); // Max 10 concurrent requests
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## SDK-Specific Issues
|
|
27
|
+
|
|
28
|
+
### Go: Required Field Wrapper
|
|
29
|
+
|
|
30
|
+
**Problem:** Go SDK requires `cloudflare.F()` wrapper for optional fields.
|
|
31
|
+
|
|
32
|
+
```go
|
|
33
|
+
// ❌ WRONG - Won't compile or send field
|
|
34
|
+
client.Zones.New(ctx, cloudflare.ZoneNewParams{
|
|
35
|
+
Name: "example.com",
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
// ✅ CORRECT
|
|
39
|
+
client.Zones.New(ctx, cloudflare.ZoneNewParams{
|
|
40
|
+
Name: cloudflare.F("example.com"),
|
|
41
|
+
Account: cloudflare.F(cloudflare.ZoneNewParamsAccount{
|
|
42
|
+
ID: cloudflare.F("account-id"),
|
|
43
|
+
}),
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Why:** Distinguishes between zero value, null, and omitted fields.
|
|
48
|
+
|
|
49
|
+
### Python: Async vs Sync Clients
|
|
50
|
+
|
|
51
|
+
**Problem:** Using sync client in async context or vice versa.
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
# ❌ WRONG - Can't await sync client
|
|
55
|
+
from cloudflare import Cloudflare
|
|
56
|
+
client = Cloudflare()
|
|
57
|
+
await client.zones.list() # TypeError
|
|
58
|
+
|
|
59
|
+
# ✅ CORRECT - Use AsyncCloudflare
|
|
60
|
+
from cloudflare import AsyncCloudflare
|
|
61
|
+
client = AsyncCloudflare()
|
|
62
|
+
await client.zones.list()
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Token Permission Errors (403)
|
|
66
|
+
|
|
67
|
+
**Problem:** API returns 403 Forbidden despite valid token.
|
|
68
|
+
|
|
69
|
+
**Cause:** Token lacks required permissions (scope).
|
|
70
|
+
|
|
71
|
+
**Scopes Required:**
|
|
72
|
+
|
|
73
|
+
| Operation | Required Scope |
|
|
74
|
+
|-----------|----------------|
|
|
75
|
+
| List zones | Zone:Read (zone-level or account-level) |
|
|
76
|
+
| Create zone | Zone:Edit (account-level) |
|
|
77
|
+
| Edit DNS | DNS:Edit (zone-level) |
|
|
78
|
+
| Deploy Worker | Workers Script:Edit (account-level) |
|
|
79
|
+
| Read KV | Workers KV Storage:Read |
|
|
80
|
+
| Write KV | Workers KV Storage:Edit |
|
|
81
|
+
|
|
82
|
+
**Solution:** Re-create token with correct permissions in Dashboard → My Profile → API Tokens.
|
|
83
|
+
|
|
84
|
+
## Pagination Truncation
|
|
85
|
+
|
|
86
|
+
**Problem:** Only getting first 20 results (default page size).
|
|
87
|
+
|
|
88
|
+
**Solution:** Use auto-pagination iterators.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// ❌ WRONG - Only first page (20 items)
|
|
92
|
+
const page = await client.zones.list();
|
|
93
|
+
|
|
94
|
+
// ✅ CORRECT - All results
|
|
95
|
+
const zones = [];
|
|
96
|
+
for await (const zone of client.zones.list()) {
|
|
97
|
+
zones.push(zone);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Workers Subrequests
|
|
102
|
+
|
|
103
|
+
**Problem:** Rate limit hit faster than expected in Workers.
|
|
104
|
+
|
|
105
|
+
**Cause:** Workers subrequests count as separate API calls.
|
|
106
|
+
|
|
107
|
+
**Solution:** Use bindings instead of REST API in Workers (see ../bindings/).
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// ❌ WRONG - REST API in Workers (counts against rate limit)
|
|
111
|
+
const client = new Cloudflare({ apiToken: env.CLOUDFLARE_API_TOKEN });
|
|
112
|
+
const zones = await client.zones.list();
|
|
113
|
+
|
|
114
|
+
// ✅ CORRECT - Use bindings (no rate limit)
|
|
115
|
+
// Access via env.MY_BINDING
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Authentication Errors (401)
|
|
119
|
+
|
|
120
|
+
**Problem:** "Authentication failed" or "Invalid token"
|
|
121
|
+
|
|
122
|
+
**Causes:**
|
|
123
|
+
- Token expired
|
|
124
|
+
- Token deleted/revoked
|
|
125
|
+
- Token not set in environment
|
|
126
|
+
- Wrong token format
|
|
127
|
+
|
|
128
|
+
**Solution:**
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// Verify token is set
|
|
132
|
+
if (!process.env.CLOUDFLARE_API_TOKEN) {
|
|
133
|
+
throw new Error('CLOUDFLARE_API_TOKEN not set');
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Test token
|
|
137
|
+
const user = await client.user.tokens.verify();
|
|
138
|
+
console.log('Token valid:', user.status);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Timeout Errors
|
|
142
|
+
|
|
143
|
+
**Problem:** Request times out (default 60s).
|
|
144
|
+
|
|
145
|
+
**Cause:** Large operations (bulk DNS, zone transfers).
|
|
146
|
+
|
|
147
|
+
**Solution:** Increase timeout or split operations.
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// Increase timeout
|
|
151
|
+
const client = new Cloudflare({
|
|
152
|
+
timeout: 300000, // 5 minutes
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// Or split operations
|
|
156
|
+
const batchSize = 100;
|
|
157
|
+
for (let i = 0; i < records.length; i += batchSize) {
|
|
158
|
+
const batch = records.slice(i, i + batchSize);
|
|
159
|
+
await processBatch(batch);
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Zone Not Found (404)
|
|
164
|
+
|
|
165
|
+
**Problem:** Zone ID valid but returns 404.
|
|
166
|
+
|
|
167
|
+
**Causes:**
|
|
168
|
+
- Zone not in account associated with token
|
|
169
|
+
- Zone deleted
|
|
170
|
+
- Wrong zone ID format
|
|
171
|
+
|
|
172
|
+
**Solution:**
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// List all zones to find correct ID
|
|
176
|
+
for await (const zone of client.zones.list()) {
|
|
177
|
+
console.log(zone.id, zone.name);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Limits Reference
|
|
182
|
+
|
|
183
|
+
| Resource/Limit | Value | Notes |
|
|
184
|
+
|----------------|-------|-------|
|
|
185
|
+
| API rate limit | 1200/5min | Per user/token |
|
|
186
|
+
| IP rate limit | 200/sec | Per IP |
|
|
187
|
+
| GraphQL rate limit | 320/5min | Cost-based |
|
|
188
|
+
| Parallel requests (recommended) | < 10 | Avoid overwhelming API |
|
|
189
|
+
| Default page size | 20 | Use auto-pagination |
|
|
190
|
+
| Max page size | 50 | Some endpoints |
|
|
191
|
+
|
|
192
|
+
## Best Practices
|
|
193
|
+
|
|
194
|
+
**Security:**
|
|
195
|
+
- Never commit tokens
|
|
196
|
+
- Use minimal permissions
|
|
197
|
+
- Rotate tokens regularly
|
|
198
|
+
- Set token expiration
|
|
199
|
+
|
|
200
|
+
**Performance:**
|
|
201
|
+
- Batch operations
|
|
202
|
+
- Use pagination wisely
|
|
203
|
+
- Cache responses
|
|
204
|
+
- Handle rate limits
|
|
205
|
+
|
|
206
|
+
**Code Organization:**
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
// Create reusable client instance
|
|
210
|
+
export const cfClient = new Cloudflare({
|
|
211
|
+
apiToken: process.env.CLOUDFLARE_API_TOKEN,
|
|
212
|
+
maxRetries: 5,
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Wrap common operations
|
|
216
|
+
export async function getZoneDetails(zoneId: string) {
|
|
217
|
+
return await cfClient.zones.get({ zone_id: zoneId });
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## See Also
|
|
222
|
+
|
|
223
|
+
- [api.md](./api.md) - Error types, authentication
|
|
224
|
+
- [configuration.md](./configuration.md) - Timeout/retry configuration
|
|
225
|
+
- [patterns.md](./patterns.md) - Error handling patterns
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Common Patterns
|
|
2
|
+
|
|
3
|
+
## List All with Auto-Pagination
|
|
4
|
+
|
|
5
|
+
**Problem:** API returns paginated results. Default page size is 20.
|
|
6
|
+
|
|
7
|
+
**Solution:** Use SDK auto-pagination to iterate all results.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
// TypeScript
|
|
11
|
+
for await (const zone of client.zones.list()) {
|
|
12
|
+
console.log(zone.name);
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
# Python
|
|
18
|
+
for zone in client.zones.list():
|
|
19
|
+
print(zone.name)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
```go
|
|
23
|
+
// Go
|
|
24
|
+
iter := client.Zones.ListAutoPaging(ctx, cloudflare.ZoneListParams{})
|
|
25
|
+
for iter.Next() {
|
|
26
|
+
fmt.Println(iter.Current().Name)
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Error Handling with Retry
|
|
31
|
+
|
|
32
|
+
**Problem:** Rate limits (429) and transient errors need retry.
|
|
33
|
+
|
|
34
|
+
**Solution:** SDKs auto-retry with exponential backoff. Customize as needed.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
// Increase retries for rate-limit-heavy operations
|
|
38
|
+
const client = new Cloudflare({ maxRetries: 5 });
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
const zone = await client.zones.create({ /* ... */ });
|
|
42
|
+
} catch (err) {
|
|
43
|
+
if (err instanceof Cloudflare.RateLimitError) {
|
|
44
|
+
// Already retried 5 times with backoff
|
|
45
|
+
const retryAfter = err.headers['retry-after'];
|
|
46
|
+
console.log(`Rate limited. Retry after ${retryAfter}s`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Batch Parallel Operations
|
|
52
|
+
|
|
53
|
+
**Problem:** Need to create multiple resources quickly.
|
|
54
|
+
|
|
55
|
+
**Solution:** Use `Promise.all()` for parallel requests (respect rate limits).
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
// Create multiple DNS records in parallel
|
|
59
|
+
const records = ['www', 'api', 'cdn'].map(subdomain =>
|
|
60
|
+
client.dns.records.create({
|
|
61
|
+
zone_id: 'zone-id',
|
|
62
|
+
type: 'A',
|
|
63
|
+
name: `${subdomain}.example.com`,
|
|
64
|
+
content: '192.0.2.1',
|
|
65
|
+
})
|
|
66
|
+
);
|
|
67
|
+
await Promise.all(records);
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Controlled concurrency** (avoid rate limits):
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import pLimit from 'p-limit';
|
|
74
|
+
const limit = pLimit(10); // Max 10 concurrent
|
|
75
|
+
|
|
76
|
+
const subdomains = ['www', 'api', 'cdn', /* many more */];
|
|
77
|
+
const records = subdomains.map(subdomain =>
|
|
78
|
+
limit(() => client.dns.records.create({
|
|
79
|
+
zone_id: 'zone-id',
|
|
80
|
+
type: 'A',
|
|
81
|
+
name: `${subdomain}.example.com`,
|
|
82
|
+
content: '192.0.2.1',
|
|
83
|
+
}))
|
|
84
|
+
);
|
|
85
|
+
await Promise.all(records);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Zone CRUD Workflow
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// Create
|
|
92
|
+
const zone = await client.zones.create({
|
|
93
|
+
account: { id: 'account-id' },
|
|
94
|
+
name: 'example.com',
|
|
95
|
+
type: 'full',
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Read
|
|
99
|
+
const fetched = await client.zones.get({ zone_id: zone.id });
|
|
100
|
+
|
|
101
|
+
// Update
|
|
102
|
+
await client.zones.edit(zone.id, { paused: false });
|
|
103
|
+
|
|
104
|
+
// Delete
|
|
105
|
+
await client.zones.delete(zone.id);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## DNS Bulk Update
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Fetch all A records
|
|
112
|
+
const records = [];
|
|
113
|
+
for await (const record of client.dns.records.list({
|
|
114
|
+
zone_id: 'zone-id',
|
|
115
|
+
type: 'A',
|
|
116
|
+
})) {
|
|
117
|
+
records.push(record);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Update all to new IP
|
|
121
|
+
await Promise.all(records.map(record =>
|
|
122
|
+
client.dns.records.update({
|
|
123
|
+
zone_id: 'zone-id',
|
|
124
|
+
dns_record_id: record.id,
|
|
125
|
+
type: 'A',
|
|
126
|
+
name: record.name,
|
|
127
|
+
content: '203.0.113.1', // New IP
|
|
128
|
+
proxied: record.proxied,
|
|
129
|
+
ttl: record.ttl,
|
|
130
|
+
})
|
|
131
|
+
));
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Filter and Collect Results
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
// Find all proxied A records
|
|
138
|
+
const proxiedRecords = [];
|
|
139
|
+
for await (const record of client.dns.records.list({
|
|
140
|
+
zone_id: 'zone-id',
|
|
141
|
+
type: 'A',
|
|
142
|
+
})) {
|
|
143
|
+
if (record.proxied) {
|
|
144
|
+
proxiedRecords.push(record);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Error Recovery Pattern
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
async function createZoneWithRetry(name: string, maxAttempts = 3) {
|
|
153
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
154
|
+
try {
|
|
155
|
+
return await client.zones.create({
|
|
156
|
+
account: { id: 'account-id' },
|
|
157
|
+
name,
|
|
158
|
+
type: 'full',
|
|
159
|
+
});
|
|
160
|
+
} catch (err) {
|
|
161
|
+
if (err instanceof Cloudflare.RateLimitError && attempt < maxAttempts) {
|
|
162
|
+
const retryAfter = parseInt(err.headers['retry-after'] || '5');
|
|
163
|
+
console.log(`Rate limited, waiting ${retryAfter}s (retry ${attempt}/${maxAttempts})`);
|
|
164
|
+
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
|
|
165
|
+
} else {
|
|
166
|
+
throw err;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Conditional Update Pattern
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
// Only update if zone is active
|
|
177
|
+
const zone = await client.zones.get({ zone_id: 'zone-id' });
|
|
178
|
+
if (zone.status === 'active') {
|
|
179
|
+
await client.zones.edit(zone.id, { paused: false });
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Batch with Error Handling
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
// Process multiple zones, continue on errors
|
|
187
|
+
const results = await Promise.allSettled(
|
|
188
|
+
zoneIds.map(id => client.zones.get({ zone_id: id }))
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
results.forEach((result, i) => {
|
|
192
|
+
if (result.status === 'fulfilled') {
|
|
193
|
+
console.log(`Zone ${i}: ${result.value.name}`);
|
|
194
|
+
} else {
|
|
195
|
+
console.error(`Zone ${i} failed:`, result.reason.message);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## See Also
|
|
201
|
+
|
|
202
|
+
- [api.md](./api.md) - SDK client initialization, basic operations
|
|
203
|
+
- [gotchas.md](./gotchas.md) - Rate limits, common errors
|
|
204
|
+
- [configuration.md](./configuration.md) - SDK configuration options
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Cloudflare API Shield Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for API Shield - comprehensive API security suite for discovery, protection, and monitoring.
|
|
4
|
+
|
|
5
|
+
## Reading Order
|
|
6
|
+
|
|
7
|
+
| Task | Files to Read |
|
|
8
|
+
|------|---------------|
|
|
9
|
+
| Initial setup | README → configuration.md |
|
|
10
|
+
| Implement JWT validation | configuration.md → api.md |
|
|
11
|
+
| Add schema validation | configuration.md → patterns.md |
|
|
12
|
+
| Detect API attacks | patterns.md → api.md |
|
|
13
|
+
| Debug issues | gotchas.md |
|
|
14
|
+
|
|
15
|
+
## Feature Selection
|
|
16
|
+
|
|
17
|
+
What protection do you need?
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
├─ Validate request/response structure → Schema Validation 2.0 (configuration.md)
|
|
21
|
+
├─ Verify auth tokens → JWT Validation (configuration.md)
|
|
22
|
+
├─ Client certificates → mTLS (configuration.md)
|
|
23
|
+
├─ Detect BOLA attacks → BOLA Detection (patterns.md)
|
|
24
|
+
├─ Track auth coverage → Auth Posture (patterns.md)
|
|
25
|
+
├─ Stop volumetric abuse → Abuse Detection (patterns.md)
|
|
26
|
+
└─ Discover shadow APIs → API Discovery (api.md)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## In This Reference
|
|
30
|
+
|
|
31
|
+
- **[configuration.md](configuration.md)** - Setup, session identifiers, rules, token/mTLS configs
|
|
32
|
+
- **[api.md](api.md)** - Endpoint management, discovery, validation APIs, GraphQL operations
|
|
33
|
+
- **[patterns.md](patterns.md)** - Common patterns, progressive rollout, OWASP mappings, workflows
|
|
34
|
+
- **[gotchas.md](gotchas.md)** - Troubleshooting, false positives, performance, best practices
|
|
35
|
+
|
|
36
|
+
## Quick Start
|
|
37
|
+
|
|
38
|
+
API Shield: Enterprise-grade API security (Discovery, Schema Validation 2.0, JWT, mTLS, BOLA Detection, Auth Posture). Available as Enterprise add-on with preview access.
|
|
39
|
+
|
|
40
|
+
## See Also
|
|
41
|
+
|
|
42
|
+
- [API Shield Docs](https://developers.cloudflare.com/api-shield/)
|
|
43
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/api_gateway/)
|
|
44
|
+
- [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
Base: `/zones/{zone_id}/api_gateway`
|
|
4
|
+
|
|
5
|
+
## Endpoints
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
GET /operations # List
|
|
9
|
+
GET /operations/{op_id} # Get single
|
|
10
|
+
POST /operations/item # Create: {endpoint,host,method}
|
|
11
|
+
POST /operations # Bulk: {operations:[{endpoint,host,method}]}
|
|
12
|
+
DELETE /operations/{op_id} # Delete
|
|
13
|
+
DELETE /operations # Bulk delete: {operation_ids:[...]}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Discovery
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
GET /discovery/operations # List discovered
|
|
20
|
+
PATCH /discovery/operations/{op_id} # Update: {state:"saved"|"ignored"}
|
|
21
|
+
PATCH /discovery/operations # Bulk: {operation_ids:{id:{state}}}
|
|
22
|
+
GET /discovery # OpenAPI export
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Config
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
GET /configuration # Get session ID config
|
|
29
|
+
PUT /configuration # Update: {auth_id_characteristics:[{name,type:"header"|"cookie"}]}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Token Validation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
GET /token_validation # List
|
|
36
|
+
POST /token_validation # Create: {name,location:{header:"..."},jwks:"..."}
|
|
37
|
+
POST /jwt_validation_rules # Rule: {name,hostname,token_validation_id,action:"block"}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Workers Integration
|
|
41
|
+
|
|
42
|
+
### Access JWT Claims
|
|
43
|
+
```js
|
|
44
|
+
export default {
|
|
45
|
+
async fetch(req, env) {
|
|
46
|
+
// Access validated JWT payload
|
|
47
|
+
const jwt = req.cf?.jwt?.payload?.[env.JWT_CONFIG_ID]?.[0];
|
|
48
|
+
if (jwt) {
|
|
49
|
+
const userId = jwt.sub;
|
|
50
|
+
const role = jwt.role;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Access mTLS Info
|
|
57
|
+
```js
|
|
58
|
+
export default {
|
|
59
|
+
async fetch(req, env) {
|
|
60
|
+
const tls = req.cf?.tlsClientAuth;
|
|
61
|
+
if (tls?.certVerified === 'SUCCESS') {
|
|
62
|
+
const fingerprint = tls.certFingerprintSHA256;
|
|
63
|
+
// Authenticated client
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Dynamic JWKS Update
|
|
70
|
+
```js
|
|
71
|
+
export default {
|
|
72
|
+
async scheduled(event, env) {
|
|
73
|
+
const jwks = await (await fetch('https://auth.example.com/.well-known/jwks.json')).json();
|
|
74
|
+
await fetch(`https://api.cloudflare.com/client/v4/zones/${env.ZONE_ID}/api_gateway/token_validation/${env.CONFIG_ID}`, {
|
|
75
|
+
method: 'PATCH',
|
|
76
|
+
headers: {'Authorization': `Bearer ${env.CF_API_TOKEN}`, 'Content-Type': 'application/json'},
|
|
77
|
+
body: JSON.stringify({jwks: JSON.stringify(jwks)})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Firewall Fields
|
|
84
|
+
|
|
85
|
+
### Core Fields
|
|
86
|
+
```js
|
|
87
|
+
cf.api_gateway.auth_id_present // Session ID present
|
|
88
|
+
cf.api_gateway.request_violates_schema // Schema violation
|
|
89
|
+
cf.api_gateway.fallthrough_triggered // No endpoint match
|
|
90
|
+
cf.tls_client_auth.cert_verified // mTLS cert valid
|
|
91
|
+
cf.tls_client_auth.cert_fingerprint_sha256
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### JWT Validation (2026)
|
|
95
|
+
```js
|
|
96
|
+
// Modern validation syntax
|
|
97
|
+
is_jwt_valid(http.request.jwt.payload["{config_id}"][0])
|
|
98
|
+
|
|
99
|
+
// Legacy (still supported)
|
|
100
|
+
cf.api_gateway.jwt_claims_valid
|
|
101
|
+
|
|
102
|
+
// Extract claims
|
|
103
|
+
lookup_json_string(http.request.jwt.payload["{config_id}"][0], "claim_name")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Risk Labels (2026)
|
|
107
|
+
```js
|
|
108
|
+
// BOLA detection
|
|
109
|
+
cf.api_gateway.cf-risk-bola-enumeration // Sequential resource access detected
|
|
110
|
+
cf.api_gateway.cf-risk-bola-pollution // Parameter pollution detected
|
|
111
|
+
|
|
112
|
+
// Authentication posture
|
|
113
|
+
cf.api_gateway.cf-risk-missing-auth // Endpoint lacks authentication
|
|
114
|
+
cf.api_gateway.cf-risk-mixed-auth // Inconsistent auth patterns
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## BOLA Detection
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
GET /user_schemas/{schema_id}/bola # Get BOLA config
|
|
121
|
+
PATCH /user_schemas/{schema_id}/bola # Update: {enabled:true}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Auth Posture
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
GET /discovery/authentication_posture # List unprotected endpoints
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## GraphQL Protection
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
GET /settings/graphql_protection # Get limits
|
|
134
|
+
PUT /settings/graphql_protection # Set: {max_depth,max_size}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## See Also
|
|
138
|
+
|
|
139
|
+
- [configuration.md](configuration.md) - Setup guides for all features
|
|
140
|
+
- [patterns.md](patterns.md) - Firewall rules and common patterns
|
|
141
|
+
- [API Gateway API Docs](https://developers.cloudflare.com/api/resources/api_gateway/)
|