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,124 @@
|
|
|
1
|
+
# Pipelines API Reference
|
|
2
|
+
|
|
3
|
+
Code templates and verified behavior. For the full SQL function set and HTTP status semantics, pull `https://developers.cloudflare.com/pipelines/sql-reference/` and the streams docs.
|
|
4
|
+
|
|
5
|
+
## Worker Binding Interface
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// from cloudflare:pipelines / @cloudflare/workers-types
|
|
9
|
+
interface Pipeline<T = any> { send(records: T[]): Promise<void>; }
|
|
10
|
+
|
|
11
|
+
interface Env { MY_STREAM: Pipeline; }
|
|
12
|
+
|
|
13
|
+
export default {
|
|
14
|
+
async fetch(req: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
15
|
+
await env.MY_STREAM.send([{ event_id: crypto.randomUUID(), amount: 29.99 }]);
|
|
16
|
+
return new Response("OK");
|
|
17
|
+
}
|
|
18
|
+
} satisfies ExportedHandler<Env>;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- `send()` takes an **array**, returns `Promise<void>` (no confirmation payload).
|
|
22
|
+
- Throws on network errors — wrap in try/catch or use `ctx.waitUntil()` for fire-and-forget.
|
|
23
|
+
- Validation errors are **not** thrown here (deferred during processing — see [gotchas.md](gotchas.md)).
|
|
24
|
+
- Payload/rate limits apply — check `https://developers.cloudflare.com/pipelines/platform/limits/` before sizing batches.
|
|
25
|
+
|
|
26
|
+
## HTTP Ingest
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
https://{stream-id}.ingest.cloudflare.com
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Get `{stream-id}` from `npx wrangler pipelines streams list`.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Batch (preferred)
|
|
36
|
+
curl -X POST https://{stream-id}.ingest.cloudflare.com \
|
|
37
|
+
-H "Content-Type: application/json" \
|
|
38
|
+
-d '[{"event_id":"evt-1","amount":29.99},{"event_id":"evt-2","amount":14.99}]'
|
|
39
|
+
|
|
40
|
+
# Single event — auto-wrapped in an array
|
|
41
|
+
curl -X POST https://{stream-id}.ingest.cloudflare.com \
|
|
42
|
+
-H "Content-Type: application/json" -d '{"event_id":"evt-3","amount":9.99}'
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If stream auth is enabled, add `-H "Authorization: Bearer $TOKEN"` (token needs **Workers Pipelines Send**). Standard HTTP status codes apply (400 invalid, 401 auth, 413 too large, 429 rate-limited, 5xx retry).
|
|
46
|
+
|
|
47
|
+
> **JSON only** — no Avro, Protobuf, or CSV input.
|
|
48
|
+
|
|
49
|
+
## REST Management API
|
|
50
|
+
|
|
51
|
+
Base: `https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pipelines/v1`
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# List
|
|
55
|
+
curl -s "$BASE_URL/streams" -H "Authorization: Bearer $API_TOKEN"
|
|
56
|
+
curl -s "$BASE_URL/sinks" -H "Authorization: Bearer $API_TOKEN"
|
|
57
|
+
curl -s "$BASE_URL/pipelines" -H "Authorization: Bearer $API_TOKEN"
|
|
58
|
+
|
|
59
|
+
# Get one (pipeline GET includes status + failure_reason — useful for debugging)
|
|
60
|
+
curl -s "$BASE_URL/pipelines/{pipeline-id}" -H "Authorization: Bearer $API_TOKEN"
|
|
61
|
+
|
|
62
|
+
# Delete in reverse order: pipeline → sink → stream
|
|
63
|
+
curl -X DELETE "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
64
|
+
curl -X DELETE "$BASE_URL/sinks/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
65
|
+
curl -X DELETE "$BASE_URL/streams/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> `wrangler pipelines delete` defaults to "no" non-interactively — use the REST API for automated cleanup. Deleting a stream removes buffered events and dependent pipelines.
|
|
69
|
+
|
|
70
|
+
### Pipeline Lifecycle States
|
|
71
|
+
|
|
72
|
+
| Status | Meaning |
|
|
73
|
+
|--------|---------|
|
|
74
|
+
| `running` | Active, processing events |
|
|
75
|
+
| `initializing` | Starting up (minutes after creation or recovery) |
|
|
76
|
+
| `failed` | Stopped on error — check `failure_reason` (expired token, deleted bucket, disabled catalog) |
|
|
77
|
+
|
|
78
|
+
> A `GET` on a sink shows `schema.fields: []` — expected. The sink inherits schema from the stream via the pipeline SQL.
|
|
79
|
+
|
|
80
|
+
## Pipeline SQL (Transforms)
|
|
81
|
+
|
|
82
|
+
Row-level only — no GROUP BY/aggregation. CTEs (`WITH`) and `UNNEST` are supported. Full function list: `https://developers.cloudflare.com/pipelines/sql-reference/`.
|
|
83
|
+
|
|
84
|
+
```sql
|
|
85
|
+
-- Passthrough / filter / enrich
|
|
86
|
+
INSERT INTO my_sink SELECT * FROM my_stream;
|
|
87
|
+
INSERT INTO my_sink SELECT * FROM my_stream WHERE amount > 10;
|
|
88
|
+
INSERT INTO my_sink
|
|
89
|
+
SELECT event_id, UPPER(category) AS category, amount * 1.1 AS amount_with_tax
|
|
90
|
+
FROM my_stream;
|
|
91
|
+
|
|
92
|
+
-- CTE
|
|
93
|
+
WITH filtered AS (SELECT event_id, amount FROM my_stream WHERE amount > 50)
|
|
94
|
+
INSERT INTO my_sink SELECT * FROM filtered;
|
|
95
|
+
|
|
96
|
+
-- UNNEST arrays (one per SELECT)
|
|
97
|
+
SELECT UNNEST(tags) AS tag FROM my_stream;
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Supported categories: string, regex, hashing (`sha256`), JSON extraction, timestamp conversion, conditional (`CASE`), `CAST`, `COALESCE`, math/comparison operators.
|
|
101
|
+
|
|
102
|
+
## Verifying End-to-End Data Flow
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# 1. Pipeline running (not initializing/failed)?
|
|
106
|
+
curl -s "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
107
|
+
|
|
108
|
+
# 2. Table created yet? (3–7 min on first flush)
|
|
109
|
+
curl -s "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/r2-catalog/$BUCKET/namespaces/my_ns/tables" \
|
|
110
|
+
-H "Authorization: Bearer $API_TOKEN"
|
|
111
|
+
|
|
112
|
+
# 3. Data present? (R2 SQL)
|
|
113
|
+
curl -s -X POST \
|
|
114
|
+
"https://api.sql.cloudflarestorage.com/api/v1/accounts/$ACCOUNT_ID/r2-sql/query/$BUCKET" \
|
|
115
|
+
-H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \
|
|
116
|
+
-d '{"query": "SELECT COUNT(*) AS total FROM my_ns.my_table"}'
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
> Expect **3–7 minutes** from first send to first queryable data. Subsequent flushes are much faster.
|
|
120
|
+
|
|
121
|
+
## See Also
|
|
122
|
+
|
|
123
|
+
- [configuration.md](configuration.md) — creating resources · [patterns.md](patterns.md) — producers, Logpush, observability
|
|
124
|
+
- [r2-sql/api.md](../r2-sql/api.md) — querying results
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Pipelines Configuration
|
|
2
|
+
|
|
3
|
+
Templates for creating streams, sinks, and pipelines via CLI, REST, or Terraform. For the full flag/field list and allowed values, pull `https://developers.cloudflare.com/pipelines/reference/wrangler-commands/` and the streams/sinks/pipelines docs.
|
|
4
|
+
|
|
5
|
+
## Naming Rules
|
|
6
|
+
|
|
7
|
+
- **Streams, sinks, pipelines** use underscores: `my_stream`, `my_sink`, `my_pipeline`.
|
|
8
|
+
- **Buckets** use hyphens: `my-bucket`.
|
|
9
|
+
|
|
10
|
+
## Schema (Structured Streams)
|
|
11
|
+
|
|
12
|
+
Schema is a JSON object with a `fields` array; each field has `name`, `type`, `required`.
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"fields": [
|
|
17
|
+
{ "name": "event_id", "type": "string", "required": true },
|
|
18
|
+
{ "name": "amount", "type": "float64", "required": false }
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Field types include `string`, `bool`, `int32/64`, `float32/64`, `timestamp`, `json`, `binary`, `list`, `struct` (with nested `items`/`fields`). For the authoritative type list, see `https://developers.cloudflare.com/pipelines/sql-reference/sql-data-types/`.
|
|
24
|
+
|
|
25
|
+
Unstructured streams (no schema) store everything in a single `value` column.
|
|
26
|
+
|
|
27
|
+
> Pipelines auto-adds `__ingest_ts` (TIMESTAMP, day-partitioned). Do **not** include it in your schema.
|
|
28
|
+
|
|
29
|
+
## Option A: Interactive (Simplest)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx wrangler pipelines setup # creates stream + sink + pipeline, optionally bucket + catalog
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Option B: Wrangler CLI (Explicit)
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 1. Stream
|
|
39
|
+
npx wrangler pipelines streams create my_stream --schema-file schema.json
|
|
40
|
+
|
|
41
|
+
# 2. Sink — R2 Data Catalog (Iceberg). Creates the namespace + table.
|
|
42
|
+
npx wrangler pipelines sinks create my_sink \
|
|
43
|
+
--type r2-data-catalog \
|
|
44
|
+
--bucket my-bucket --namespace my_namespace --table my_table \
|
|
45
|
+
--catalog-token $API_TOKEN \
|
|
46
|
+
--compression zstd --roll-interval 300
|
|
47
|
+
|
|
48
|
+
# 2b. Sink — R2 raw Parquet (alternative)
|
|
49
|
+
npx wrangler pipelines sinks create my_sink \
|
|
50
|
+
--type r2 --bucket my-bucket --format parquet \
|
|
51
|
+
--path analytics/events --partitioning "year=%Y/month=%m/day=%d" \
|
|
52
|
+
--access-key-id $KEY --secret-access-key $SECRET
|
|
53
|
+
|
|
54
|
+
# 3. Pipeline (SQL connects stream → sink)
|
|
55
|
+
npx wrangler pipelines create my_pipeline \
|
|
56
|
+
--sql "INSERT INTO my_sink SELECT * FROM my_stream"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Tuning knobs (`--compression`, `--roll-interval`, `--roll-size`, etc.) and their allowed values/defaults change — pull the wrangler-commands and sinks docs rather than hardcoding. Rule of thumb: prod `--roll-interval 300+`, dev `10` (creates many small files).
|
|
60
|
+
|
|
61
|
+
> **⚠️ Pipelines are immutable.** SQL, schema, and sink config can't be changed — delete and recreate.
|
|
62
|
+
|
|
63
|
+
## Option C: REST API (Programmatic)
|
|
64
|
+
|
|
65
|
+
Base: `https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pipelines/v1`
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Stream
|
|
69
|
+
curl -X POST "$BASE_URL/streams" -H "Authorization: Bearer $API_TOKEN" \
|
|
70
|
+
-H "Content-Type: application/json" -d '{
|
|
71
|
+
"name": "my_stream",
|
|
72
|
+
"http": {"enabled": true, "authentication": false},
|
|
73
|
+
"schema": {"fields": [{"name": "event_id", "type": "string", "required": true}]}
|
|
74
|
+
}'
|
|
75
|
+
|
|
76
|
+
# Sink — NOTE REST field names differ from CLI flags (see table)
|
|
77
|
+
curl -X POST "$BASE_URL/sinks" -H "Authorization: Bearer $API_TOKEN" \
|
|
78
|
+
-H "Content-Type: application/json" -d '{
|
|
79
|
+
"name": "my_sink", "type": "r2_data_catalog",
|
|
80
|
+
"config": {"bucket": "my-bucket", "namespace": "my_namespace",
|
|
81
|
+
"table_name": "my_table", "token": "'$API_TOKEN'",
|
|
82
|
+
"rolling_policy": {"interval_seconds": 300}},
|
|
83
|
+
"format": {"type": "parquet"}
|
|
84
|
+
}'
|
|
85
|
+
|
|
86
|
+
# Pipeline
|
|
87
|
+
curl -X POST "$BASE_URL/pipelines" -H "Authorization: Bearer $API_TOKEN" \
|
|
88
|
+
-H "Content-Type: application/json" \
|
|
89
|
+
-d '{"name": "my_pipeline", "sql": "INSERT INTO my_sink SELECT * FROM my_stream;"}'
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**REST field names ≠ CLI flags** (common failure — not obvious from docs):
|
|
93
|
+
|
|
94
|
+
| REST (config body) | CLI flag | Gotcha |
|
|
95
|
+
|--------------------|----------|--------|
|
|
96
|
+
| `"type": "r2_data_catalog"` | `--type r2-data-catalog` | underscores vs hyphens |
|
|
97
|
+
| `"table_name"` | `--table` | different key |
|
|
98
|
+
| `"token"` | `--catalog-token` | different key |
|
|
99
|
+
| `"format": {"type": "parquet"}` | (implied) | required in REST, omitted in CLI |
|
|
100
|
+
|
|
101
|
+
## Worker Binding
|
|
102
|
+
|
|
103
|
+
```jsonc
|
|
104
|
+
// wrangler.jsonc
|
|
105
|
+
{ "pipelines": [ { "stream": "<STREAM_ID>", "binding": "MY_STREAM" } ] }
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
> Binding field is `"stream"` as of June 2026 (was `"pipeline"`, still accepted). Use the **stream ID** (`wrangler pipelines streams list`), not the pipeline ID. Redeploy after adding. Generate typed bindings with `npx wrangler types` → `Pipeline<Cloudflare.MyStreamRecord>` from `cloudflare:pipelines`.
|
|
109
|
+
|
|
110
|
+
## Terraform
|
|
111
|
+
|
|
112
|
+
Resources: `cloudflare_pipeline_stream`, `cloudflare_pipeline_sink`, `cloudflare_pipeline`. For current attribute schemas pull `https://developers.cloudflare.com/pipelines/reference/terraform/`.
|
|
113
|
+
|
|
114
|
+
```hcl
|
|
115
|
+
resource "cloudflare_pipeline_stream" "my_stream" {
|
|
116
|
+
account_id = var.cloudflare_account_id
|
|
117
|
+
name = "my_stream"
|
|
118
|
+
format = { type = "json" }
|
|
119
|
+
schema = { fields = [{ name = "value", type = "json", required = true }] }
|
|
120
|
+
http = { enabled = true, authentication = false, cors = {} }
|
|
121
|
+
worker_binding = { enabled = false }
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
resource "cloudflare_pipeline_sink" "my_sink" {
|
|
125
|
+
account_id = var.cloudflare_account_id
|
|
126
|
+
name = "my_sink"
|
|
127
|
+
type = "r2_data_catalog"
|
|
128
|
+
format = { type = "parquet" }
|
|
129
|
+
schema = { fields = [] }
|
|
130
|
+
config = {
|
|
131
|
+
account_id = var.cloudflare_account_id
|
|
132
|
+
bucket = cloudflare_r2_bucket.pipeline_bucket.name
|
|
133
|
+
table_name = "my_table"
|
|
134
|
+
token = var.catalog_token
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
resource "cloudflare_pipeline" "my_pipeline" {
|
|
139
|
+
account_id = var.cloudflare_account_id
|
|
140
|
+
name = "my_pipeline"
|
|
141
|
+
sql = "INSERT INTO ${cloudflare_pipeline_sink.my_sink.name} SELECT * FROM ${cloudflare_pipeline_stream.my_stream.name}"
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Credentials
|
|
146
|
+
|
|
147
|
+
| Type | Permission |
|
|
148
|
+
|------|------------|
|
|
149
|
+
| Catalog token (Iceberg sink) | R2 Storage Admin R&W + R2 Data Catalog R&W |
|
|
150
|
+
| R2 credentials (raw sink) | Object Read & Write |
|
|
151
|
+
| HTTP ingest token | Workers Pipelines Send (only if stream auth enabled) |
|
|
152
|
+
|
|
153
|
+
## See Also
|
|
154
|
+
|
|
155
|
+
- [api.md](api.md) — sending events, REST API, lifecycle · [gotchas.md](gotchas.md) — immutability, REST≠CLI
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Pipelines Gotchas
|
|
2
|
+
|
|
3
|
+
Non-obvious failure modes (not well covered by docs). For current limits and error semantics, pull `https://developers.cloudflare.com/pipelines/platform/limits/`.
|
|
4
|
+
|
|
5
|
+
## Events accepted but never appear (most common)
|
|
6
|
+
|
|
7
|
+
HTTP 200 / `send()` resolves, but no data in the sink. Causes:
|
|
8
|
+
|
|
9
|
+
1. **Schema validation failure** — structured streams accept then **silently drop** invalid events during processing. Validate client-side (Zod) and monitor `pipelinesUserErrorsAdaptiveGroups`.
|
|
10
|
+
2. **First-flush warm-up** — first data takes **3–7 minutes** (warm-up + namespace/table creation) even with `--roll-interval 10`. Poll ≥5 min in tests.
|
|
11
|
+
3. **Roll interval not elapsed** — default 300s.
|
|
12
|
+
4. **Silent sink failure** — deleted bucket or expired token. Check `recordsWritten > 0` but `filesWritten = 0`; inspect `failure_reason` via `GET /pipelines/{id}`.
|
|
13
|
+
|
|
14
|
+
## Everything is immutable
|
|
15
|
+
|
|
16
|
+
Cannot modify stream schema, pipeline SQL, or sink config — delete and recreate. Use version naming (`events_v1`) and keep SQL in version control.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -X DELETE "$BASE_URL/pipelines/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
20
|
+
curl -X DELETE "$BASE_URL/sinks/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
21
|
+
curl -X DELETE "$BASE_URL/streams/{id}" -H "Authorization: Bearer $API_TOKEN"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Worker binding undefined (`env.MY_STREAM`)
|
|
25
|
+
|
|
26
|
+
1. Use the **stream ID**, not pipeline ID, in `wrangler.jsonc`.
|
|
27
|
+
2. Binding field is `"stream"` (June 2026); old `"pipeline"` still works.
|
|
28
|
+
3. Redeploy after adding the binding.
|
|
29
|
+
|
|
30
|
+
## REST API field names ≠ CLI flags
|
|
31
|
+
|
|
32
|
+
`r2_data_catalog` vs `--type r2-data-catalog`, `table_name` vs `--table`, `token` vs `--catalog-token`, and `format` is required in REST but implied in CLI. See [configuration.md](configuration.md#option-c-rest-api-programmatic).
|
|
33
|
+
|
|
34
|
+
## `wrangler pipelines delete` defaults to "no"
|
|
35
|
+
|
|
36
|
+
Non-interactive environments answer "no" automatically — use REST `DELETE` for CI/automation.
|
|
37
|
+
|
|
38
|
+
## Behavioral Notes
|
|
39
|
+
|
|
40
|
+
- **`__ingest_ts` auto-added** (TIMESTAMP, day-partitioned). Don't put it in your schema.
|
|
41
|
+
- **Sinks can't target existing tables** — the sink creates its own. Use PySpark to write to existing tables.
|
|
42
|
+
- **JSON-only input** — no Avro/Protobuf/CSV.
|
|
43
|
+
- **Naming:** streams/sinks/pipelines use underscores; buckets use hyphens.
|
|
44
|
+
- **Metrics lag 5–10 min** after creation.
|
|
45
|
+
- **Pipeline SQL is row-level only** — no GROUP BY/aggregation/window functions (do aggregation in [R2 SQL](../r2-sql/) at query time). CTEs and `UNNEST` are supported.
|
|
46
|
+
|
|
47
|
+
## Debug Checklist
|
|
48
|
+
|
|
49
|
+
- [ ] Stream exists: `wrangler pipelines streams list`
|
|
50
|
+
- [ ] Pipeline `running` (not `initializing`/`failed`): `GET /pipelines/{id}`, check `failure_reason`
|
|
51
|
+
- [ ] SQL matches schema; sink token valid; bucket + catalog exist
|
|
52
|
+
- [ ] Worker redeployed; binding uses **stream ID** under `"stream"`
|
|
53
|
+
- [ ] Waited ≥5 min (first flush)
|
|
54
|
+
- [ ] Sink metrics: `filesWritten > 0`; error metrics show no drops
|
|
55
|
+
|
|
56
|
+
## See Also
|
|
57
|
+
|
|
58
|
+
- [configuration.md](configuration.md) · [api.md](api.md) · [patterns.md](patterns.md)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Pipelines Patterns
|
|
2
|
+
|
|
3
|
+
Code-first patterns. For observability dataset/field schemas and Logpush dataset lists, pull `https://developers.cloudflare.com/pipelines/observability/metrics/` and `https://developers.cloudflare.com/pipelines/streams/logpush/`.
|
|
4
|
+
|
|
5
|
+
## Fire-and-Forget Producer
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
export default {
|
|
9
|
+
async fetch(req, env, ctx) {
|
|
10
|
+
const event = { event_id: crypto.randomUUID(), event_type: "page_view", timestamp: new Date().toISOString() };
|
|
11
|
+
ctx.waitUntil(env.MY_STREAM.send([event])); // don't block the response
|
|
12
|
+
return new Response("OK");
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Client-Side Validation with Zod
|
|
18
|
+
|
|
19
|
+
Structured streams drop invalid events silently during processing. Validate before sending for immediate feedback.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { z } from "zod";
|
|
23
|
+
|
|
24
|
+
const EventSchema = z.object({
|
|
25
|
+
event_id: z.string(),
|
|
26
|
+
category: z.enum(["purchase", "view"]),
|
|
27
|
+
amount: z.number().positive().optional(),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const validated = EventSchema.parse(rawEvent); // throws synchronously
|
|
31
|
+
await env.MY_STREAM.send([validated]);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Scheduled Collector Worker
|
|
35
|
+
|
|
36
|
+
```jsonc
|
|
37
|
+
// wrangler.jsonc
|
|
38
|
+
{
|
|
39
|
+
"name": "collector",
|
|
40
|
+
"pipelines": [{ "stream": "<STREAM_ID>", "binding": "EVENT_STREAM" }],
|
|
41
|
+
"triggers": { "crons": ["*/5 * * * *"] }
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
export default {
|
|
47
|
+
async scheduled(event, env, ctx) {
|
|
48
|
+
const items = await (await fetch("https://api.example.com/data")).json();
|
|
49
|
+
const events = items.map(i => ({
|
|
50
|
+
event_id: crypto.randomUUID(),
|
|
51
|
+
timestamp: new Date().toISOString(),
|
|
52
|
+
category: i.type, amount: i.value,
|
|
53
|
+
}));
|
|
54
|
+
await env.EVENT_STREAM.send(events);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Logpush → Pipelines
|
|
60
|
+
|
|
61
|
+
Pipelines is a native Logpush destination — ingest Cloudflare logs, transform with SQL, store as Iceberg/Parquet. For the current supported dataset list and field names, pull the Logpush doc above.
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
INSERT INTO http_logs_sink
|
|
65
|
+
SELECT
|
|
66
|
+
ClientIP,
|
|
67
|
+
EdgeResponseStatus,
|
|
68
|
+
to_timestamp_micros(EdgeStartTimestamp) AS event_time,
|
|
69
|
+
upper(ClientRequestMethod) AS method,
|
|
70
|
+
sha256(ClientIP) AS hashed_ip -- redact PII at ingest
|
|
71
|
+
FROM http_logs_stream
|
|
72
|
+
WHERE EdgeResponseStatus >= 400;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Configure via Dashboard (**Logpush → Create a job → Pipelines** destination) or API.
|
|
76
|
+
|
|
77
|
+
## Pipelines + Queues Fan-out
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
await Promise.all([
|
|
81
|
+
env.ANALYTICS_STREAM.send([event]), // long-term storage + SQL
|
|
82
|
+
env.PROCESS_QUEUE.send(event), // immediate processing + retries
|
|
83
|
+
]);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Use Pipelines for long-term storage + SQL; Queues for immediate processing/retries/DLQ; both for fan-out.
|
|
87
|
+
|
|
88
|
+
## Observability (GraphQL Analytics)
|
|
89
|
+
|
|
90
|
+
Same R2 API token works. Endpoint: `https://api.cloudflare.com/client/v4/graphql`. Datasets cover ingestion, processing (incl. `decodeErrors`), delivery, sink writes (`filesWritten`), and user/validation errors — see the metrics doc for the full dataset/field catalog.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
curl -X POST "https://api.cloudflare.com/client/v4/graphql" \
|
|
94
|
+
-H "Authorization: Bearer $API_TOKEN" -H "Content-Type: application/json" \
|
|
95
|
+
-d '{"query": "query { viewer { accounts(filter: {accountTag: \"'$ACCOUNT_ID'\"}) { pipelinesIngestionAdaptiveGroups(filter: {pipelineId: \"PIPELINE-UUID-WITH-DASHES\", datetime_geq: \"2026-03-01T00:00:00Z\"}, limit: 10) { sum { ingestedRecords ingestedBytes } dimensions { datetimeHour } } } } }"}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
> **Sink/pipeline IDs need dashes for GraphQL** but wrangler may show them without: `b909fe6e544844abbd63f6dcbc81d602` → `b909fe6e-5448-44ab-bd63-f6dcbc81d602`. Metrics take 5–10 min to populate.
|
|
99
|
+
|
|
100
|
+
### Detecting Silent Data Loss
|
|
101
|
+
|
|
102
|
+
If a sink's bucket is deleted or its token expires, events are accepted but lost. Tell-tale: `recordsWritten > 0` but `filesWritten = 0`. Always verify data lands in R2 within the roll interval and R2 SQL returns expected counts.
|
|
103
|
+
|
|
104
|
+
## Schema Evolution (Immutable Pipelines)
|
|
105
|
+
|
|
106
|
+
Pipelines can't change. Version + dual-write:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
npx wrangler pipelines streams create events_v2 --schema-file v2.json
|
|
110
|
+
```
|
|
111
|
+
```typescript
|
|
112
|
+
await Promise.all([env.EVENTS_V1.send([event]), env.EVENTS_V2.send([event])]);
|
|
113
|
+
// query across versions with UNION ALL in R2 SQL
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## End-to-End: Streaming Analytics Dashboard
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
External APIs → Collector Worker (cron) → Pipeline → R2 (Iceberg) → Dashboard Worker → R2 SQL
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
1. Create bucket + enable catalog ([r2-data-catalog](../r2-data-catalog/configuration.md))
|
|
123
|
+
2. Create stream + sink + pipeline (here)
|
|
124
|
+
3. Collector Worker with cron + stream binding (above)
|
|
125
|
+
4. Dashboard Worker querying R2 SQL ([r2-sql/patterns.md](../r2-sql/patterns.md))
|
|
126
|
+
5. Enable automatic compaction
|
|
127
|
+
|
|
128
|
+
## See Also
|
|
129
|
+
|
|
130
|
+
- [configuration.md](configuration.md) · [api.md](api.md) · [gotchas.md](gotchas.md) · [r2-sql](../r2-sql/)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Cloudflare Pulumi Provider
|
|
2
|
+
|
|
3
|
+
Expert guidance for Cloudflare Pulumi Provider (@pulumi/cloudflare).
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Programmatic management of Cloudflare resources: Workers, Pages, D1, KV, R2, DNS, Queues, etc.
|
|
8
|
+
|
|
9
|
+
**Packages:**
|
|
10
|
+
- TypeScript/JS: `@pulumi/cloudflare`
|
|
11
|
+
- Python: `pulumi-cloudflare`
|
|
12
|
+
- Go: `github.com/pulumi/pulumi-cloudflare/sdk/v6/go/cloudflare`
|
|
13
|
+
- .NET: `Pulumi.Cloudflare`
|
|
14
|
+
|
|
15
|
+
**Version:** v6.x
|
|
16
|
+
|
|
17
|
+
## Core Principles
|
|
18
|
+
|
|
19
|
+
1. Use API tokens (not legacy API keys)
|
|
20
|
+
2. Store accountId in stack config
|
|
21
|
+
3. Match binding names across code/config
|
|
22
|
+
4. Use `module: true` for ES modules
|
|
23
|
+
5. Set `compatibilityDate` to lock behavior
|
|
24
|
+
|
|
25
|
+
## Authentication
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import * as cloudflare from "@pulumi/cloudflare";
|
|
29
|
+
|
|
30
|
+
// API Token (recommended): CLOUDFLARE_API_TOKEN env
|
|
31
|
+
const provider = new cloudflare.Provider("cf", { apiToken: process.env.CLOUDFLARE_API_TOKEN });
|
|
32
|
+
|
|
33
|
+
// API Key (legacy): CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL env
|
|
34
|
+
const provider = new cloudflare.Provider("cf", { apiKey: process.env.CLOUDFLARE_API_KEY, email: process.env.CLOUDFLARE_EMAIL });
|
|
35
|
+
|
|
36
|
+
// API User Service Key: CLOUDFLARE_API_USER_SERVICE_KEY env
|
|
37
|
+
const provider = new cloudflare.Provider("cf", { apiUserServiceKey: process.env.CLOUDFLARE_API_USER_SERVICE_KEY });
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Setup
|
|
41
|
+
|
|
42
|
+
**Pulumi.yaml:**
|
|
43
|
+
```yaml
|
|
44
|
+
name: my-cloudflare-app
|
|
45
|
+
runtime: nodejs
|
|
46
|
+
config:
|
|
47
|
+
cloudflare:apiToken:
|
|
48
|
+
value: ${CLOUDFLARE_API_TOKEN}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Pulumi.<stack>.yaml:**
|
|
52
|
+
```yaml
|
|
53
|
+
config:
|
|
54
|
+
cloudflare:accountId: "abc123..."
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**index.ts:**
|
|
58
|
+
```typescript
|
|
59
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
60
|
+
import * as cloudflare from "@pulumi/cloudflare";
|
|
61
|
+
const accountId = new pulumi.Config("cloudflare").require("accountId");
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Common Resource Types
|
|
65
|
+
- `Provider` - Provider config
|
|
66
|
+
- `WorkerScript` - Worker
|
|
67
|
+
- `WorkersKvNamespace` - KV
|
|
68
|
+
- `R2Bucket` - R2
|
|
69
|
+
- `D1Database` - D1
|
|
70
|
+
- `Queue` - Queue
|
|
71
|
+
- `PagesProject` - Pages
|
|
72
|
+
- `DnsRecord` - DNS
|
|
73
|
+
- `WorkerRoute` - Worker route
|
|
74
|
+
- `WorkersDomain` - Custom domain
|
|
75
|
+
|
|
76
|
+
## Key Properties
|
|
77
|
+
- `accountId` - Required for most resources
|
|
78
|
+
- `zoneId` - Required for DNS/domain
|
|
79
|
+
- `name`/`title` - Resource identifier
|
|
80
|
+
- `*Bindings` - Connect resources to Workers
|
|
81
|
+
|
|
82
|
+
## Reading Order
|
|
83
|
+
|
|
84
|
+
| Order | File | What | When to Read |
|
|
85
|
+
|-------|------|------|--------------|
|
|
86
|
+
| 1 | [configuration.md](./configuration.md) | Resource config for Workers/KV/D1/R2/Queues/Pages | First time setup, resource reference |
|
|
87
|
+
| 2 | [patterns.md](./patterns.md) | Architecture patterns, multi-env, component resources | Building complex apps, best practices |
|
|
88
|
+
| 3 | [api.md](./api.md) | Outputs, dependencies, imports, dynamic providers | Advanced features, integrations |
|
|
89
|
+
| 4 | [gotchas.md](./gotchas.md) | Common errors, troubleshooting, limits | Debugging, deployment issues |
|
|
90
|
+
|
|
91
|
+
## In This Reference
|
|
92
|
+
- [configuration.md](./configuration.md) - Provider config, stack setup, Workers/bindings
|
|
93
|
+
- [api.md](./api.md) - Resource types, Workers script, KV/D1/R2/queues/Pages
|
|
94
|
+
- [patterns.md](./patterns.md) - Multi-env, secrets, CI/CD, stack management
|
|
95
|
+
- [gotchas.md](./gotchas.md) - State issues, deployment failures, limits
|
|
96
|
+
|
|
97
|
+
## See Also
|
|
98
|
+
- [terraform](../terraform/) - Alternative IaC for Cloudflare
|
|
99
|
+
- [wrangler](../wrangler/) - CLI deployment alternative
|
|
100
|
+
- [workers](../workers/) - Worker runtime documentation
|