opencodekit 0.15.4 → 0.15.6
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 +2 -2
- package/dist/template/.opencode/agent/explore.md +13 -12
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/memory/observations/2026-01-19-learning-oh-my-opencode-slim-vs-opencodekit-templ.md +27 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/plugin/sessions.ts +38 -4
- 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/dist/template/.opencode/tool/memory-read.ts +64 -44
- package/dist/template/.opencode/tool/memory-search.ts +9 -2
- package/dist/template/.opencode/tool/memory-update.ts +59 -47
- package/dist/template/.opencode/tool/observation.ts +16 -2
- package/package.json +1 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
## Common Use Cases
|
|
2
|
+
|
|
3
|
+
### 1. Header Manipulation
|
|
4
|
+
**Use for**: Adding/removing/modifying request or response headers
|
|
5
|
+
```javascript
|
|
6
|
+
// Add timestamp header
|
|
7
|
+
const timestamp = Date.now().toString(16);
|
|
8
|
+
modifiedRequest.headers.set("X-Hex-Timestamp", timestamp);
|
|
9
|
+
|
|
10
|
+
// Remove sensitive headers
|
|
11
|
+
newResponse.headers.delete("X-Powered-By");
|
|
12
|
+
newResponse.headers.delete("Server");
|
|
13
|
+
|
|
14
|
+
// Set security headers
|
|
15
|
+
newResponse.headers.set("X-Frame-Options", "DENY");
|
|
16
|
+
newResponse.headers.set("X-Content-Type-Options", "nosniff");
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### 2. Cookie Modification
|
|
20
|
+
**Use for**: Setting dynamic cookies, expiry times, A/B testing
|
|
21
|
+
```javascript
|
|
22
|
+
const expiry = new Date(Date.now() + 7 * 86400000).toUTCString();
|
|
23
|
+
const group = request.headers.get("userGroup") == "premium" ? "A" : "B";
|
|
24
|
+
response.headers.append(
|
|
25
|
+
"Set-Cookie",
|
|
26
|
+
`testGroup=${group}; Expires=${expiry}; path=/`
|
|
27
|
+
);
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 3. Bot Management
|
|
31
|
+
**Use for**: Routing bots, honeypots, rate limiting
|
|
32
|
+
```javascript
|
|
33
|
+
// Access bot score from request.cf
|
|
34
|
+
const botScore = reques
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Cloudflare Spectrum Skill Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Cloudflare Spectrum provides security and acceleration for ANY TCP or UDP-based application. It's a global Layer 4 (L4) reverse proxy running on Cloudflare's edge nodes that routes MQTT, email, file transfer, version control, games, and more through Cloudflare to mask origins and protec...
|
|
6
|
+
|
|
7
|
+
## In This Reference
|
|
8
|
+
|
|
9
|
+
- **[configuration.md](./configuration.md)** - Setup, deployment, configuration
|
|
10
|
+
- **[api.md](./api.md)** - API endpoints, methods, interfaces
|
|
11
|
+
- **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
|
|
12
|
+
- **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
|
|
13
|
+
|
|
14
|
+
## See Also
|
|
15
|
+
|
|
16
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
### API Endpoints
|
|
2
|
+
|
|
3
|
+
```
|
|
4
|
+
GET /zones/{zone_id}/spectrum/apps # List apps
|
|
5
|
+
POST /zones/{zone_id}/spectrum/apps # Create app
|
|
6
|
+
GET /zones/{zone_id}/spectrum/apps/{app_id} # Get app
|
|
7
|
+
PUT /zones/{zone_id}/spectrum/apps/{app_id} # Update app
|
|
8
|
+
DELETE /zones/{zone_id}/spectrum/apps/{app_id} # Delete app
|
|
9
|
+
|
|
10
|
+
GET /zones/{zone_id}/spectrum/analytics/aggregate/current
|
|
11
|
+
GET /zones/{zone_id}/spectrum/analytics/events/bytime
|
|
12
|
+
GET /zones/{zone_id}/spectrum/analytics/events/summary
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Supported Protocols
|
|
16
|
+
|
|
17
|
+
**Pro/Business Plans:**
|
|
18
|
+
- Selected protocols only (check Cloudflare docs for current list)
|
|
19
|
+
|
|
20
|
+
**Enterprise Plans:**
|
|
21
|
+
- All TCP ports (1-65535)
|
|
22
|
+
- All UDP ports (1-65535)
|
|
23
|
+
- Port ranges
|
|
24
|
+
- Custom protocols
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
## Configuration Patterns
|
|
2
|
+
|
|
3
|
+
### Basic TCP Application with Direct IP Origin
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
|
|
7
|
+
--request POST \
|
|
8
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
9
|
+
--json '{
|
|
10
|
+
"protocol": "tcp/22",
|
|
11
|
+
"dns": {
|
|
12
|
+
"type": "CNAME",
|
|
13
|
+
"name": "ssh.example.com"
|
|
14
|
+
},
|
|
15
|
+
"origin_direct": ["tcp://192.0.2.1:22"],
|
|
16
|
+
"proxy_protocol": "off",
|
|
17
|
+
"ip_firewall": true,
|
|
18
|
+
"tls": "off",
|
|
19
|
+
"edge_ips": {
|
|
20
|
+
"type": "dynamic",
|
|
21
|
+
"connectivity": "all"
|
|
22
|
+
},
|
|
23
|
+
"traffic_type": "direct",
|
|
24
|
+
"argo_smart_routing": true
|
|
25
|
+
}'
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### TCP Application with CNAME Origin
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
|
|
32
|
+
--request POST \
|
|
33
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
34
|
+
--json '{
|
|
35
|
+
"dns": {
|
|
36
|
+
"type": "CNAME",
|
|
37
|
+
"name": "game.example.com"
|
|
38
|
+
},
|
|
39
|
+
"protocol": "tcp/27015",
|
|
40
|
+
"proxy_protocol": "v1",
|
|
41
|
+
"tls": "off",
|
|
42
|
+
"origin_dns": {
|
|
43
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## Troubleshooting
|
|
2
|
+
|
|
3
|
+
### Issue: Connection timeouts
|
|
4
|
+
|
|
5
|
+
**Diagnosis:**
|
|
6
|
+
```bash
|
|
7
|
+
# Test connectivity to Spectrum app
|
|
8
|
+
nc -zv app.example.com 22
|
|
9
|
+
|
|
10
|
+
# Check DNS resolution
|
|
11
|
+
dig app.example.com
|
|
12
|
+
|
|
13
|
+
# Verify origin accepts Cloudflare IPs
|
|
14
|
+
curl -v telnet://origin-ip:port
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Solutions:**
|
|
18
|
+
- Verify origin firewall allows Cloudflare IPs
|
|
19
|
+
- Check origin service is running and listening on correct port
|
|
20
|
+
- Ensure DNS record is CNAME (not A/AAAA unless using BYOIP)
|
|
21
|
+
|
|
22
|
+
### Issue: Client IP showing Cloudflare IP
|
|
23
|
+
|
|
24
|
+
**Solution:** Enable Proxy Protocol
|
|
25
|
+
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"proxy_protocol": "v1" // TCP: v1 or v2; UDP: simple
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Ensure origin application parses proxy protocol headers.
|
|
33
|
+
|
|
34
|
+
### Issue: TLS errors
|
|
35
|
+
|
|
36
|
+
**Diagnosis:**
|
|
37
|
+
```bash
|
|
38
|
+
openssl s_client -connect app.example.com:443 -showcerts
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Solutions:**
|
|
42
|
+
- `tls: "flexible"`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
## Common Use Cases
|
|
2
|
+
|
|
3
|
+
### 1. SSH Server Protection
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
|
|
7
|
+
--request POST \
|
|
8
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
9
|
+
--json '{
|
|
10
|
+
"protocol": "tcp/22",
|
|
11
|
+
"dns": {"type": "CNAME", "name": "ssh.example.com"},
|
|
12
|
+
"origin_direct": ["tcp://10.0.1.5:22"],
|
|
13
|
+
"ip_firewall": true,
|
|
14
|
+
"argo_smart_routing": true
|
|
15
|
+
}'
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Benefits:**
|
|
19
|
+
- Hide origin IP from attackers
|
|
20
|
+
- DDoS protection at L3/L4
|
|
21
|
+
- Argo reduces latency
|
|
22
|
+
- IP firewall for additional access control
|
|
23
|
+
|
|
24
|
+
### 2. Game Server (e.g., Minecraft)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/spectrum/apps" \
|
|
28
|
+
--request POST \
|
|
29
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
30
|
+
--json '{
|
|
31
|
+
"protocol": "tcp/25565",
|
|
32
|
+
"dns": {"type": "CNAME", "name": "mc.example.com"},
|
|
33
|
+
"origin_direct": ["tcp://192.168.1.10:25565"],
|
|
34
|
+
"proxy_protocol": "v1",
|
|
35
|
+
"argo_smart_routing": true
|
|
36
|
+
}'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Benefits:**
|
|
40
|
+
- Protection
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Cloudflare Static Assets Skill Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for deploying and configuring static assets with Cloudflare Workers. This skill covers configuration patterns, routing architectures, asset binding usage, and best practices for SPAs, SSG sites, and full-stack applications....
|
|
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,47 @@
|
|
|
1
|
+
## Configuration
|
|
2
|
+
|
|
3
|
+
### Basic Setup
|
|
4
|
+
|
|
5
|
+
Minimal configuration requires only `assets.directory`:
|
|
6
|
+
|
|
7
|
+
```jsonc
|
|
8
|
+
{
|
|
9
|
+
"name": "my-worker",
|
|
10
|
+
"compatibility_date": "2025-01-01",
|
|
11
|
+
"assets": {
|
|
12
|
+
"directory": "./dist"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
```toml
|
|
18
|
+
name = "my-worker"
|
|
19
|
+
compatibility_date = "2025-01-01"
|
|
20
|
+
|
|
21
|
+
[assets]
|
|
22
|
+
directory = "./dist"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Full Configuration Options
|
|
26
|
+
|
|
27
|
+
```jsonc
|
|
28
|
+
{
|
|
29
|
+
"name": "my-worker",
|
|
30
|
+
"main": "src/index.ts",
|
|
31
|
+
"compatibility_date": "2025-01-01",
|
|
32
|
+
"assets": {
|
|
33
|
+
"directory": "./dist",
|
|
34
|
+
"binding": "ASSETS",
|
|
35
|
+
"not_found_handling": "single-page-application",
|
|
36
|
+
"html_handling": "auto-trailing-slash",
|
|
37
|
+
"run_worker_first": ["/api/*", "!/api/docs/*"]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Configuration keys:**
|
|
43
|
+
|
|
44
|
+
- `directory` (string, required): Path to assets folder (e.g. `./dist`, `./public`, `./build`)
|
|
45
|
+
- `binding` (string, optional): Name to access assets in Worker code (e.g. `env.ASSETS`)
|
|
46
|
+
- `not_found_handling` (string, optional): Behavior when asset not found
|
|
47
|
+
- `"single-page-application"`: Serve `/index.html
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
## Best Practices
|
|
2
|
+
|
|
3
|
+
### 1. Use Selective Worker-First Routing
|
|
4
|
+
|
|
5
|
+
Instead of `run_worker_first = true`, use array patterns:
|
|
6
|
+
|
|
7
|
+
```jsonc
|
|
8
|
+
{
|
|
9
|
+
"assets": {
|
|
10
|
+
"run_worker_first": [
|
|
11
|
+
"/api/*", // API routes
|
|
12
|
+
"/admin/*", // Admin area
|
|
13
|
+
"!/admin/assets/*" // Except admin assets
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Benefits:**
|
|
20
|
+
- Reduces Worker invocations
|
|
21
|
+
- Lowers costs
|
|
22
|
+
- Improves asset delivery performance
|
|
23
|
+
|
|
24
|
+
### 2. Leverage Navigation Request Optimization
|
|
25
|
+
|
|
26
|
+
For SPAs, use `compatibility_date = "2025-04-01"` or later:
|
|
27
|
+
|
|
28
|
+
```jsonc
|
|
29
|
+
{
|
|
30
|
+
"compatibility_date": "2025-04-01",
|
|
31
|
+
"assets": {
|
|
32
|
+
"not_found_handling": "single-page-application"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Navigation requests skip Worker invocation, reducing costs.
|
|
38
|
+
|
|
39
|
+
### 3. Type Safety with Bindings
|
|
40
|
+
|
|
41
|
+
Always type your environment:
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
interface
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
### Common Patterns
|
|
2
|
+
|
|
3
|
+
**1. Forward request to assets:**
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export default {
|
|
7
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
8
|
+
return env.ASSETS.fetch(request);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**2. Fetch specific asset by path:**
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
const response = await env.ASSETS.fetch("https://assets.local/logo.png");
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**3. Modify request before fetching asset:**
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
const url = new URL(request.url);
|
|
23
|
+
url.pathname = "/index.html";
|
|
24
|
+
return env.ASSETS.fetch(new Request(url, request));
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**4. Transform asset response:**
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
const response = await env.ASSETS.fetch(request);
|
|
31
|
+
const modifiedResponse = new Response(response.body, response);
|
|
32
|
+
modifiedResponse.headers.set("X-Custom-Header", "value");
|
|
33
|
+
modifiedResponse.headers.set("Cache-Control", "public, max-age=3600");
|
|
34
|
+
return modifiedResponse;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**5. Conditional asset serving:**
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
export default {
|
|
41
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
42
|
+
const url = new URL(request.url);
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Cloudflare Stream
|
|
2
|
+
|
|
3
|
+
Serverless live and on-demand video streaming platform with one API.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare Stream provides video upload, storage, encoding, and delivery without managing infrastructure. Runs on Cloudflare's global network.
|
|
8
|
+
|
|
9
|
+
### Key Features
|
|
10
|
+
- **On-demand video**: Upload, encode, store, deliver
|
|
11
|
+
- **Live streaming**: RTMPS/SRT ingestion with ABR
|
|
12
|
+
- **Direct creator uploads**: End users upload without API keys
|
|
13
|
+
- **Signed URLs**: Token-based access control
|
|
14
|
+
- **Analytics**: Server-side metrics via GraphQL
|
|
15
|
+
- **Webhooks**: Processing notifications
|
|
16
|
+
- **Captions**: Upload or AI-generate subtitles
|
|
17
|
+
- **Watermarks**: Apply branding to videos
|
|
18
|
+
- **Downloads**: Enable MP4 offline viewing
|
|
19
|
+
|
|
20
|
+
## Core Concepts
|
|
21
|
+
|
|
22
|
+
### Video Upload Methods
|
|
23
|
+
1. **API Upload (TUS protocol)**: Direct server upload
|
|
24
|
+
2. **Upload from URL**: Import from external source
|
|
25
|
+
3. **Direct Creator Uploads**: User-generated content (recommended)
|
|
26
|
+
|
|
27
|
+
### Playback Options
|
|
28
|
+
1. **Stream Player (iframe)**: Built-in, optimized player
|
|
29
|
+
2. **Custom Player (HLS/DASH)**: Video.js, HLS.js integration
|
|
30
|
+
3. **Thumbnails**: Static or animated previews
|
|
31
|
+
|
|
32
|
+
### Access Control
|
|
33
|
+
- **Public**: No restrictions
|
|
34
|
+
- **requireSignedURLs**: Token-based access
|
|
35
|
+
- **allowedOrigins**: Domain restrictions
|
|
36
|
+
- **Access Rules**: Geo/IP restrictions in tokens
|
|
37
|
+
|
|
38
|
+
### Live Streaming
|
|
39
|
+
- RTMPS/SRT ingest from OBS, FFmpeg
|
|
40
|
+
- Automatic recording to on-demand
|
|
41
|
+
- Simulcast to YouTube, Twitch, etc.
|
|
42
|
+
- WebRTC support for browser streaming
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
**Upload video via API**
|
|
47
|
+
```bash
|
|
48
|
+
curl -X POST \
|
|
49
|
+
"https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/copy" \
|
|
50
|
+
-H "Authorization: Bearer <TOKEN>" \
|
|
51
|
+
-H "Content-Type: application/json" \
|
|
52
|
+
-d '{"url": "https://example.com/video.mp4"}'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Embed player**
|
|
56
|
+
```html
|
|
57
|
+
<iframe
|
|
58
|
+
src="https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/iframe"
|
|
59
|
+
style="border: none;"
|
|
60
|
+
height="720" width="1280"
|
|
61
|
+
allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
|
|
62
|
+
allowfullscreen="true"
|
|
63
|
+
></iframe>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Create live input**
|
|
67
|
+
```bash
|
|
68
|
+
curl -X POST \
|
|
69
|
+
"https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/live_inputs" \
|
|
70
|
+
-H "Authorization: Bearer <TOKEN>" \
|
|
71
|
+
-H "Content-Type: application/json" \
|
|
72
|
+
-d '{"recording": {"mode": "automatic"}}'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Limits
|
|
76
|
+
|
|
77
|
+
- Max file size: 30 GB
|
|
78
|
+
- Max frame rate: 60 fps (recommended)
|
|
79
|
+
- Supported formats: MP4, MKV, MOV, AVI, FLV, MPEG-2 TS/PS, MXF, LXF, GXF, 3GP, WebM, MPG, QuickTime
|
|
80
|
+
|
|
81
|
+
## Pricing
|
|
82
|
+
|
|
83
|
+
- $5/1000 min stored
|
|
84
|
+
- $1/1000 min delivered
|
|
85
|
+
|
|
86
|
+
## Resources
|
|
87
|
+
|
|
88
|
+
- Dashboard: https://dash.cloudflare.com/?to=/:account/stream
|
|
89
|
+
- API Docs: https://developers.cloudflare.com/api/resources/stream/
|
|
90
|
+
- Stream Docs: https://developers.cloudflare.com/stream/
|
|
91
|
+
|
|
92
|
+
## In This Reference
|
|
93
|
+
|
|
94
|
+
- [configuration.md](./configuration.md) - Setup, environment variables, wrangler config
|
|
95
|
+
- [api.md](./api.md) - Upload, playback, live streaming, management APIs
|
|
96
|
+
- [patterns.md](./patterns.md) - Full-stack flows, state management, best practices
|
|
97
|
+
- [gotchas.md](./gotchas.md) - Error codes, troubleshooting, limits
|
|
98
|
+
|
|
99
|
+
## See Also
|
|
100
|
+
|
|
101
|
+
- [workers](../workers/) - Deploy Stream APIs in Workers
|
|
102
|
+
- [pages](../pages/) - Integrate Stream with Pages
|
|
103
|
+
- [workers-ai](../workers-ai/) - AI-generate captions
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Stream API Reference
|
|
2
|
+
|
|
3
|
+
Upload, playback, live streaming, and management APIs.
|
|
4
|
+
|
|
5
|
+
## Upload APIs
|
|
6
|
+
|
|
7
|
+
### Direct Creator Upload (Recommended)
|
|
8
|
+
|
|
9
|
+
**Backend: Create upload URL**
|
|
10
|
+
```typescript
|
|
11
|
+
async function createUploadURL(accountId: string, apiToken: string) {
|
|
12
|
+
const response = await fetch(
|
|
13
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/direct_upload`,
|
|
14
|
+
{
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: {
|
|
17
|
+
'Authorization': `Bearer ${apiToken}`,
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
},
|
|
20
|
+
body: JSON.stringify({
|
|
21
|
+
maxDurationSeconds: 3600,
|
|
22
|
+
expiry: new Date(Date.now() + 3600000).toISOString(),
|
|
23
|
+
requireSignedURLs: true,
|
|
24
|
+
meta: { creator: 'user-123' }
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
const data = await response.json();
|
|
29
|
+
return { uploadURL: data.result.uploadURL, uid: data.result.uid };
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Frontend: Upload to Stream**
|
|
34
|
+
```typescript
|
|
35
|
+
async function uploadVideo(file: File, uploadURL: string) {
|
|
36
|
+
const formData = new FormData();
|
|
37
|
+
formData.append('file', file);
|
|
38
|
+
return fetch(uploadURL, { method: 'POST', body: formData }).then(r => r.json());
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Upload from URL
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
curl -X POST \
|
|
46
|
+
"https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/copy" \
|
|
47
|
+
-H "Authorization: Bearer <TOKEN>" \
|
|
48
|
+
-H "Content-Type: application/json" \
|
|
49
|
+
-d '{
|
|
50
|
+
"url": "https://example.com/video.mp4",
|
|
51
|
+
"meta": {"name": "My Video"},
|
|
52
|
+
"requireSignedURLs": false
|
|
53
|
+
}'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Playback APIs
|
|
57
|
+
|
|
58
|
+
### Embed Player (iframe)
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<iframe
|
|
62
|
+
src="https://customer-<CODE>.cloudflarestream.com/<VIDEO_ID>/iframe?autoplay=true&muted=true"
|
|
63
|
+
style="border: none;" height="720" width="1280"
|
|
64
|
+
allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
|
|
65
|
+
allowfullscreen="true"
|
|
66
|
+
></iframe>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### HLS/DASH Manifest URLs
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// HLS
|
|
73
|
+
const hlsUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.m3u8`;
|
|
74
|
+
|
|
75
|
+
// DASH
|
|
76
|
+
const dashUrl = `https://customer-<CODE>.cloudflarestream.com/${videoId}/manifest/video.mpd`;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Thumbnails
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
// At specific time (seconds)
|
|
83
|
+
const thumb = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=10s`;
|
|
84
|
+
|
|
85
|
+
// By percentage
|
|
86
|
+
const thumbPct = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.jpg?time=50%`;
|
|
87
|
+
|
|
88
|
+
// Animated GIF
|
|
89
|
+
const gif = `https://customer-<CODE>.cloudflarestream.com/${videoId}/thumbnails/thumbnail.gif`;
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Signed URLs
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// Low volume (<1k/day): Use API
|
|
96
|
+
async function getSignedToken(accountId: string, videoId: string, apiToken: string) {
|
|
97
|
+
const response = await fetch(
|
|
98
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}/token`,
|
|
99
|
+
{
|
|
100
|
+
method: 'POST',
|
|
101
|
+
headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
|
|
102
|
+
body: JSON.stringify({
|
|
103
|
+
exp: Math.floor(Date.now() / 1000) + 3600,
|
|
104
|
+
accessRules: [{ type: 'ip.geoip.country', action: 'allow', country: ['US'] }]
|
|
105
|
+
})
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
return (await response.json()).result.token;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// High volume: Self-sign with RS256 JWT using crypto.subtle (see patterns.md)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Live Streaming APIs
|
|
115
|
+
|
|
116
|
+
### Create Live Input
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
async function createLiveInput(accountId: string, apiToken: string) {
|
|
120
|
+
const response = await fetch(
|
|
121
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs`,
|
|
122
|
+
{
|
|
123
|
+
method: 'POST',
|
|
124
|
+
headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
|
|
125
|
+
body: JSON.stringify({
|
|
126
|
+
recording: { mode: 'automatic', timeoutSeconds: 30 },
|
|
127
|
+
deleteRecordingAfterDays: 30
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
const { result } = await response.json();
|
|
132
|
+
return {
|
|
133
|
+
uid: result.uid,
|
|
134
|
+
rtmps: { url: result.rtmps.url, streamKey: result.rtmps.streamKey },
|
|
135
|
+
srt: { url: result.srt.url, streamId: result.srt.streamId, passphrase: result.srt.passphrase }
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Check Live Status
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
async function getLiveStatus(accountId: string, liveInputId: string, apiToken: string) {
|
|
144
|
+
const response = await fetch(
|
|
145
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs/${liveInputId}`,
|
|
146
|
+
{ headers: { 'Authorization': `Bearer ${apiToken}` } }
|
|
147
|
+
);
|
|
148
|
+
const { result } = await response.json();
|
|
149
|
+
return { isLive: result.status?.current?.state === 'connected', recording: result.recording };
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Create Live Output (Simulcast)
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
async function createLiveOutput(
|
|
157
|
+
accountId: string, liveInputId: string, apiToken: string,
|
|
158
|
+
outputUrl: string, streamKey: string
|
|
159
|
+
) {
|
|
160
|
+
return fetch(
|
|
161
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/live_inputs/${liveInputId}/outputs`,
|
|
162
|
+
{
|
|
163
|
+
method: 'POST',
|
|
164
|
+
headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
|
|
165
|
+
body: JSON.stringify({ url: `${outputUrl}/${streamKey}`, enabled: true })
|
|
166
|
+
}
|
|
167
|
+
).then(r => r.json());
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Video Management APIs
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
// List videos
|
|
175
|
+
async function listVideos(accountId: string, apiToken: string, search?: string) {
|
|
176
|
+
const params = new URLSearchParams(search ? { search } : {});
|
|
177
|
+
return fetch(
|
|
178
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream?${params}`,
|
|
179
|
+
{ headers: { 'Authorization': `Bearer ${apiToken}` } }
|
|
180
|
+
).then(r => r.json());
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Update video
|
|
184
|
+
async function updateVideo(accountId: string, videoId: string, apiToken: string, updates: unknown) {
|
|
185
|
+
return fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/stream/${videoId}`, {
|
|
186
|
+
method: 'POST',
|
|
187
|
+
headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' },
|
|
188
|
+
body: JSON.stringify(updates)
|
|
189
|
+
}).then(r => r.json());
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Delete, clip: similar pattern with DELETE/POST
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## In This Reference
|
|
196
|
+
|
|
197
|
+
- [README.md](./README.md) - Overview and quick start
|
|
198
|
+
- [configuration.md](./configuration.md) - Setup and config
|
|
199
|
+
- [patterns.md](./patterns.md) - Full-stack flows, best practices
|
|
200
|
+
- [gotchas.md](./gotchas.md) - Error codes, troubleshooting
|
|
201
|
+
|
|
202
|
+
## See Also
|
|
203
|
+
|
|
204
|
+
- [workers](../workers/) - Deploy Stream APIs in Workers
|