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,78 @@
|
|
|
1
|
+
# Cloudflare Browser Rendering Skill Reference
|
|
2
|
+
|
|
3
|
+
**Description**: Expert knowledge for Cloudflare Browser Rendering - control headless Chrome on Cloudflare's global network for browser automation, screenshots, PDFs, web scraping, testing, and content generation.
|
|
4
|
+
|
|
5
|
+
**When to use**: Any task involving Cloudflare Browser Rendering including: taking screenshots, generating PDFs, web scraping, browser automation, testing web applications, extracting structured data, capturing page metrics, or automating browser interactions.
|
|
6
|
+
|
|
7
|
+
## Decision Tree
|
|
8
|
+
|
|
9
|
+
### REST API vs Workers Bindings
|
|
10
|
+
|
|
11
|
+
**Use REST API when:**
|
|
12
|
+
- One-off, stateless tasks (screenshot, PDF, content fetch)
|
|
13
|
+
- No Workers infrastructure yet
|
|
14
|
+
- Simple integrations from external services
|
|
15
|
+
- Need quick prototyping without deployment
|
|
16
|
+
|
|
17
|
+
**Use Workers Bindings when:**
|
|
18
|
+
- Complex browser automation workflows
|
|
19
|
+
- Need session reuse for performance
|
|
20
|
+
- Multiple page interactions per request
|
|
21
|
+
- Custom scripting and logic required
|
|
22
|
+
- Building production applications
|
|
23
|
+
|
|
24
|
+
### Puppeteer vs Playwright
|
|
25
|
+
|
|
26
|
+
| Feature | Puppeteer | Playwright |
|
|
27
|
+
|---------|-----------|------------|
|
|
28
|
+
| API Style | Chrome DevTools Protocol | High-level abstractions |
|
|
29
|
+
| Selectors | CSS, XPath | CSS, text, role, test-id |
|
|
30
|
+
| Best for | Advanced control, CDP access | Quick automation, testing |
|
|
31
|
+
| Learning curve | Steeper | Gentler |
|
|
32
|
+
|
|
33
|
+
**Use Puppeteer:** Need CDP protocol access, Chrome-specific features, migration from existing Puppeteer code
|
|
34
|
+
**Use Playwright:** Modern selector APIs, cross-browser patterns, faster development
|
|
35
|
+
|
|
36
|
+
## Tier Limits Summary
|
|
37
|
+
|
|
38
|
+
| Limit | Free Tier | Paid Tier |
|
|
39
|
+
|-------|-----------|-----------|
|
|
40
|
+
| Daily browser time | 10 minutes | Unlimited* |
|
|
41
|
+
| Concurrent sessions | 3 | 30 |
|
|
42
|
+
| Requests per minute | 6 | 180 |
|
|
43
|
+
|
|
44
|
+
*Subject to fair-use policy. See [gotchas.md](gotchas.md) for details.
|
|
45
|
+
|
|
46
|
+
## Reading Order
|
|
47
|
+
|
|
48
|
+
**New to Browser Rendering:**
|
|
49
|
+
1. [configuration.md](configuration.md) - Setup and deployment
|
|
50
|
+
2. [patterns.md](patterns.md) - Common use cases with examples
|
|
51
|
+
3. [api.md](api.md) - API reference
|
|
52
|
+
4. [gotchas.md](gotchas.md) - Avoid common pitfalls
|
|
53
|
+
|
|
54
|
+
**Specific task:**
|
|
55
|
+
- **Setup/deployment** → [configuration.md](configuration.md)
|
|
56
|
+
- **API reference/endpoints** → [api.md](api.md)
|
|
57
|
+
- **Example code/patterns** → [patterns.md](patterns.md)
|
|
58
|
+
- **Debugging/troubleshooting** → [gotchas.md](gotchas.md)
|
|
59
|
+
|
|
60
|
+
**REST API users:**
|
|
61
|
+
- Start with [api.md](api.md) REST API section
|
|
62
|
+
- Check [gotchas.md](gotchas.md) for rate limits
|
|
63
|
+
|
|
64
|
+
**Workers users:**
|
|
65
|
+
- Start with [configuration.md](configuration.md)
|
|
66
|
+
- Review [patterns.md](patterns.md) for session management
|
|
67
|
+
- Reference [api.md](api.md) for Workers Bindings
|
|
68
|
+
|
|
69
|
+
## In This Reference
|
|
70
|
+
|
|
71
|
+
- **[configuration.md](configuration.md)** - Setup, deployment, wrangler config, compatibility
|
|
72
|
+
- **[api.md](api.md)** - REST API endpoints + Workers Bindings (Puppeteer/Playwright)
|
|
73
|
+
- **[patterns.md](patterns.md)** - Common patterns, use cases, real examples
|
|
74
|
+
- **[gotchas.md](gotchas.md)** - Troubleshooting, best practices, tier limits, common errors
|
|
75
|
+
|
|
76
|
+
## See Also
|
|
77
|
+
|
|
78
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/browser-rendering/)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Browser Rendering API
|
|
2
|
+
|
|
3
|
+
## REST API
|
|
4
|
+
|
|
5
|
+
**Base:** `https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering`
|
|
6
|
+
**Auth:** `Authorization: Bearer <token>` (Browser Rendering - Edit permission)
|
|
7
|
+
|
|
8
|
+
### Endpoints
|
|
9
|
+
|
|
10
|
+
| Endpoint | Description | Key Options |
|
|
11
|
+
|----------|-------------|-------------|
|
|
12
|
+
| `/content` | Get rendered HTML | `url`, `waitUntil` |
|
|
13
|
+
| `/screenshot` | Capture image | `screenshotOptions: {type, fullPage, clip}` |
|
|
14
|
+
| `/pdf` | Generate PDF | `pdfOptions: {format, landscape, margin}` |
|
|
15
|
+
| `/snapshot` | HTML + inlined resources | `url` |
|
|
16
|
+
| `/scrape` | Extract by selectors | `selectors: ["h1", ".price"]` |
|
|
17
|
+
| `/json` | AI-structured extraction | `schema: {name: "string", price: "number"}` |
|
|
18
|
+
| `/links` | Get all links | `url` |
|
|
19
|
+
| `/markdown` | Convert to markdown | `url` |
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
curl -X POST '.../browser-rendering/screenshot' \
|
|
23
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
24
|
+
-d '{"url":"https://example.com","screenshotOptions":{"fullPage":true}}'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Workers Binding
|
|
28
|
+
|
|
29
|
+
```jsonc
|
|
30
|
+
// wrangler.jsonc
|
|
31
|
+
{ "browser": { "binding": "MYBROWSER" } }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Puppeteer
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import puppeteer from "@cloudflare/puppeteer";
|
|
38
|
+
|
|
39
|
+
const browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });
|
|
40
|
+
const page = await browser.newPage();
|
|
41
|
+
await page.goto('https://example.com', { waitUntil: 'networkidle0' });
|
|
42
|
+
|
|
43
|
+
// Content
|
|
44
|
+
const html = await page.content();
|
|
45
|
+
const title = await page.title();
|
|
46
|
+
|
|
47
|
+
// Screenshot/PDF
|
|
48
|
+
await page.screenshot({ fullPage: true, type: 'png' });
|
|
49
|
+
await page.pdf({ format: 'A4', printBackground: true });
|
|
50
|
+
|
|
51
|
+
// Interaction
|
|
52
|
+
await page.click('#button');
|
|
53
|
+
await page.type('#input', 'text');
|
|
54
|
+
await page.evaluate(() => document.querySelector('h1')?.textContent);
|
|
55
|
+
|
|
56
|
+
// Session management
|
|
57
|
+
const sessions = await puppeteer.sessions(env.MYBROWSER);
|
|
58
|
+
const limits = await puppeteer.limits(env.MYBROWSER);
|
|
59
|
+
|
|
60
|
+
await browser.close();
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Playwright
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { launch, connect } from "@cloudflare/playwright";
|
|
67
|
+
|
|
68
|
+
const browser = await launch(env.MYBROWSER, { keep_alive: 600000 });
|
|
69
|
+
const page = await browser.newPage();
|
|
70
|
+
|
|
71
|
+
await page.goto('https://example.com', { waitUntil: 'networkidle' });
|
|
72
|
+
|
|
73
|
+
// Modern selectors
|
|
74
|
+
await page.locator('.button').click();
|
|
75
|
+
await page.getByText('Submit').click();
|
|
76
|
+
await page.getByTestId('search').fill('query');
|
|
77
|
+
|
|
78
|
+
// Context for isolation
|
|
79
|
+
const context = await browser.newContext({
|
|
80
|
+
viewport: { width: 1920, height: 1080 },
|
|
81
|
+
userAgent: 'custom'
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
await browser.close();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Session Management
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// List sessions
|
|
91
|
+
await puppeteer.sessions(env.MYBROWSER);
|
|
92
|
+
|
|
93
|
+
// Connect to existing
|
|
94
|
+
await puppeteer.connect(env.MYBROWSER, sessionId);
|
|
95
|
+
|
|
96
|
+
// Check limits
|
|
97
|
+
await puppeteer.limits(env.MYBROWSER);
|
|
98
|
+
// { remaining: ms, total: ms, concurrent: n }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Key Options
|
|
102
|
+
|
|
103
|
+
| Option | Values |
|
|
104
|
+
|--------|--------|
|
|
105
|
+
| `waitUntil` | `load`, `domcontentloaded`, `networkidle0`, `networkidle2` |
|
|
106
|
+
| `keep_alive` | Max 600000ms (10 min) |
|
|
107
|
+
| `screenshot.type` | `png`, `jpeg` |
|
|
108
|
+
| `pdf.format` | `A4`, `Letter`, `Legal` |
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Configuration & Setup
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @cloudflare/puppeteer # or @cloudflare/playwright
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**Use Cloudflare packages** - standard `puppeteer`/`playwright` won't work in Workers.
|
|
10
|
+
|
|
11
|
+
## wrangler.json
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"name": "browser-worker",
|
|
16
|
+
"main": "src/index.ts",
|
|
17
|
+
"compatibility_date": "2025-01-01",
|
|
18
|
+
"compatibility_flags": ["nodejs_compat"],
|
|
19
|
+
"browser": {
|
|
20
|
+
"binding": "MYBROWSER"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Required:** `nodejs_compat` flag and `browser.binding`.
|
|
26
|
+
|
|
27
|
+
## TypeScript
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
interface Env {
|
|
31
|
+
MYBROWSER: Fetcher;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export default {
|
|
35
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
36
|
+
// ...
|
|
37
|
+
}
|
|
38
|
+
} satisfies ExportedHandler<Env>;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Development
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
wrangler dev --remote # --remote required for browser binding
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Local mode does NOT support Browser Rendering** - must use `--remote`.
|
|
48
|
+
|
|
49
|
+
## REST API
|
|
50
|
+
|
|
51
|
+
No wrangler config needed. Get API token with "Browser Rendering - Edit" permission.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
curl -X POST \
|
|
55
|
+
'https://api.cloudflare.com/client/v4/accounts/{accountId}/browser-rendering/screenshot' \
|
|
56
|
+
-H 'Authorization: Bearer TOKEN' \
|
|
57
|
+
-d '{"url": "https://example.com"}' --output screenshot.png
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Requirements
|
|
61
|
+
|
|
62
|
+
| Requirement | Value |
|
|
63
|
+
|-------------|-------|
|
|
64
|
+
| Node.js compatibility | `nodejs_compat` flag |
|
|
65
|
+
| Compatibility date | 2023-03-01+ |
|
|
66
|
+
| Module format | ES modules only |
|
|
67
|
+
| Browser | Chromium 119+ (no Firefox/Safari) |
|
|
68
|
+
|
|
69
|
+
**Not supported:** WebGL, WebRTC, extensions, `file://` protocol, Service Worker syntax.
|
|
70
|
+
|
|
71
|
+
## Troubleshooting
|
|
72
|
+
|
|
73
|
+
| Error | Solution |
|
|
74
|
+
|-------|----------|
|
|
75
|
+
| `MYBROWSER is undefined` | Use `wrangler dev --remote` |
|
|
76
|
+
| `nodejs_compat not enabled` | Add to `compatibility_flags` |
|
|
77
|
+
| `Module not found` | `npm install @cloudflare/puppeteer` |
|
|
78
|
+
| `Browser Rendering not available` | Enable in dashboard |
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Browser Rendering Gotchas
|
|
2
|
+
|
|
3
|
+
## Tier Limits
|
|
4
|
+
|
|
5
|
+
| Limit | Free | Paid |
|
|
6
|
+
|-------|------|------|
|
|
7
|
+
| Daily browser time | 10 min | Unlimited* |
|
|
8
|
+
| Concurrent sessions | 3 | 30 |
|
|
9
|
+
| Requests/minute | 6 | 180 |
|
|
10
|
+
| Session keep-alive | 10 min max | 10 min max |
|
|
11
|
+
|
|
12
|
+
*Subject to fair-use policy.
|
|
13
|
+
|
|
14
|
+
**Check quota:**
|
|
15
|
+
```typescript
|
|
16
|
+
const limits = await puppeteer.limits(env.MYBROWSER);
|
|
17
|
+
// { remaining: 540000, total: 600000, concurrent: 2 }
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Always Close Browsers
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
const browser = await puppeteer.launch(env.MYBROWSER);
|
|
24
|
+
try {
|
|
25
|
+
const page = await browser.newPage();
|
|
26
|
+
await page.goto("https://example.com");
|
|
27
|
+
return new Response(await page.content());
|
|
28
|
+
} finally {
|
|
29
|
+
await browser.close(); // ALWAYS in finally
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Workers vs REST:** REST auto-closes after timeout. Workers must call `close()` or session stays open until `keep_alive` expires.
|
|
34
|
+
|
|
35
|
+
## Optimize Concurrency
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
// ❌ 3 sessions (hits free tier limit)
|
|
39
|
+
const browser1 = await puppeteer.launch(env.MYBROWSER);
|
|
40
|
+
const browser2 = await puppeteer.launch(env.MYBROWSER);
|
|
41
|
+
|
|
42
|
+
// ✅ 1 session, multiple pages
|
|
43
|
+
const browser = await puppeteer.launch(env.MYBROWSER);
|
|
44
|
+
const page1 = await browser.newPage();
|
|
45
|
+
const page2 = await browser.newPage();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Common Errors
|
|
49
|
+
|
|
50
|
+
| Error | Cause | Fix |
|
|
51
|
+
|-------|-------|-----|
|
|
52
|
+
| Session limit exceeded | Too many concurrent | Close unused browsers, use pages not browsers |
|
|
53
|
+
| Page navigation timeout | Slow page or `networkidle` on busy page | Increase timeout, use `waitUntil: "load"` |
|
|
54
|
+
| Session not found | Expired session | Catch error, launch new session |
|
|
55
|
+
| Evaluation failed | DOM element missing | Use `?.` optional chaining |
|
|
56
|
+
| Protocol error: Target closed | Page closed during operation | Await all ops before closing |
|
|
57
|
+
|
|
58
|
+
## page.evaluate() Gotchas
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// ❌ Outer scope not available
|
|
62
|
+
const selector = "h1";
|
|
63
|
+
await page.evaluate(() => document.querySelector(selector));
|
|
64
|
+
|
|
65
|
+
// ✅ Pass as argument
|
|
66
|
+
await page.evaluate((sel) => document.querySelector(sel)?.textContent, selector);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Performance
|
|
70
|
+
|
|
71
|
+
**waitUntil options (fastest to slowest):**
|
|
72
|
+
1. `domcontentloaded` - DOM ready
|
|
73
|
+
2. `load` - load event (default)
|
|
74
|
+
3. `networkidle0` - no network for 500ms
|
|
75
|
+
|
|
76
|
+
**Block unnecessary resources:**
|
|
77
|
+
```typescript
|
|
78
|
+
await page.setRequestInterception(true);
|
|
79
|
+
page.on("request", (req) => {
|
|
80
|
+
if (["image", "stylesheet", "font"].includes(req.resourceType())) {
|
|
81
|
+
req.abort();
|
|
82
|
+
} else {
|
|
83
|
+
req.continue();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Session reuse:** Cold start ~1-2s, warm connect ~100-200ms. Store sessionId in KV for reuse.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Browser Rendering Patterns
|
|
2
|
+
|
|
3
|
+
## Basic Worker
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import puppeteer from "@cloudflare/puppeteer";
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
async fetch(request, env) {
|
|
10
|
+
const browser = await puppeteer.launch(env.MYBROWSER);
|
|
11
|
+
try {
|
|
12
|
+
const page = await browser.newPage();
|
|
13
|
+
await page.goto("https://example.com");
|
|
14
|
+
return new Response(await page.content());
|
|
15
|
+
} finally {
|
|
16
|
+
await browser.close(); // ALWAYS in finally
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Session Reuse
|
|
23
|
+
|
|
24
|
+
Keep sessions alive for performance:
|
|
25
|
+
```typescript
|
|
26
|
+
let sessionId = await env.SESSION_KV.get("browser-session");
|
|
27
|
+
if (sessionId) {
|
|
28
|
+
browser = await puppeteer.connect(env.MYBROWSER, sessionId);
|
|
29
|
+
} else {
|
|
30
|
+
browser = await puppeteer.launch(env.MYBROWSER, { keep_alive: 600000 });
|
|
31
|
+
await env.SESSION_KV.put("browser-session", browser.sessionId(), { expirationTtl: 600 });
|
|
32
|
+
}
|
|
33
|
+
// Don't close browser to keep session alive
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Common Operations
|
|
37
|
+
|
|
38
|
+
| Task | Code |
|
|
39
|
+
|------|------|
|
|
40
|
+
| Screenshot | `await page.screenshot({ type: "png", fullPage: true })` |
|
|
41
|
+
| PDF | `await page.pdf({ format: "A4", printBackground: true })` |
|
|
42
|
+
| Extract data | `await page.evaluate(() => document.querySelector('h1').textContent)` |
|
|
43
|
+
| Fill form | `await page.type('#input', 'value'); await page.click('button')` |
|
|
44
|
+
| Wait nav | `await Promise.all([page.waitForNavigation(), page.click('a')])` |
|
|
45
|
+
|
|
46
|
+
## Parallel Scraping
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
const pages = await Promise.all(urls.map(() => browser.newPage()));
|
|
50
|
+
await Promise.all(pages.map((p, i) => p.goto(urls[i])));
|
|
51
|
+
const titles = await Promise.all(pages.map(p => p.title()));
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Playwright Selectors
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { launch } from "@cloudflare/playwright";
|
|
58
|
+
const browser = await launch(env.MYBROWSER);
|
|
59
|
+
await page.getByRole("button", { name: "Sign in" }).click();
|
|
60
|
+
await page.getByLabel("Email").fill("user@example.com");
|
|
61
|
+
await page.getByTestId("submit-button").click();
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Incognito Contexts
|
|
65
|
+
|
|
66
|
+
Isolated sessions without multiple browsers:
|
|
67
|
+
```typescript
|
|
68
|
+
const ctx1 = await browser.createIncognitoBrowserContext();
|
|
69
|
+
const ctx2 = await browser.createIncognitoBrowserContext();
|
|
70
|
+
// Each has isolated cookies/storage
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Quota Check
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const limits = await puppeteer.limits(env.MYBROWSER);
|
|
77
|
+
if (limits.remaining < 60000) return new Response("Quota low", { status: 429 });
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Error Handling
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
try {
|
|
84
|
+
await page.goto(url, { timeout: 30000, waitUntil: "networkidle0" });
|
|
85
|
+
} catch (e) {
|
|
86
|
+
if (e.message.includes("timeout")) return new Response("Timeout", { status: 504 });
|
|
87
|
+
if (e.message.includes("Session limit")) return new Response("Too many sessions", { status: 429 });
|
|
88
|
+
} finally {
|
|
89
|
+
if (browser) await browser.close();
|
|
90
|
+
}
|
|
91
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# C3 (create-cloudflare)
|
|
2
|
+
|
|
3
|
+
Official CLI for scaffolding Cloudflare Workers and Pages projects with templates, TypeScript, and instant deployment.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Interactive (recommended for first-time)
|
|
9
|
+
npm create cloudflare@latest my-app
|
|
10
|
+
|
|
11
|
+
# Worker (API/WebSocket/Cron)
|
|
12
|
+
npm create cloudflare@latest my-api -- --type=hello-world --ts
|
|
13
|
+
|
|
14
|
+
# Pages (static/SSG/full-stack)
|
|
15
|
+
npm create cloudflare@latest my-site -- --type=web-app --framework=astro --platform=pages
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Platform Decision Tree
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
What are you building?
|
|
22
|
+
|
|
23
|
+
├─ API / WebSocket / Cron / Email handler
|
|
24
|
+
│ └─ Workers (default) - no --platform flag needed
|
|
25
|
+
│ npm create cloudflare@latest my-api -- --type=hello-world
|
|
26
|
+
|
|
27
|
+
├─ Static site / SSG / Documentation
|
|
28
|
+
│ └─ Pages - requires --platform=pages
|
|
29
|
+
│ npm create cloudflare@latest my-site -- --type=web-app --framework=astro --platform=pages
|
|
30
|
+
|
|
31
|
+
├─ Full-stack app (Next.js/Remix/SvelteKit)
|
|
32
|
+
│ ├─ Need Durable Objects, Queues, or Workers-only features?
|
|
33
|
+
│ │ └─ Workers (default)
|
|
34
|
+
│ └─ Otherwise use Pages for git integration and branch previews
|
|
35
|
+
│ └─ Add --platform=pages
|
|
36
|
+
|
|
37
|
+
└─ Convert existing project
|
|
38
|
+
└─ npm create cloudflare@latest . -- --type=pre-existing --existing-script=./src/worker.ts
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Critical:** Pages projects require `--platform=pages` flag. Without it, C3 defaults to Workers.
|
|
42
|
+
|
|
43
|
+
## Interactive Flow
|
|
44
|
+
|
|
45
|
+
When run without flags, C3 prompts in this order:
|
|
46
|
+
|
|
47
|
+
1. **Project name** - Directory to create (defaults to current dir with `.`)
|
|
48
|
+
2. **Application type** - `hello-world`, `web-app`, `demo`, `pre-existing`, `remote-template`
|
|
49
|
+
3. **Platform** - `workers` (default) or `pages` (for web apps only)
|
|
50
|
+
4. **Framework** - If web-app: `next`, `remix`, `astro`, `react-router`, `solid`, `svelte`, etc.
|
|
51
|
+
5. **TypeScript** - `yes` (recommended) or `no`
|
|
52
|
+
6. **Git** - Initialize repository? `yes` or `no`
|
|
53
|
+
7. **Deploy** - Deploy now? `yes` or `no` (requires `wrangler login`)
|
|
54
|
+
|
|
55
|
+
## Installation Methods
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# NPM
|
|
59
|
+
npm create cloudflare@latest
|
|
60
|
+
|
|
61
|
+
# Yarn
|
|
62
|
+
yarn create cloudflare
|
|
63
|
+
|
|
64
|
+
# PNPM
|
|
65
|
+
pnpm create cloudflare@latest
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## In This Reference
|
|
69
|
+
|
|
70
|
+
| File | Purpose | Use When |
|
|
71
|
+
|------|---------|----------|
|
|
72
|
+
| **api.md** | Complete CLI flag reference | Scripting, CI/CD, advanced usage |
|
|
73
|
+
| **configuration.md** | Generated files, bindings, types | Understanding output, customization |
|
|
74
|
+
| **patterns.md** | Workflows, CI/CD, monorepos | Real-world integration |
|
|
75
|
+
| **gotchas.md** | Troubleshooting failures | Deployment blocked, errors |
|
|
76
|
+
|
|
77
|
+
## Reading Order
|
|
78
|
+
|
|
79
|
+
| Task | Read |
|
|
80
|
+
|------|------|
|
|
81
|
+
| Create first project | README only |
|
|
82
|
+
| Set up CI/CD | README → api → patterns |
|
|
83
|
+
| Debug failed deploy | gotchas |
|
|
84
|
+
| Understand generated files | configuration |
|
|
85
|
+
| Full CLI reference | api |
|
|
86
|
+
| Create custom template | patterns → configuration |
|
|
87
|
+
| Convert existing project | README → patterns |
|
|
88
|
+
|
|
89
|
+
## Post-Creation
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
cd my-app
|
|
93
|
+
|
|
94
|
+
# Local dev with hot reload
|
|
95
|
+
npm run dev
|
|
96
|
+
|
|
97
|
+
# Generate TypeScript types for bindings
|
|
98
|
+
npm run cf-typegen
|
|
99
|
+
|
|
100
|
+
# Deploy to Cloudflare
|
|
101
|
+
npm run deploy
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## See Also
|
|
105
|
+
|
|
106
|
+
- **workers/README.md** - Workers runtime, bindings, APIs
|
|
107
|
+
- **workers-ai/README.md** - AI/ML models
|
|
108
|
+
- **pages/README.md** - Pages-specific features
|
|
109
|
+
- **wrangler/README.md** - Wrangler CLI beyond initial setup
|
|
110
|
+
- **d1/README.md** - SQLite database
|
|
111
|
+
- **r2/README.md** - Object storage
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# C3 CLI Reference
|
|
2
|
+
|
|
3
|
+
## Invocation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm create cloudflare@latest [name] [-- flags] # NPM requires --
|
|
7
|
+
yarn create cloudflare [name] [flags]
|
|
8
|
+
pnpm create cloudflare@latest [name] [-- flags]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Core Flags
|
|
12
|
+
|
|
13
|
+
| Flag | Values | Description |
|
|
14
|
+
|------|--------|-------------|
|
|
15
|
+
| `--type` | `hello-world`, `web-app`, `demo`, `pre-existing`, `remote-template` | Application type |
|
|
16
|
+
| `--platform` | `workers` (default), `pages` | Target platform |
|
|
17
|
+
| `--framework` | `next`, `remix`, `astro`, `react-router`, `solid`, `svelte`, `qwik`, `vue`, `angular`, `hono` | Web framework (requires `--type=web-app`) |
|
|
18
|
+
| `--lang` | `ts`, `js`, `python` | Language (for `--type=hello-world`) |
|
|
19
|
+
| `--ts` / `--no-ts` | - | TypeScript for web apps |
|
|
20
|
+
|
|
21
|
+
## Deployment Flags
|
|
22
|
+
|
|
23
|
+
| Flag | Description |
|
|
24
|
+
|------|-------------|
|
|
25
|
+
| `--deploy` / `--no-deploy` | Deploy immediately (prompts interactive, skips in CI) |
|
|
26
|
+
| `--git` / `--no-git` | Initialize git (default: yes) |
|
|
27
|
+
| `--open` | Open browser after deploy |
|
|
28
|
+
|
|
29
|
+
## Advanced Flags
|
|
30
|
+
|
|
31
|
+
| Flag | Description |
|
|
32
|
+
|------|-------------|
|
|
33
|
+
| `--template=user/repo` | GitHub template or local path |
|
|
34
|
+
| `--existing-script=./src/worker.ts` | Existing script (requires `--type=pre-existing`) |
|
|
35
|
+
| `--category=ai\|database\|realtime` | Demo filter (requires `--type=demo`) |
|
|
36
|
+
| `--experimental` | Enable experimental features |
|
|
37
|
+
| `--wrangler-defaults` | Skip wrangler prompts |
|
|
38
|
+
|
|
39
|
+
## Environment Variables
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
CLOUDFLARE_API_TOKEN=xxx # For deployment
|
|
43
|
+
CLOUDFLARE_ACCOUNT_ID=xxx # Account ID
|
|
44
|
+
CF_TELEMETRY_DISABLED=1 # Disable telemetry
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Exit Codes
|
|
48
|
+
|
|
49
|
+
`0` success, `1` user abort, `2` error
|
|
50
|
+
|
|
51
|
+
## Examples
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# TypeScript Worker
|
|
55
|
+
npm create cloudflare@latest my-api -- --type=hello-world --lang=ts --no-deploy
|
|
56
|
+
|
|
57
|
+
# Next.js on Pages
|
|
58
|
+
npm create cloudflare@latest my-app -- --type=web-app --framework=next --platform=pages --ts
|
|
59
|
+
|
|
60
|
+
# Astro blog
|
|
61
|
+
npm create cloudflare@latest my-blog -- --type=web-app --framework=astro --ts --deploy
|
|
62
|
+
|
|
63
|
+
# CI: non-interactive
|
|
64
|
+
npm create cloudflare@latest my-app -- --type=web-app --framework=next --ts --no-git --no-deploy
|
|
65
|
+
|
|
66
|
+
# GitHub template
|
|
67
|
+
npm create cloudflare@latest -- --template=cloudflare/templates/worker-openapi
|
|
68
|
+
|
|
69
|
+
# Convert existing project
|
|
70
|
+
npm create cloudflare@latest . -- --type=pre-existing --existing-script=./build/worker.js
|
|
71
|
+
```
|