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,139 @@
|
|
|
1
|
+
# Workerd Gotchas
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "Missing compatibility date"
|
|
6
|
+
**Cause:** Compatibility date not set
|
|
7
|
+
**Solution:**
|
|
8
|
+
❌ Wrong:
|
|
9
|
+
```capnp
|
|
10
|
+
const worker :Workerd.Worker = (
|
|
11
|
+
serviceWorkerScript = embed "worker.js"
|
|
12
|
+
)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
✅ Correct:
|
|
16
|
+
```capnp
|
|
17
|
+
const worker :Workerd.Worker = (
|
|
18
|
+
serviceWorkerScript = embed "worker.js",
|
|
19
|
+
compatibilityDate = "2024-01-15" # Always set!
|
|
20
|
+
)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Wrong Binding Type
|
|
24
|
+
**Problem:** JSON not parsed
|
|
25
|
+
**Cause:** Using `text = '{"key":"value"}'` instead of `json`
|
|
26
|
+
**Solution:** Use `json = '{"key":"value"}'` for parsed objects
|
|
27
|
+
|
|
28
|
+
### Service vs Namespace
|
|
29
|
+
**Problem:** Cannot create DO instance
|
|
30
|
+
**Cause:** Using `service = "room-service"` for Durable Object
|
|
31
|
+
**Solution:** Use `durableObjectNamespace = "Room"` for DO bindings
|
|
32
|
+
|
|
33
|
+
### Module Name Mismatch
|
|
34
|
+
**Problem:** Import fails
|
|
35
|
+
**Cause:** Module name includes path: `name = "src/index.js"`
|
|
36
|
+
**Solution:** Use simple names: `name = "index.js"`, embed with path
|
|
37
|
+
|
|
38
|
+
## Network Access
|
|
39
|
+
|
|
40
|
+
**Problem:** Fetch fails with network error
|
|
41
|
+
**Cause:** No network service configured (workerd has no global fetch)
|
|
42
|
+
**Solution:** Add network service binding:
|
|
43
|
+
```capnp
|
|
44
|
+
services = [(name = "internet", network = (allow = ["public"]))]
|
|
45
|
+
bindings = [(name = "NET", service = "internet")]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Or external service:
|
|
49
|
+
```capnp
|
|
50
|
+
bindings = [(name = "API", service = (external = (address = "api.com:443", http = (style = tls))))]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### "Worker not responding"
|
|
54
|
+
**Cause:** Socket misconfigured, no fetch handler, or port unavailable
|
|
55
|
+
**Solution:** Verify socket `address` matches, worker exports `fetch()`, port available
|
|
56
|
+
|
|
57
|
+
### "Binding not found"
|
|
58
|
+
**Cause:** Name mismatch or service doesn't exist
|
|
59
|
+
**Solution:** Check binding name in config matches code (`env.BINDING` for ES modules)
|
|
60
|
+
|
|
61
|
+
### "Module not found"
|
|
62
|
+
**Cause:** Module name doesn't match import or bad embed path
|
|
63
|
+
**Solution:** Module `name` must match import path exactly, verify `embed` path
|
|
64
|
+
|
|
65
|
+
### "Compatibility error"
|
|
66
|
+
**Cause:** Date not set or API unavailable on that date
|
|
67
|
+
**Solution:** Set `compatibilityDate`, verify API available on that date
|
|
68
|
+
|
|
69
|
+
## Performance Issues
|
|
70
|
+
|
|
71
|
+
**Problem:** High memory usage
|
|
72
|
+
**Cause:** Large caches or many isolates
|
|
73
|
+
**Solution:** Set cache limits, reduce isolate count, or use V8 flags (caution)
|
|
74
|
+
|
|
75
|
+
**Problem:** Slow startup
|
|
76
|
+
**Cause:** Many modules or complex config
|
|
77
|
+
**Solution:** Compile to binary (`workerd compile`), reduce imports
|
|
78
|
+
|
|
79
|
+
**Problem:** Request timeouts
|
|
80
|
+
**Cause:** External service issues or DNS problems
|
|
81
|
+
**Solution:** Check connectivity, DNS resolution, TLS handshake
|
|
82
|
+
|
|
83
|
+
## Build Issues
|
|
84
|
+
|
|
85
|
+
**Problem:** Cap'n Proto syntax errors
|
|
86
|
+
**Cause:** Invalid config or missing schema
|
|
87
|
+
**Solution:** Install capnproto tools, validate: `capnp compile -I. config.capnp`
|
|
88
|
+
|
|
89
|
+
**Problem:** Embed path not found
|
|
90
|
+
**Cause:** Path relative to config file
|
|
91
|
+
**Solution:** Use correct relative path or absolute path
|
|
92
|
+
|
|
93
|
+
**Problem:** V8 flags cause crashes
|
|
94
|
+
**Cause:** Unsafe V8 flags
|
|
95
|
+
**Solution:** ⚠️ V8 flags unsupported in production. Test thoroughly before use.
|
|
96
|
+
|
|
97
|
+
## Security Issues
|
|
98
|
+
|
|
99
|
+
**Problem:** Hardcoded secrets in config
|
|
100
|
+
**Cause:** `text` binding with secret value
|
|
101
|
+
**Solution:** Use `fromEnvironment` to load from env vars
|
|
102
|
+
|
|
103
|
+
**Problem:** Overly broad network access
|
|
104
|
+
**Cause:** `network = (allow = ["*"])`
|
|
105
|
+
**Solution:** Restrict to `allow = ["public"]` or specific hosts
|
|
106
|
+
|
|
107
|
+
**Problem:** Extractable crypto keys
|
|
108
|
+
**Cause:** `cryptoKey = (extractable = true, ...)`
|
|
109
|
+
**Solution:** Set `extractable = false` unless export required
|
|
110
|
+
|
|
111
|
+
## Compatibility Changes
|
|
112
|
+
|
|
113
|
+
**Problem:** Breaking changes after compat date update
|
|
114
|
+
**Cause:** New flags enabled between dates
|
|
115
|
+
**Solution:** Review [compat dates docs](https://developers.cloudflare.com/workers/configuration/compatibility-dates/), test locally first
|
|
116
|
+
|
|
117
|
+
**Problem:** "Compatibility date not supported"
|
|
118
|
+
**Cause:** Workerd version older than compat date
|
|
119
|
+
**Solution:** Update workerd binary (version = max compat date supported)
|
|
120
|
+
|
|
121
|
+
## Limits
|
|
122
|
+
|
|
123
|
+
| Resource/Limit | Value | Notes |
|
|
124
|
+
|----------------|-------|-------|
|
|
125
|
+
| V8 flags | Unsupported in production | Use with caution |
|
|
126
|
+
| Compatibility date | Must match workerd version | Update if mismatch |
|
|
127
|
+
| Module count | Affects startup time | Many imports slow |
|
|
128
|
+
|
|
129
|
+
## Troubleshooting Steps
|
|
130
|
+
|
|
131
|
+
1. **Enable verbose logging**: `workerd serve config.capnp --verbose`
|
|
132
|
+
2. **Check logs**: Look for error messages, stack traces
|
|
133
|
+
3. **Validate config**: `capnp compile -I. config.capnp`
|
|
134
|
+
4. **Test bindings**: Log `Object.keys(env)` to verify
|
|
135
|
+
5. **Check versions**: Workerd version vs compat date
|
|
136
|
+
6. **Isolate issue**: Minimal repro config
|
|
137
|
+
7. **Review schema**: [workerd.capnp](https://github.com/cloudflare/workerd/blob/main/src/workerd/server/workerd.capnp)
|
|
138
|
+
|
|
139
|
+
See [configuration.md](./configuration.md) for config details, [patterns.md](./patterns.md) for working examples, [api.md](./api.md) for runtime APIs.
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Workerd Patterns
|
|
2
|
+
|
|
3
|
+
## Multi-Service Architecture
|
|
4
|
+
```capnp
|
|
5
|
+
const config :Workerd.Config = (
|
|
6
|
+
services = [
|
|
7
|
+
(name = "frontend", worker = (
|
|
8
|
+
modules = [(name = "index.js", esModule = embed "frontend/index.js")],
|
|
9
|
+
compatibilityDate = "2024-01-15",
|
|
10
|
+
bindings = [(name = "API", service = "api")]
|
|
11
|
+
)),
|
|
12
|
+
(name = "api", worker = (
|
|
13
|
+
modules = [(name = "index.js", esModule = embed "api/index.js")],
|
|
14
|
+
compatibilityDate = "2024-01-15",
|
|
15
|
+
bindings = [(name = "DB", service = "postgres"), (name = "CACHE", kvNamespace = "kv")]
|
|
16
|
+
)),
|
|
17
|
+
(name = "postgres", external = (address = "db.internal:5432", http = ())),
|
|
18
|
+
(name = "kv", disk = (path = "/var/kv", writable = true))
|
|
19
|
+
],
|
|
20
|
+
sockets = [(name = "http", address = "*:8080", http = (), service = "frontend")]
|
|
21
|
+
);
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Durable Objects
|
|
25
|
+
```capnp
|
|
26
|
+
const worker :Workerd.Worker = (
|
|
27
|
+
modules = [(name = "index.js", esModule = embed "index.js"), (name = "room.js", esModule = embed "room.js")],
|
|
28
|
+
compatibilityDate = "2024-01-15",
|
|
29
|
+
bindings = [(name = "ROOMS", durableObjectNamespace = "Room")],
|
|
30
|
+
durableObjectNamespaces = [(className = "Room", uniqueKey = "v1")],
|
|
31
|
+
durableObjectStorage = (localDisk = "/var/do")
|
|
32
|
+
);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Dev vs Prod Configs
|
|
36
|
+
```capnp
|
|
37
|
+
# Use parameter bindings for env-specific config
|
|
38
|
+
const baseWorker :Workerd.Worker = (
|
|
39
|
+
modules = [(name = "index.js", esModule = embed "src/index.js")],
|
|
40
|
+
compatibilityDate = "2024-01-15",
|
|
41
|
+
bindings = [(name = "API_URL", parameter = (type = text))]
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
const prodWorker :Workerd.Worker = (
|
|
45
|
+
inherit = "base-service",
|
|
46
|
+
bindings = [(name = "API_URL", text = "https://api.prod.com")]
|
|
47
|
+
);
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## HTTP Reverse Proxy
|
|
51
|
+
```capnp
|
|
52
|
+
services = [
|
|
53
|
+
(name = "proxy", worker = (serviceWorkerScript = embed "proxy.js", compatibilityDate = "2024-01-15", bindings = [(name = "BACKEND", service = "backend")])),
|
|
54
|
+
(name = "backend", external = (address = "internal:8080", http = ()))
|
|
55
|
+
]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Local Development
|
|
59
|
+
|
|
60
|
+
**Recommended:** Use Wrangler
|
|
61
|
+
```bash
|
|
62
|
+
wrangler dev # Uses workerd internally
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Direct workerd:**
|
|
66
|
+
```bash
|
|
67
|
+
workerd serve config.capnp --socket-addr http=*:3000 --verbose
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Environment variables:**
|
|
71
|
+
```capnp
|
|
72
|
+
bindings = [(name = "DATABASE_URL", fromEnvironment = "DATABASE_URL")]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Testing
|
|
76
|
+
```bash
|
|
77
|
+
workerd test config.capnp
|
|
78
|
+
workerd test config.capnp --test-only=test.js
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Test files must be included in `modules = [...]` config.
|
|
82
|
+
|
|
83
|
+
## Production Deployment
|
|
84
|
+
|
|
85
|
+
### Compiled Binary (Recommended)
|
|
86
|
+
```bash
|
|
87
|
+
workerd compile config.capnp myConfig -o production-server
|
|
88
|
+
./production-server
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Docker
|
|
92
|
+
```dockerfile
|
|
93
|
+
FROM debian:bookworm-slim
|
|
94
|
+
RUN apt-get update && apt-get install -y ca-certificates
|
|
95
|
+
COPY workerd /usr/local/bin/
|
|
96
|
+
COPY config.capnp /etc/workerd/
|
|
97
|
+
COPY src/ /etc/workerd/src/
|
|
98
|
+
EXPOSE 8080
|
|
99
|
+
CMD ["workerd", "serve", "/etc/workerd/config.capnp"]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Systemd
|
|
103
|
+
```ini
|
|
104
|
+
# /etc/systemd/system/workerd.service
|
|
105
|
+
[Service]
|
|
106
|
+
ExecStart=/usr/bin/workerd serve /etc/workerd/config.capnp --socket-fd http=3
|
|
107
|
+
Restart=always
|
|
108
|
+
User=nobody
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
See systemd socket activation docs for complete setup.
|
|
112
|
+
|
|
113
|
+
## Framework Integration
|
|
114
|
+
|
|
115
|
+
### Hono
|
|
116
|
+
```javascript
|
|
117
|
+
import { Hono } from 'hono';
|
|
118
|
+
|
|
119
|
+
const app = new Hono();
|
|
120
|
+
|
|
121
|
+
app.get('/', (c) => c.text('Hello Hono!'));
|
|
122
|
+
app.get('/api/:id', async (c) => {
|
|
123
|
+
const id = c.req.param('id');
|
|
124
|
+
const data = await c.env.KV.get(id);
|
|
125
|
+
return c.json({ id, data });
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
export default app;
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### itty-router
|
|
132
|
+
```javascript
|
|
133
|
+
import { Router } from 'itty-router';
|
|
134
|
+
|
|
135
|
+
const router = Router();
|
|
136
|
+
|
|
137
|
+
router.get('/', () => new Response('Hello itty!'));
|
|
138
|
+
router.get('/api/:id', async (request, env) => {
|
|
139
|
+
const { id } = request.params;
|
|
140
|
+
const data = await env.KV.get(id);
|
|
141
|
+
return Response.json({ id, data });
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export default {
|
|
145
|
+
fetch: (request, env, ctx) => router.handle(request, env, ctx)
|
|
146
|
+
};
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Best Practices
|
|
150
|
+
|
|
151
|
+
1. **Use ES modules** over service worker syntax
|
|
152
|
+
2. **Explicit bindings** - no global namespace assumptions
|
|
153
|
+
3. **Type safety** - define `Env` interfaces (use `wrangler types`)
|
|
154
|
+
4. **Service isolation** - split concerns into multiple services
|
|
155
|
+
5. **Pin compat date** in production after testing
|
|
156
|
+
6. **Use ctx.waitUntil()** for background tasks
|
|
157
|
+
7. **Handle errors gracefully** with try/catch
|
|
158
|
+
8. **Configure resource limits** on caches/storage
|
|
159
|
+
|
|
160
|
+
## Common Patterns
|
|
161
|
+
|
|
162
|
+
### Error Handling
|
|
163
|
+
```javascript
|
|
164
|
+
export default {
|
|
165
|
+
async fetch(request, env, ctx) {
|
|
166
|
+
try {
|
|
167
|
+
return await handleRequest(request, env);
|
|
168
|
+
} catch (error) {
|
|
169
|
+
console.error("Request failed", error);
|
|
170
|
+
return new Response("Internal Error", {status: 500});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Background Tasks
|
|
177
|
+
```javascript
|
|
178
|
+
export default {
|
|
179
|
+
async fetch(request, env, ctx) {
|
|
180
|
+
const response = new Response("OK");
|
|
181
|
+
|
|
182
|
+
// Fire-and-forget background work
|
|
183
|
+
ctx.waitUntil(
|
|
184
|
+
env.ANALYTICS.put(request.url, Date.now())
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
return response;
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
See [configuration.md](./configuration.md) for config syntax, [api.md](./api.md) for runtime APIs, [gotchas.md](./gotchas.md) for common errors.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Cloudflare Workers
|
|
2
|
+
|
|
3
|
+
Expert guidance for building, deploying, and optimizing Cloudflare Workers applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare Workers run on V8 isolates (NOT containers/VMs):
|
|
8
|
+
- Extremely fast cold starts (< 1ms)
|
|
9
|
+
- Global deployment across 300+ locations
|
|
10
|
+
- Web standards compliant (fetch, URL, Headers, Request, Response)
|
|
11
|
+
- Support JS/TS, Python, Rust, and WebAssembly
|
|
12
|
+
|
|
13
|
+
**Key principle**: Workers use web platform APIs wherever possible for portability.
|
|
14
|
+
|
|
15
|
+
## Module Worker Pattern (Recommended)
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
export default {
|
|
19
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
20
|
+
return new Response('Hello World!');
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Handler parameters**:
|
|
26
|
+
- `request`: Incoming HTTP request (standard Request object)
|
|
27
|
+
- `env`: Environment bindings (KV, D1, R2, secrets, vars)
|
|
28
|
+
- `ctx`: Execution context (`waitUntil`, `passThroughOnException`)
|
|
29
|
+
|
|
30
|
+
## Essential Commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx wrangler dev # Local dev
|
|
34
|
+
npx wrangler dev --remote # Remote dev (actual resources)
|
|
35
|
+
npx wrangler deploy # Production
|
|
36
|
+
npx wrangler deploy --env staging # Specific environment
|
|
37
|
+
npx wrangler tail # Stream logs
|
|
38
|
+
npx wrangler secret put API_KEY # Set secret
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## When to Use Workers
|
|
42
|
+
|
|
43
|
+
- API endpoints at the edge
|
|
44
|
+
- Request/response transformation
|
|
45
|
+
- Authentication/authorization layers
|
|
46
|
+
- Static asset optimization
|
|
47
|
+
- A/B testing and feature flags
|
|
48
|
+
- Rate limiting and security
|
|
49
|
+
- Proxy/routing logic
|
|
50
|
+
- WebSocket applications
|
|
51
|
+
|
|
52
|
+
## Quick Start
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm create cloudflare@latest my-worker -- --type hello-world
|
|
56
|
+
cd my-worker
|
|
57
|
+
npx wrangler dev
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Handler Signatures
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// HTTP requests
|
|
64
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>
|
|
65
|
+
|
|
66
|
+
// Cron triggers
|
|
67
|
+
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void>
|
|
68
|
+
|
|
69
|
+
// Queue consumer
|
|
70
|
+
async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void>
|
|
71
|
+
|
|
72
|
+
// Tail consumer
|
|
73
|
+
async tail(events: TraceItem[], env: Env, ctx: ExecutionContext): Promise<void>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Resources
|
|
77
|
+
|
|
78
|
+
**Docs**: https://developers.cloudflare.com/workers/
|
|
79
|
+
**Examples**: https://developers.cloudflare.com/workers/examples/
|
|
80
|
+
**Runtime APIs**: https://developers.cloudflare.com/workers/runtime-apis/
|
|
81
|
+
|
|
82
|
+
## In This Reference
|
|
83
|
+
|
|
84
|
+
- [Configuration](./configuration.md) - wrangler.jsonc setup, bindings, environments
|
|
85
|
+
- [API](./api.md) - Runtime APIs, bindings, execution context
|
|
86
|
+
- [Patterns](./patterns.md) - Common workflows, testing, optimization
|
|
87
|
+
- [Frameworks](./frameworks.md) - Hono, routing, validation
|
|
88
|
+
- [Gotchas](./gotchas.md) - Common issues, limits, troubleshooting
|
|
89
|
+
|
|
90
|
+
## Reading Order
|
|
91
|
+
|
|
92
|
+
| Task | Start With | Then Read |
|
|
93
|
+
|------|------------|-----------|
|
|
94
|
+
| First Worker | README → Configuration → API | Patterns |
|
|
95
|
+
| Add framework | Frameworks | Configuration (bindings) |
|
|
96
|
+
| Add storage/bindings | Configuration → API (binding usage) | See Also links |
|
|
97
|
+
| Debug issues | Gotchas | API (specific binding docs) |
|
|
98
|
+
| Production optimization | Patterns | API (caching, streaming) |
|
|
99
|
+
| Type safety | Configuration (TypeScript) | Frameworks (Hono typing) |
|
|
100
|
+
|
|
101
|
+
## See Also
|
|
102
|
+
|
|
103
|
+
- [KV](../kv/README.md) - Key-value storage
|
|
104
|
+
- [D1](../d1/README.md) - SQL database
|
|
105
|
+
- [R2](../r2/README.md) - Object storage
|
|
106
|
+
- [Durable Objects](../durable-objects/README.md) - Stateful coordination
|
|
107
|
+
- [Queues](../queues/README.md) - Message queues
|
|
108
|
+
- [Wrangler](../wrangler/README.md) - CLI tool reference
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Workers Runtime APIs
|
|
2
|
+
|
|
3
|
+
## Fetch Handler
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export default {
|
|
7
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
8
|
+
const url = new URL(request.url);
|
|
9
|
+
if (request.method === 'POST' && url.pathname === '/api') {
|
|
10
|
+
const body = await request.json();
|
|
11
|
+
return new Response(JSON.stringify({ id: 1 }), {
|
|
12
|
+
headers: { 'Content-Type': 'application/json' }
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return fetch(request); // Subrequest to origin
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Execution Context
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
ctx.waitUntil(logAnalytics(request)); // Background work, don't block response
|
|
24
|
+
ctx.passThroughOnException(); // Failover to origin on error
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Never** `await` background operations - use `ctx.waitUntil()`.
|
|
28
|
+
|
|
29
|
+
## Bindings
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// KV
|
|
33
|
+
await env.MY_KV.get('key');
|
|
34
|
+
await env.MY_KV.put('key', 'value', { expirationTtl: 3600 });
|
|
35
|
+
|
|
36
|
+
// R2
|
|
37
|
+
const obj = await env.MY_BUCKET.get('file.txt');
|
|
38
|
+
await env.MY_BUCKET.put('file.txt', 'content');
|
|
39
|
+
|
|
40
|
+
// D1
|
|
41
|
+
const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(1).first();
|
|
42
|
+
|
|
43
|
+
// D1 Sessions (2024+) - read-after-write consistency
|
|
44
|
+
const session = env.DB.withSession();
|
|
45
|
+
await session.prepare('INSERT INTO users (name) VALUES (?)').bind('Alice').run();
|
|
46
|
+
const user = await session.prepare('SELECT * FROM users WHERE name = ?').bind('Alice').first(); // Guaranteed fresh
|
|
47
|
+
|
|
48
|
+
// Queues
|
|
49
|
+
await env.MY_QUEUE.send({ timestamp: Date.now() });
|
|
50
|
+
|
|
51
|
+
// Secrets/vars
|
|
52
|
+
const key = env.API_KEY;
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Cache API
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
const cache = caches.default;
|
|
59
|
+
let response = await cache.match(request);
|
|
60
|
+
|
|
61
|
+
if (!response) {
|
|
62
|
+
response = await fetch(request);
|
|
63
|
+
response = new Response(response.body, response);
|
|
64
|
+
response.headers.set('Cache-Control', 'max-age=3600');
|
|
65
|
+
ctx.waitUntil(cache.put(request, response.clone())); // Clone before caching
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## HTMLRewriter
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
return new HTMLRewriter()
|
|
73
|
+
.on('a[href]', {
|
|
74
|
+
element(el) {
|
|
75
|
+
const href = el.getAttribute('href');
|
|
76
|
+
if (href?.startsWith('http://')) {
|
|
77
|
+
el.setAttribute('href', href.replace('http://', 'https://'));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
.transform(response);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Use cases**: A/B testing, analytics injection, link rewriting
|
|
85
|
+
|
|
86
|
+
## WebSockets
|
|
87
|
+
|
|
88
|
+
### Standard WebSocket
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const [client, server] = Object.values(new WebSocketPair());
|
|
92
|
+
|
|
93
|
+
server.accept();
|
|
94
|
+
server.addEventListener('message', event => {
|
|
95
|
+
server.send(`Echo: ${event.data}`);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return new Response(null, { status: 101, webSocket: client });
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### WebSocket Hibernation (Recommended for idle connections)
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// In Durable Object
|
|
105
|
+
export class WebSocketDO {
|
|
106
|
+
async webSocketMessage(ws: WebSocket, message: string) {
|
|
107
|
+
ws.send(`Echo: ${message}`);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async webSocketClose(ws: WebSocket, code: number, reason: string) {
|
|
111
|
+
// Cleanup on close
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async webSocketError(ws: WebSocket, error: Error) {
|
|
115
|
+
console.error('WebSocket error:', error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Hibernation automatically suspends inactive connections (no CPU cost), wakes on events
|
|
121
|
+
|
|
122
|
+
## Durable Objects
|
|
123
|
+
|
|
124
|
+
### RPC Pattern (Recommended 2024+)
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
export class Counter {
|
|
128
|
+
private value = 0;
|
|
129
|
+
|
|
130
|
+
constructor(private state: DurableObjectState) {
|
|
131
|
+
state.blockConcurrencyWhile(async () => {
|
|
132
|
+
this.value = (await state.storage.get('value')) || 0;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Export methods directly - called via RPC (type-safe, zero serialization)
|
|
137
|
+
async increment(): Promise<number> {
|
|
138
|
+
this.value++;
|
|
139
|
+
await this.state.storage.put('value', this.value);
|
|
140
|
+
return this.value;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async getValue(): Promise<number> {
|
|
144
|
+
return this.value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Worker usage:
|
|
149
|
+
const stub = env.COUNTER.get(env.COUNTER.idFromName('global'));
|
|
150
|
+
const count = await stub.increment(); // Direct method call, full type safety
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Legacy Fetch Pattern (Pre-2024)
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
async fetch(request: Request): Promise<Response> {
|
|
157
|
+
const url = new URL(request.url);
|
|
158
|
+
if (url.pathname === '/increment') {
|
|
159
|
+
await this.state.storage.put('value', ++this.value);
|
|
160
|
+
}
|
|
161
|
+
return new Response(String(this.value));
|
|
162
|
+
}
|
|
163
|
+
// Usage: await stub.fetch('http://x/increment')
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**When to use DOs**: Real-time collaboration, rate limiting, strongly consistent state
|
|
167
|
+
|
|
168
|
+
## Other Handlers
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// Cron: async scheduled(event, env, ctx) { ctx.waitUntil(doCleanup(env)); }
|
|
172
|
+
// Queue: async queue(batch) { for (const msg of batch.messages) { await process(msg.body); msg.ack(); } }
|
|
173
|
+
// Tail: async tail(events, env) { for (const e of events) if (e.outcome === 'exception') await log(e); }
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Service Bindings
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Worker-to-worker RPC (zero latency, no internet round-trip)
|
|
180
|
+
return env.SERVICE_B.fetch(request);
|
|
181
|
+
|
|
182
|
+
// With RPC (2024+) - same as Durable Objects RPC
|
|
183
|
+
export class ServiceWorker {
|
|
184
|
+
async getData() { return { data: 'value' }; }
|
|
185
|
+
}
|
|
186
|
+
// Usage: const data = await env.SERVICE_B.getData();
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Benefits**: Type-safe method calls, no HTTP overhead, share code between Workers
|
|
190
|
+
|
|
191
|
+
## See Also
|
|
192
|
+
|
|
193
|
+
- [Configuration](./configuration.md) - Binding setup
|
|
194
|
+
- [Patterns](./patterns.md) - Common workflows
|
|
195
|
+
- [KV](../kv/README.md), [D1](../d1/README.md), [R2](../r2/README.md), [Durable Objects](../durable-objects/README.md), [Queues](../queues/README.md)
|