memory-journal-mcp 7.7.0 → 8.0.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/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +7 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -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 +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -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 +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -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 +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -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 +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -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 +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -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 +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Terraform Troubleshooting & Best Practices
|
|
2
|
+
|
|
3
|
+
Common issues, security considerations, and best practices.
|
|
4
|
+
|
|
5
|
+
## State Drift Issues
|
|
6
|
+
|
|
7
|
+
Some resources have known state drift. Add lifecycle blocks to prevent perpetual diffs:
|
|
8
|
+
|
|
9
|
+
| Resource | Drift Attributes | Workaround |
|
|
10
|
+
| --------------------------- | ------------------------------------- | ------------------------------------------------------ |
|
|
11
|
+
| `cloudflare_pages_project` | `deployment_configs.*` | `ignore_changes = [deployment_configs]` |
|
|
12
|
+
| `cloudflare_workers_script` | secrets returned as REDACTED | `ignore_changes = [secret_text_binding]` |
|
|
13
|
+
| `cloudflare_load_balancer` | `adaptive_routing`, `random_steering` | `ignore_changes = [adaptive_routing, random_steering]` |
|
|
14
|
+
| `cloudflare_workers_kv` | special chars in keys (< 5.16.0) | Upgrade to 5.16.0+ |
|
|
15
|
+
|
|
16
|
+
```hcl
|
|
17
|
+
# Example: Ignore secret drift
|
|
18
|
+
resource "cloudflare_workers_script" "api" {
|
|
19
|
+
account_id = var.account_id
|
|
20
|
+
name = "api-worker"
|
|
21
|
+
content = file("worker.js")
|
|
22
|
+
secret_text_binding { name = "API_KEY"; text = var.api_key }
|
|
23
|
+
|
|
24
|
+
lifecycle {
|
|
25
|
+
ignore_changes = [secret_text_binding]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## v5 Breaking Changes
|
|
31
|
+
|
|
32
|
+
Provider v5 is current (auto-generated from OpenAPI). v4→v5 has breaking changes:
|
|
33
|
+
|
|
34
|
+
**Resource Renames:**
|
|
35
|
+
|
|
36
|
+
| v4 Resource | v5 Resource | Notes |
|
|
37
|
+
| -------------------------- | --------------------------- | -------------------- |
|
|
38
|
+
| `cloudflare_record` | `cloudflare_dns_record` | |
|
|
39
|
+
| `cloudflare_worker_script` | `cloudflare_workers_script` | Note: plural |
|
|
40
|
+
| `cloudflare_worker_*` | `cloudflare_workers_*` | All worker resources |
|
|
41
|
+
| `cloudflare_access_*` | `cloudflare_zero_trust_*` | Access → Zero Trust |
|
|
42
|
+
|
|
43
|
+
**Attribute Changes:**
|
|
44
|
+
|
|
45
|
+
| v4 Attribute | v5 Attribute | Resources |
|
|
46
|
+
| --------------- | ------------ | -------------------- |
|
|
47
|
+
| `zone` | `name` | zone |
|
|
48
|
+
| `account_id` | `account.id` | zone (object syntax) |
|
|
49
|
+
| `key` | `key_name` | KV |
|
|
50
|
+
| `location_hint` | `location` | R2 |
|
|
51
|
+
|
|
52
|
+
**State Migration:**
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Rename resources in state after v5 upgrade
|
|
56
|
+
terraform state mv cloudflare_record.example cloudflare_dns_record.example
|
|
57
|
+
terraform state mv cloudflare_worker_script.api cloudflare_workers_script.api
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Resource-Specific Gotchas
|
|
61
|
+
|
|
62
|
+
### R2 Location Case Sensitivity
|
|
63
|
+
|
|
64
|
+
**Problem:** Terraform creates R2 bucket but fails on subsequent applies
|
|
65
|
+
**Cause:** Location must be UPPERCASE
|
|
66
|
+
**Solution:** Use `WNAM`, `ENAM`, `WEUR`, `EEUR`, `APAC` (not `wnam`, `enam`, etc.)
|
|
67
|
+
|
|
68
|
+
```hcl
|
|
69
|
+
resource "cloudflare_r2_bucket" "assets" {
|
|
70
|
+
account_id = var.account_id
|
|
71
|
+
name = "assets"
|
|
72
|
+
location = "WNAM" # UPPERCASE required
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### KV Special Characters (< 5.16.0)
|
|
77
|
+
|
|
78
|
+
**Problem:** Keys with `+`, `#`, `%` cause encoding issues
|
|
79
|
+
**Cause:** URL encoding bug in provider < 5.16.0
|
|
80
|
+
**Solution:** Upgrade to 5.16.0+ or avoid special chars in keys
|
|
81
|
+
|
|
82
|
+
### D1 Migrations
|
|
83
|
+
|
|
84
|
+
**Problem:** Terraform creates database but schema is empty
|
|
85
|
+
**Cause:** Terraform only creates D1 resource, not schema
|
|
86
|
+
**Solution:** Run migrations via wrangler after Terraform apply
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# After terraform apply
|
|
90
|
+
wrangler d1 migrations apply <db-name>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Worker Script Size Limit
|
|
94
|
+
|
|
95
|
+
**Problem:** Worker deployment fails with "script too large"
|
|
96
|
+
**Cause:** Worker script + dependencies exceed 10 MB limit
|
|
97
|
+
**Solution:** Use code splitting, external dependencies, or minification
|
|
98
|
+
|
|
99
|
+
### Pages Project Drift
|
|
100
|
+
|
|
101
|
+
**Problem:** Pages project shows perpetual diff on `deployment_configs`
|
|
102
|
+
**Cause:** Cloudflare API adds default values not in Terraform state
|
|
103
|
+
**Solution:** Add lifecycle ignore block (see State Drift table above)
|
|
104
|
+
|
|
105
|
+
## Common Errors
|
|
106
|
+
|
|
107
|
+
### "Error: couldn't find resource"
|
|
108
|
+
|
|
109
|
+
**Cause:** Resource was deleted outside Terraform
|
|
110
|
+
**Solution:** Import resource back into state with `terraform import cloudflare_zone.example <zone-id>` or remove from state with `terraform state rm cloudflare_zone.example`
|
|
111
|
+
|
|
112
|
+
### "409 Conflict on worker deployment"
|
|
113
|
+
|
|
114
|
+
**Cause:** Worker being deployed by both Terraform and wrangler simultaneously
|
|
115
|
+
**Solution:** Choose one deployment method; if using Terraform, remove wrangler deployments
|
|
116
|
+
|
|
117
|
+
### "DNS record already exists"
|
|
118
|
+
|
|
119
|
+
**Cause:** Existing DNS record not imported into Terraform state
|
|
120
|
+
**Solution:** Find record ID in Cloudflare dashboard and import with `terraform import cloudflare_dns_record.example <zone-id>/<record-id>`
|
|
121
|
+
|
|
122
|
+
### "Invalid provider configuration"
|
|
123
|
+
|
|
124
|
+
**Cause:** API token missing, invalid, or lacking required permissions
|
|
125
|
+
**Solution:** Set `CLOUDFLARE_API_TOKEN` environment variable or check token permissions in dashboard
|
|
126
|
+
|
|
127
|
+
### "State locking errors"
|
|
128
|
+
|
|
129
|
+
**Cause:** Multiple concurrent Terraform runs or stale lock from crashed process
|
|
130
|
+
**Solution:** Remove stale lock with `terraform force-unlock <lock-id>` (use with caution)
|
|
131
|
+
|
|
132
|
+
## Limits
|
|
133
|
+
|
|
134
|
+
| Resource | Limit | Notes |
|
|
135
|
+
| --------------------- | ------------------ | ---------------------------------------- |
|
|
136
|
+
| API token rate limit | Varies by plan | Use `api_client_logging = true` to debug |
|
|
137
|
+
| Worker script size | 10 MB | Includes all dependencies |
|
|
138
|
+
| KV keys per namespace | Unlimited | Pay per operation |
|
|
139
|
+
| R2 storage | Unlimited | Pay per GB |
|
|
140
|
+
| D1 databases | 50,000 per account | Free tier: 10 |
|
|
141
|
+
| Pages projects | 500 per account | 100 for free accounts |
|
|
142
|
+
| DNS records | 3,500 per zone | Free plan |
|
|
143
|
+
|
|
144
|
+
## See Also
|
|
145
|
+
|
|
146
|
+
- [README](./README.md) - Provider setup
|
|
147
|
+
- [Configuration](./configuration.md) - Resources
|
|
148
|
+
- [API](./api.md) - Data sources
|
|
149
|
+
- [Patterns](./patterns.md) - Use cases
|
|
150
|
+
- Provider docs: https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Terraform Patterns & Use Cases
|
|
2
|
+
|
|
3
|
+
Architecture patterns, multi-environment setups, and real-world use cases.
|
|
4
|
+
|
|
5
|
+
## Recommended Directory Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
terraform/
|
|
9
|
+
├── environments/
|
|
10
|
+
│ ├── production/
|
|
11
|
+
│ │ ├── main.tf
|
|
12
|
+
│ │ └── terraform.tfvars
|
|
13
|
+
│ └── staging/
|
|
14
|
+
│ ├── main.tf
|
|
15
|
+
│ └── terraform.tfvars
|
|
16
|
+
├── modules/
|
|
17
|
+
│ ├── zone/
|
|
18
|
+
│ ├── worker/
|
|
19
|
+
│ └── dns/
|
|
20
|
+
└── shared/ # Shared resources across envs
|
|
21
|
+
└── main.tf
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Note:** Cloudflare recommends avoiding modules for provider resources due to v5 auto-generation complexity. Prefer environment directories + shared state instead.
|
|
25
|
+
|
|
26
|
+
## Multi-Environment Setup
|
|
27
|
+
|
|
28
|
+
```hcl
|
|
29
|
+
# Directory: environments/{production,staging}/main.tf + modules/{zone,worker,pages}
|
|
30
|
+
module "zone" {
|
|
31
|
+
source = "../../modules/zone"; account_id = var.account_id; zone_name = "example.com"; environment = "production"
|
|
32
|
+
}
|
|
33
|
+
module "api_worker" {
|
|
34
|
+
source = "../../modules/worker"; account_id = var.account_id; zone_id = module.zone.zone_id
|
|
35
|
+
name = "api-worker-prod"; script = file("../../workers/api.js"); environment = "production"
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## R2 State Backend
|
|
40
|
+
|
|
41
|
+
```hcl
|
|
42
|
+
terraform {
|
|
43
|
+
backend "s3" {
|
|
44
|
+
bucket = "terraform-state"
|
|
45
|
+
key = "cloudflare.tfstate"
|
|
46
|
+
region = "auto"
|
|
47
|
+
endpoints = { s3 = "https://<account_id>.r2.cloudflarestorage.com" }
|
|
48
|
+
skip_credentials_validation = true
|
|
49
|
+
skip_region_validation = true
|
|
50
|
+
skip_requesting_account_id = true
|
|
51
|
+
skip_metadata_api_check = true
|
|
52
|
+
skip_s3_checksum = true
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Worker with All Bindings
|
|
58
|
+
|
|
59
|
+
```hcl
|
|
60
|
+
locals { worker_name = "full-stack-worker" }
|
|
61
|
+
resource "cloudflare_workers_kv_namespace" "app" { account_id = var.account_id; title = "${local.worker_name}-kv" }
|
|
62
|
+
resource "cloudflare_r2_bucket" "app" { account_id = var.account_id; name = "${local.worker_name}-bucket" }
|
|
63
|
+
resource "cloudflare_d1_database" "app" { account_id = var.account_id; name = "${local.worker_name}-db" }
|
|
64
|
+
|
|
65
|
+
resource "cloudflare_worker_script" "app" {
|
|
66
|
+
account_id = var.account_id; name = local.worker_name; content = file("worker.js"); module = true
|
|
67
|
+
compatibility_date = "2025-01-01"
|
|
68
|
+
kv_namespace_binding { name = "KV"; namespace_id = cloudflare_workers_kv_namespace.app.id }
|
|
69
|
+
r2_bucket_binding { name = "BUCKET"; bucket_name = cloudflare_r2_bucket.app.name }
|
|
70
|
+
d1_database_binding { name = "DB"; database_id = cloudflare_d1_database.app.id }
|
|
71
|
+
secret_text_binding { name = "API_KEY"; text = var.api_key }
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Wrangler Integration
|
|
76
|
+
|
|
77
|
+
**CRITICAL**: Wrangler and Terraform must NOT manage same resources.
|
|
78
|
+
|
|
79
|
+
**Terraform**: Zones, DNS, security rules, Access, load balancers, worker deployments (CI/CD), KV/R2/D1 resource creation
|
|
80
|
+
**Wrangler**: Local dev (`wrangler dev`), manual deploys, D1 migrations, KV bulk ops, log streaming (`wrangler tail`)
|
|
81
|
+
|
|
82
|
+
### CI/CD Pattern
|
|
83
|
+
|
|
84
|
+
```hcl
|
|
85
|
+
# Terraform creates infrastructure
|
|
86
|
+
resource "cloudflare_workers_kv_namespace" "app" { account_id = var.account_id; title = "app-kv" }
|
|
87
|
+
resource "cloudflare_d1_database" "app" { account_id = var.account_id; name = "app-db" }
|
|
88
|
+
output "kv_namespace_id" { value = cloudflare_workers_kv_namespace.app.id }
|
|
89
|
+
output "d1_database_id" { value = cloudflare_d1_database.app.id }
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```yaml
|
|
93
|
+
# GitHub Actions: terraform apply → envsubst wrangler.jsonc.template → wrangler deploy
|
|
94
|
+
- run: terraform apply -auto-approve
|
|
95
|
+
- run: |
|
|
96
|
+
export KV_NAMESPACE_ID=$(terraform output -raw kv_namespace_id)
|
|
97
|
+
envsubst < wrangler.jsonc.template > wrangler.jsonc
|
|
98
|
+
- run: wrangler deploy
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Use Cases
|
|
102
|
+
|
|
103
|
+
### Static Site + API Worker
|
|
104
|
+
|
|
105
|
+
```hcl
|
|
106
|
+
resource "cloudflare_pages_project" "frontend" {
|
|
107
|
+
account_id = var.account_id; name = "frontend"; production_branch = "main"
|
|
108
|
+
build_config { build_command = "npm run build"; destination_dir = "dist" }
|
|
109
|
+
}
|
|
110
|
+
resource "cloudflare_worker_script" "api" {
|
|
111
|
+
account_id = var.account_id; name = "api"; content = file("api-worker.js")
|
|
112
|
+
d1_database_binding { name = "DB"; database_id = cloudflare_d1_database.api_db.id }
|
|
113
|
+
}
|
|
114
|
+
resource "cloudflare_dns_record" "frontend" {
|
|
115
|
+
zone_id = cloudflare_zone.main.id; name = "app"; content = cloudflare_pages_project.frontend.subdomain; type = "CNAME"; proxied = true
|
|
116
|
+
}
|
|
117
|
+
resource "cloudflare_worker_route" "api" {
|
|
118
|
+
zone_id = cloudflare_zone.main.id; pattern = "api.example.com/*"; script_name = cloudflare_worker_script.api.name
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Multi-Region Load Balancing
|
|
123
|
+
|
|
124
|
+
```hcl
|
|
125
|
+
resource "cloudflare_load_balancer_pool" "us" {
|
|
126
|
+
account_id = var.account_id; name = "us-pool"; monitor = cloudflare_load_balancer_monitor.http.id
|
|
127
|
+
origins { name = "us-east"; address = var.us_east_ip }
|
|
128
|
+
}
|
|
129
|
+
resource "cloudflare_load_balancer_pool" "eu" {
|
|
130
|
+
account_id = var.account_id; name = "eu-pool"; monitor = cloudflare_load_balancer_monitor.http.id
|
|
131
|
+
origins { name = "eu-west"; address = var.eu_west_ip }
|
|
132
|
+
}
|
|
133
|
+
resource "cloudflare_load_balancer" "global" {
|
|
134
|
+
zone_id = cloudflare_zone.main.id; name = "api.example.com"; steering_policy = "geo"
|
|
135
|
+
default_pool_ids = [cloudflare_load_balancer_pool.us.id]
|
|
136
|
+
region_pools { region = "WNAM"; pool_ids = [cloudflare_load_balancer_pool.us.id] }
|
|
137
|
+
region_pools { region = "WEU"; pool_ids = [cloudflare_load_balancer_pool.eu.id] }
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Secure Admin with Access
|
|
142
|
+
|
|
143
|
+
```hcl
|
|
144
|
+
resource "cloudflare_pages_project" "admin" { account_id = var.account_id; name = "admin"; production_branch = "main" }
|
|
145
|
+
resource "cloudflare_access_application" "admin" {
|
|
146
|
+
account_id = var.account_id; name = "Admin"; domain = "admin.example.com"; type = "self_hosted"; session_duration = "24h"
|
|
147
|
+
allowed_idps = [cloudflare_access_identity_provider.google.id]
|
|
148
|
+
}
|
|
149
|
+
resource "cloudflare_access_policy" "allow" {
|
|
150
|
+
account_id = var.account_id; application_id = cloudflare_access_application.admin.id
|
|
151
|
+
name = "Allow admins"; decision = "allow"; precedence = 1; include { email = var.admin_emails }
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Reusable Module
|
|
156
|
+
|
|
157
|
+
```hcl
|
|
158
|
+
# modules/cloudflare-zone/main.tf
|
|
159
|
+
variable "account_id" { type = string }; variable "domain" { type = string }; variable "ssl_mode" { default = "strict" }
|
|
160
|
+
resource "cloudflare_zone" "main" { account = { id = var.account_id }; name = var.domain }
|
|
161
|
+
resource "cloudflare_zone_settings_override" "main" {
|
|
162
|
+
zone_id = cloudflare_zone.main.id; settings { ssl = var.ssl_mode; always_use_https = "on" }
|
|
163
|
+
}
|
|
164
|
+
output "zone_id" { value = cloudflare_zone.main.id }
|
|
165
|
+
|
|
166
|
+
# Usage: module "prod" { source = "./modules/cloudflare-zone"; account_id = var.account_id; domain = "example.com" }
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## See Also
|
|
170
|
+
|
|
171
|
+
- [README](./README.md) - Provider setup
|
|
172
|
+
- [Configuration Reference](./configuration.md) - All resource types
|
|
173
|
+
- [API Reference](./api.md) - Data sources
|
|
174
|
+
- [Troubleshooting](./gotchas.md) - Best practices, common issues
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Cloudflare Tunnel
|
|
2
|
+
|
|
3
|
+
Secure outbound-only connections between infrastructure and Cloudflare's global network.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare Tunnel (formerly Argo Tunnel) enables:
|
|
8
|
+
|
|
9
|
+
- **Outbound-only connections** - No inbound ports or firewall changes
|
|
10
|
+
- **Public hostname routing** - Expose local services to internet
|
|
11
|
+
- **Private network access** - Connect internal networks via WARP
|
|
12
|
+
- **Zero Trust integration** - Built-in access policies
|
|
13
|
+
|
|
14
|
+
**Architecture**: Tunnel (persistent object) → Replica (`cloudflared` process) → Origin services
|
|
15
|
+
|
|
16
|
+
**Terminology:**
|
|
17
|
+
|
|
18
|
+
- **Tunnel**: Named persistent object with UUID
|
|
19
|
+
- **Replica**: Individual `cloudflared` process connected to tunnel
|
|
20
|
+
- **Config Source**: Where ingress rules stored (local file vs Cloudflare dashboard)
|
|
21
|
+
- **Connector**: Legacy term for replica
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### Local Config
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Install cloudflared
|
|
29
|
+
brew install cloudflared # macOS
|
|
30
|
+
|
|
31
|
+
# Authenticate
|
|
32
|
+
cloudflared tunnel login
|
|
33
|
+
|
|
34
|
+
# Create tunnel
|
|
35
|
+
cloudflared tunnel create my-tunnel
|
|
36
|
+
|
|
37
|
+
# Route DNS
|
|
38
|
+
cloudflared tunnel route dns my-tunnel app.example.com
|
|
39
|
+
|
|
40
|
+
# Run tunnel
|
|
41
|
+
cloudflared tunnel run my-tunnel
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Dashboard Config (Recommended)
|
|
45
|
+
|
|
46
|
+
1. **Zero Trust** > **Networks** > **Tunnels** > **Create**
|
|
47
|
+
2. Name tunnel, copy token
|
|
48
|
+
3. Configure routes in dashboard
|
|
49
|
+
4. Run: `cloudflared tunnel --no-autoupdate run --token <TOKEN>`
|
|
50
|
+
|
|
51
|
+
## Decision Tree
|
|
52
|
+
|
|
53
|
+
**Choose config source:**
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Need centralized config updates?
|
|
57
|
+
├─ Yes → Token-based (dashboard config)
|
|
58
|
+
└─ No → Local config file
|
|
59
|
+
|
|
60
|
+
Multiple environments (dev/staging/prod)?
|
|
61
|
+
├─ Yes → Local config (version controlled)
|
|
62
|
+
└─ No → Either works
|
|
63
|
+
|
|
64
|
+
Need firewall approval?
|
|
65
|
+
└─ See networking.md first
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Core Commands
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Tunnel lifecycle
|
|
72
|
+
cloudflared tunnel create <name>
|
|
73
|
+
cloudflared tunnel list
|
|
74
|
+
cloudflared tunnel info <name>
|
|
75
|
+
cloudflared tunnel delete <name>
|
|
76
|
+
|
|
77
|
+
# DNS routing
|
|
78
|
+
cloudflared tunnel route dns <tunnel> <hostname>
|
|
79
|
+
cloudflared tunnel route list
|
|
80
|
+
|
|
81
|
+
# Private network
|
|
82
|
+
cloudflared tunnel route ip add 10.0.0.0/8 <tunnel>
|
|
83
|
+
|
|
84
|
+
# Run tunnel
|
|
85
|
+
cloudflared tunnel run <name>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Configuration Example
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
# ~/.cloudflared/config.yml
|
|
92
|
+
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
|
|
93
|
+
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
|
|
94
|
+
|
|
95
|
+
ingress:
|
|
96
|
+
- hostname: app.example.com
|
|
97
|
+
service: http://localhost:8000
|
|
98
|
+
- hostname: api.example.com
|
|
99
|
+
service: https://localhost:8443
|
|
100
|
+
originRequest:
|
|
101
|
+
noTLSVerify: true
|
|
102
|
+
- service: http_status:404
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Reading Order
|
|
106
|
+
|
|
107
|
+
**New to Cloudflare Tunnel:**
|
|
108
|
+
|
|
109
|
+
1. This README (overview, quick start)
|
|
110
|
+
2. [networking.md](./networking.md) - Firewall rules, connectivity pre-checks
|
|
111
|
+
3. [configuration.md](./configuration.md) - Config file options, ingress rules
|
|
112
|
+
4. [patterns.md](./patterns.md) - Docker, Kubernetes, production deployment
|
|
113
|
+
5. [gotchas.md](./gotchas.md) - Troubleshooting, best practices
|
|
114
|
+
|
|
115
|
+
**Enterprise deployment:**
|
|
116
|
+
|
|
117
|
+
1. [networking.md](./networking.md) - Corporate firewall requirements
|
|
118
|
+
2. [gotchas.md](./gotchas.md) - HA setup, security best practices
|
|
119
|
+
3. [patterns.md](./patterns.md) - Kubernetes, rolling updates
|
|
120
|
+
|
|
121
|
+
**Programmatic control:**
|
|
122
|
+
|
|
123
|
+
1. [api.md](./api.md) - REST API, TypeScript SDK
|
|
124
|
+
|
|
125
|
+
## In This Reference
|
|
126
|
+
|
|
127
|
+
- [networking.md](./networking.md) - Firewall rules, ports, connectivity pre-checks
|
|
128
|
+
- [configuration.md](./configuration.md) - Config file options, ingress rules, TLS settings
|
|
129
|
+
- [api.md](./api.md) - REST API, TypeScript SDK, token-based tunnels
|
|
130
|
+
- [patterns.md](./patterns.md) - Docker, Kubernetes, Terraform, HA, use cases
|
|
131
|
+
- [gotchas.md](./gotchas.md) - Troubleshooting, limitations, best practices
|
|
132
|
+
|
|
133
|
+
## See Also
|
|
134
|
+
|
|
135
|
+
- [workers](../workers/) - Workers with Tunnel integration
|
|
136
|
+
- [access](../access/) - Zero Trust access policies
|
|
137
|
+
- [warp](../warp/) - WARP client for private networks
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Tunnel API
|
|
2
|
+
|
|
3
|
+
## Cloudflare API Access
|
|
4
|
+
|
|
5
|
+
**Base URL**: `https://api.cloudflare.com/client/v4`
|
|
6
|
+
|
|
7
|
+
**Authentication**:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
Authorization: Bearer ${CF_API_TOKEN}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## TypeScript SDK
|
|
14
|
+
|
|
15
|
+
Install: `npm install cloudflare`
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import Cloudflare from 'cloudflare'
|
|
19
|
+
|
|
20
|
+
const cf = new Cloudflare({
|
|
21
|
+
apiToken: process.env.CF_API_TOKEN,
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
const accountId = process.env.CF_ACCOUNT_ID
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Create Tunnel
|
|
28
|
+
|
|
29
|
+
### cURL
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels" \
|
|
33
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
|
34
|
+
-H "Content-Type: application/json" \
|
|
35
|
+
--data '{
|
|
36
|
+
"name": "my-tunnel",
|
|
37
|
+
"tunnel_secret": "<base64-secret>"
|
|
38
|
+
}'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### TypeScript
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
const tunnel = await cf.zeroTrust.tunnels.create({
|
|
45
|
+
account_id: accountId,
|
|
46
|
+
name: 'my-tunnel',
|
|
47
|
+
tunnel_secret: Buffer.from(crypto.randomBytes(32)).toString('base64'),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
console.log(`Tunnel ID: ${tunnel.id}`)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## List Tunnels
|
|
54
|
+
|
|
55
|
+
### cURL
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels" \
|
|
59
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### TypeScript
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
const tunnels = await cf.zeroTrust.tunnels.list({
|
|
66
|
+
account_id: accountId,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
for (const tunnel of tunnels.result) {
|
|
70
|
+
console.log(`${tunnel.name}: ${tunnel.id}`)
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Get Tunnel Info
|
|
75
|
+
|
|
76
|
+
### cURL
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}" \
|
|
80
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### TypeScript
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const tunnel = await cf.zeroTrust.tunnels.get(tunnelId, {
|
|
87
|
+
account_id: accountId,
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
console.log(`Status: ${tunnel.status}`)
|
|
91
|
+
console.log(`Connections: ${tunnel.connections?.length || 0}`)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Update Tunnel Config
|
|
95
|
+
|
|
96
|
+
### cURL
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
curl -X PUT "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/configurations" \
|
|
100
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
|
101
|
+
-H "Content-Type: application/json" \
|
|
102
|
+
--data '{
|
|
103
|
+
"config": {
|
|
104
|
+
"ingress": [
|
|
105
|
+
{"hostname": "app.example.com", "service": "http://localhost:8000"},
|
|
106
|
+
{"service": "http_status:404"}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
}'
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### TypeScript
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const config = await cf.zeroTrust.tunnels.configurations.update(tunnelId, {
|
|
116
|
+
account_id: accountId,
|
|
117
|
+
config: {
|
|
118
|
+
ingress: [
|
|
119
|
+
{ hostname: 'app.example.com', service: 'http://localhost:8000' },
|
|
120
|
+
{ service: 'http_status:404' },
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
})
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Delete Tunnel
|
|
127
|
+
|
|
128
|
+
### cURL
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}" \
|
|
132
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### TypeScript
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
await cf.zeroTrust.tunnels.delete(tunnelId, {
|
|
139
|
+
account_id: accountId,
|
|
140
|
+
})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Token-Based Tunnels (Config Source: Cloudflare)
|
|
144
|
+
|
|
145
|
+
Token-based tunnels store config in Cloudflare dashboard instead of local files.
|
|
146
|
+
|
|
147
|
+
### Via Dashboard
|
|
148
|
+
|
|
149
|
+
1. **Zero Trust** > **Networks** > **Tunnels**
|
|
150
|
+
2. **Create a tunnel** > **Cloudflared**
|
|
151
|
+
3. Configure routes in dashboard
|
|
152
|
+
4. Copy token
|
|
153
|
+
5. Run on origin:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
cloudflared service install <TOKEN>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Via Token
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Run with token (no config file needed)
|
|
163
|
+
cloudflared tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
|
|
164
|
+
|
|
165
|
+
# Docker
|
|
166
|
+
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Get Tunnel Token (TypeScript)
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// Get tunnel to retrieve token
|
|
173
|
+
const tunnel = await cf.zeroTrust.tunnels.get(tunnelId, {
|
|
174
|
+
account_id: accountId,
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
// Token available in tunnel.token (only for config source: cloudflare)
|
|
178
|
+
const token = tunnel.token
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## DNS Routes API
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Create DNS route
|
|
185
|
+
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/connections" \
|
|
186
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
|
187
|
+
--data '{"hostname": "app.example.com"}'
|
|
188
|
+
|
|
189
|
+
# Delete route
|
|
190
|
+
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/connections/{route_id}" \
|
|
191
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Private Network Routes API
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Add IP route
|
|
198
|
+
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/routes" \
|
|
199
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
|
200
|
+
--data '{"ip_network": "10.0.0.0/8"}'
|
|
201
|
+
|
|
202
|
+
# List IP routes
|
|
203
|
+
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/routes" \
|
|
204
|
+
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
|
205
|
+
```
|