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,196 @@
|
|
|
1
|
+
# KV Patterns & Best Practices
|
|
2
|
+
|
|
3
|
+
## Multi-Tier Caching
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// Memory → KV → Origin (3-tier cache)
|
|
7
|
+
const memoryCache = new Map<string, { data: any; expires: number }>();
|
|
8
|
+
|
|
9
|
+
async function getCached(env: Env, key: string): Promise<any> {
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
|
|
12
|
+
// L1: Memory cache (fastest)
|
|
13
|
+
const cached = memoryCache.get(key);
|
|
14
|
+
if (cached && cached.expires > now) {
|
|
15
|
+
return cached.data;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// L2: KV cache (fast)
|
|
19
|
+
const kvValue = await env.CACHE.get(key, "json");
|
|
20
|
+
if (kvValue) {
|
|
21
|
+
memoryCache.set(key, { data: kvValue, expires: now + 60000 }); // 1min in memory
|
|
22
|
+
return kvValue;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// L3: Origin (slow)
|
|
26
|
+
const origin = await fetch(`https://api.example.com/${key}`).then(r => r.json());
|
|
27
|
+
|
|
28
|
+
// Backfill caches
|
|
29
|
+
await env.CACHE.put(key, JSON.stringify(origin), { expirationTtl: 300 }); // 5min in KV
|
|
30
|
+
memoryCache.set(key, { data: origin, expires: now + 60000 });
|
|
31
|
+
|
|
32
|
+
return origin;
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## API Response Caching
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
async function getCachedData(env: Env, key: string, fetcher: () => Promise<any>): Promise<any> {
|
|
40
|
+
const cached = await env.MY_KV.get(key, "json");
|
|
41
|
+
if (cached) return cached;
|
|
42
|
+
|
|
43
|
+
const data = await fetcher();
|
|
44
|
+
await env.MY_KV.put(key, JSON.stringify(data), { expirationTtl: 300 });
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const apiData = await getCachedData(
|
|
49
|
+
env,
|
|
50
|
+
"cache:users",
|
|
51
|
+
() => fetch("https://api.example.com/users").then(r => r.json())
|
|
52
|
+
);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Session Management
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
interface Session { userId: string; expiresAt: number; }
|
|
59
|
+
|
|
60
|
+
async function createSession(env: Env, userId: string): Promise<string> {
|
|
61
|
+
const sessionId = crypto.randomUUID();
|
|
62
|
+
const expiresAt = Date.now() + (24 * 60 * 60 * 1000);
|
|
63
|
+
|
|
64
|
+
await env.SESSIONS.put(
|
|
65
|
+
`session:${sessionId}`,
|
|
66
|
+
JSON.stringify({ userId, expiresAt }),
|
|
67
|
+
{ expirationTtl: 86400, metadata: { createdAt: Date.now() } }
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return sessionId;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function getSession(env: Env, sessionId: string): Promise<Session | null> {
|
|
74
|
+
const data = await env.SESSIONS.get<Session>(`session:${sessionId}`, "json");
|
|
75
|
+
if (!data || data.expiresAt < Date.now()) return null;
|
|
76
|
+
return data;
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Coalesce Cold Keys
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// ❌ BAD: Many individual keys
|
|
84
|
+
await env.KV.put("user:123:name", "John");
|
|
85
|
+
await env.KV.put("user:123:email", "john@example.com");
|
|
86
|
+
|
|
87
|
+
// ✅ GOOD: Single coalesced object
|
|
88
|
+
await env.USERS.put("user:123:profile", JSON.stringify({
|
|
89
|
+
name: "John",
|
|
90
|
+
email: "john@example.com",
|
|
91
|
+
role: "admin"
|
|
92
|
+
}));
|
|
93
|
+
|
|
94
|
+
// Benefits: Hot key cache, single read, reduced operations
|
|
95
|
+
// Trade-off: Harder to update individual fields
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Prefix-Based Namespacing
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
// Logical partitioning within single namespace
|
|
102
|
+
const PREFIXES = {
|
|
103
|
+
users: "user:",
|
|
104
|
+
sessions: "session:",
|
|
105
|
+
cache: "cache:",
|
|
106
|
+
features: "feature:"
|
|
107
|
+
} as const;
|
|
108
|
+
|
|
109
|
+
// Write with prefix
|
|
110
|
+
async function setUser(env: Env, id: string, data: any) {
|
|
111
|
+
await env.KV.put(`${PREFIXES.users}${id}`, JSON.stringify(data));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Read with prefix
|
|
115
|
+
async function getUser(env: Env, id: string) {
|
|
116
|
+
return await env.KV.get(`${PREFIXES.users}${id}`, "json");
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// List by prefix
|
|
120
|
+
async function listUserIds(env: Env): Promise<string[]> {
|
|
121
|
+
const result = await env.KV.list({ prefix: PREFIXES.users });
|
|
122
|
+
return result.keys.map(k => k.name.replace(PREFIXES.users, ""));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Example hierarchy
|
|
126
|
+
"user:123:profile"
|
|
127
|
+
"user:123:settings"
|
|
128
|
+
"cache:api:users"
|
|
129
|
+
"session:abc-def"
|
|
130
|
+
"feature:flags:beta"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Metadata Versioning
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
interface VersionedData {
|
|
137
|
+
version: number;
|
|
138
|
+
data: any;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async function migrateIfNeeded(env: Env, key: string) {
|
|
142
|
+
const result = await env.DATA.getWithMetadata(key, "json");
|
|
143
|
+
|
|
144
|
+
if (!result.value) return null;
|
|
145
|
+
|
|
146
|
+
const currentVersion = result.metadata?.version || 1;
|
|
147
|
+
const targetVersion = 2;
|
|
148
|
+
|
|
149
|
+
if (currentVersion < targetVersion) {
|
|
150
|
+
// Migrate data format
|
|
151
|
+
const migrated = migrate(result.value, currentVersion, targetVersion);
|
|
152
|
+
|
|
153
|
+
// Store with new version
|
|
154
|
+
await env.DATA.put(key, JSON.stringify(migrated), {
|
|
155
|
+
metadata: { version: targetVersion, migratedAt: Date.now() }
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
return migrated;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return result.value;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function migrate(data: any, from: number, to: number): any {
|
|
165
|
+
if (from === 1 && to === 2) {
|
|
166
|
+
// V1 → V2: Rename field
|
|
167
|
+
return { ...data, userName: data.name };
|
|
168
|
+
}
|
|
169
|
+
return data;
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Error Boundary Pattern
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
// Resilient get with fallback
|
|
177
|
+
async function resilientGet<T>(
|
|
178
|
+
env: Env,
|
|
179
|
+
key: string,
|
|
180
|
+
fallback: T
|
|
181
|
+
): Promise<T> {
|
|
182
|
+
try {
|
|
183
|
+
const value = await env.KV.get<T>(key, "json");
|
|
184
|
+
return value ?? fallback;
|
|
185
|
+
} catch (err) {
|
|
186
|
+
console.error(`KV error for ${key}:`, err);
|
|
187
|
+
return fallback;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Usage
|
|
192
|
+
const config = await resilientGet(env, "config:app", {
|
|
193
|
+
theme: "light",
|
|
194
|
+
maxItems: 10
|
|
195
|
+
});
|
|
196
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Miniflare
|
|
2
|
+
|
|
3
|
+
Local simulator for Cloudflare Workers development/testing. Runs Workers in workerd sandbox implementing runtime APIs - no internet required.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Full-featured: KV, Durable Objects, R2, D1, WebSockets, Queues
|
|
8
|
+
- Fully-local: test without internet, instant reload
|
|
9
|
+
- TypeScript-native: detailed logging, source maps
|
|
10
|
+
- Advanced testing: dispatch events without HTTP, simulate Worker connections
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
**Decision tree for testing Workers:**
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Need to test Workers?
|
|
18
|
+
│
|
|
19
|
+
├─ Unit tests for business logic only?
|
|
20
|
+
│ └─ getPlatformProxy (Vitest/Jest) → [patterns.md](./patterns.md#getplatformproxy)
|
|
21
|
+
│ Fast, no HTTP, direct binding access
|
|
22
|
+
│
|
|
23
|
+
├─ Integration tests with full runtime?
|
|
24
|
+
│ ├─ Single Worker?
|
|
25
|
+
│ │ └─ Miniflare API → [Quick Start](#quick-start)
|
|
26
|
+
│ │ Full control, programmatic access
|
|
27
|
+
│ │
|
|
28
|
+
│ ├─ Multiple Workers + service bindings?
|
|
29
|
+
│ │ └─ Miniflare workers array → [configuration.md](./configuration.md#multiple-workers)
|
|
30
|
+
│ │ Shared storage, inter-worker calls
|
|
31
|
+
│ │
|
|
32
|
+
│ └─ Vitest test runner integration?
|
|
33
|
+
│ └─ vitest-pool-workers → [patterns.md](./patterns.md#vitest-pool-workers)
|
|
34
|
+
│ Full Workers env in Vitest
|
|
35
|
+
│
|
|
36
|
+
└─ Local dev server?
|
|
37
|
+
└─ wrangler dev (not Miniflare)
|
|
38
|
+
Hot reload, automatic config
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Use Miniflare for:**
|
|
42
|
+
- Integration tests with full Worker runtime
|
|
43
|
+
- Testing bindings/storage locally
|
|
44
|
+
- Multiple Workers with service bindings
|
|
45
|
+
- Programmatic event dispatch (fetch, queue, scheduled)
|
|
46
|
+
|
|
47
|
+
**Use getPlatformProxy for:**
|
|
48
|
+
- Fast unit tests of business logic
|
|
49
|
+
- Testing without HTTP overhead
|
|
50
|
+
- Vitest/Jest environments
|
|
51
|
+
|
|
52
|
+
**Use Wrangler for:**
|
|
53
|
+
- Local development workflow
|
|
54
|
+
- Production deployments
|
|
55
|
+
|
|
56
|
+
## Setup
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm i -D miniflare
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Requires ES modules in `package.json`:
|
|
63
|
+
```json
|
|
64
|
+
{"type": "module"}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Quick Start
|
|
68
|
+
|
|
69
|
+
```js
|
|
70
|
+
import { Miniflare } from "miniflare";
|
|
71
|
+
|
|
72
|
+
const mf = new Miniflare({
|
|
73
|
+
modules: true,
|
|
74
|
+
script: `
|
|
75
|
+
export default {
|
|
76
|
+
async fetch(request, env, ctx) {
|
|
77
|
+
return new Response("Hello Miniflare!");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
`,
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
const res = await mf.dispatchFetch("http://localhost:8787/");
|
|
84
|
+
console.log(await res.text()); // Hello Miniflare!
|
|
85
|
+
await mf.dispose();
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Reading Order
|
|
89
|
+
|
|
90
|
+
**New to Miniflare?** Start here:
|
|
91
|
+
1. [Quick Start](#quick-start) - Running in 2 minutes
|
|
92
|
+
2. [When to Use](#when-to-use) - Choose your testing approach
|
|
93
|
+
3. [patterns.md](./patterns.md) - Testing patterns (getPlatformProxy, Vitest, node:test)
|
|
94
|
+
4. [configuration.md](./configuration.md) - Configure bindings, storage, multiple workers
|
|
95
|
+
|
|
96
|
+
**Troubleshooting:**
|
|
97
|
+
- [gotchas.md](./gotchas.md) - Common errors and debugging
|
|
98
|
+
|
|
99
|
+
**API reference:**
|
|
100
|
+
- [api.md](./api.md) - Complete method reference
|
|
101
|
+
|
|
102
|
+
## See Also
|
|
103
|
+
- [wrangler](../wrangler/) - CLI tool that embeds Miniflare for `wrangler dev`
|
|
104
|
+
- [workerd](../workerd/) - Runtime that powers Miniflare
|
|
105
|
+
- [workers](../workers/) - Workers runtime API documentation
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Programmatic API
|
|
2
|
+
|
|
3
|
+
## Miniflare Class
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
class Miniflare {
|
|
7
|
+
constructor(options: MiniflareOptions);
|
|
8
|
+
|
|
9
|
+
// Lifecycle
|
|
10
|
+
ready: Promise<URL>; // Resolves when server ready, returns URL
|
|
11
|
+
dispose(): Promise<void>; // Cleanup resources
|
|
12
|
+
setOptions(options: MiniflareOptions): Promise<void>; // Reload config
|
|
13
|
+
|
|
14
|
+
// Event dispatching
|
|
15
|
+
dispatchFetch(url: string | URL | Request, init?: RequestInit): Promise<Response>;
|
|
16
|
+
getWorker(name?: string): Promise<Worker>;
|
|
17
|
+
|
|
18
|
+
// Bindings access
|
|
19
|
+
getBindings<Bindings = Record<string, unknown>>(name?: string): Promise<Bindings>;
|
|
20
|
+
getCf(name?: string): Promise<IncomingRequestCfProperties | undefined>;
|
|
21
|
+
getKVNamespace(name: string): Promise<KVNamespace>;
|
|
22
|
+
getR2Bucket(name: string): Promise<R2Bucket>;
|
|
23
|
+
getDurableObjectNamespace(name: string): Promise<DurableObjectNamespace>;
|
|
24
|
+
getDurableObjectStorage(id: DurableObjectId): Promise<DurableObjectStorage>;
|
|
25
|
+
getD1Database(name: string): Promise<D1Database>;
|
|
26
|
+
getCaches(): Promise<CacheStorage>;
|
|
27
|
+
getQueueProducer(name: string): Promise<QueueProducer>;
|
|
28
|
+
|
|
29
|
+
// Debugging
|
|
30
|
+
getInspectorURL(): Promise<URL>; // Chrome DevTools inspector URL
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Event Dispatching
|
|
35
|
+
|
|
36
|
+
**Fetch (no HTTP server):**
|
|
37
|
+
```js
|
|
38
|
+
const res = await mf.dispatchFetch("http://localhost:8787/path", {
|
|
39
|
+
method: "POST",
|
|
40
|
+
headers: { "Authorization": "Bearer token" },
|
|
41
|
+
body: JSON.stringify({ data: "value" }),
|
|
42
|
+
});
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Custom Host routing:**
|
|
46
|
+
```js
|
|
47
|
+
const res = await mf.dispatchFetch("http://localhost:8787/", {
|
|
48
|
+
headers: { "Host": "api.example.com" },
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Scheduled:**
|
|
53
|
+
```js
|
|
54
|
+
const worker = await mf.getWorker();
|
|
55
|
+
const result = await worker.scheduled({ cron: "30 * * * *" });
|
|
56
|
+
// result: { outcome: "ok", noRetry: false }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Queue:**
|
|
60
|
+
```js
|
|
61
|
+
const worker = await mf.getWorker();
|
|
62
|
+
const result = await worker.queue("queue-name", [
|
|
63
|
+
{ id: "msg1", timestamp: new Date(), body: "data", attempts: 1 },
|
|
64
|
+
]);
|
|
65
|
+
// result: { outcome: "ok", retryAll: false, ackAll: false, ... }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Bindings Access
|
|
69
|
+
|
|
70
|
+
**Environment variables:**
|
|
71
|
+
```js
|
|
72
|
+
// Basic usage
|
|
73
|
+
const bindings = await mf.getBindings();
|
|
74
|
+
console.log(bindings.SECRET_KEY);
|
|
75
|
+
|
|
76
|
+
// With type safety (recommended):
|
|
77
|
+
interface Env {
|
|
78
|
+
SECRET_KEY: string;
|
|
79
|
+
API_URL: string;
|
|
80
|
+
KV: KVNamespace;
|
|
81
|
+
}
|
|
82
|
+
const env = await mf.getBindings<Env>();
|
|
83
|
+
env.SECRET_KEY; // string (typed!)
|
|
84
|
+
env.KV.get("key"); // KVNamespace methods available
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Request.cf object:**
|
|
88
|
+
```js
|
|
89
|
+
const cf = await mf.getCf();
|
|
90
|
+
console.log(cf?.colo); // "DFW"
|
|
91
|
+
console.log(cf?.country); // "US"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**KV:**
|
|
95
|
+
```js
|
|
96
|
+
const ns = await mf.getKVNamespace("TEST_NAMESPACE");
|
|
97
|
+
await ns.put("key", "value");
|
|
98
|
+
const value = await ns.get("key");
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**R2:**
|
|
102
|
+
```js
|
|
103
|
+
const bucket = await mf.getR2Bucket("BUCKET");
|
|
104
|
+
await bucket.put("file.txt", "content");
|
|
105
|
+
const object = await bucket.get("file.txt");
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Durable Objects:**
|
|
109
|
+
```js
|
|
110
|
+
const ns = await mf.getDurableObjectNamespace("COUNTER");
|
|
111
|
+
const id = ns.idFromName("test");
|
|
112
|
+
const stub = ns.get(id);
|
|
113
|
+
const res = await stub.fetch("http://localhost/");
|
|
114
|
+
|
|
115
|
+
// Access storage directly:
|
|
116
|
+
const storage = await mf.getDurableObjectStorage(id);
|
|
117
|
+
await storage.put("key", "value");
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**D1:**
|
|
121
|
+
```js
|
|
122
|
+
const db = await mf.getD1Database("DB");
|
|
123
|
+
await db.exec(`CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)`);
|
|
124
|
+
await db.prepare("INSERT INTO users (name) VALUES (?)").bind("Alice").run();
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Cache:**
|
|
128
|
+
```js
|
|
129
|
+
const caches = await mf.getCaches();
|
|
130
|
+
const defaultCache = caches.default;
|
|
131
|
+
await defaultCache.put("http://example.com", new Response("cached"));
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Queue producer:**
|
|
135
|
+
```js
|
|
136
|
+
const producer = await mf.getQueueProducer("QUEUE");
|
|
137
|
+
await producer.send({ body: "message data" });
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Lifecycle
|
|
141
|
+
|
|
142
|
+
**Reload:**
|
|
143
|
+
```js
|
|
144
|
+
await mf.setOptions({
|
|
145
|
+
scriptPath: "worker.js",
|
|
146
|
+
bindings: { VERSION: "2.0" },
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Watch (manual):**
|
|
151
|
+
```js
|
|
152
|
+
import { watch } from "fs";
|
|
153
|
+
|
|
154
|
+
const config = { scriptPath: "worker.js" };
|
|
155
|
+
const mf = new Miniflare(config);
|
|
156
|
+
|
|
157
|
+
watch("worker.js", async () => {
|
|
158
|
+
console.log("Reloading...");
|
|
159
|
+
await mf.setOptions(config);
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**Cleanup:**
|
|
164
|
+
```js
|
|
165
|
+
await mf.dispose();
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Debugging
|
|
169
|
+
|
|
170
|
+
**Inspector URL for DevTools:**
|
|
171
|
+
```js
|
|
172
|
+
const url = await mf.getInspectorURL();
|
|
173
|
+
console.log(`DevTools: ${url}`);
|
|
174
|
+
// Open in Chrome DevTools for breakpoints, profiling
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Wait for server ready:**
|
|
178
|
+
```js
|
|
179
|
+
const mf = new Miniflare({ scriptPath: "worker.js" });
|
|
180
|
+
const url = await mf.ready; // Promise<URL>
|
|
181
|
+
console.log(`Server running at ${url}`); // http://127.0.0.1:8787
|
|
182
|
+
|
|
183
|
+
// Note: dispatchFetch() waits automatically, no need to await ready
|
|
184
|
+
const res = await mf.dispatchFetch("http://localhost/"); // Works immediately
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
See [configuration.md](./configuration.md) for all constructor options.
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## Script Loading
|
|
4
|
+
|
|
5
|
+
```js
|
|
6
|
+
// Inline
|
|
7
|
+
new Miniflare({ modules: true, script: `export default { ... }` });
|
|
8
|
+
|
|
9
|
+
// File-based
|
|
10
|
+
new Miniflare({ scriptPath: "worker.js" });
|
|
11
|
+
|
|
12
|
+
// Multi-module
|
|
13
|
+
new Miniflare({
|
|
14
|
+
scriptPath: "src/index.js",
|
|
15
|
+
modules: true,
|
|
16
|
+
modulesRules: [
|
|
17
|
+
{ type: "ESModule", include: ["**/*.js"] },
|
|
18
|
+
{ type: "Text", include: ["**/*.txt"] },
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Compatibility
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
new Miniflare({
|
|
27
|
+
compatibilityDate: "2026-01-01", // Use recent date for latest features
|
|
28
|
+
compatibilityFlags: [
|
|
29
|
+
"nodejs_compat", // Node.js APIs (process, Buffer, etc)
|
|
30
|
+
"streams_enable_constructors", // Stream constructors
|
|
31
|
+
],
|
|
32
|
+
upstream: "https://example.com", // Fallback for unhandled requests
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Critical:** Use `compatibilityDate: "2026-01-01"` or latest to match production runtime. Old dates limit available APIs.
|
|
37
|
+
|
|
38
|
+
## HTTP Server & Request.cf
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
new Miniflare({
|
|
42
|
+
port: 8787, // Default: 8787
|
|
43
|
+
host: "127.0.0.1",
|
|
44
|
+
https: true, // Self-signed cert
|
|
45
|
+
liveReload: true, // Auto-reload HTML
|
|
46
|
+
|
|
47
|
+
cf: true, // Fetch live Request.cf data (cached)
|
|
48
|
+
// cf: "./cf.json", // Or load from file
|
|
49
|
+
// cf: { colo: "DFW" }, // Or inline mock
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Note:** For tests, use `dispatchFetch()` (no port conflicts).
|
|
54
|
+
|
|
55
|
+
## Storage Bindings
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
new Miniflare({
|
|
59
|
+
// KV
|
|
60
|
+
kvNamespaces: ["TEST_NAMESPACE", "CACHE"],
|
|
61
|
+
kvPersist: "./kv-data", // Optional: persist to disk
|
|
62
|
+
|
|
63
|
+
// R2
|
|
64
|
+
r2Buckets: ["BUCKET", "IMAGES"],
|
|
65
|
+
r2Persist: "./r2-data",
|
|
66
|
+
|
|
67
|
+
// Durable Objects
|
|
68
|
+
modules: true,
|
|
69
|
+
durableObjects: {
|
|
70
|
+
COUNTER: "Counter", // className
|
|
71
|
+
API_OBJECT: { className: "ApiObject", scriptName: "api-worker" },
|
|
72
|
+
},
|
|
73
|
+
durableObjectsPersist: "./do-data",
|
|
74
|
+
|
|
75
|
+
// D1
|
|
76
|
+
d1Databases: ["DB"],
|
|
77
|
+
d1Persist: "./d1-data",
|
|
78
|
+
|
|
79
|
+
// Cache
|
|
80
|
+
cache: true, // Default
|
|
81
|
+
cachePersist: "./cache-data",
|
|
82
|
+
});
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Bindings
|
|
86
|
+
|
|
87
|
+
```js
|
|
88
|
+
new Miniflare({
|
|
89
|
+
// Environment variables
|
|
90
|
+
bindings: {
|
|
91
|
+
SECRET_KEY: "my-secret-value",
|
|
92
|
+
API_URL: "https://api.example.com",
|
|
93
|
+
DEBUG: true,
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
// Other bindings
|
|
97
|
+
wasmBindings: { ADD_MODULE: "./add.wasm" },
|
|
98
|
+
textBlobBindings: { TEXT: "./data.txt" },
|
|
99
|
+
queueProducers: ["QUEUE"],
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Multiple Workers
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
new Miniflare({
|
|
107
|
+
workers: [
|
|
108
|
+
{
|
|
109
|
+
name: "main",
|
|
110
|
+
kvNamespaces: { DATA: "shared" },
|
|
111
|
+
serviceBindings: { API: "api-worker" },
|
|
112
|
+
script: `export default { ... }`,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "api-worker",
|
|
116
|
+
kvNamespaces: { DATA: "shared" }, // Shared storage
|
|
117
|
+
script: `export default { ... }`,
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**With routing:**
|
|
124
|
+
```js
|
|
125
|
+
workers: [
|
|
126
|
+
{ name: "api", scriptPath: "./api.js", routes: ["api.example.com/*"] },
|
|
127
|
+
{ name: "web", scriptPath: "./web.js", routes: ["example.com/*"] },
|
|
128
|
+
],
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Logging & Performance
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
import { Log, LogLevel } from "miniflare";
|
|
135
|
+
|
|
136
|
+
new Miniflare({
|
|
137
|
+
log: new Log(LogLevel.DEBUG), // DEBUG | INFO | WARN | ERROR | NONE
|
|
138
|
+
scriptTimeout: 30000, // CPU limit (ms)
|
|
139
|
+
workersConcurrencyLimit: 10, // Max concurrent workers
|
|
140
|
+
});
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Workers Sites
|
|
144
|
+
|
|
145
|
+
```js
|
|
146
|
+
new Miniflare({
|
|
147
|
+
sitePath: "./public",
|
|
148
|
+
siteInclude: ["**/*.html", "**/*.css"],
|
|
149
|
+
siteExclude: ["**/*.map"],
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## From wrangler.toml
|
|
154
|
+
|
|
155
|
+
Miniflare doesn't auto-read `wrangler.toml`:
|
|
156
|
+
|
|
157
|
+
```toml
|
|
158
|
+
# wrangler.toml
|
|
159
|
+
name = "my-worker"
|
|
160
|
+
main = "src/index.ts"
|
|
161
|
+
compatibility_date = "2026-01-01"
|
|
162
|
+
[[kv_namespaces]]
|
|
163
|
+
binding = "KV"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
```js
|
|
167
|
+
// Miniflare equivalent
|
|
168
|
+
new Miniflare({
|
|
169
|
+
scriptPath: "src/index.ts",
|
|
170
|
+
compatibilityDate: "2026-01-01",
|
|
171
|
+
kvNamespaces: ["KV"],
|
|
172
|
+
});
|
|
173
|
+
```
|