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,390 @@
|
|
|
1
|
+
# Flagship API Reference
|
|
2
|
+
|
|
3
|
+
## Binding API (Workers)
|
|
4
|
+
|
|
5
|
+
The binding is available as `env.FLAGS` (type `Flagship` from `@cloudflare/workers-types`).
|
|
6
|
+
|
|
7
|
+
### Evaluation Methods
|
|
8
|
+
|
|
9
|
+
All methods are async, never throw, and return the `defaultValue` on errors.
|
|
10
|
+
|
|
11
|
+
| Method | Signature | Returns |
|
|
12
|
+
|--------|-----------|---------|
|
|
13
|
+
| `get` | `get(flagKey, defaultValue?, context?)` | `Promise<unknown>` |
|
|
14
|
+
| `getBooleanValue` | `getBooleanValue(flagKey, defaultValue, context?)` | `Promise<boolean>` |
|
|
15
|
+
| `getStringValue` | `getStringValue(flagKey, defaultValue, context?)` | `Promise<string>` |
|
|
16
|
+
| `getNumberValue` | `getNumberValue(flagKey, defaultValue, context?)` | `Promise<number>` |
|
|
17
|
+
| `getObjectValue` | `getObjectValue<T>(flagKey, defaultValue, context?)` | `Promise<T>` |
|
|
18
|
+
| `getBooleanDetails` | `getBooleanDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<boolean>>` |
|
|
19
|
+
| `getStringDetails` | `getStringDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<string>>` |
|
|
20
|
+
| `getNumberDetails` | `getNumberDetails(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<number>>` |
|
|
21
|
+
| `getObjectDetails` | `getObjectDetails<T>(flagKey, defaultValue, context?)` | `Promise<FlagshipEvaluationDetails<T>>` |
|
|
22
|
+
|
|
23
|
+
### Parameters (shared across all methods)
|
|
24
|
+
|
|
25
|
+
| Parameter | Type | Required | Description |
|
|
26
|
+
|-----------|------|----------|-------------|
|
|
27
|
+
| `flagKey` | `string` | Yes | Flag key to evaluate |
|
|
28
|
+
| `defaultValue` | varies | Yes (except `get`) | Fallback if evaluation fails or flag not found |
|
|
29
|
+
| `context` | `FlagshipEvaluationContext` | No | Attributes for targeting rules (`{ userId: "user-42", country: "US" }`) |
|
|
30
|
+
|
|
31
|
+
### Types
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
type FlagshipEvaluationContext = Record<string, string | number | boolean>;
|
|
35
|
+
|
|
36
|
+
interface FlagshipEvaluationDetails<T> {
|
|
37
|
+
flagKey: string;
|
|
38
|
+
value: T;
|
|
39
|
+
variant?: string; // name of the matched variation
|
|
40
|
+
reason?: string; // "TARGETING_MATCH" | "DEFAULT" | "DISABLED" | "SPLIT"
|
|
41
|
+
errorCode?: string; // "TYPE_MISMATCH" | "GENERAL"
|
|
42
|
+
errorMessage?: string;
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Example
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
export default {
|
|
50
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
51
|
+
const enabled = await env.FLAGS.getBooleanValue("new-feature", false, {
|
|
52
|
+
userId: "user-42",
|
|
53
|
+
});
|
|
54
|
+
return new Response(enabled ? "Feature on" : "Feature off");
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## OpenFeature SDK
|
|
62
|
+
|
|
63
|
+
Package: `@cloudflare/flagship`
|
|
64
|
+
|
|
65
|
+
### Server Provider (`FlagshipServerProvider`)
|
|
66
|
+
|
|
67
|
+
For Workers, Node.js, and server-side JavaScript.
|
|
68
|
+
|
|
69
|
+
**With binding (recommended inside Workers):**
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { OpenFeature } from "@openfeature/server-sdk";
|
|
73
|
+
import { FlagshipServerProvider } from "@cloudflare/flagship";
|
|
74
|
+
|
|
75
|
+
await OpenFeature.setProviderAndWait(
|
|
76
|
+
new FlagshipServerProvider({ binding: env.FLAGS }),
|
|
77
|
+
);
|
|
78
|
+
const client = OpenFeature.getClient();
|
|
79
|
+
const enabled = await client.getBooleanValue("new-checkout", false, {
|
|
80
|
+
targetingKey: "user-42",
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**With app ID (Node.js / non-Worker runtimes):**
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { OpenFeature } from "@openfeature/server-sdk";
|
|
88
|
+
import { FlagshipServerProvider } from "@cloudflare/flagship";
|
|
89
|
+
|
|
90
|
+
await OpenFeature.setProviderAndWait(
|
|
91
|
+
new FlagshipServerProvider({
|
|
92
|
+
appId: "<APP_ID>",
|
|
93
|
+
accountId: "<ACCOUNT_ID>",
|
|
94
|
+
authToken: "<API_TOKEN>",
|
|
95
|
+
}),
|
|
96
|
+
);
|
|
97
|
+
const client = OpenFeature.getClient();
|
|
98
|
+
const enabled = await client.getBooleanValue("new-checkout", false, {
|
|
99
|
+
targetingKey: "user-42",
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Client Provider (`FlagshipClientProvider`)
|
|
104
|
+
|
|
105
|
+
For browser applications. Pre-fetches flags on init, evaluates synchronously.
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { OpenFeature } from "@openfeature/web-sdk";
|
|
109
|
+
import { FlagshipClientProvider } from "@cloudflare/flagship";
|
|
110
|
+
|
|
111
|
+
await OpenFeature.setProviderAndWait(
|
|
112
|
+
new FlagshipClientProvider({
|
|
113
|
+
appId: "<APP_ID>",
|
|
114
|
+
accountId: "<ACCOUNT_ID>",
|
|
115
|
+
authToken: "<API_TOKEN>",
|
|
116
|
+
prefetchFlags: ["promo-banner", "dark-mode"],
|
|
117
|
+
}),
|
|
118
|
+
);
|
|
119
|
+
await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
|
|
120
|
+
const client = OpenFeature.getClient();
|
|
121
|
+
|
|
122
|
+
// Synchronous — no await needed
|
|
123
|
+
const showBanner = client.getBooleanValue("promo-banner", false);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Important:** Only flags listed in `prefetchFlags` are available. Unlisted flags return `FLAG_NOT_FOUND`.
|
|
127
|
+
|
|
128
|
+
### SDK Hooks
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import { LoggingHook, TelemetryHook } from "@cloudflare/flagship";
|
|
132
|
+
OpenFeature.addHooks(new LoggingHook(), new TelemetryHook());
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## REST API (Flag Management)
|
|
138
|
+
|
|
139
|
+
Source of truth: [Cloudflare Flagship API reference](https://developers.cloudflare.com/api/resources/flagship/). Use it to verify REST paths, envelopes, response fields, and permission wording before relying on examples here.
|
|
140
|
+
|
|
141
|
+
### FIRST: Check Prerequisites
|
|
142
|
+
|
|
143
|
+
Before making any REST API calls (create, read, update, delete, toggle flags), verify these environment variables are set:
|
|
144
|
+
|
|
145
|
+
| Variable | Purpose | How to get |
|
|
146
|
+
|----------|---------|------------|
|
|
147
|
+
| `CLOUDFLARE_ACCOUNT_ID` | Account identifier | Dashboard URL or `wrangler whoami` |
|
|
148
|
+
| `CLOUDFLARE_API_TOKEN` | Bearer token for API auth | [Create API token](https://dash.cloudflare.com/profile/api-tokens) with Flagship permissions |
|
|
149
|
+
| `FLAGSHIP_APP_ID` | Target app UUID | Dashboard under **Compute > Flagship**, or `GET /apps` endpoint |
|
|
150
|
+
|
|
151
|
+
Check with:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
echo "CLOUDFLARE_ACCOUNT_ID=${CLOUDFLARE_ACCOUNT_ID:-(not set)}"
|
|
155
|
+
echo "CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN:-(not set)}"
|
|
156
|
+
echo "FLAGSHIP_APP_ID=${FLAGSHIP_APP_ID:-(not set)}"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**If any are missing, ask the user to provide them before proceeding.**
|
|
160
|
+
|
|
161
|
+
### Base URL and Auth
|
|
162
|
+
|
|
163
|
+
Base URL: `https://api.cloudflare.com/client/v4/accounts/{account_id}/flagship`
|
|
164
|
+
|
|
165
|
+
Authentication: `Authorization: Bearer <API_TOKEN>`
|
|
166
|
+
|
|
167
|
+
Management endpoints use the Cloudflare v4 envelope. On success, the payload is under `result`; errors are an array under `errors`.
|
|
168
|
+
|
|
169
|
+
```jsonc
|
|
170
|
+
// Success
|
|
171
|
+
{ "success": true, "result": <T>, "errors": [], "messages": [] }
|
|
172
|
+
|
|
173
|
+
// Paginated success
|
|
174
|
+
{
|
|
175
|
+
"success": true,
|
|
176
|
+
"result": [<T>],
|
|
177
|
+
"result_info": { "count": 50, "cursor": "next-cursor-or-null" },
|
|
178
|
+
"errors": [],
|
|
179
|
+
"messages": []
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Error
|
|
183
|
+
{ "success": false, "result": null, "errors": [{ "message": "message" }], "messages": [] }
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### App Endpoints
|
|
187
|
+
|
|
188
|
+
| Method | Path | Description |
|
|
189
|
+
|--------|------|-------------|
|
|
190
|
+
| `GET` | `/apps` | List all apps |
|
|
191
|
+
| `GET` | `/apps/{app_id}` | Get app |
|
|
192
|
+
| `POST` | `/apps` | Create app (`{ "name": "my-app" }`) |
|
|
193
|
+
| `PUT` | `/apps/{app_id}` | Update app (`{ "name": "new-name" }`) |
|
|
194
|
+
| `DELETE` | `/apps/{app_id}` | Delete app |
|
|
195
|
+
|
|
196
|
+
App name constraints: alphanumeric + hyphens + underscores, 1-64 chars.
|
|
197
|
+
|
|
198
|
+
### Flag Endpoints
|
|
199
|
+
|
|
200
|
+
| Method | Path | Description |
|
|
201
|
+
|--------|------|-------------|
|
|
202
|
+
| `GET` | `/apps/{app_id}/flags?limit=50&cursor=<cursor>` | List flags (paginated) |
|
|
203
|
+
| `GET` | `/apps/{app_id}/flags/{flag_key}` | Get flag |
|
|
204
|
+
| `POST` | `/apps/{app_id}/flags` | Create flag |
|
|
205
|
+
| `PUT` | `/apps/{app_id}/flags/{flag_key}` | Update flag (full replace) |
|
|
206
|
+
| `DELETE` | `/apps/{app_id}/flags/{flag_key}` | Delete flag |
|
|
207
|
+
| `GET` | `/apps/{app_id}/flags/{flag_key}/changelog?limit=20&cursor=<cursor>` | Flag changelog |
|
|
208
|
+
|
|
209
|
+
### Evaluate Endpoint
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
GET /apps/{app_id}/evaluate?flagKey=<key>&<context-attrs>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Requires an API token with the `com.cloudflare.account.flagship.evaluate` permission. Context attributes passed as query params. This endpoint is not wrapped in the management envelope; the SDK contract returns OpenFeature-style camelCase:
|
|
216
|
+
|
|
217
|
+
```json
|
|
218
|
+
{
|
|
219
|
+
"flagKey": "my-flag",
|
|
220
|
+
"value": true,
|
|
221
|
+
"variant": "on",
|
|
222
|
+
"reason": "SPLIT"
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Reasons: `TARGETING_MATCH`, `SPLIT`, `DEFAULT`, `DISABLED`.
|
|
227
|
+
|
|
228
|
+
### Management Response Payloads
|
|
229
|
+
|
|
230
|
+
Management endpoints are wrapped in the Cloudflare v4 envelope shown above. Common `.result` payloads:
|
|
231
|
+
|
|
232
|
+
**App result**
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"id": "app-uuid",
|
|
237
|
+
"name": "my-app",
|
|
238
|
+
"created_at": "2026-06-09T12:00:00.000Z",
|
|
239
|
+
"updated_at": "2026-06-09T12:00:00.000Z",
|
|
240
|
+
"updated_by": "user@example.com"
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Flag result**
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"key": "my-flag",
|
|
249
|
+
"type": "boolean",
|
|
250
|
+
"default_variation": "off",
|
|
251
|
+
"variations": { "on": true, "off": false },
|
|
252
|
+
"rules": [],
|
|
253
|
+
"description": "Enables the new feature",
|
|
254
|
+
"enabled": true,
|
|
255
|
+
"updated_at": "2026-06-09T12:00:00.000Z",
|
|
256
|
+
"updated_by": "user@example.com"
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Changelog entry**
|
|
261
|
+
|
|
262
|
+
```json
|
|
263
|
+
{
|
|
264
|
+
"flag_key": "my-flag",
|
|
265
|
+
"event": "update",
|
|
266
|
+
"after": { "key": "my-flag", "default_variation": "off", "variations": { "on": true, "off": false }, "rules": [], "enabled": true },
|
|
267
|
+
"diff": { "enabled": { "from": false, "to": true } }
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Changelog entries include the full flag state after the change. `update` entries also include `diff`.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## FlagDefinition Schema
|
|
276
|
+
|
|
277
|
+
```json
|
|
278
|
+
{
|
|
279
|
+
"key": "my-flag",
|
|
280
|
+
"type": "boolean",
|
|
281
|
+
"default_variation": "off",
|
|
282
|
+
"variations": {
|
|
283
|
+
"on": true,
|
|
284
|
+
"off": false
|
|
285
|
+
},
|
|
286
|
+
"rules": [
|
|
287
|
+
{
|
|
288
|
+
"priority": 1,
|
|
289
|
+
"conditions": [
|
|
290
|
+
{
|
|
291
|
+
"attribute": "email",
|
|
292
|
+
"operator": "ends_with",
|
|
293
|
+
"value": "@cloudflare.com"
|
|
294
|
+
}
|
|
295
|
+
],
|
|
296
|
+
"serve_variation": "on",
|
|
297
|
+
"rollout": { "percentage": 100 }
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
"description": "Enables the new feature",
|
|
301
|
+
"enabled": true
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Field Constraints
|
|
306
|
+
|
|
307
|
+
| Field | Type | Constraints |
|
|
308
|
+
|-------|------|-------------|
|
|
309
|
+
| `key` | string | 1-64 chars, `/^[a-zA-Z0-9_-]+$/` |
|
|
310
|
+
| `type` | enum | Optional. `boolean`, `string`, `number`, `json` (auto-inferred from variations) |
|
|
311
|
+
| `default_variation` | string | Must be a key in `variations` |
|
|
312
|
+
| `variations` | `Record<string, T>` | At least one. All values same type. Keys: alphanumeric/hyphens/underscores, max 64 chars. Values max 10KB. |
|
|
313
|
+
| `rules` | `Rule[]` | Can be empty. No duplicate priorities. |
|
|
314
|
+
| `description` | string? | Max 512 chars, nullable |
|
|
315
|
+
| `enabled` | boolean | Required. `false` = always returns default variation. |
|
|
316
|
+
|
|
317
|
+
### Rule Schema
|
|
318
|
+
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"priority": 1,
|
|
322
|
+
"conditions": [ /* Condition[] */ ],
|
|
323
|
+
"serve_variation": "on",
|
|
324
|
+
"rollout": { "percentage": 50, "attribute": "targetingKey" }
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
- `priority`: integer >= 1, unique across rules in the flag (lower = evaluated first)
|
|
329
|
+
- `conditions`: array of base or logical conditions
|
|
330
|
+
- `serve_variation`: must be a key in `variations`
|
|
331
|
+
- `rollout`: optional. `percentage` 0-100. `attribute` defaults to `targetingKey`.
|
|
332
|
+
|
|
333
|
+
### Condition Schema
|
|
334
|
+
|
|
335
|
+
**Base condition:**
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{ "attribute": "email", "operator": "ends_with", "value": "@cloudflare.com" }
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Logical condition (AND/OR):**
|
|
342
|
+
|
|
343
|
+
```json
|
|
344
|
+
{
|
|
345
|
+
"logical_operator": "AND",
|
|
346
|
+
"clauses": [
|
|
347
|
+
{ "attribute": "country", "operator": "equals", "value": "US" },
|
|
348
|
+
{ "attribute": "plan", "operator": "in", "value": ["enterprise", "business"] }
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Nesting supported up to 6 levels deep.
|
|
354
|
+
|
|
355
|
+
### Operators
|
|
356
|
+
|
|
357
|
+
| Operator | Description | Value Type |
|
|
358
|
+
|----------|-------------|------------|
|
|
359
|
+
| `equals` | Exact match (case-sensitive) | String |
|
|
360
|
+
| `not_equals` | Not exact match | String |
|
|
361
|
+
| `greater_than` | Numeric / datetime > | Number, ISO 8601 |
|
|
362
|
+
| `less_than` | Numeric / datetime < | Number, ISO 8601 |
|
|
363
|
+
| `greater_than_or_equals` | >= | Number, ISO 8601 |
|
|
364
|
+
| `less_than_or_equals` | <= | Number, ISO 8601 |
|
|
365
|
+
| `contains` | Substring match (case-sensitive) | String |
|
|
366
|
+
| `starts_with` | Prefix match | String |
|
|
367
|
+
| `ends_with` | Suffix match | String |
|
|
368
|
+
| `in` | Value in array | Array |
|
|
369
|
+
| `not_in` | Value not in array | Array |
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Rate Limits
|
|
374
|
+
|
|
375
|
+
| Operation | Limit |
|
|
376
|
+
|-----------|-------|
|
|
377
|
+
| Mutations (POST/PUT/DELETE) | 60 per 60s per account:app |
|
|
378
|
+
| Reads (GET) | 600 per 60s per account:app |
|
|
379
|
+
|
|
380
|
+
## Error Codes
|
|
381
|
+
|
|
382
|
+
| HTTP Status | Meaning |
|
|
383
|
+
|-------------|---------|
|
|
384
|
+
| 200 | Success (read/update/delete) |
|
|
385
|
+
| 201 | Created (create) |
|
|
386
|
+
| 400 | Validation error (check `errors[].message`) |
|
|
387
|
+
| 401 | Invalid or missing token |
|
|
388
|
+
| 404 | Flag or app not found |
|
|
389
|
+
| 409 | Flag key already exists (create) |
|
|
390
|
+
| 429 | Rate limited |
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Flagship Configuration
|
|
2
|
+
|
|
3
|
+
## Wrangler Binding Setup
|
|
4
|
+
|
|
5
|
+
Add a Flagship binding to your Wrangler config to access flags via `env.FLAGS`.
|
|
6
|
+
|
|
7
|
+
### Single App
|
|
8
|
+
|
|
9
|
+
```jsonc
|
|
10
|
+
// wrangler.jsonc
|
|
11
|
+
{
|
|
12
|
+
"flagship": {
|
|
13
|
+
"binding": "FLAGS",
|
|
14
|
+
"app_id": "<APP_ID>"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```toml
|
|
20
|
+
# wrangler.toml
|
|
21
|
+
[flagship]
|
|
22
|
+
binding = "FLAGS"
|
|
23
|
+
app_id = "<APP_ID>"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Multiple Apps
|
|
27
|
+
|
|
28
|
+
```jsonc
|
|
29
|
+
// wrangler.jsonc
|
|
30
|
+
{
|
|
31
|
+
"flagship": [
|
|
32
|
+
{
|
|
33
|
+
"binding": "FLAGS",
|
|
34
|
+
"app_id": "<APP_ID_1>"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"binding": "EXPERIMENT_FLAGS",
|
|
38
|
+
"app_id": "<APP_ID_2>"
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```toml
|
|
45
|
+
# wrangler.toml
|
|
46
|
+
[[flagship]]
|
|
47
|
+
binding = "FLAGS"
|
|
48
|
+
app_id = "<APP_ID_1>"
|
|
49
|
+
|
|
50
|
+
[[flagship]]
|
|
51
|
+
binding = "EXPERIMENT_FLAGS"
|
|
52
|
+
app_id = "<APP_ID_2>"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Generate Types
|
|
56
|
+
|
|
57
|
+
After adding the binding, generate TypeScript types:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx wrangler types
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This creates the `Env` interface with each binding typed as `Flagship`:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
interface Env {
|
|
67
|
+
FLAGS: Flagship;
|
|
68
|
+
EXPERIMENT_FLAGS: Flagship; // if multiple
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The `Flagship` type comes from `@cloudflare/workers-types`.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## OpenFeature SDK Installation
|
|
77
|
+
|
|
78
|
+
### Server-Side (Workers, Node.js)
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
npm i @cloudflare/flagship @openfeature/server-sdk
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Browser
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
npm i @cloudflare/flagship @openfeature/web-sdk
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## SDK Provider Setup
|
|
93
|
+
|
|
94
|
+
### Server Provider — With Binding (Workers)
|
|
95
|
+
|
|
96
|
+
Recommended approach inside Workers. No HTTP overhead, auth handled automatically.
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { OpenFeature } from "@openfeature/server-sdk";
|
|
100
|
+
import { FlagshipServerProvider } from "@cloudflare/flagship";
|
|
101
|
+
|
|
102
|
+
export default {
|
|
103
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
104
|
+
await OpenFeature.setProviderAndWait(
|
|
105
|
+
new FlagshipServerProvider({ binding: env.FLAGS }),
|
|
106
|
+
);
|
|
107
|
+
const client = OpenFeature.getClient();
|
|
108
|
+
// ... evaluate flags
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Server Provider — With App ID (Node.js)
|
|
114
|
+
|
|
115
|
+
For non-Worker runtimes. Requires an API token with Flagship read permissions.
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
import { OpenFeature } from "@openfeature/server-sdk";
|
|
119
|
+
import { FlagshipServerProvider } from "@cloudflare/flagship";
|
|
120
|
+
|
|
121
|
+
await OpenFeature.setProviderAndWait(
|
|
122
|
+
new FlagshipServerProvider({
|
|
123
|
+
appId: "<APP_ID>",
|
|
124
|
+
accountId: "<ACCOUNT_ID>",
|
|
125
|
+
authToken: "<API_TOKEN>",
|
|
126
|
+
}),
|
|
127
|
+
);
|
|
128
|
+
const client = OpenFeature.getClient();
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Client Provider (Browser)
|
|
132
|
+
|
|
133
|
+
Pre-fetches flags on init, then evaluates synchronously. Only `prefetchFlags` are available.
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { OpenFeature } from "@openfeature/web-sdk";
|
|
137
|
+
import { FlagshipClientProvider } from "@cloudflare/flagship";
|
|
138
|
+
|
|
139
|
+
await OpenFeature.setProviderAndWait(
|
|
140
|
+
new FlagshipClientProvider({
|
|
141
|
+
appId: "<APP_ID>",
|
|
142
|
+
accountId: "<ACCOUNT_ID>",
|
|
143
|
+
authToken: "<API_TOKEN>",
|
|
144
|
+
prefetchFlags: ["promo-banner", "dark-mode", "max-uploads"],
|
|
145
|
+
}),
|
|
146
|
+
);
|
|
147
|
+
await OpenFeature.setContext({ targetingKey: "user-42", plan: "enterprise" });
|
|
148
|
+
const client = OpenFeature.getClient();
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Provider Options Reference
|
|
152
|
+
|
|
153
|
+
**FlagshipServerProvider:**
|
|
154
|
+
|
|
155
|
+
| Option | Type | Required | Description |
|
|
156
|
+
|--------|------|----------|-------------|
|
|
157
|
+
| `binding` | `Flagship` | No | Binding from `env.FLAGS`. Use inside Workers. |
|
|
158
|
+
| `appId` | string | No | App ID from dashboard. Required without binding. |
|
|
159
|
+
| `accountId` | string | No | Cloudflare account ID. Required without binding. |
|
|
160
|
+
| `authToken` | string | No | API token with Flagship read permissions. Required without binding. |
|
|
161
|
+
|
|
162
|
+
Provide either `binding` or all three of `appId` + `accountId` + `authToken`.
|
|
163
|
+
|
|
164
|
+
**FlagshipClientProvider:**
|
|
165
|
+
|
|
166
|
+
| Option | Type | Required | Description |
|
|
167
|
+
|--------|------|----------|-------------|
|
|
168
|
+
| `appId` | string | Yes | App ID from dashboard |
|
|
169
|
+
| `accountId` | string | Yes | Cloudflare account ID |
|
|
170
|
+
| `authToken` | string | Yes | API token with Flagship read permissions |
|
|
171
|
+
| `prefetchFlags` | string[] | Yes | Flag keys to prefetch. Unlisted flags return `FLAG_NOT_FOUND`. |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## REST API Authentication
|
|
176
|
+
|
|
177
|
+
For managing flags via the REST API (create, update, delete), set these environment variables:
|
|
178
|
+
|
|
179
|
+
| Variable | Description |
|
|
180
|
+
|----------|-------------|
|
|
181
|
+
| `CLOUDFLARE_ACCOUNT_ID` | Your Cloudflare account ID |
|
|
182
|
+
| `CLOUDFLARE_API_TOKEN` | API token with Flagship permissions |
|
|
183
|
+
| `FLAGSHIP_APP_ID` | Target app UUID (from dashboard under **Compute > Flagship**, or `GET /apps`) |
|
|
184
|
+
|
|
185
|
+
Base URL: `https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/flagship`
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
curl -s -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
189
|
+
"https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/flagship/apps" | jq .
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
App IDs are shown in the Cloudflare dashboard under **Compute > Flagship**.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Local Development
|
|
197
|
+
|
|
198
|
+
Flagship bindings work in local dev with `wrangler dev`. Flag evaluation uses the live Flagship configuration — there is no local flag store. Ensure the `app_id` in your Wrangler config points to a valid app.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
npx wrangler dev
|
|
202
|
+
```
|