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,264 @@
|
|
|
1
|
+
# Cloudflare C3 (create-cloudflare) Skill
|
|
2
|
+
|
|
3
|
+
Expert guidance for using C3, the official CLI tool for scaffolding Cloudflare projects.
|
|
4
|
+
|
|
5
|
+
## What is C3?
|
|
6
|
+
|
|
7
|
+
C3 (`create-cloudflare`) is Cloudflare's CLI for project initialization. Creates Workers, Pages, and full-stack applications with templates, TypeScript, and instant deployment.
|
|
8
|
+
|
|
9
|
+
## Installation & Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# NPM
|
|
13
|
+
npm create cloudflare@latest
|
|
14
|
+
|
|
15
|
+
# Yarn
|
|
16
|
+
yarn create cloudflare
|
|
17
|
+
|
|
18
|
+
# PNPM
|
|
19
|
+
pnpm create cloudflare@latest
|
|
20
|
+
|
|
21
|
+
# With project name
|
|
22
|
+
npm create cloudflare@latest my-app
|
|
23
|
+
|
|
24
|
+
# With template
|
|
25
|
+
npm create cloudflare@latest -- --template=cloudflare/templates/workers-template
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Common Templates
|
|
29
|
+
|
|
30
|
+
### Workers
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Basic Worker
|
|
34
|
+
npm create cloudflare@latest -- --template=worker
|
|
35
|
+
|
|
36
|
+
# TypeScript Worker
|
|
37
|
+
npm create cloudflare@latest -- --template=worker-typescript
|
|
38
|
+
|
|
39
|
+
# Durable Objects
|
|
40
|
+
npm create cloudflare@latest -- --template=hello-world-do-template
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Full-Stack Apps
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Next.js
|
|
47
|
+
npm create cloudflare@latest -- --template=next-starter-template
|
|
48
|
+
|
|
49
|
+
# React Router
|
|
50
|
+
npm create cloudflare@latest -- --template=react-router-starter-template
|
|
51
|
+
|
|
52
|
+
# Remix
|
|
53
|
+
npm create cloudflare@latest -- --template=remix-starter-template
|
|
54
|
+
|
|
55
|
+
# Astro
|
|
56
|
+
npm create cloudflare@latest -- --template=astro-blog-starter-template
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Database & Storage
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# D1 SQLite
|
|
63
|
+
npm create cloudflare@latest -- --template=d1-template
|
|
64
|
+
|
|
65
|
+
# R2 Explorer
|
|
66
|
+
npm create cloudflare@latest -- --template=r2-explorer-template
|
|
67
|
+
|
|
68
|
+
# Postgres + Hyperdrive
|
|
69
|
+
npm create cloudflare@latest -- --template=postgres-hyperdrive-template
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### AI & ML
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Workers AI Chat
|
|
76
|
+
npm create cloudflare@latest -- --template=llm-chat-app-template
|
|
77
|
+
|
|
78
|
+
# Text-to-Image
|
|
79
|
+
npm create cloudflare@latest -- --template=text-to-image-template
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Real-time & Multiplayer
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Chat with Durable Objects
|
|
86
|
+
npm create cloudflare@latest -- --template=durable-chat-template
|
|
87
|
+
|
|
88
|
+
# Multiplayer Globe
|
|
89
|
+
npm create cloudflare@latest -- --template=multiplayer-globe-template
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Interactive Mode
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm create cloudflare@latest my-app
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
C3 prompts for:
|
|
99
|
+
1. Application type (Website/API/scheduled worker/etc.)
|
|
100
|
+
2. Framework choice (if applicable)
|
|
101
|
+
3. TypeScript preference
|
|
102
|
+
4. Git initialization
|
|
103
|
+
5. Deployment option
|
|
104
|
+
|
|
105
|
+
## Non-Interactive Mode
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm create cloudflare@latest my-worker \
|
|
109
|
+
--type=web-app \
|
|
110
|
+
--framework=next \
|
|
111
|
+
--ts \
|
|
112
|
+
--git \
|
|
113
|
+
--deploy
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Flags
|
|
117
|
+
|
|
118
|
+
- `--type` - Application type: `web-app`, `hello-world`, `pre-existing`, `remote-template`
|
|
119
|
+
- `--framework` - Framework: `next`, `remix`, `astro`, `react-router`, `solid`, `svelte`, etc.
|
|
120
|
+
- `--template` - GitHub template URL or path
|
|
121
|
+
- `--ts` / `--no-ts` - TypeScript
|
|
122
|
+
- `--git` / `--no-git` - Initialize git repo
|
|
123
|
+
- `--deploy` / `--no-deploy` - Deploy after creation
|
|
124
|
+
- `--open` - Open in browser after deploy
|
|
125
|
+
- `--existing-script` - Path to existing Worker script
|
|
126
|
+
|
|
127
|
+
## CI/CD Usage
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
# GitHub Actions
|
|
131
|
+
- name: Create Cloudflare Project
|
|
132
|
+
run: |
|
|
133
|
+
npm create cloudflare@latest my-app -- \
|
|
134
|
+
--type=web-app \
|
|
135
|
+
--framework=next \
|
|
136
|
+
--ts \
|
|
137
|
+
--no-git \
|
|
138
|
+
--no-deploy
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Custom Templates
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# From GitHub repo
|
|
145
|
+
npm create cloudflare@latest -- --template=user/repo
|
|
146
|
+
|
|
147
|
+
# From local path
|
|
148
|
+
npm create cloudflare@latest -- --template=../my-template
|
|
149
|
+
|
|
150
|
+
# From Cloudflare official templates
|
|
151
|
+
npm create cloudflare@latest -- --template=cloudflare/templates/workers-template
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Project Structure Created
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
my-app/
|
|
158
|
+
├── src/
|
|
159
|
+
│ └── index.ts # Worker entry point
|
|
160
|
+
├── wrangler.toml # Configuration
|
|
161
|
+
├── package.json
|
|
162
|
+
├── tsconfig.json
|
|
163
|
+
└── README.md
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Post-Creation
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
cd my-app
|
|
170
|
+
|
|
171
|
+
# Local development
|
|
172
|
+
npm run dev
|
|
173
|
+
|
|
174
|
+
# Deploy
|
|
175
|
+
npm run deploy
|
|
176
|
+
|
|
177
|
+
# Type check
|
|
178
|
+
npm run cf-typegen
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## wrangler.toml Configuration
|
|
182
|
+
|
|
183
|
+
C3 generates:
|
|
184
|
+
|
|
185
|
+
```toml
|
|
186
|
+
name = "my-app"
|
|
187
|
+
main = "src/index.ts"
|
|
188
|
+
compatibility_date = "2024-01-01"
|
|
189
|
+
|
|
190
|
+
# Bindings added based on template
|
|
191
|
+
[[kv_namespaces]]
|
|
192
|
+
binding = "MY_KV"
|
|
193
|
+
id = "..."
|
|
194
|
+
|
|
195
|
+
[[d1_databases]]
|
|
196
|
+
binding = "DB"
|
|
197
|
+
database_id = "..."
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Best Practices
|
|
201
|
+
|
|
202
|
+
1. **Use latest C3:** `npm create cloudflare@latest`
|
|
203
|
+
2. **Choose TypeScript** for type safety
|
|
204
|
+
3. **Enable git** for version control
|
|
205
|
+
4. **Review generated wrangler.toml** before first deploy
|
|
206
|
+
5. **Update dependencies** post-creation: `npm update`
|
|
207
|
+
|
|
208
|
+
## Common Workflows
|
|
209
|
+
|
|
210
|
+
### Quick Worker
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
npm create cloudflare@latest my-worker -- --type=hello-world --ts --deploy
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Full-Stack App with D1
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npm create cloudflare@latest my-app -- \
|
|
220
|
+
--template=react-router-starter-template \
|
|
221
|
+
--ts \
|
|
222
|
+
--git
|
|
223
|
+
cd my-app
|
|
224
|
+
npx wrangler d1 create my-db
|
|
225
|
+
# Add to wrangler.toml, then:
|
|
226
|
+
npm run deploy
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Convert Existing Project
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
cd existing-project
|
|
233
|
+
npm create cloudflare@latest . -- --existing-script=./dist/index.js
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Troubleshooting
|
|
237
|
+
|
|
238
|
+
### `npm create cloudflare failed`
|
|
239
|
+
|
|
240
|
+
- Ensure Node.js 16.13+
|
|
241
|
+
- Clear npm cache: `npm cache clean --force`
|
|
242
|
+
- Try with `npx`: `npx create-cloudflare@latest`
|
|
243
|
+
|
|
244
|
+
### Template not found
|
|
245
|
+
|
|
246
|
+
- Verify template name/path
|
|
247
|
+
- Check network connection
|
|
248
|
+
- Use full GitHub URL: `https://github.com/user/repo`
|
|
249
|
+
|
|
250
|
+
### Deployment fails
|
|
251
|
+
|
|
252
|
+
- Check Cloudflare account authentication: `wrangler login`
|
|
253
|
+
- Verify `wrangler.toml` configuration
|
|
254
|
+
- Check for naming conflicts in dashboard
|
|
255
|
+
|
|
256
|
+
## Reference
|
|
257
|
+
|
|
258
|
+
- [C3 GitHub](https://github.com/cloudflare/workers-sdk/tree/main/packages/create-cloudflare)
|
|
259
|
+
- [Templates Repository](https://github.com/cloudflare/templates)
|
|
260
|
+
- [Workers Docs](https://developers.cloudflare.com/workers/)
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
This skill focuses exclusively on C3 CLI tool usage. For Workers development, see `cloudflare-workers` skill.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Cloudflare Cache Reserve
|
|
2
|
+
|
|
3
|
+
**Persistent cache storage built on R2 for long-term content retention**
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cache Reserve is Cloudflare's persistent, large-scale cache storage layer built on R2. It acts as the ultimate upper-tier cache, storing cacheable content for extended periods (30+ days) to maximize cache hits, reduce origin egress fees, and shield origins from repeated requests for long-tail content.
|
|
8
|
+
|
|
9
|
+
## Core Concepts
|
|
10
|
+
|
|
11
|
+
### What is Cache Reserve?
|
|
12
|
+
|
|
13
|
+
- **Persistent storage layer**: Built on R2, sits above tiered cache hierarchy
|
|
14
|
+
- **Long-term retention**: 30-day default retention, extended on each access
|
|
15
|
+
- **Automatic operation**: Works seamlessly with existing CDN, no code changes required
|
|
16
|
+
- **Origin shielding**: Dramatically reduces origin egress by serving cached content longer
|
|
17
|
+
- **Usage-based pricing**: Pay only for storage + read/write operations
|
|
18
|
+
|
|
19
|
+
### Cache Hierarchy
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Visitor Request
|
|
23
|
+
↓
|
|
24
|
+
Lower-Tier Cache (closest to visitor)
|
|
25
|
+
↓ (on miss)
|
|
26
|
+
Upper-Tier Cache (closest to origin)
|
|
27
|
+
↓ (on miss)
|
|
28
|
+
Cache Reserve (R2 persistent storage)
|
|
29
|
+
↓ (on miss)
|
|
30
|
+
Origin Server
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### How It Works
|
|
34
|
+
|
|
35
|
+
1. **On cache miss**: Content fetched from origin �� written to Cache Reserve + edge caches simultaneously
|
|
36
|
+
2. **On edge eviction**: Content may be evicted from edge cache but remains in Cache Reserve
|
|
37
|
+
3. **On subsequent request**: If edge cache misses but Cache Reserve hits → content restored to edge caches
|
|
38
|
+
4. **Retention**: Assets remain in Cache Reserve for 30 days since last access (configurable via TTL)
|
|
39
|
+
|
|
40
|
+
## Asset Eligibility
|
|
41
|
+
|
|
42
|
+
Cache Reserve only stores assets meeting **ALL** criteria:
|
|
43
|
+
|
|
44
|
+
- Cacheable per Cloudflare's standard rules
|
|
45
|
+
- Minimum 10-hour TTL (36000 seconds)
|
|
46
|
+
- `Content-Length` header present
|
|
47
|
+
- Original files only (not transformed images)
|
|
48
|
+
|
|
49
|
+
### Not Eligible
|
|
50
|
+
|
|
51
|
+
- Assets with TTL < 10 hours
|
|
52
|
+
- Responses without `Content-Length` header
|
|
53
|
+
- Image transformation variants (original images are eligible)
|
|
54
|
+
- Responses with `Set-Cookie` headers
|
|
55
|
+
- Responses with `Vary: *` header
|
|
56
|
+
- Assets from R2 public buckets on same zone
|
|
57
|
+
- O2O (Orange-to-Orange) setup requests
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Enable via Dashboard
|
|
63
|
+
https://dash.cloudflare.com/caching/cache-reserve
|
|
64
|
+
# Click "Enable Storage Sync" or "Purchase" button
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Prerequisites:**
|
|
68
|
+
- Paid Cache Reserve plan required
|
|
69
|
+
- Tiered Cache strongly recommended
|
|
70
|
+
|
|
71
|
+
## Essential Commands
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
# Check Cache Reserve status
|
|
75
|
+
curl -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/cache/cache_reserve" \
|
|
76
|
+
-H "Authorization: Bearer $API_TOKEN"
|
|
77
|
+
|
|
78
|
+
# Enable Cache Reserve
|
|
79
|
+
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/cache/cache_reserve" \
|
|
80
|
+
-H "Authorization: Bearer $API_TOKEN" \
|
|
81
|
+
-H "Content-Type: application/json" \
|
|
82
|
+
-d '{"value": "on"}'
|
|
83
|
+
|
|
84
|
+
# Check asset cache status
|
|
85
|
+
curl -I https://example.com/asset.jpg | grep -i cache
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## See Also
|
|
89
|
+
|
|
90
|
+
- [Configuration](./configuration.md) - Setup, API, and Cache Rules
|
|
91
|
+
- [API Reference](./api.md) - Purging, monitoring, and management APIs
|
|
92
|
+
- [Patterns](./patterns.md) - Best practices and architecture patterns
|
|
93
|
+
- [Gotchas](./gotchas.md) - Common issues, troubleshooting, limits
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Cache Reserve API
|
|
2
|
+
|
|
3
|
+
## Workers Integration
|
|
4
|
+
|
|
5
|
+
Cache Reserve works automatically with Workers Cache API, but requires specific patterns:
|
|
6
|
+
|
|
7
|
+
### Standard Fetch (Recommended)
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
// Cache Reserve works automatically via standard fetch
|
|
11
|
+
export default {
|
|
12
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
13
|
+
// Standard fetch uses Cache Reserve automatically
|
|
14
|
+
return await fetch(request);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Cache API Limitations
|
|
20
|
+
|
|
21
|
+
**IMPORTANT**: `cache.put()` is **NOT compatible** with Cache Reserve or Tiered Cache.
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// ❌ WRONG: cache.put() bypasses Cache Reserve
|
|
25
|
+
const cache = caches.default;
|
|
26
|
+
let response = await cache.match(request);
|
|
27
|
+
if (!response) {
|
|
28
|
+
response = await fetch(request);
|
|
29
|
+
await cache.put(request, response.clone()); // Bypasses Cache Reserve!
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// ✅ CORRECT: Use standard fetch for Cache Reserve compatibility
|
|
33
|
+
return await fetch(request);
|
|
34
|
+
|
|
35
|
+
// ✅ CORRECT: Use Cache API only for custom cache namespaces
|
|
36
|
+
const customCache = await caches.open('my-custom-cache');
|
|
37
|
+
let response = await customCache.match(request);
|
|
38
|
+
if (!response) {
|
|
39
|
+
response = await fetch(request);
|
|
40
|
+
await customCache.put(request, response.clone()); // Custom cache OK
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Purging and Cache Management
|
|
45
|
+
|
|
46
|
+
### Purge by URL (Instant)
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// Purge specific URL from Cache Reserve immediately
|
|
50
|
+
const purgeCacheReserveByURL = async (
|
|
51
|
+
zoneId: string,
|
|
52
|
+
apiToken: string,
|
|
53
|
+
urls: string[]
|
|
54
|
+
) => {
|
|
55
|
+
const response = await fetch(
|
|
56
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/purge_cache`,
|
|
57
|
+
{
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: {
|
|
60
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
61
|
+
'Content-Type': 'application/json',
|
|
62
|
+
},
|
|
63
|
+
body: JSON.stringify({ files: urls })
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
return await response.json();
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Example usage
|
|
70
|
+
await purgeCacheReserveByURL('zone123', 'token456', [
|
|
71
|
+
'https://example.com/image.jpg',
|
|
72
|
+
'https://example.com/video.mp4'
|
|
73
|
+
]);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Purge by Tag/Host/Prefix (Revalidation)
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Purge by cache tag - forces revalidation, not immediate removal
|
|
80
|
+
const purgeCacheReserveByTag = async (
|
|
81
|
+
zoneId: string,
|
|
82
|
+
apiToken: string,
|
|
83
|
+
tags: string[]
|
|
84
|
+
) => {
|
|
85
|
+
const response = await fetch(
|
|
86
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/purge_cache`,
|
|
87
|
+
{
|
|
88
|
+
method: 'POST',
|
|
89
|
+
headers: {
|
|
90
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
91
|
+
'Content-Type': 'application/json',
|
|
92
|
+
},
|
|
93
|
+
body: JSON.stringify({ tags })
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
return await response.json();
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// Note: Assets remain in Cache Reserve but will revalidate on next request
|
|
100
|
+
// Storage costs continue until retention TTL expires
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Important purge behavior differences:**
|
|
104
|
+
|
|
105
|
+
- **Purge by URL**: Immediately removes from Cache Reserve + edge cache
|
|
106
|
+
- **Purge by tag/host/prefix**: Forces revalidation but assets remain in storage
|
|
107
|
+
- **Storage costs**: Continue for tag/host/prefix purges until TTL expiry
|
|
108
|
+
|
|
109
|
+
### Clear All Cache Reserve Data
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
// Clear ALL Cache Reserve data (requires Cache Reserve to be OFF)
|
|
113
|
+
const clearAllCacheReserve = async (zoneId: string, apiToken: string) => {
|
|
114
|
+
// Step 1: Verify Cache Reserve is off
|
|
115
|
+
const statusResponse = await fetch(
|
|
116
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/cache/cache_reserve`,
|
|
117
|
+
{ method: 'GET', headers: { 'Authorization': `Bearer ${apiToken}` } }
|
|
118
|
+
);
|
|
119
|
+
const status = await statusResponse.json();
|
|
120
|
+
|
|
121
|
+
if (status.result.value !== 'off') {
|
|
122
|
+
throw new Error('Cache Reserve must be OFF before clearing data');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Step 2: Clear Cache Reserve data
|
|
126
|
+
const clearResponse = await fetch(
|
|
127
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/cache/cache_reserve_clear`,
|
|
128
|
+
{ method: 'POST', headers: { 'Authorization': `Bearer ${apiToken}` } }
|
|
129
|
+
);
|
|
130
|
+
return await clearResponse.json();
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// Check clear status
|
|
134
|
+
const getClearStatus = async (zoneId: string, apiToken: string) => {
|
|
135
|
+
const response = await fetch(
|
|
136
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/cache/cache_reserve_clear`,
|
|
137
|
+
{ method: 'GET', headers: { 'Authorization': `Bearer ${apiToken}` } }
|
|
138
|
+
);
|
|
139
|
+
return await response.json();
|
|
140
|
+
// Returns: { state: "In-progress" | "Completed", start_ts: "..." }
|
|
141
|
+
};
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Clear process:**
|
|
145
|
+
1. Disable Cache Reserve (`value: 'off'`)
|
|
146
|
+
2. Call cache_reserve_clear endpoint
|
|
147
|
+
3. Deletion takes up to 24 hours
|
|
148
|
+
4. Re-enable Cache Reserve when ready
|
|
149
|
+
|
|
150
|
+
## Monitoring and Analytics
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// Dashboard: egress savings, requests served (hits/misses), storage, operations (A/B)
|
|
154
|
+
// Logpush field: CacheReserveUsed (boolean) - filter for Cache Reserve hits
|
|
155
|
+
|
|
156
|
+
// Query Cache Reserve hits
|
|
157
|
+
const query = `
|
|
158
|
+
SELECT ClientRequestHost, COUNT(*) as requests, SUM(EdgeResponseBytes) as bytes
|
|
159
|
+
FROM http_requests WHERE CacheReserveUsed = true
|
|
160
|
+
GROUP BY ClientRequestHost ORDER BY requests DESC
|
|
161
|
+
`;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Pricing
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
// Storage: $0.015/GB-month | Class A (writes): $4.50/M | Class B (reads): $0.36/M
|
|
168
|
+
// Cache miss: 1A + 1B | Cache hit: 1B | Assets >1GB: proportionally more ops
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## See Also
|
|
172
|
+
|
|
173
|
+
- [README](./README.md) - Overview and core concepts
|
|
174
|
+
- [Configuration](./configuration.md) - Setup and Cache Rules
|
|
175
|
+
- [Patterns](./patterns.md) - Best practices and optimization
|
|
176
|
+
- [Gotchas](./gotchas.md) - Common issues and troubleshooting
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Cache Reserve Configuration
|
|
2
|
+
|
|
3
|
+
## Dashboard Setup
|
|
4
|
+
|
|
5
|
+
**Minimum steps to enable:**
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Navigate to dashboard
|
|
9
|
+
https://dash.cloudflare.com/caching/cache-reserve
|
|
10
|
+
|
|
11
|
+
# Click "Enable Storage Sync" or "Purchase" button
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Prerequisites:**
|
|
15
|
+
- Paid Cache Reserve plan required
|
|
16
|
+
- Tiered Cache strongly recommended (Cache Reserve checks for this)
|
|
17
|
+
|
|
18
|
+
## API Configuration
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// Enable Cache Reserve
|
|
22
|
+
const enableCacheReserve = async (zoneId: string, apiToken: string) => {
|
|
23
|
+
const response = await fetch(
|
|
24
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/cache/cache_reserve`,
|
|
25
|
+
{
|
|
26
|
+
method: 'PATCH',
|
|
27
|
+
headers: {
|
|
28
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({ value: 'on' })
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
return await response.json();
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// Check Cache Reserve status
|
|
38
|
+
const getCacheReserveStatus = async (zoneId: string, apiToken: string) => {
|
|
39
|
+
const response = await fetch(
|
|
40
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/cache/cache_reserve`,
|
|
41
|
+
{
|
|
42
|
+
method: 'GET',
|
|
43
|
+
headers: { 'Authorization': `Bearer ${apiToken}` }
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
return await response.json();
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Required API Token Permissions
|
|
51
|
+
|
|
52
|
+
- `Zone Settings Read`
|
|
53
|
+
- `Zone Settings Write`
|
|
54
|
+
- `Zone Read`
|
|
55
|
+
- `Zone Write`
|
|
56
|
+
|
|
57
|
+
## Cache Rules Integration
|
|
58
|
+
|
|
59
|
+
Control Cache Reserve eligibility via Cache Rules:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// Enable Cache Reserve for static assets with long TTL
|
|
63
|
+
const staticAssetRule = {
|
|
64
|
+
action: 'set_cache_settings',
|
|
65
|
+
action_parameters: {
|
|
66
|
+
cache_reserve: {
|
|
67
|
+
eligible: true,
|
|
68
|
+
minimum_file_ttl: 86400 // 24 hours
|
|
69
|
+
},
|
|
70
|
+
edge_ttl: {
|
|
71
|
+
mode: 'override_origin',
|
|
72
|
+
default: 86400
|
|
73
|
+
},
|
|
74
|
+
cache: true
|
|
75
|
+
},
|
|
76
|
+
expression: '(http.request.uri.path matches "\\.(jpg|jpeg|png|gif|webp|pdf|zip)$")'
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
// Disable Cache Reserve for frequently updated content
|
|
80
|
+
const dynamicContentRule = {
|
|
81
|
+
action: 'set_cache_settings',
|
|
82
|
+
action_parameters: {
|
|
83
|
+
cache_reserve: { eligible: false }
|
|
84
|
+
},
|
|
85
|
+
expression: '(http.request.uri.path matches "^/api/")'
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// Cache Reserve for specific origin with minimum 12-hour TTL
|
|
89
|
+
const specificOriginRule = {
|
|
90
|
+
action: 'set_cache_settings',
|
|
91
|
+
action_parameters: {
|
|
92
|
+
cache_reserve: {
|
|
93
|
+
eligible: true,
|
|
94
|
+
minimum_file_ttl: 43200 // 12 hours
|
|
95
|
+
},
|
|
96
|
+
edge_ttl: { mode: 'override_origin', default: 43200 },
|
|
97
|
+
cache: true
|
|
98
|
+
},
|
|
99
|
+
expression: '(http.host eq "cdn.example.com")'
|
|
100
|
+
};
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Creating Rules via API
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
const createCacheRule = async (
|
|
107
|
+
zoneId: string,
|
|
108
|
+
apiToken: string,
|
|
109
|
+
rule: CacheRuleWithReserve
|
|
110
|
+
) => {
|
|
111
|
+
const response = await fetch(
|
|
112
|
+
`https://api.cloudflare.com/client/v4/zones/${zoneId}/rulesets/phases/http_request_cache_settings/entrypoint`,
|
|
113
|
+
{
|
|
114
|
+
method: 'PUT',
|
|
115
|
+
headers: {
|
|
116
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
117
|
+
'Content-Type': 'application/json',
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({ rules: [rule] })
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
return await response.json();
|
|
123
|
+
};
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Wrangler Integration
|
|
127
|
+
|
|
128
|
+
Cache Reserve works automatically with Workers deployed via Wrangler. No special configuration needed.
|
|
129
|
+
|
|
130
|
+
```jsonc
|
|
131
|
+
// wrangler.jsonc
|
|
132
|
+
{
|
|
133
|
+
"name": "cache-reserve-worker",
|
|
134
|
+
"main": "src/index.ts",
|
|
135
|
+
"compatibility_date": "2025-01-11", // Use current date for new projects
|
|
136
|
+
|
|
137
|
+
// Cache Reserve works automatically with standard routes
|
|
138
|
+
"routes": [
|
|
139
|
+
{ "pattern": "example.com/*", "zone_name": "example.com" }
|
|
140
|
+
]
|
|
141
|
+
// No special Cache Reserve configuration needed
|
|
142
|
+
// Enable via Dashboard or API
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Development and Testing
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Local development (Cache Reserve not active locally)
|
|
150
|
+
npx wrangler dev
|
|
151
|
+
|
|
152
|
+
# Deploy to production (Cache Reserve active if enabled for zone)
|
|
153
|
+
npx wrangler deploy
|
|
154
|
+
|
|
155
|
+
# View logs (including cache behavior)
|
|
156
|
+
npx wrangler tail
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## See Also
|
|
160
|
+
|
|
161
|
+
- [README](./README.md) - Overview and core concepts
|
|
162
|
+
- [API Reference](./api.md) - Purging and monitoring APIs
|
|
163
|
+
- [Patterns](./patterns.md) - Best practices and optimization
|
|
164
|
+
- [Gotchas](./gotchas.md) - Common issues and troubleshooting
|