pi-cloudflare 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +67 -0
- package/bin/setup.mjs +103 -0
- package/dist/auth-flow.d.ts +15 -0
- package/dist/auth-flow.d.ts.map +1 -0
- package/dist/auth-flow.js +90 -0
- package/dist/auth-flow.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +47 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth.d.ts +44 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +135 -0
- package/dist/oauth.js.map +1 -0
- package/dist/proxy.d.ts +29 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +39 -0
- package/dist/proxy.js.map +1 -0
- package/dist/servers.d.ts +19 -0
- package/dist/servers.d.ts.map +1 -0
- package/dist/servers.js +40 -0
- package/dist/servers.js.map +1 -0
- package/dist/token-store.d.ts +23 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +47 -0
- package/dist/token-store.js.map +1 -0
- package/package.json +67 -0
- package/skills/agents-sdk/SKILL.md +221 -0
- package/skills/agents-sdk/references/browse-the-web.md +63 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/client-sdk.md +110 -0
- package/skills/agents-sdk/references/codemode.md +110 -0
- package/skills/agents-sdk/references/configuration.md +72 -0
- package/skills/agents-sdk/references/durable-execution.md +51 -0
- package/skills/agents-sdk/references/email.md +146 -0
- package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
- package/skills/agents-sdk/references/mcp.md +188 -0
- package/skills/agents-sdk/references/observability.md +44 -0
- package/skills/agents-sdk/references/queue-retries.md +79 -0
- package/skills/agents-sdk/references/routing.md +75 -0
- package/skills/agents-sdk/references/server-driven-messages.md +63 -0
- package/skills/agents-sdk/references/state-scheduling.md +171 -0
- package/skills/agents-sdk/references/streaming-chat.md +198 -0
- package/skills/agents-sdk/references/think.md +112 -0
- package/skills/agents-sdk/references/voice.md +68 -0
- package/skills/agents-sdk/references/webhooks-push.md +86 -0
- package/skills/agents-sdk/references/workflows.md +132 -0
- package/skills/cloudflare/SKILL.md +248 -0
- package/skills/cloudflare/references/agents-sdk/README.md +89 -0
- package/skills/cloudflare/references/agents-sdk/api.md +190 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
- package/skills/cloudflare/references/ai-gateway/README.md +175 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
- package/skills/cloudflare/references/ai-search/README.md +138 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +88 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
- package/skills/cloudflare/references/ai-search/patterns.md +85 -0
- package/skills/cloudflare/references/analytics-engine/README.md +94 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +204 -0
- package/skills/cloudflare/references/api/configuration.md +160 -0
- package/skills/cloudflare/references/api/gotchas.md +225 -0
- package/skills/cloudflare/references/api/patterns.md +204 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +141 -0
- package/skills/cloudflare/references/api-shield/configuration.md +192 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
- package/skills/cloudflare/references/api-shield/patterns.md +180 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
- package/skills/cloudflare/references/artifacts/README.md +79 -0
- package/skills/cloudflare/references/artifacts/api.md +128 -0
- package/skills/cloudflare/references/artifacts/configuration.md +92 -0
- package/skills/cloudflare/references/bindings/README.md +122 -0
- package/skills/cloudflare/references/bindings/api.md +203 -0
- package/skills/cloudflare/references/bindings/configuration.md +188 -0
- package/skills/cloudflare/references/bindings/gotchas.md +208 -0
- package/skills/cloudflare/references/bindings/patterns.md +200 -0
- package/skills/cloudflare/references/bot-management/README.md +94 -0
- package/skills/cloudflare/references/bot-management/api.md +169 -0
- package/skills/cloudflare/references/bot-management/configuration.md +163 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
- package/skills/cloudflare/references/bot-management/patterns.md +182 -0
- package/skills/cloudflare/references/browser-rendering/README.md +78 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +81 -0
- package/skills/cloudflare/references/c3/gotchas.md +92 -0
- package/skills/cloudflare/references/c3/patterns.md +82 -0
- package/skills/cloudflare/references/cache-reserve/README.md +147 -0
- package/skills/cloudflare/references/cache-reserve/api.md +194 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +85 -0
- package/skills/cloudflare/references/containers/api.md +187 -0
- package/skills/cloudflare/references/containers/configuration.md +188 -0
- package/skills/cloudflare/references/containers/gotchas.md +178 -0
- package/skills/cloudflare/references/containers/patterns.md +202 -0
- package/skills/cloudflare/references/cron-triggers/README.md +99 -0
- package/skills/cloudflare/references/cron-triggers/api.md +196 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
- package/skills/cloudflare/references/d1/README.md +133 -0
- package/skills/cloudflare/references/d1/api.md +196 -0
- package/skills/cloudflare/references/d1/configuration.md +191 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +189 -0
- package/skills/cloudflare/references/ddos/README.md +41 -0
- package/skills/cloudflare/references/ddos/api.md +164 -0
- package/skills/cloudflare/references/ddos/configuration.md +93 -0
- package/skills/cloudflare/references/ddos/gotchas.md +107 -0
- package/skills/cloudflare/references/ddos/patterns.md +174 -0
- package/skills/cloudflare/references/do-storage/README.md +75 -0
- package/skills/cloudflare/references/do-storage/api.md +102 -0
- package/skills/cloudflare/references/do-storage/configuration.md +112 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
- package/skills/cloudflare/references/do-storage/patterns.md +194 -0
- package/skills/cloudflare/references/do-storage/testing.md +183 -0
- package/skills/cloudflare/references/durable-objects/README.md +185 -0
- package/skills/cloudflare/references/durable-objects/api.md +187 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +195 -0
- package/skills/cloudflare/references/email-routing/configuration.md +186 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
- package/skills/cloudflare/references/email-routing/patterns.md +229 -0
- package/skills/cloudflare/references/email-workers/README.md +151 -0
- package/skills/cloudflare/references/email-workers/api.md +237 -0
- package/skills/cloudflare/references/email-workers/configuration.md +112 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
- package/skills/cloudflare/references/email-workers/patterns.md +102 -0
- package/skills/cloudflare/references/flagship/README.md +59 -0
- package/skills/cloudflare/references/flagship/api.md +390 -0
- package/skills/cloudflare/references/flagship/configuration.md +202 -0
- package/skills/cloudflare/references/flagship/gotchas.md +178 -0
- package/skills/cloudflare/references/flagship/patterns.md +469 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
- package/skills/cloudflare/references/hyperdrive/README.md +82 -0
- package/skills/cloudflare/references/hyperdrive/api.md +143 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
- package/skills/cloudflare/references/images/README.md +61 -0
- package/skills/cloudflare/references/images/api.md +96 -0
- package/skills/cloudflare/references/images/configuration.md +211 -0
- package/skills/cloudflare/references/images/gotchas.md +99 -0
- package/skills/cloudflare/references/images/patterns.md +115 -0
- package/skills/cloudflare/references/kv/README.md +89 -0
- package/skills/cloudflare/references/kv/api.md +160 -0
- package/skills/cloudflare/references/kv/configuration.md +144 -0
- package/skills/cloudflare/references/kv/gotchas.md +131 -0
- package/skills/cloudflare/references/kv/patterns.md +196 -0
- package/skills/cloudflare/references/miniflare/README.md +105 -0
- package/skills/cloudflare/references/miniflare/api.md +187 -0
- package/skills/cloudflare/references/miniflare/configuration.md +173 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
- package/skills/cloudflare/references/miniflare/patterns.md +181 -0
- package/skills/cloudflare/references/network-interconnect/README.md +99 -0
- package/skills/cloudflare/references/network-interconnect/api.md +199 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
- package/skills/cloudflare/references/observability/README.md +88 -0
- package/skills/cloudflare/references/observability/api.md +164 -0
- package/skills/cloudflare/references/observability/configuration.md +169 -0
- package/skills/cloudflare/references/observability/gotchas.md +115 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +88 -0
- package/skills/cloudflare/references/pages/api.md +204 -0
- package/skills/cloudflare/references/pages/configuration.md +201 -0
- package/skills/cloudflare/references/pages/gotchas.md +203 -0
- package/skills/cloudflare/references/pages/patterns.md +204 -0
- package/skills/cloudflare/references/pages-functions/README.md +98 -0
- package/skills/cloudflare/references/pages-functions/api.md +143 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
- package/skills/cloudflare/references/pipelines/README.md +90 -0
- package/skills/cloudflare/references/pipelines/api.md +124 -0
- package/skills/cloudflare/references/pipelines/configuration.md +155 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
- package/skills/cloudflare/references/pipelines/patterns.md +130 -0
- package/skills/cloudflare/references/pulumi/README.md +100 -0
- package/skills/cloudflare/references/pulumi/api.md +200 -0
- package/skills/cloudflare/references/pulumi/configuration.md +198 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
- package/skills/cloudflare/references/pulumi/patterns.md +191 -0
- package/skills/cloudflare/references/queues/README.md +96 -0
- package/skills/cloudflare/references/queues/api.md +206 -0
- package/skills/cloudflare/references/queues/configuration.md +144 -0
- package/skills/cloudflare/references/queues/gotchas.md +206 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +95 -0
- package/skills/cloudflare/references/r2/api.md +200 -0
- package/skills/cloudflare/references/r2/configuration.md +165 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +193 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
- package/skills/cloudflare/references/r2-sql/README.md +64 -0
- package/skills/cloudflare/references/r2-sql/api.md +121 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
- package/skills/cloudflare/references/realtimekit/README.md +113 -0
- package/skills/cloudflare/references/realtimekit/api.md +212 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
- package/skills/cloudflare/references/sandbox/README.md +96 -0
- package/skills/cloudflare/references/sandbox/api.md +198 -0
- package/skills/cloudflare/references/sandbox/configuration.md +143 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
- package/skills/cloudflare/references/sandbox/patterns.md +201 -0
- package/skills/cloudflare/references/secrets-store/README.md +74 -0
- package/skills/cloudflare/references/secrets-store/api.md +200 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
- package/skills/cloudflare/references/smart-placement/README.md +138 -0
- package/skills/cloudflare/references/smart-placement/api.md +183 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
- package/skills/cloudflare/references/snippets/README.md +68 -0
- package/skills/cloudflare/references/snippets/api.md +198 -0
- package/skills/cloudflare/references/snippets/configuration.md +227 -0
- package/skills/cloudflare/references/snippets/gotchas.md +86 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +181 -0
- package/skills/cloudflare/references/spectrum/configuration.md +194 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
- package/skills/cloudflare/references/spectrum/patterns.md +196 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +199 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +114 -0
- package/skills/cloudflare/references/stream/api-live.md +195 -0
- package/skills/cloudflare/references/stream/api.md +199 -0
- package/skills/cloudflare/references/stream/configuration.md +141 -0
- package/skills/cloudflare/references/stream/gotchas.md +130 -0
- package/skills/cloudflare/references/stream/patterns.md +184 -0
- package/skills/cloudflare/references/tail-workers/README.md +89 -0
- package/skills/cloudflare/references/tail-workers/api.md +200 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
- package/skills/cloudflare/references/terraform/README.md +102 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +129 -0
- package/skills/cloudflare/references/tunnel/api.md +193 -0
- package/skills/cloudflare/references/tunnel/configuration.md +157 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
- package/skills/cloudflare/references/tunnel/networking.md +168 -0
- package/skills/cloudflare/references/tunnel/patterns.md +192 -0
- package/skills/cloudflare/references/turn/README.md +82 -0
- package/skills/cloudflare/references/turn/api.md +239 -0
- package/skills/cloudflare/references/turn/configuration.md +179 -0
- package/skills/cloudflare/references/turn/gotchas.md +231 -0
- package/skills/cloudflare/references/turn/patterns.md +213 -0
- package/skills/cloudflare/references/turnstile/README.md +99 -0
- package/skills/cloudflare/references/turnstile/api.md +240 -0
- package/skills/cloudflare/references/turnstile/configuration.md +222 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
- package/skills/cloudflare/references/turnstile/patterns.md +193 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +88 -0
- package/skills/cloudflare/references/vectorize/configuration.md +88 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
- package/skills/cloudflare/references/vectorize/patterns.md +90 -0
- package/skills/cloudflare/references/waf/README.md +113 -0
- package/skills/cloudflare/references/waf/api.md +202 -0
- package/skills/cloudflare/references/waf/configuration.md +203 -0
- package/skills/cloudflare/references/waf/gotchas.md +204 -0
- package/skills/cloudflare/references/waf/patterns.md +197 -0
- package/skills/cloudflare/references/web-analytics/README.md +141 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
- package/skills/cloudflare/references/web-analytics/integration.md +60 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
- package/skills/cloudflare/references/workerd/README.md +78 -0
- package/skills/cloudflare/references/workerd/api.md +185 -0
- package/skills/cloudflare/references/workerd/configuration.md +183 -0
- package/skills/cloudflare/references/workerd/gotchas.md +139 -0
- package/skills/cloudflare/references/workerd/patterns.md +192 -0
- package/skills/cloudflare/references/workers/README.md +108 -0
- package/skills/cloudflare/references/workers/api.md +195 -0
- package/skills/cloudflare/references/workers/configuration.md +185 -0
- package/skills/cloudflare/references/workers/frameworks.md +197 -0
- package/skills/cloudflare/references/workers/gotchas.md +137 -0
- package/skills/cloudflare/references/workers/patterns.md +198 -0
- package/skills/cloudflare/references/workers-ai/README.md +197 -0
- package/skills/cloudflare/references/workers-ai/api.md +112 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
- package/skills/cloudflare/references/workers-playground/README.md +127 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
- package/skills/cloudflare/references/workers-vpc/README.md +127 -0
- package/skills/cloudflare/references/workers-vpc/api.md +202 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
- package/skills/cloudflare/references/workflows/README.md +77 -0
- package/skills/cloudflare/references/workflows/api.md +218 -0
- package/skills/cloudflare/references/workflows/configuration.md +152 -0
- package/skills/cloudflare/references/workflows/gotchas.md +90 -0
- package/skills/cloudflare/references/workflows/patterns.md +175 -0
- package/skills/cloudflare/references/wrangler/README.md +135 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +197 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
- package/skills/cloudflare/references/wrangler/patterns.md +209 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
- package/skills/cloudflare/references/zaraz/README.md +111 -0
- package/skills/cloudflare/references/zaraz/api.md +112 -0
- package/skills/cloudflare/references/zaraz/configuration.md +90 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
- package/skills/cloudflare/references/zaraz/patterns.md +74 -0
- package/skills/cloudflare-email-service/SKILL.md +103 -0
- package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
- package/skills/cloudflare-email-service/references/deliverability.md +285 -0
- package/skills/cloudflare-email-service/references/rest-api.md +184 -0
- package/skills/cloudflare-email-service/references/routing.md +199 -0
- package/skills/cloudflare-email-service/references/sending.md +252 -0
- package/skills/cloudflare-one/SKILL.md +176 -0
- package/skills/cloudflare-one-migrations/SKILL.md +110 -0
- package/skills/durable-objects/SKILL.md +186 -0
- package/skills/durable-objects/references/rules.md +295 -0
- package/skills/durable-objects/references/testing.md +264 -0
- package/skills/durable-objects/references/workers.md +346 -0
- package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
- package/skills/sandbox-next/SKILL.md +91 -0
- package/skills/sandbox-next/references/api-quick-ref.md +94 -0
- package/skills/sandbox-next/references/examples.md +15 -0
- package/skills/sandbox-stable/SKILL.md +110 -0
- package/skills/turnstile-spin/README.md +51 -0
- package/skills/turnstile-spin/SKILL.md +330 -0
- package/skills/turnstile-spin/references/astro.md +199 -0
- package/skills/turnstile-spin/references/hugo.md +114 -0
- package/skills/turnstile-spin/references/nextjs-app.md +261 -0
- package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
- package/skills/turnstile-spin/references/sveltekit.md +191 -0
- package/skills/turnstile-spin/references/vanilla-html.md +157 -0
- package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
- package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
- package/skills/turnstile-spin/scripts/validate.sh +137 -0
- package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
- package/skills/turnstile-spin/tests/validation.md +62 -0
- package/skills/workers-best-practices/SKILL.md +127 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +467 -0
- package/skills/wrangler/SKILL.md +922 -0
|
@@ -0,0 +1,186 @@
|
|
|
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", // Use current date for new projects
|
|
11
|
+
"assets": {
|
|
12
|
+
"directory": "./dist"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Full Configuration Options
|
|
18
|
+
|
|
19
|
+
```jsonc
|
|
20
|
+
{
|
|
21
|
+
"name": "my-worker",
|
|
22
|
+
"main": "src/index.ts",
|
|
23
|
+
"compatibility_date": "2025-01-01",
|
|
24
|
+
"assets": {
|
|
25
|
+
"directory": "./dist",
|
|
26
|
+
"binding": "ASSETS",
|
|
27
|
+
"not_found_handling": "single-page-application",
|
|
28
|
+
"html_handling": "auto-trailing-slash",
|
|
29
|
+
"run_worker_first": ["/api/*", "!/api/docs/*"]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Configuration keys:**
|
|
35
|
+
|
|
36
|
+
- `directory` (string, required): Path to assets folder (e.g. `./dist`, `./public`, `./build`)
|
|
37
|
+
- `binding` (string, optional): Name to access assets in Worker code (e.g. `env.ASSETS`). Default: `"ASSETS"`
|
|
38
|
+
- `not_found_handling` (string, optional): Behavior when asset not found
|
|
39
|
+
- `"single-page-application"`: Serve `/index.html` for non-asset paths (default for SPAs)
|
|
40
|
+
- `"404-page"`: Serve `/404.html` if present, otherwise 404
|
|
41
|
+
- `"none"`: Return 404 for missing assets
|
|
42
|
+
- `html_handling` (string, optional): URL trailing slash behavior
|
|
43
|
+
- `run_worker_first` (boolean | string[], optional): Routes that invoke Worker before checking assets
|
|
44
|
+
|
|
45
|
+
### not_found_handling Modes
|
|
46
|
+
|
|
47
|
+
| Mode | Behavior | Use Case |
|
|
48
|
+
|------|----------|----------|
|
|
49
|
+
| `"single-page-application"` | Serve `/index.html` for non-asset requests | React, Vue, Angular SPAs |
|
|
50
|
+
| `"404-page"` | Serve `/404.html` if exists, else 404 | Static sites with custom error page |
|
|
51
|
+
| `"none"` | Return 404 for missing assets | API-first or custom routing |
|
|
52
|
+
|
|
53
|
+
### html_handling Modes
|
|
54
|
+
|
|
55
|
+
Controls trailing slash behavior for HTML files:
|
|
56
|
+
|
|
57
|
+
| Mode | `/page` | `/page/` | Use Case |
|
|
58
|
+
|------|---------|----------|----------|
|
|
59
|
+
| `"auto-trailing-slash"` | Redirect to `/page/` if `/page/index.html` exists | Serve `/page/index.html` | Default, SEO-friendly |
|
|
60
|
+
| `"force-trailing-slash"` | Always redirect to `/page/` | Serve if exists | Consistent trailing slashes |
|
|
61
|
+
| `"drop-trailing-slash"` | Serve if exists | Redirect to `/page` | Cleaner URLs |
|
|
62
|
+
| `"none"` | No modification | No modification | Custom routing logic |
|
|
63
|
+
|
|
64
|
+
**Default:** `"auto-trailing-slash"`
|
|
65
|
+
|
|
66
|
+
### run_worker_first Configuration
|
|
67
|
+
|
|
68
|
+
Controls which requests invoke Worker before checking assets.
|
|
69
|
+
|
|
70
|
+
**Boolean syntax:**
|
|
71
|
+
|
|
72
|
+
```jsonc
|
|
73
|
+
{
|
|
74
|
+
"assets": {
|
|
75
|
+
"run_worker_first": true // ALL requests invoke Worker
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Array syntax (recommended):**
|
|
81
|
+
|
|
82
|
+
```jsonc
|
|
83
|
+
{
|
|
84
|
+
"assets": {
|
|
85
|
+
"run_worker_first": [
|
|
86
|
+
"/api/*", // Positive pattern: match API routes
|
|
87
|
+
"/admin/*", // Match admin routes
|
|
88
|
+
"!/admin/assets/*" // Negative pattern: exclude admin assets
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Pattern rules:**
|
|
95
|
+
|
|
96
|
+
- Glob patterns: `*` (any chars), `**` (any path segments)
|
|
97
|
+
- Negative patterns: Prefix with `!` to exclude
|
|
98
|
+
- Precedence: Negative patterns override positive patterns
|
|
99
|
+
- Default: `false` (assets served directly)
|
|
100
|
+
|
|
101
|
+
**Decision guidance:**
|
|
102
|
+
|
|
103
|
+
- Use `true` for API-first apps (few static assets)
|
|
104
|
+
- Use array patterns for hybrid apps (APIs + static assets)
|
|
105
|
+
- Use `false` for static-first sites (minimal dynamic routes)
|
|
106
|
+
|
|
107
|
+
### .assetsignore File
|
|
108
|
+
|
|
109
|
+
Exclude files from upload using `.assetsignore` (same syntax as `.gitignore`):
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
# .assetsignore
|
|
113
|
+
_worker.js
|
|
114
|
+
*.map
|
|
115
|
+
*.md
|
|
116
|
+
node_modules/
|
|
117
|
+
.git/
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Common patterns:**
|
|
121
|
+
|
|
122
|
+
- `_worker.js` - Exclude Worker code from assets
|
|
123
|
+
- `*.map` - Exclude source maps
|
|
124
|
+
- `*.md` - Exclude markdown files
|
|
125
|
+
- Development artifacts
|
|
126
|
+
|
|
127
|
+
### Vite Plugin Integration
|
|
128
|
+
|
|
129
|
+
For Vite-based projects, use `@cloudflare/vite-plugin`:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// vite.config.ts
|
|
133
|
+
import { defineConfig } from 'vite';
|
|
134
|
+
import { cloudflare } from '@cloudflare/vite-plugin';
|
|
135
|
+
|
|
136
|
+
export default defineConfig({
|
|
137
|
+
plugins: [
|
|
138
|
+
cloudflare({
|
|
139
|
+
assets: {
|
|
140
|
+
directory: './dist',
|
|
141
|
+
binding: 'ASSETS'
|
|
142
|
+
}
|
|
143
|
+
})
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**Features:**
|
|
149
|
+
|
|
150
|
+
- Automatic asset detection during dev
|
|
151
|
+
- Hot module replacement for assets
|
|
152
|
+
- Production build integration
|
|
153
|
+
- Requires: Wrangler 4.0.0+, `@cloudflare/vite-plugin` 1.0.0+
|
|
154
|
+
|
|
155
|
+
### Key Compatibility Dates
|
|
156
|
+
|
|
157
|
+
| Date | Feature | Impact |
|
|
158
|
+
|------|---------|--------|
|
|
159
|
+
| `2025-04-01` | Navigation request optimization | SPAs skip Worker for navigation, reducing costs |
|
|
160
|
+
|
|
161
|
+
Use current date for new projects. See [Compatibility Dates](https://developers.cloudflare.com/workers/configuration/compatibility-dates/) for full list.
|
|
162
|
+
|
|
163
|
+
### Environment-Specific Configuration
|
|
164
|
+
|
|
165
|
+
Use `wrangler.jsonc` environments for different configs:
|
|
166
|
+
|
|
167
|
+
```jsonc
|
|
168
|
+
{
|
|
169
|
+
"name": "my-worker",
|
|
170
|
+
"assets": { "directory": "./dist" },
|
|
171
|
+
"env": {
|
|
172
|
+
"staging": {
|
|
173
|
+
"assets": {
|
|
174
|
+
"not_found_handling": "404-page"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"production": {
|
|
178
|
+
"assets": {
|
|
179
|
+
"not_found_handling": "single-page-application"
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Deploy with: `wrangler deploy --env staging`
|
|
@@ -0,0 +1,162 @@
|
|
|
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 Env {
|
|
45
|
+
ASSETS: Fetcher;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Common Errors
|
|
50
|
+
|
|
51
|
+
### "Asset not found"
|
|
52
|
+
|
|
53
|
+
**Cause:** Asset not in assets directory, wrong path, or assets not deployed
|
|
54
|
+
**Solution:** Verify asset exists, check path case-sensitivity, redeploy if needed
|
|
55
|
+
|
|
56
|
+
### "Worker not invoked for asset"
|
|
57
|
+
|
|
58
|
+
**Cause:** Asset served directly, `run_worker_first` not configured
|
|
59
|
+
**Solution:** Configure `run_worker_first` patterns to include asset routes (see configuration.md:66-106)
|
|
60
|
+
|
|
61
|
+
### "429 Too Many Requests on free tier"
|
|
62
|
+
|
|
63
|
+
**Cause:** `run_worker_first` patterns invoke Worker for many requests, hitting free tier limits (100k req/day)
|
|
64
|
+
**Solution:** Use more selective patterns with negative exclusions, or upgrade to paid plan
|
|
65
|
+
|
|
66
|
+
### "Smart Placement increases latency"
|
|
67
|
+
|
|
68
|
+
**Cause:** `run_worker_first=true` + Smart Placement routes all requests through single smart-placed location
|
|
69
|
+
**Solution:** Use selective patterns (array syntax) or disable Smart Placement for asset-heavy apps
|
|
70
|
+
|
|
71
|
+
### "CF-Cache-Status header unreliable"
|
|
72
|
+
|
|
73
|
+
**Cause:** Header is probabilistically added for privacy reasons
|
|
74
|
+
**Solution:** Don't rely on `CF-Cache-Status` for critical routing logic. Use other signals (ETag, age).
|
|
75
|
+
|
|
76
|
+
### "JWT expired during deployment"
|
|
77
|
+
|
|
78
|
+
**Cause:** Large asset deployments exceed JWT token lifetime
|
|
79
|
+
**Solution:** Update to Wrangler 4.34.0+ (automatic token refresh), or reduce asset count
|
|
80
|
+
|
|
81
|
+
### "Cannot use 'assets' with 'site'"
|
|
82
|
+
|
|
83
|
+
**Cause:** Legacy `site` config conflicts with new `assets` config
|
|
84
|
+
**Solution:** Migrate from `site` to `assets` (see configuration.md). Remove `site` key from wrangler.jsonc.
|
|
85
|
+
|
|
86
|
+
### "Assets not updating after deployment"
|
|
87
|
+
|
|
88
|
+
**Cause:** Browser or CDN cache serving old assets
|
|
89
|
+
**Solution:**
|
|
90
|
+
- Hard refresh browser (Cmd+Shift+R / Ctrl+F5)
|
|
91
|
+
- Use cache-busting (hashed filenames)
|
|
92
|
+
- Verify deployment completed: `wrangler tail`
|
|
93
|
+
|
|
94
|
+
## Limits
|
|
95
|
+
|
|
96
|
+
| Resource/Limit | Free | Paid | Notes |
|
|
97
|
+
|----------------|------|------|-------|
|
|
98
|
+
| Max asset size | 25 MiB | 25 MiB | Per file |
|
|
99
|
+
| Total assets | 20,000 | **100,000** | Requires Wrangler 4.34.0+ (Sep 2025) |
|
|
100
|
+
| Worker invocations | 100k/day | 10M/month | Optimize with `run_worker_first` patterns |
|
|
101
|
+
| Asset storage | Unlimited | Unlimited | Included |
|
|
102
|
+
|
|
103
|
+
### Version Requirements
|
|
104
|
+
|
|
105
|
+
| Feature | Minimum Wrangler Version |
|
|
106
|
+
|---------|--------------------------|
|
|
107
|
+
| 100k file limit (paid) | 4.34.0 |
|
|
108
|
+
| Vite plugin | 4.0.0 + @cloudflare/vite-plugin 1.0.0 |
|
|
109
|
+
| Navigation optimization | 4.0.0 + compatibility_date: "2025-04-01" |
|
|
110
|
+
|
|
111
|
+
## Performance Tips
|
|
112
|
+
|
|
113
|
+
### 1. Use Hashed Filenames
|
|
114
|
+
|
|
115
|
+
Enable long-term caching with content-hashed filenames:
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
app.a3b2c1d4.js
|
|
119
|
+
styles.e5f6g7h8.css
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Most bundlers (Vite, Webpack, Parcel) do this automatically.
|
|
123
|
+
|
|
124
|
+
### 2. Minimize Worker Invocations
|
|
125
|
+
|
|
126
|
+
Serve assets directly when possible:
|
|
127
|
+
|
|
128
|
+
```jsonc
|
|
129
|
+
{
|
|
130
|
+
"assets": {
|
|
131
|
+
// Only invoke Worker for dynamic routes
|
|
132
|
+
"run_worker_first": ["/api/*", "/auth/*"]
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 3. Leverage Browser Cache
|
|
138
|
+
|
|
139
|
+
Set appropriate `Cache-Control` headers:
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// Versioned assets
|
|
143
|
+
'Cache-Control': 'public, max-age=31536000, immutable'
|
|
144
|
+
|
|
145
|
+
// HTML (revalidate often)
|
|
146
|
+
'Cache-Control': 'public, max-age=0, must-revalidate'
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
See patterns.md:169-189 for implementation.
|
|
150
|
+
|
|
151
|
+
### 4. Use .assetsignore
|
|
152
|
+
|
|
153
|
+
Reduce upload time by excluding unnecessary files:
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
*.map
|
|
157
|
+
*.md
|
|
158
|
+
.DS_Store
|
|
159
|
+
node_modules/
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
See configuration.md:107-126 for details.
|
|
@@ -0,0 +1,189 @@
|
|
|
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);
|
|
43
|
+
if (url.pathname === '/') {
|
|
44
|
+
return env.ASSETS.fetch('/index.html');
|
|
45
|
+
}
|
|
46
|
+
return env.ASSETS.fetch(request);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**6. SPA with API routes:**
|
|
52
|
+
|
|
53
|
+
Most common full-stack pattern - static SPA with backend API:
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
export default {
|
|
57
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
58
|
+
const url = new URL(request.url);
|
|
59
|
+
if (url.pathname.startsWith('/api/')) {
|
|
60
|
+
return handleAPI(request, env);
|
|
61
|
+
}
|
|
62
|
+
return env.ASSETS.fetch(request);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
async function handleAPI(request: Request, env: Env): Promise<Response> {
|
|
67
|
+
return new Response(JSON.stringify({ status: 'ok' }), {
|
|
68
|
+
headers: { 'Content-Type': 'application/json' }
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Config:** Set `run_worker_first: ["/api/*"]` (see configuration.md:66-106)
|
|
74
|
+
|
|
75
|
+
**7. Auth gating for protected assets:**
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
export default {
|
|
79
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
80
|
+
const url = new URL(request.url);
|
|
81
|
+
if (url.pathname.startsWith('/admin/')) {
|
|
82
|
+
const session = await validateSession(request, env);
|
|
83
|
+
if (!session) {
|
|
84
|
+
return Response.redirect('/login', 302);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return env.ASSETS.fetch(request);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Config:** Set `run_worker_first: ["/admin/*"]`
|
|
93
|
+
|
|
94
|
+
**8. Custom headers for security:**
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
export default {
|
|
98
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
99
|
+
const response = await env.ASSETS.fetch(request);
|
|
100
|
+
const secureResponse = new Response(response.body, response);
|
|
101
|
+
secureResponse.headers.set('X-Frame-Options', 'DENY');
|
|
102
|
+
secureResponse.headers.set('X-Content-Type-Options', 'nosniff');
|
|
103
|
+
secureResponse.headers.set('Content-Security-Policy', "default-src 'self'");
|
|
104
|
+
return secureResponse;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**9. A/B testing via cookies:**
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
export default {
|
|
113
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
114
|
+
const cookies = request.headers.get('Cookie') || '';
|
|
115
|
+
const variant = cookies.includes('variant=b') ? 'b' : 'a';
|
|
116
|
+
const url = new URL(request.url);
|
|
117
|
+
if (url.pathname === '/') {
|
|
118
|
+
return env.ASSETS.fetch(`/index-${variant}.html`);
|
|
119
|
+
}
|
|
120
|
+
return env.ASSETS.fetch(request);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**10. Locale-based routing:**
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
export default {
|
|
129
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
130
|
+
const locale = request.headers.get('Accept-Language')?.split(',')[0] || 'en';
|
|
131
|
+
const url = new URL(request.url);
|
|
132
|
+
if (url.pathname === '/') {
|
|
133
|
+
return env.ASSETS.fetch(`/${locale}/index.html`);
|
|
134
|
+
}
|
|
135
|
+
if (!url.pathname.startsWith(`/${locale}/`)) {
|
|
136
|
+
url.pathname = `/${locale}${url.pathname}`;
|
|
137
|
+
}
|
|
138
|
+
return env.ASSETS.fetch(url);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**11. OAuth callback handling:**
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
export default {
|
|
147
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
148
|
+
const url = new URL(request.url);
|
|
149
|
+
if (url.pathname === '/auth/callback') {
|
|
150
|
+
const code = url.searchParams.get('code');
|
|
151
|
+
if (code) {
|
|
152
|
+
const session = await exchangeCode(code, env);
|
|
153
|
+
return new Response(null, {
|
|
154
|
+
status: 302,
|
|
155
|
+
headers: {
|
|
156
|
+
'Location': '/',
|
|
157
|
+
'Set-Cookie': `session=${session}; HttpOnly; Secure; SameSite=Lax`
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return env.ASSETS.fetch(request);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Config:** Set `run_worker_first: ["/auth/*"]`
|
|
168
|
+
|
|
169
|
+
**12. Cache control override:**
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
export default {
|
|
173
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
174
|
+
const response = await env.ASSETS.fetch(request);
|
|
175
|
+
const url = new URL(request.url);
|
|
176
|
+
// Immutable assets (hashed filenames)
|
|
177
|
+
if (/\.[a-f0-9]{8,}\.(js|css|png|jpg)$/.test(url.pathname)) {
|
|
178
|
+
return new Response(response.body, {
|
|
179
|
+
...response,
|
|
180
|
+
headers: {
|
|
181
|
+
...Object.fromEntries(response.headers),
|
|
182
|
+
'Cache-Control': 'public, max-age=31536000, immutable'
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return response;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
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
|
+
## Reading Order
|
|
93
|
+
|
|
94
|
+
| Order | File | Purpose | When to Use |
|
|
95
|
+
|-------|------|---------|-------------|
|
|
96
|
+
| 1 | [configuration.md](./configuration.md) | Setup SDKs, env vars, signing keys | Starting new project |
|
|
97
|
+
| 2 | [api.md](./api.md) | On-demand video APIs | Implementing uploads/playback |
|
|
98
|
+
| 3 | [api-live.md](./api-live.md) | Live streaming APIs | Building live streaming |
|
|
99
|
+
| 4 | [patterns.md](./patterns.md) | Full-stack flows, TUS, JWT signing | Implementing workflows |
|
|
100
|
+
| 5 | [gotchas.md](./gotchas.md) | Errors, limits, troubleshooting | Debugging issues |
|
|
101
|
+
|
|
102
|
+
## In This Reference
|
|
103
|
+
|
|
104
|
+
- [configuration.md](./configuration.md) - Setup, environment variables, wrangler config
|
|
105
|
+
- [api.md](./api.md) - On-demand video upload, playback, management APIs
|
|
106
|
+
- [api-live.md](./api-live.md) - Live streaming (RTMPS/SRT/WebRTC), simulcast
|
|
107
|
+
- [patterns.md](./patterns.md) - Full-stack flows, state management, best practices
|
|
108
|
+
- [gotchas.md](./gotchas.md) - Error codes, troubleshooting, limits
|
|
109
|
+
|
|
110
|
+
## See Also
|
|
111
|
+
|
|
112
|
+
- [workers](../workers/) - Deploy Stream APIs in Workers
|
|
113
|
+
- [pages](../pages/) - Integrate Stream with Pages
|
|
114
|
+
- [workers-ai](../workers-ai/) - AI-generate captions
|