opencodekit 0.15.4 → 0.15.5
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/dist/index.js +1 -1
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
- package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
- package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
- package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
## REST API
|
|
2
|
+
|
|
3
|
+
**Base URL:** `https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{AUTORAG_NAME}`
|
|
4
|
+
|
|
5
|
+
**Note:** API endpoints still use `autorag` naming; functionality identical to AI Search
|
|
6
|
+
|
|
7
|
+
### Authentication
|
|
8
|
+
|
|
9
|
+
Create API token with permissions:
|
|
10
|
+
- `AI Search - Read`
|
|
11
|
+
- `AI Search Edit`
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -H "Authorization: Bearer {API_TOKEN}" \
|
|
15
|
+
-H "Content-Type: application/json"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### AI Search Endpoint
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{AUTORAG_NAME}/ai-search \
|
|
22
|
+
-H "Authorization: Bearer {API_TOKEN}" \
|
|
23
|
+
-H "Content-Type: application/json" \
|
|
24
|
+
-d '{
|
|
25
|
+
"query": "How do I configure caching?",
|
|
26
|
+
"model": "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
27
|
+
"system_prompt": "You are a technical documentation assistant.",
|
|
28
|
+
"rewrite_query": true,
|
|
29
|
+
"max_num_results": 10,
|
|
30
|
+
"ranking_options": {
|
|
31
|
+
"score_threshold": 0.3
|
|
32
|
+
},
|
|
33
|
+
"reranking": {
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"model": "@cf/baai/bge-reranker-base"
|
|
36
|
+
},
|
|
37
|
+
"stream": false,
|
|
38
|
+
"fil
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
### Configuration
|
|
2
|
+
|
|
3
|
+
**wrangler.toml:**
|
|
4
|
+
```toml
|
|
5
|
+
[ai]
|
|
6
|
+
binding = "AI"
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**wrangler.jsonc:**
|
|
10
|
+
```jsonc
|
|
11
|
+
{
|
|
12
|
+
"ai": {
|
|
13
|
+
"binding": "AI"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Code Patterns
|
|
19
|
+
|
|
20
|
+
#### AI Search with Generation
|
|
21
|
+
```typescript
|
|
22
|
+
// Generate AI response with retrieved context
|
|
23
|
+
const answer = await env.AI.autorag("my-autorag").aiSearch({
|
|
24
|
+
query: "How do I configure rate limits?",
|
|
25
|
+
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
26
|
+
rewrite_query: true,
|
|
27
|
+
max_num_results: 10,
|
|
28
|
+
ranking_options: {
|
|
29
|
+
score_threshold: 0.3
|
|
30
|
+
},
|
|
31
|
+
reranking: {
|
|
32
|
+
enabled: true,
|
|
33
|
+
model: "@cf/baai/bge-reranker-base"
|
|
34
|
+
},
|
|
35
|
+
stream: true
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Response includes: search_query, response, data[], has_more, next_page
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
#### Search Only (No Generation)
|
|
42
|
+
```typescript
|
|
43
|
+
// Retrieve relevant chunks without generation
|
|
44
|
+
const results = await env.AI.autorag("my-autorag").search({
|
|
45
|
+
query: "rate limiting configuration",
|
|
46
|
+
rewrite_query: true,
|
|
47
|
+
max_num_results: 5,
|
|
48
|
+
ranking_options: {
|
|
49
|
+
score_threshold: 0.4
|
|
50
|
+
},
|
|
51
|
+
reranking: {
|
|
52
|
+
enab
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
### Best Practices
|
|
2
|
+
- Keep files under size limits
|
|
3
|
+
- Use supported formats
|
|
4
|
+
- Maintain valid Service API token
|
|
5
|
+
- Clean up outdated content regularly
|
|
6
|
+
- Monitor Vectorize index limits
|
|
7
|
+
|
|
8
|
+
## Configuration via Dashboard
|
|
9
|
+
|
|
10
|
+
### 1. Create Instance
|
|
11
|
+
```
|
|
12
|
+
Dashboard → AI Search → Create
|
|
13
|
+
→ Choose data source (R2 bucket or Website)
|
|
14
|
+
→ Configure settings
|
|
15
|
+
→ Create
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 2. Monitor Indexing
|
|
19
|
+
```
|
|
20
|
+
AI Search → Select instance → Overview
|
|
21
|
+
View: indexing status, progress, stats
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 3. Test Queries
|
|
25
|
+
```
|
|
26
|
+
AI Search → Select instance → Playground
|
|
27
|
+
→ "Search with AI" or "Search"
|
|
28
|
+
→ Enter query
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 4. Get API Token
|
|
32
|
+
```
|
|
33
|
+
AI Search → Select instance → Use AI Search → API
|
|
34
|
+
→ Create API Token
|
|
35
|
+
→ Permissions: "AI Search - Read", "AI Search Edit"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 5. Connect to Application
|
|
39
|
+
```
|
|
40
|
+
AI Search → Select instance → Connect
|
|
41
|
+
C
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
## Common Use Cases
|
|
2
|
+
|
|
3
|
+
1. **Enterprise search**: Natural language search over company docs
|
|
4
|
+
2. **Customer support**: AI-powered chat with product documentation
|
|
5
|
+
3. **Knowledge bases**: Semantic search over technical content
|
|
6
|
+
4. **Multitenancy SaaS**: Per-tenant data isolation with folder filters
|
|
7
|
+
5. **Content discovery**: Finding relevant content across large datasets
|
|
8
|
+
|
|
9
|
+
## Workers Binding (Recommended)
|
|
10
|
+
|
|
11
|
+
### Configuration
|
|
12
|
+
|
|
13
|
+
**wrangler.toml:**
|
|
14
|
+
```toml
|
|
15
|
+
[ai]
|
|
16
|
+
binding = "AI"
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**wrangler.jsonc:**
|
|
20
|
+
```jsonc
|
|
21
|
+
{
|
|
22
|
+
"ai": {
|
|
23
|
+
"binding": "AI"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Code Patterns
|
|
29
|
+
|
|
30
|
+
#### AI Search with Generation
|
|
31
|
+
```typescript
|
|
32
|
+
// Generate AI response with retrieved context
|
|
33
|
+
const answer = await env.AI.autorag("my-autorag").aiSearch({
|
|
34
|
+
query: "How do I configure rate limits?",
|
|
35
|
+
model: "@cf/meta/llama-3.3-70b-instruct-fp8-fast",
|
|
36
|
+
rewrite_query: true,
|
|
37
|
+
max_num_results: 10,
|
|
38
|
+
ranking_options: {
|
|
39
|
+
score_threshold: 0.3
|
|
40
|
+
},
|
|
41
|
+
reranking: {
|
|
42
|
+
enabled: true,
|
|
43
|
+
model: "@cf/baai/bge-reranker-base"
|
|
44
|
+
},
|
|
45
|
+
stream: tr
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Cloudflare Workers Analytics Engine Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing unlimited-cardinality analytics at scale using Cloudflare Workers Analytics Engine. This skill covers ONLY Analytics Engine - NOT the broader Cloudflare platform....
|
|
4
|
+
|
|
5
|
+
## In This Reference
|
|
6
|
+
|
|
7
|
+
- **[configuration.md](./configuration.md)** - Setup, deployment, configuration
|
|
8
|
+
- **[api.md](./api.md)** - API endpoints, methods, interfaces
|
|
9
|
+
- **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
|
|
10
|
+
- **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
|
|
11
|
+
|
|
12
|
+
## See Also
|
|
13
|
+
|
|
14
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#### API Usage Tracking
|
|
2
|
+
|
|
3
|
+
```typescript
|
|
4
|
+
export default {
|
|
5
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
6
|
+
const url = new URL(request.url);
|
|
7
|
+
const customerId = request.headers.get("X-Customer-Id");
|
|
8
|
+
const startTime = Date.now();
|
|
9
|
+
|
|
10
|
+
// Handle request...
|
|
11
|
+
const response = await handleRequest(request);
|
|
12
|
+
const duration = Date.now() - startTime;
|
|
13
|
+
|
|
14
|
+
// Track API usage
|
|
15
|
+
env.API_USAGE.writeDataPoint({
|
|
16
|
+
blobs: [
|
|
17
|
+
url.pathname, // blob1: endpoint
|
|
18
|
+
request.method, // blob2: HTTP method
|
|
19
|
+
response.status.toString(), // blob3: status code
|
|
20
|
+
request.cf?.colo as string, // blob4: datacenter
|
|
21
|
+
request.cf?.country as string // blob5: country
|
|
22
|
+
],
|
|
23
|
+
doubles: [
|
|
24
|
+
duration, // double1: latency ms
|
|
25
|
+
1 // double2: request count (for summing)
|
|
26
|
+
],
|
|
27
|
+
indexes: [customerId || "anonymous"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
## Configuration
|
|
2
|
+
|
|
3
|
+
### Wrangler Setup
|
|
4
|
+
|
|
5
|
+
**wrangler.toml:**
|
|
6
|
+
```toml
|
|
7
|
+
[[analytics_engine_datasets]]
|
|
8
|
+
binding = "WEATHER"
|
|
9
|
+
dataset = "weather_data"
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
**wrangler.jsonc:**
|
|
13
|
+
```jsonc
|
|
14
|
+
{
|
|
15
|
+
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
16
|
+
"analytics_engine_datasets": [
|
|
17
|
+
{
|
|
18
|
+
"binding": "WEATHER",
|
|
19
|
+
"dataset": "weather_data"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Key Points:**
|
|
26
|
+
- Datasets are created automatically on first write - no manual dashboard setup needed
|
|
27
|
+
- `binding` = variable name accessible in Worker env
|
|
28
|
+
- `dataset` = logical table name (like SQL table - rows/columns should have consistent meaning)
|
|
29
|
+
- Multiple datasets can be defined per Worker
|
|
30
|
+
|
|
31
|
+
### TypeScript Types
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface Env {
|
|
35
|
+
WEATHER: AnalyticsEngineDataset;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// The binding exposes this interface
|
|
39
|
+
interface AnalyticsEngineDataset {
|
|
40
|
+
writeDataPoint(data: AnalyticsEngineDataPoint): void;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface AnalyticsEngineDataPoint {
|
|
44
|
+
blobs?: string[]; // Up to 20 strings (dimensions for grouping/filtering)
|
|
45
|
+
doubles?
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
### Common Use Cases
|
|
2
|
+
|
|
3
|
+
1. **Custom customer-facing analytics** - Expose analytics dashboards to your users
|
|
4
|
+
2. **Usage-based billing** - Track per-customer/per-feature usage for metered billing
|
|
5
|
+
3. **Service health monitoring** - Per-customer/per-user health metrics
|
|
6
|
+
4. **High-frequency instrumentation** - Add telemetry to hot code paths without performance impact
|
|
7
|
+
5. **Event tracking** - User actions, API calls, errors, performance metrics
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
|
|
11
|
+
### Wrangler Setup
|
|
12
|
+
|
|
13
|
+
**wrangler.toml:**
|
|
14
|
+
```toml
|
|
15
|
+
[[analytics_engine_datasets]]
|
|
16
|
+
binding = "WEATHER"
|
|
17
|
+
dataset = "weather_data"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**wrangler.jsonc:**
|
|
21
|
+
```jsonc
|
|
22
|
+
{
|
|
23
|
+
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
24
|
+
"analytics_engine_datasets": [
|
|
25
|
+
{
|
|
26
|
+
"binding": "WEATHER",
|
|
27
|
+
"dataset": "weather_data"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Key Points:**
|
|
34
|
+
- Datasets are created automatically on first write - no manual dashboard setup needed
|
|
35
|
+
- `binding` = variable name accessible in Worker env
|
|
36
|
+
- `dataset` = logical table name (like SQL table - r
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Cloudflare API Integration Skill Reference
|
|
2
|
+
|
|
3
|
+
Guide for working with Cloudflare's REST API - covering authentication, SDK usage, common patterns, and API categories.
|
|
4
|
+
|
|
5
|
+
## When to Use This Skill
|
|
6
|
+
|
|
7
|
+
Use when working with:
|
|
8
|
+
- Cloudflare API authentication and tokens
|
|
9
|
+
- Official Cloudflare SDKs (TypeScript, Python, Go)
|
|
10
|
+
- Zone management, DNS, Workers, o...
|
|
11
|
+
|
|
12
|
+
## In This Reference
|
|
13
|
+
|
|
14
|
+
- **[configuration.md](./configuration.md)** - Setup, deployment, configuration
|
|
15
|
+
- **[api.md](./api.md)** - API endpoints, methods, interfaces
|
|
16
|
+
- **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
|
|
17
|
+
- **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
|
|
18
|
+
|
|
19
|
+
## See Also
|
|
20
|
+
|
|
21
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
### API Token (Recommended)
|
|
2
|
+
|
|
3
|
+
**Create token**: Dashboard → My Profile → API Tokens → Create Token
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# Environment variable
|
|
7
|
+
export CLOUDFLARE_API_TOKEN='your-token-here'
|
|
8
|
+
|
|
9
|
+
# curl
|
|
10
|
+
curl "https://api.cloudflare.com/client/v4/zones" \
|
|
11
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Token scopes**: Always use minimal permissions
|
|
15
|
+
- Zone-specific vs account-level
|
|
16
|
+
- Read vs edit permissions
|
|
17
|
+
- Time-limited tokens for CI/CD
|
|
18
|
+
|
|
19
|
+
### API Key (Legacy - Not Recommended)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl "https://api.cloudflare.com/client/v4/zones" \
|
|
23
|
+
--header "X-Auth-Email: user@example.com" \
|
|
24
|
+
--header "X-Auth-Key: $CLOUDFLARE_API_KEY"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Limitations**:
|
|
28
|
+
- Full account access (insecure)
|
|
29
|
+
- Cannot scope permissions
|
|
30
|
+
- No expiration
|
|
31
|
+
- Use tokens instead
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Wrangler CLI Integration
|
|
2
|
+
|
|
3
|
+
Wrangler uses Cloudflare API internally:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# Configure authentication
|
|
7
|
+
wrangler login
|
|
8
|
+
# Or
|
|
9
|
+
export CLOUDFLARE_API_TOKEN='token'
|
|
10
|
+
|
|
11
|
+
# Common commands that use API
|
|
12
|
+
wrangler deploy # Uploads worker via API
|
|
13
|
+
wrangler kv:key put # KV operations
|
|
14
|
+
wrangler r2 bucket create # R2 operations
|
|
15
|
+
wrangler d1 execute # D1 operations
|
|
16
|
+
wrangler pages deploy # Pages operations
|
|
17
|
+
|
|
18
|
+
# Get API configuration
|
|
19
|
+
wrangler whoami # Shows authenticated user
|
|
20
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## Best Practices
|
|
2
|
+
|
|
3
|
+
### Security
|
|
4
|
+
|
|
5
|
+
- **Never commit tokens**: Use environment variables
|
|
6
|
+
- **Minimal permissions**: Create scoped API tokens
|
|
7
|
+
- **Rotate tokens**: Regularly refresh tokens
|
|
8
|
+
- **Use token expiration**: Set expiry dates
|
|
9
|
+
- **Audit token usage**: Monitor API logs
|
|
10
|
+
|
|
11
|
+
### Performance
|
|
12
|
+
|
|
13
|
+
- **Batch operations**: Group related API calls
|
|
14
|
+
- **Use pagination wisely**: Don't fetch all data if unnecessary
|
|
15
|
+
- **Cache responses**: Store rarely-changing data locally
|
|
16
|
+
- **Parallel requests**: Use `Promise.all()` for independent operations
|
|
17
|
+
- **Handle rate limits**: Implement exponential backoff
|
|
18
|
+
|
|
19
|
+
### Code organization
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Create reusable client instance
|
|
23
|
+
export const cfClient = new Cloudflare({
|
|
24
|
+
apiToken: process.env.CLOUDFLARE_API_TOKEN,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Wrap common operations
|
|
28
|
+
export async function
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
## Common API Categories
|
|
2
|
+
|
|
3
|
+
### Zone Management
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// List zones (with filtering)
|
|
7
|
+
const zones = await client.zones.list({
|
|
8
|
+
account: { id: 'account-id' },
|
|
9
|
+
status: 'active',
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
// Create zone
|
|
13
|
+
const zone = await client.zones.create({
|
|
14
|
+
account: { id: 'account-id' },
|
|
15
|
+
name: 'example.com',
|
|
16
|
+
type: 'full', // or 'partial'
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Update zone
|
|
20
|
+
await client.zones.edit('zone-id', {
|
|
21
|
+
paused: false,
|
|
22
|
+
vanity_name_servers: ['ns1.example.com', 'ns2.example.com'],
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Delete zone
|
|
26
|
+
await client.zones.delete('zone-id');
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### DNS Management
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// Create record
|
|
33
|
+
await client.dns.records.create({
|
|
34
|
+
zone_id: 'zone-id',
|
|
35
|
+
type: 'A' | 'AAAA' | 'CNAME' | 'TXT' | 'MX' | 'SRV',
|
|
36
|
+
name: 'subdomain.example.com',
|
|
37
|
+
content: '192.0.2.1',
|
|
38
|
+
ttl: 1, // 1 = auto, or specific seconds
|
|
39
|
+
proxied: true, // Orange cloud
|
|
40
|
+
priority: 10, // For MX/SRV records
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// List records (with filtering)
|
|
44
|
+
const records = await client.dns.records.list({
|
|
45
|
+
zone_id: 'zone-id',
|
|
46
|
+
type: 'A',
|
|
47
|
+
name: 'exa
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Cloudflare API Shield Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for API Shield - comprehensive API security suite for discovery, protection, and monitoring.
|
|
4
|
+
|
|
5
|
+
## In This Reference
|
|
6
|
+
|
|
7
|
+
- **[configuration.md](./configuration.md)** - Setup, session identifiers, rules, token/mTLS configs
|
|
8
|
+
- **[api.md](./api.md)** - Endpoint management, discovery, validation APIs, GraphQL operations
|
|
9
|
+
- **[patterns.md](./patterns.md)** - Common patterns, progressive rollout, OWASP mappings, workflows
|
|
10
|
+
- **[gotchas.md](./gotchas.md)** - Troubleshooting, false positives, performance, best practices
|
|
11
|
+
|
|
12
|
+
## Quick Start
|
|
13
|
+
|
|
14
|
+
API Shield: Enterprise-grade API security (Discovery, Schema Validation, JWT, mTLS, Sequence Enforcement). Available as Enterprise add-on with preview access.
|
|
15
|
+
|
|
16
|
+
## See Also
|
|
17
|
+
|
|
18
|
+
- [API Shield Docs](https://developers.cloudflare.com/api-shield/)
|
|
19
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/api_gateway/)
|
|
20
|
+
- [OWASP API Security Top 10](https://owasp.org/www-project-api-security/)
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
|
41
|
+
|
|
42
|
+
API client:
|
|
43
|
+
```js
|
|
44
|
+
export default {
|
|
45
|
+
async fetch(req, env) {
|
|
46
|
+
const jwt = await generateJWT(env.JWT_SECRET);
|
|
47
|
+
return fetch('https://api.example.com/data', {
|
|
48
|
+
headers: {'Authorization': `Bearer ${jwt}`, 'Content-Type': 'application/json'}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Dynamic JWKS:
|
|
55
|
+
```js
|
|
56
|
+
export default {
|
|
57
|
+
async scheduled(event, env) {
|
|
58
|
+
const jwks = await (await fetch('https://auth.example.com/.well-known/jwks.json')).json();
|
|
59
|
+
await fetch(`https://api.cloudflare.com/client/v4/zones/${env.ZONE_ID}/api_gateway/token_validation/${env.CONFIG_ID}`, {
|
|
60
|
+
method: 'PATCH',
|
|
61
|
+
headers: {'Authorization': `Bearer ${env.CF_API_TOKEN}`, 'Content-Type': 'application/json'},
|
|
62
|
+
body: JSON.stringify({jwks: JSON.stringify(jwks)})
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Firewall Fields
|
|
69
|
+
|
|
70
|
+
```js
|
|
71
|
+
cf.api_gateway.auth_id_present // Session ID present
|
|
72
|
+
cf.api_gateway.request_violates_schema // Schema violation
|
|
73
|
+
cf.api_gateway.fallthrough_triggered // No endpoint match
|
|
74
|
+
cf.api_gateway.jwt_claims_valid // JWT valid
|
|
75
|
+
lookup_json_string(http.request.jwt.claims["{config_id}"][0], "claim_name")
|
|
76
|
+
cf.tls_client_auth.cert_verified // mTLS cert valid
|
|
77
|
+
cf.tls_client_auth.cert_fingerprint_sha256
|
|
78
|
+
```
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## Schema Validation Setup
|
|
4
|
+
|
|
5
|
+
**Upload schema (Dashboard):**
|
|
6
|
+
```
|
|
7
|
+
Security > API Shield > Schema validation > Add validation
|
|
8
|
+
- Upload .yml/.yaml/.json (OpenAPI v3.0)
|
|
9
|
+
- Endpoints auto-added to Endpoint Management
|
|
10
|
+
- Action: Log/Block/None
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**Change default action:**
|
|
14
|
+
```
|
|
15
|
+
Security > API Shield > Settings > Schema validation
|
|
16
|
+
Per-endpoint: Filter → ellipses → Change action
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Fallthrough rule** (catch-all unknown endpoints):
|
|
20
|
+
```
|
|
21
|
+
Security > API Shield > Settings > Fallthrough > Use Template
|
|
22
|
+
- Select hostnames
|
|
23
|
+
- Create rule with cf.api_gateway.fallthrough_triggered
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Body inspection:** Supports `application/json`, `*/*`, `application/*`. Disable origin MIME sniffing to prevent bypasses.
|
|
27
|
+
|
|
28
|
+
## JWT Validation
|
|
29
|
+
|
|
30
|
+
**Setup token config:**
|
|
31
|
+
```
|
|
32
|
+
Security > API Shield > Settings > JWT Settings > Add configuration
|
|
33
|
+
- Name: "Auth0 JWT Config"
|
|
34
|
+
- Location: Header/Cookie + name (e.g., "Authorization")
|
|
35
|
+
- JWKS: Paste public keys from IdP
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Create validation rule:**
|
|
39
|
+
```
|
|
40
|
+
Security > API Shield > API Rules > Add rule
|
|
41
|
+
- Hostname: api.example.com
|
|
42
|
+
- Deselect endpoints to ignore
|
|
43
|
+
- Token config: Select config
|
|
44
|
+
- Enforce presence: Ignore or Mark as non-compliant
|
|
45
|
+
- Action: Log/Block/Challenge
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Rate limit by JWT claim:**
|
|
49
|
+
```wirefilter
|
|
50
|
+
lookup_json_string(http.request.jwt.claims["{config_id}"][0], "sub")
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Special cases:**
|
|
54
|
+
- Two JWTs, different IdPs: Create 2 configs, select both, "Validate all"
|
|
55
|
+
- IdP migration: 2 configs + 2 rules, adjust actions per state
|
|
56
|
+
- Bearer prefix: API Shield handles with/without
|
|
57
|
+
- Nested claims: Dot notation `user.email`
|
|
58
|
+
|
|
59
|
+
## Mutual TLS (mTLS)
|
|
60
|
+
|
|
61
|
+
**Setup:**
|
|
62
|
+
```
|
|
63
|
+
SSL/TLS > Client Certificates > Create Certificate
|
|
64
|
+
- Generate CF-managed CA (all plans)
|
|
65
|
+
- Upload custom CA (Enterprise, max 5)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Configure mTLS rule:**
|
|
69
|
+
```
|
|
70
|
+
Security > API Shield > mTLS
|
|
71
|
+
- Select hostname(s)
|
|
72
|
+
- Choose certificate(s)
|
|
73
|
+
- Action: Block/Log/Challenge
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Test:**
|
|
77
|
+
```bash
|
|
78
|
+
openssl req -x509 -newkey rsa:4096 -keyout client-key.pem -out client-cert.pem -days 365
|
|
79
|
+
curl https://api.example.com/endpoint --cert client-cert.pem --key client-key.pem
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Session Identifiers
|
|
83
|
+
|
|
84
|
+
Critical for Sequence Mitigation + analytics. Configure header/cookie that uniquely IDs API users.
|
|
85
|
+
|
|
86
|
+
**Examples:** JWT sub claim, session token, API key, custom user ID header
|
|
87
|
+
|
|
88
|
+
**Configure:**
|
|
89
|
+
```
|
|
90
|
+
Security > API Shield > Settings > Session Identifiers
|
|
91
|
+
- Type: Header/Cookie
|
|
92
|
+
- Name: "X-User-ID" or "Authorization"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Terraform
|
|
96
|
+
|
|
97
|
+
```hcl
|
|
98
|
+
# Session identifier
|
|
99
|
+
resource "cloudflare_api_shield" "main" {
|
|
100
|
+
zone_id = var.zone_id
|
|
101
|
+
auth_id_characteristics {
|
|
102
|
+
type = "header"
|
|
103
|
+
name = "Authorization"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# Add endpoint
|
|
108
|
+
resource "cloudflare_api_shield_operation" "users_get" {
|
|
109
|
+
zone_id = var.zone_id
|
|
110
|
+
method = "GET"
|
|
111
|
+
host = "api.example.com"
|
|
112
|
+
endpoint = "/api/users/{id}"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# JWT validation rule
|
|
116
|
+
resource "cloudflare_ruleset" "jwt_validation" {
|
|
117
|
+
zone_id = var.zone_id
|
|
118
|
+
name = "API JWT Validation"
|
|
119
|
+
kind = "zone"
|
|
120
|
+
phase = "http_request_firewall_custom"
|
|
121
|
+
|
|
122
|
+
rules {
|
|
123
|
+
action = "block"
|
|
124
|
+
expression = "(http.host eq \"api.example.com\" and not cf.api_gateway.jwt_claims_valid)"
|
|
125
|
+
description = "Block invalid JWTs"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|