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,113 @@
|
|
|
1
|
+
# Cloudflare WAF Expert Skill Reference
|
|
2
|
+
|
|
3
|
+
**Expertise**: Cloudflare Web Application Firewall (WAF) configuration, custom rules, managed rulesets, rate limiting, attack detection, and API integration
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare WAF protects web applications from attacks through managed rulesets and custom rules.
|
|
8
|
+
|
|
9
|
+
**Detection (Managed Rulesets)**
|
|
10
|
+
- Pre-configured rules maintained by Cloudflare
|
|
11
|
+
- CVE-based rules, OWASP Top 10 coverage
|
|
12
|
+
- Three main rulesets: Cloudflare Managed, OWASP CRS, Exposed Credentials
|
|
13
|
+
- Actions: log, block, challenge, js_challenge, managed_challenge
|
|
14
|
+
|
|
15
|
+
**Mitigation (Custom Rules & Rate Limiting)**
|
|
16
|
+
- Custom expressions using Wirefilter syntax
|
|
17
|
+
- Attack score-based blocking (`cf.waf.score`)
|
|
18
|
+
- Rate limiting with per-IP, per-user, or custom characteristics
|
|
19
|
+
- Actions: block, challenge, js_challenge, managed_challenge, log, skip
|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
### Deploy Cloudflare Managed Ruleset
|
|
24
|
+
```typescript
|
|
25
|
+
import Cloudflare from 'cloudflare';
|
|
26
|
+
|
|
27
|
+
const client = new Cloudflare({ apiToken: process.env.CF_API_TOKEN });
|
|
28
|
+
|
|
29
|
+
// Deploy managed ruleset to zone
|
|
30
|
+
await client.rulesets.create({
|
|
31
|
+
zone_id: 'zone_id',
|
|
32
|
+
kind: 'zone',
|
|
33
|
+
phase: 'http_request_firewall_managed',
|
|
34
|
+
name: 'Deploy Cloudflare Managed Ruleset',
|
|
35
|
+
rules: [{
|
|
36
|
+
action: 'execute',
|
|
37
|
+
action_parameters: {
|
|
38
|
+
id: 'efb7b8c949ac4650a09736fc376e9aee', // Cloudflare Managed Ruleset
|
|
39
|
+
},
|
|
40
|
+
expression: 'true',
|
|
41
|
+
enabled: true,
|
|
42
|
+
}],
|
|
43
|
+
});
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Create Custom Rule
|
|
47
|
+
```typescript
|
|
48
|
+
// Block requests with attack score >= 40
|
|
49
|
+
await client.rulesets.create({
|
|
50
|
+
zone_id: 'zone_id',
|
|
51
|
+
kind: 'zone',
|
|
52
|
+
phase: 'http_request_firewall_custom',
|
|
53
|
+
name: 'Custom WAF Rules',
|
|
54
|
+
rules: [{
|
|
55
|
+
action: 'block',
|
|
56
|
+
expression: 'cf.waf.score gt 40',
|
|
57
|
+
description: 'Block high attack scores',
|
|
58
|
+
enabled: true,
|
|
59
|
+
}],
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Create Rate Limit
|
|
64
|
+
```typescript
|
|
65
|
+
await client.rulesets.create({
|
|
66
|
+
zone_id: 'zone_id',
|
|
67
|
+
kind: 'zone',
|
|
68
|
+
phase: 'http_ratelimit',
|
|
69
|
+
name: 'API Rate Limits',
|
|
70
|
+
rules: [{
|
|
71
|
+
action: 'block',
|
|
72
|
+
expression: 'http.request.uri.path eq "/api/login"',
|
|
73
|
+
action_parameters: {
|
|
74
|
+
ratelimit: {
|
|
75
|
+
characteristics: ['cf.colo.id', 'ip.src'],
|
|
76
|
+
period: 60,
|
|
77
|
+
requests_per_period: 10,
|
|
78
|
+
mitigation_timeout: 600,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
enabled: true,
|
|
82
|
+
}],
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Managed Ruleset Quick Reference
|
|
87
|
+
|
|
88
|
+
| Ruleset Name | ID | Coverage |
|
|
89
|
+
|--------------|----|---------|
|
|
90
|
+
| Cloudflare Managed | `efb7b8c949ac4650a09736fc376e9aee` | OWASP Top 10, CVEs |
|
|
91
|
+
| OWASP Core Ruleset | `4814384a9e5d4991b9815dcfc25d2f1f` | OWASP ModSecurity CRS |
|
|
92
|
+
| Exposed Credentials Check | `c2e184081120413c86c3ab7e14069605` | Credential stuffing |
|
|
93
|
+
|
|
94
|
+
## Phases
|
|
95
|
+
|
|
96
|
+
WAF rules execute in specific phases:
|
|
97
|
+
- `http_request_firewall_managed` - Managed rulesets
|
|
98
|
+
- `http_request_firewall_custom` - Custom rules
|
|
99
|
+
- `http_ratelimit` - Rate limiting rules
|
|
100
|
+
- `http_request_sbfm` - Super Bot Fight Mode (Pro+)
|
|
101
|
+
|
|
102
|
+
## Reading Order
|
|
103
|
+
|
|
104
|
+
1. **[api.md](api.md)** - SDK methods, expressions, actions, parameters
|
|
105
|
+
2. **[configuration.md](configuration.md)** - Setup with Wrangler, Terraform, Pulumi
|
|
106
|
+
3. **[patterns.md](patterns.md)** - Common patterns: deploy managed, rate limiting, skip, override
|
|
107
|
+
4. **[gotchas.md](gotchas.md)** - Execution order, limits, expression errors
|
|
108
|
+
|
|
109
|
+
## See Also
|
|
110
|
+
|
|
111
|
+
- [Cloudflare WAF Docs](https://developers.cloudflare.com/waf/)
|
|
112
|
+
- [Ruleset Engine](https://developers.cloudflare.com/ruleset-engine/)
|
|
113
|
+
- [Expression Reference](https://developers.cloudflare.com/ruleset-engine/rules-language/)
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## SDK Setup
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import Cloudflare from 'cloudflare';
|
|
7
|
+
|
|
8
|
+
const client = new Cloudflare({
|
|
9
|
+
apiToken: process.env.CF_API_TOKEN,
|
|
10
|
+
});
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Core Methods
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
// List rulesets
|
|
17
|
+
await client.rulesets.list({ zone_id: 'zone_id', phase: 'http_request_firewall_managed' });
|
|
18
|
+
|
|
19
|
+
// Get ruleset
|
|
20
|
+
await client.rulesets.get({ zone_id: 'zone_id', ruleset_id: 'ruleset_id' });
|
|
21
|
+
|
|
22
|
+
// Create ruleset
|
|
23
|
+
await client.rulesets.create({
|
|
24
|
+
zone_id: 'zone_id',
|
|
25
|
+
kind: 'zone',
|
|
26
|
+
phase: 'http_request_firewall_custom',
|
|
27
|
+
name: 'Custom WAF Rules',
|
|
28
|
+
rules: [{ action: 'block', expression: 'cf.waf.score gt 40', enabled: true }],
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Update ruleset (include rule id to keep existing, omit id for new rules)
|
|
32
|
+
await client.rulesets.update({
|
|
33
|
+
zone_id: 'zone_id',
|
|
34
|
+
ruleset_id: 'ruleset_id',
|
|
35
|
+
rules: [
|
|
36
|
+
{ id: 'rule_id', action: 'block', expression: 'cf.waf.score gt 40', enabled: true },
|
|
37
|
+
{ action: 'challenge', expression: 'http.request.uri.path contains "/admin"', enabled: true },
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Delete ruleset
|
|
42
|
+
await client.rulesets.delete({ zone_id: 'zone_id', ruleset_id: 'ruleset_id' });
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Actions & Phases
|
|
46
|
+
|
|
47
|
+
### Actions by Phase
|
|
48
|
+
|
|
49
|
+
| Action | Custom | Managed | Rate Limit | Description |
|
|
50
|
+
|--------|--------|---------|------------|-------------|
|
|
51
|
+
| `block` | ✅ | ❌ | ✅ | Block request with 403 |
|
|
52
|
+
| `challenge` | ✅ | ❌ | ✅ | Show CAPTCHA challenge |
|
|
53
|
+
| `js_challenge` | ✅ | ❌ | ✅ | JS-based challenge |
|
|
54
|
+
| `managed_challenge` | ✅ | ❌ | ✅ | Smart challenge (recommended) |
|
|
55
|
+
| `log` | ✅ | ❌ | ✅ | Log only, don't block |
|
|
56
|
+
| `skip` | ✅ | ❌ | ❌ | Skip rule evaluation |
|
|
57
|
+
| `execute` | ❌ | ✅ | ❌ | Deploy managed ruleset |
|
|
58
|
+
|
|
59
|
+
### Phases (Execution Order)
|
|
60
|
+
|
|
61
|
+
1. `http_request_firewall_custom` - Custom rules (first line of defense)
|
|
62
|
+
2. `http_request_firewall_managed` - Managed rulesets (pre-configured protection)
|
|
63
|
+
3. `http_ratelimit` - Rate limiting (request throttling)
|
|
64
|
+
4. `http_request_sbfm` - Super Bot Fight Mode (Pro+ only)
|
|
65
|
+
|
|
66
|
+
## Expression Syntax
|
|
67
|
+
|
|
68
|
+
### Fields
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// Request properties
|
|
72
|
+
http.request.method // GET, POST, etc.
|
|
73
|
+
http.request.uri.path // /api/users
|
|
74
|
+
http.host // example.com
|
|
75
|
+
|
|
76
|
+
// IP and Geolocation
|
|
77
|
+
ip.src // 192.0.2.1
|
|
78
|
+
ip.geoip.country // US, GB, etc.
|
|
79
|
+
ip.geoip.continent // NA, EU, etc.
|
|
80
|
+
|
|
81
|
+
// Attack detection
|
|
82
|
+
cf.waf.score // 0-100 attack score
|
|
83
|
+
cf.waf.score.sqli // SQL injection score
|
|
84
|
+
cf.waf.score.xss // XSS score
|
|
85
|
+
|
|
86
|
+
// Headers & Cookies
|
|
87
|
+
http.request.headers["authorization"][0]
|
|
88
|
+
http.request.cookies["session"][0]
|
|
89
|
+
lower(http.user_agent) // Lowercase user agent
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Operators
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// Comparison
|
|
96
|
+
eq // Equal
|
|
97
|
+
ne // Not equal
|
|
98
|
+
lt // Less than
|
|
99
|
+
le // Less than or equal
|
|
100
|
+
gt // Greater than
|
|
101
|
+
ge // Greater than or equal
|
|
102
|
+
|
|
103
|
+
// String matching
|
|
104
|
+
contains // Substring match
|
|
105
|
+
matches // Regex match (use carefully)
|
|
106
|
+
starts_with // Prefix match
|
|
107
|
+
ends_with // Suffix match
|
|
108
|
+
|
|
109
|
+
// List operations
|
|
110
|
+
in // Value in list
|
|
111
|
+
not // Logical NOT
|
|
112
|
+
and // Logical AND
|
|
113
|
+
or // Logical OR
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Expression Examples
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
'cf.waf.score gt 40' // Attack score
|
|
120
|
+
'http.request.uri.path eq "/api/login" and http.request.method eq "POST"' // Path + method
|
|
121
|
+
'ip.src in {192.0.2.0/24 203.0.113.0/24}' // IP blocking
|
|
122
|
+
'ip.geoip.country in {"CN" "RU" "KP"}' // Country blocking
|
|
123
|
+
'http.user_agent contains "bot"' // User agent
|
|
124
|
+
'not http.request.headers["authorization"][0]' // Header check
|
|
125
|
+
'(cf.waf.score.sqli gt 20 or cf.waf.score.xss gt 20) and http.request.uri.path starts_with "/api"' // Complex
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Rate Limiting Configuration
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
{
|
|
132
|
+
action: 'block',
|
|
133
|
+
expression: 'http.request.uri.path starts_with "/api"',
|
|
134
|
+
action_parameters: {
|
|
135
|
+
ratelimit: {
|
|
136
|
+
// Characteristics define uniqueness: 'ip.src', 'cf.colo.id',
|
|
137
|
+
// 'http.request.headers["key"][0]', 'http.request.cookies["session"][0]'
|
|
138
|
+
characteristics: ['cf.colo.id', 'ip.src'], // Recommended: per-IP per-datacenter
|
|
139
|
+
period: 60, // Time window in seconds
|
|
140
|
+
requests_per_period: 100, // Max requests in period
|
|
141
|
+
mitigation_timeout: 600, // Block duration in seconds
|
|
142
|
+
counting_expression: 'http.request.method ne "GET"', // Optional: filter counted requests
|
|
143
|
+
requests_to_origin: false, // Count all requests (not just origin hits)
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
enabled: true,
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Managed Ruleset Deployment
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
{
|
|
154
|
+
action: 'execute',
|
|
155
|
+
action_parameters: {
|
|
156
|
+
id: 'efb7b8c949ac4650a09736fc376e9aee', // Cloudflare Managed
|
|
157
|
+
overrides: {
|
|
158
|
+
// Override specific rules
|
|
159
|
+
rules: [
|
|
160
|
+
{ id: '5de7edfa648c4d6891dc3e7f84534ffa', action: 'log', enabled: true },
|
|
161
|
+
],
|
|
162
|
+
// Override categories: 'wordpress', 'sqli', 'xss', 'rce', etc.
|
|
163
|
+
categories: [
|
|
164
|
+
{ category: 'wordpress', enabled: false },
|
|
165
|
+
{ category: 'sqli', action: 'log' },
|
|
166
|
+
],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
expression: 'true',
|
|
170
|
+
enabled: true,
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Skip Rules
|
|
175
|
+
|
|
176
|
+
Skip rules bypass subsequent rule evaluation. Two skip types:
|
|
177
|
+
|
|
178
|
+
**Skip current ruleset**: Skip remaining rules in current phase only
|
|
179
|
+
```typescript
|
|
180
|
+
{
|
|
181
|
+
action: 'skip',
|
|
182
|
+
action_parameters: {
|
|
183
|
+
ruleset: 'current', // Skip rest of current ruleset
|
|
184
|
+
},
|
|
185
|
+
expression: 'http.request.uri.path ends_with ".jpg" or http.request.uri.path ends_with ".css"',
|
|
186
|
+
enabled: true,
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Skip entire phases**: Skip one or more phases completely
|
|
191
|
+
```typescript
|
|
192
|
+
{
|
|
193
|
+
action: 'skip',
|
|
194
|
+
action_parameters: {
|
|
195
|
+
phases: ['http_request_firewall_managed', 'http_ratelimit'], // Skip multiple phases
|
|
196
|
+
},
|
|
197
|
+
expression: 'ip.src in {192.0.2.0/24 203.0.113.0/24}',
|
|
198
|
+
enabled: true,
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Note**: Skip rules in custom phase can skip managed/ratelimit phases, but not vice versa (execution order).
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
**API Token**: Create at https://dash.cloudflare.com/profile/api-tokens
|
|
6
|
+
- Permission: `Zone.WAF Edit` or `Zone.Firewall Services Edit`
|
|
7
|
+
- Zone Resources: Include specific zones or all zones
|
|
8
|
+
|
|
9
|
+
**Zone ID**: Found in dashboard > Overview > API section (right sidebar)
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Set environment variables
|
|
13
|
+
export CF_API_TOKEN="your_api_token_here"
|
|
14
|
+
export ZONE_ID="your_zone_id_here"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## TypeScript SDK Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install cloudflare
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import Cloudflare from 'cloudflare';
|
|
25
|
+
|
|
26
|
+
const client = new Cloudflare({ apiToken: process.env.CF_API_TOKEN });
|
|
27
|
+
|
|
28
|
+
// Custom rules
|
|
29
|
+
await client.rulesets.create({
|
|
30
|
+
zone_id: process.env.ZONE_ID,
|
|
31
|
+
kind: 'zone',
|
|
32
|
+
phase: 'http_request_firewall_custom',
|
|
33
|
+
name: 'Custom WAF',
|
|
34
|
+
rules: [
|
|
35
|
+
{ action: 'block', expression: 'cf.waf.score gt 50', enabled: true },
|
|
36
|
+
{ action: 'challenge', expression: 'http.request.uri.path eq "/admin"', enabled: true },
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Managed ruleset
|
|
41
|
+
await client.rulesets.create({
|
|
42
|
+
zone_id: process.env.ZONE_ID,
|
|
43
|
+
phase: 'http_request_firewall_managed',
|
|
44
|
+
rules: [{
|
|
45
|
+
action: 'execute',
|
|
46
|
+
action_parameters: { id: 'efb7b8c949ac4650a09736fc376e9aee' },
|
|
47
|
+
expression: 'true',
|
|
48
|
+
}],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Rate limiting
|
|
52
|
+
await client.rulesets.create({
|
|
53
|
+
zone_id: process.env.ZONE_ID,
|
|
54
|
+
phase: 'http_ratelimit',
|
|
55
|
+
rules: [{
|
|
56
|
+
action: 'block',
|
|
57
|
+
expression: 'http.request.uri.path starts_with "/api"',
|
|
58
|
+
action_parameters: {
|
|
59
|
+
ratelimit: {
|
|
60
|
+
characteristics: ['cf.colo.id', 'ip.src'],
|
|
61
|
+
period: 60,
|
|
62
|
+
requests_per_period: 100,
|
|
63
|
+
mitigation_timeout: 600,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
}],
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Terraform Configuration
|
|
71
|
+
|
|
72
|
+
```hcl
|
|
73
|
+
provider "cloudflare" {
|
|
74
|
+
api_token = var.cloudflare_api_token
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
resource "cloudflare_ruleset" "waf_custom" {
|
|
78
|
+
zone_id = var.zone_id
|
|
79
|
+
kind = "zone"
|
|
80
|
+
phase = "http_request_firewall_custom"
|
|
81
|
+
|
|
82
|
+
rules {
|
|
83
|
+
action = "block"
|
|
84
|
+
expression = "cf.waf.score gt 50"
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Managed Ruleset & Rate Limiting**:
|
|
90
|
+
```hcl
|
|
91
|
+
resource "cloudflare_ruleset" "waf_managed" {
|
|
92
|
+
zone_id = var.zone_id
|
|
93
|
+
name = "Managed Ruleset"
|
|
94
|
+
kind = "zone"
|
|
95
|
+
phase = "http_request_firewall_managed"
|
|
96
|
+
|
|
97
|
+
rules {
|
|
98
|
+
action = "execute"
|
|
99
|
+
action_parameters {
|
|
100
|
+
id = "efb7b8c949ac4650a09736fc376e9aee"
|
|
101
|
+
overrides {
|
|
102
|
+
rules {
|
|
103
|
+
id = "5de7edfa648c4d6891dc3e7f84534ffa"
|
|
104
|
+
action = "log"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
expression = "true"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
resource "cloudflare_ruleset" "rate_limiting" {
|
|
113
|
+
zone_id = var.zone_id
|
|
114
|
+
phase = "http_ratelimit"
|
|
115
|
+
|
|
116
|
+
rules {
|
|
117
|
+
action = "block"
|
|
118
|
+
expression = "http.request.uri.path starts_with \"/api\""
|
|
119
|
+
ratelimit {
|
|
120
|
+
characteristics = ["cf.colo.id", "ip.src"]
|
|
121
|
+
period = 60
|
|
122
|
+
requests_per_period = 100
|
|
123
|
+
mitigation_timeout = 600
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Pulumi Configuration
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import * as cloudflare from '@pulumi/cloudflare';
|
|
133
|
+
|
|
134
|
+
const zoneId = 'zone_id';
|
|
135
|
+
|
|
136
|
+
// Custom rules
|
|
137
|
+
const wafCustom = new cloudflare.Ruleset('waf-custom', {
|
|
138
|
+
zoneId,
|
|
139
|
+
phase: 'http_request_firewall_custom',
|
|
140
|
+
rules: [
|
|
141
|
+
{ action: 'block', expression: 'cf.waf.score gt 50', enabled: true },
|
|
142
|
+
{ action: 'challenge', expression: 'http.request.uri.path eq "/admin"', enabled: true },
|
|
143
|
+
],
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// Managed ruleset
|
|
147
|
+
const wafManaged = new cloudflare.Ruleset('waf-managed', {
|
|
148
|
+
zoneId,
|
|
149
|
+
phase: 'http_request_firewall_managed',
|
|
150
|
+
rules: [{
|
|
151
|
+
action: 'execute',
|
|
152
|
+
actionParameters: { id: 'efb7b8c949ac4650a09736fc376e9aee' },
|
|
153
|
+
expression: 'true',
|
|
154
|
+
}],
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Rate limiting
|
|
158
|
+
const rateLimiting = new cloudflare.Ruleset('rate-limiting', {
|
|
159
|
+
zoneId,
|
|
160
|
+
phase: 'http_ratelimit',
|
|
161
|
+
rules: [{
|
|
162
|
+
action: 'block',
|
|
163
|
+
expression: 'http.request.uri.path starts_with "/api"',
|
|
164
|
+
ratelimit: {
|
|
165
|
+
characteristics: ['cf.colo.id', 'ip.src'],
|
|
166
|
+
period: 60,
|
|
167
|
+
requestsPerPeriod: 100,
|
|
168
|
+
mitigationTimeout: 600,
|
|
169
|
+
},
|
|
170
|
+
}],
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Dashboard Configuration
|
|
175
|
+
|
|
176
|
+
1. Navigate to: **Security** > **WAF**
|
|
177
|
+
2. Select tab:
|
|
178
|
+
- **Managed rules** - Deploy/configure managed rulesets
|
|
179
|
+
- **Custom rules** - Create custom rules
|
|
180
|
+
- **Rate limiting rules** - Configure rate limits
|
|
181
|
+
3. Click **Deploy** or **Create rule**
|
|
182
|
+
|
|
183
|
+
**Testing**: Use Security Events to test expressions before deploying.
|
|
184
|
+
|
|
185
|
+
## Wrangler Integration
|
|
186
|
+
|
|
187
|
+
WAF configuration is zone-level (not Worker-specific). Configuration methods:
|
|
188
|
+
- Dashboard UI
|
|
189
|
+
- Cloudflare API via SDK
|
|
190
|
+
- Terraform/Pulumi (IaC)
|
|
191
|
+
|
|
192
|
+
**Workers benefit from WAF automatically** - no Worker code changes needed.
|
|
193
|
+
|
|
194
|
+
**Example: Query WAF API from Worker**:
|
|
195
|
+
```typescript
|
|
196
|
+
export default {
|
|
197
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
198
|
+
return fetch(`https://api.cloudflare.com/client/v4/zones/${env.ZONE_ID}/rulesets`, {
|
|
199
|
+
headers: { 'Authorization': `Bearer ${env.CF_API_TOKEN}` },
|
|
200
|
+
});
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
```
|