memory-journal-mcp 7.7.1 → 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-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
- 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 +6 -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,132 @@
|
|
|
1
|
+
# Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "Schema Validation 2.0 not working after migration"
|
|
6
|
+
|
|
7
|
+
**Cause:** Classic rules still active, conflicting with new system
|
|
8
|
+
**Solution:**
|
|
9
|
+
|
|
10
|
+
1. Delete ALL Classic schema validation rules
|
|
11
|
+
2. Clear Cloudflare cache (wait 5 min)
|
|
12
|
+
3. Re-upload schema via new Schema Validation 2.0 interface
|
|
13
|
+
4. Verify in Security > Events
|
|
14
|
+
5. Check action is set (Log/Block)
|
|
15
|
+
|
|
16
|
+
### "Schema validation blocking valid requests"
|
|
17
|
+
|
|
18
|
+
**Cause:** Schema too restrictive, missing fields, or incorrect types
|
|
19
|
+
**Solution:**
|
|
20
|
+
|
|
21
|
+
1. Check Firewall Events for violation details
|
|
22
|
+
2. Review schema in Settings
|
|
23
|
+
3. Test schema in Swagger Editor
|
|
24
|
+
4. Use Log mode to validate before blocking
|
|
25
|
+
5. Update schema with correct specifications
|
|
26
|
+
6. Ensure Schema Validation 2.0 (not Classic)
|
|
27
|
+
|
|
28
|
+
### "JWT validation failing"
|
|
29
|
+
|
|
30
|
+
**Cause:** JWKS mismatch with IdP, expired token, wrong header/cookie name, or clock skew
|
|
31
|
+
**Solution:**
|
|
32
|
+
|
|
33
|
+
1. Verify JWKS matches IdP configuration
|
|
34
|
+
2. Check token `exp` claim is valid
|
|
35
|
+
3. Confirm header/cookie name matches config
|
|
36
|
+
4. Test token at jwt.io
|
|
37
|
+
5. Account for clock skew (±5 min tolerance)
|
|
38
|
+
6. Use modern syntax: `is_jwt_valid(http.request.jwt.payload["{config_id}"][0])`
|
|
39
|
+
|
|
40
|
+
### "BOLA detection false positives"
|
|
41
|
+
|
|
42
|
+
**Cause:** Legitimate sequential access patterns, bulk operations, or sensitivity too high
|
|
43
|
+
**Solution:**
|
|
44
|
+
|
|
45
|
+
1. Review BOLA events in Security > Events
|
|
46
|
+
2. Lower sensitivity threshold (High → Medium → Low)
|
|
47
|
+
3. Exclude legitimate bulk operations from detection
|
|
48
|
+
4. Ensure session identifiers uniquely identify users
|
|
49
|
+
5. Verify minimum traffic requirements met (1000+ req/day)
|
|
50
|
+
|
|
51
|
+
### "Risk labels not appearing in firewall rules"
|
|
52
|
+
|
|
53
|
+
**Cause:** Feature not enabled, insufficient traffic, or missing session identifiers
|
|
54
|
+
**Solution:**
|
|
55
|
+
|
|
56
|
+
1. Verify Schema Validation 2.0 enabled
|
|
57
|
+
2. Enable BOLA Detection in schema settings
|
|
58
|
+
3. Configure session identifiers (required for BOLA)
|
|
59
|
+
4. Wait 24-48h for ML model training
|
|
60
|
+
5. Check minimum traffic thresholds met
|
|
61
|
+
|
|
62
|
+
### "Endpoint discovery not finding APIs"
|
|
63
|
+
|
|
64
|
+
**Cause:** Insufficient traffic (<500 reqs/10d), non-2xx responses, Worker direct requests, or incorrect session ID config
|
|
65
|
+
**Solution:** Ensure 500+ requests in 10 days, 2xx responses from edge (not Workers direct), configure session IDs correctly. ML updates daily.
|
|
66
|
+
|
|
67
|
+
### "Sequence detection false positives"
|
|
68
|
+
|
|
69
|
+
**Cause:** Lookback window issues, non-unique session IDs, or model sensitivity
|
|
70
|
+
**Solution:**
|
|
71
|
+
|
|
72
|
+
1. Review lookback settings (10 reqs to managed endpoints, 10min window)
|
|
73
|
+
2. Ensure session ID uniqueness per user (not shared tokens)
|
|
74
|
+
3. Adjust positive/negative model balance
|
|
75
|
+
4. Exclude legitimate workflows from detection
|
|
76
|
+
|
|
77
|
+
### "GraphQL protection blocking valid queries"
|
|
78
|
+
|
|
79
|
+
**Cause:** Query depth/size limits too restrictive, complex but legitimate queries
|
|
80
|
+
**Solution:**
|
|
81
|
+
|
|
82
|
+
1. Review blocked query patterns in Security > Events
|
|
83
|
+
2. Increase max_depth (default: 10) if needed
|
|
84
|
+
3. Increase max_size (default: 100KB) for complex queries
|
|
85
|
+
4. Whitelist specific query signatures
|
|
86
|
+
5. Use Log mode to tune before blocking
|
|
87
|
+
|
|
88
|
+
### "Token invalid"
|
|
89
|
+
|
|
90
|
+
**Cause:** Configuration error, JWKS mismatch, or expired token
|
|
91
|
+
**Solution:** Verify config matches IdP, update JWKS, check token expiration
|
|
92
|
+
|
|
93
|
+
### "Schema violation"
|
|
94
|
+
|
|
95
|
+
**Cause:** Missing required fields, wrong data types, or spec mismatch
|
|
96
|
+
**Solution:** Review schema against actual requests, ensure all required fields present, validate types match spec
|
|
97
|
+
|
|
98
|
+
### "Fallthrough"
|
|
99
|
+
|
|
100
|
+
**Cause:** Unknown endpoint or pattern mismatch
|
|
101
|
+
**Solution:** Update schema with all endpoints, check path pattern matching
|
|
102
|
+
|
|
103
|
+
### "mTLS failed"
|
|
104
|
+
|
|
105
|
+
**Cause:** Certificate untrusted/expired or wrong CA
|
|
106
|
+
**Solution:** Verify cert chain, check expiration, confirm correct CA uploaded
|
|
107
|
+
|
|
108
|
+
## Limits (2026)
|
|
109
|
+
|
|
110
|
+
| Resource/Limit | Value | Notes |
|
|
111
|
+
| ------------------------- | ----------------------- | ---------------------------------- |
|
|
112
|
+
| OpenAPI version | v3.0.x only | No external refs, must be valid |
|
|
113
|
+
| Schema operations | 10K (Enterprise) | Contact for higher limits |
|
|
114
|
+
| JWT validation sources | Headers/cookies only | No query params/body |
|
|
115
|
+
| Endpoint discovery | 500+ reqs/10d | Minimum for ML model |
|
|
116
|
+
| Path normalization | Automatic | `/profile/238` → `/profile/{var1}` |
|
|
117
|
+
| Schema parameters | No `content` field | No object param validation |
|
|
118
|
+
| BOLA detection | 1000+ reqs/day/endpoint | Per-endpoint minimum |
|
|
119
|
+
| Session ID uniqueness | Required | BOLA/Sequence need unique IDs |
|
|
120
|
+
| GraphQL max depth | 1-50 | Default: 10 |
|
|
121
|
+
| GraphQL max size | 1KB-1MB | Default: 100KB |
|
|
122
|
+
| JWT claim nesting | 10 levels max | Use dot notation |
|
|
123
|
+
| mTLS CA certificates | 5 custom max | CF-managed unlimited |
|
|
124
|
+
| Schema upload size | 5MB max | Compressed OpenAPI spec |
|
|
125
|
+
| Volumetric abuse baseline | 7 days training | Initial ML period |
|
|
126
|
+
| Auth Posture refresh | Daily | Updated nightly |
|
|
127
|
+
|
|
128
|
+
## See Also
|
|
129
|
+
|
|
130
|
+
- [configuration.md](configuration.md) - Setup guides to avoid common issues
|
|
131
|
+
- [patterns.md](patterns.md) - Best practices and progressive rollout
|
|
132
|
+
- [API Shield Docs](https://developers.cloudflare.com/api-shield/)
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# Patterns & Use Cases
|
|
2
|
+
|
|
3
|
+
## Protect API with Schema + JWT
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
# 1. Upload OpenAPI schema
|
|
7
|
+
POST /zones/{zone_id}/api_gateway/user_schemas
|
|
8
|
+
|
|
9
|
+
# 2. Configure JWT validation
|
|
10
|
+
POST /zones/{zone_id}/api_gateway/token_validation
|
|
11
|
+
{
|
|
12
|
+
"name": "Auth0",
|
|
13
|
+
"location": {"header": "Authorization"},
|
|
14
|
+
"jwks": "{...}"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# 3. Create JWT rule
|
|
18
|
+
POST /zones/{zone_id}/api_gateway/jwt_validation_rules
|
|
19
|
+
|
|
20
|
+
# 4. Set schema validation action
|
|
21
|
+
PUT /zones/{zone_id}/api_gateway/settings/schema_validation
|
|
22
|
+
{"validation_default_mitigation_action": "block"}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Progressive Rollout
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
1. Log mode: Observe false positives
|
|
29
|
+
- Schema: Action = Log
|
|
30
|
+
- JWT: Action = Log
|
|
31
|
+
|
|
32
|
+
2. Block subset: Protect critical endpoints
|
|
33
|
+
- Change specific endpoint actions to Block
|
|
34
|
+
- Monitor firewall events
|
|
35
|
+
|
|
36
|
+
3. Full enforcement: Block all violations
|
|
37
|
+
- Change default action to Block
|
|
38
|
+
- Handle fallthrough with custom rule
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## BOLA Detection
|
|
42
|
+
|
|
43
|
+
### Enumeration Detection
|
|
44
|
+
|
|
45
|
+
Detects sequential resource access (e.g., `/users/1`, `/users/2`, `/users/3`).
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
// Block BOLA enumeration attempts
|
|
49
|
+
(cf.api_gateway.cf-risk-bola-enumeration and http.host eq "api.example.com")
|
|
50
|
+
// Action: Block or Challenge
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Parameter Pollution
|
|
54
|
+
|
|
55
|
+
Detects duplicate/excessive parameters in requests.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
// Block parameter pollution
|
|
59
|
+
(cf.api_gateway.cf-risk-bola-pollution and http.host eq "api.example.com")
|
|
60
|
+
// Action: Block
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Combined BOLA Protection
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// Comprehensive BOLA rule
|
|
67
|
+
(cf.api_gateway.cf-risk-bola-enumeration or cf.api_gateway.cf-risk-bola-pollution)
|
|
68
|
+
and http.host eq "api.example.com"
|
|
69
|
+
// Action: Block
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Authentication Posture
|
|
73
|
+
|
|
74
|
+
### Detect Missing Auth
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
// Log endpoints lacking authentication
|
|
78
|
+
(cf.api_gateway.cf-risk-missing-auth and http.host eq "api.example.com")
|
|
79
|
+
// Action: Log (for audit)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Detect Mixed Auth
|
|
83
|
+
|
|
84
|
+
```javascript
|
|
85
|
+
// Alert on inconsistent auth patterns
|
|
86
|
+
(cf.api_gateway.cf-risk-mixed-auth and http.host eq "api.example.com")
|
|
87
|
+
// Action: Log (review required)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Fallthrough Detection (Shadow APIs)
|
|
91
|
+
|
|
92
|
+
```javascript
|
|
93
|
+
// WAF Custom Rule
|
|
94
|
+
(cf.api_gateway.fallthrough_triggered and http.host eq "api.example.com")
|
|
95
|
+
// Action: Log (discover unknown) or Block (strict)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Rate Limiting by User
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
// Rate Limiting Rule (modern syntax)
|
|
102
|
+
(http.host eq "api.example.com" and
|
|
103
|
+
is_jwt_valid(http.request.jwt.payload["{config_id}"][0]))
|
|
104
|
+
|
|
105
|
+
// Rate: 100 req/60s
|
|
106
|
+
// Counting expression: lookup_json_string(http.request.jwt.payload["{config_id}"][0], "sub")
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Volumetric Abuse Response
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
// Detect abnormal traffic spikes
|
|
113
|
+
(cf.api_gateway.volumetric_abuse_detected and http.host eq "api.example.com")
|
|
114
|
+
// Action: Challenge or Rate Limit
|
|
115
|
+
|
|
116
|
+
// Combined with rate limiting
|
|
117
|
+
(cf.api_gateway.volumetric_abuse_detected or
|
|
118
|
+
cf.threat_score gt 50) and http.host eq "api.example.com"
|
|
119
|
+
// Action: JS Challenge
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## GraphQL Protection
|
|
123
|
+
|
|
124
|
+
```javascript
|
|
125
|
+
// Block oversized queries
|
|
126
|
+
(http.request.uri.path eq "/graphql" and
|
|
127
|
+
cf.api_gateway.graphql_query_size gt 100000)
|
|
128
|
+
// Action: Block
|
|
129
|
+
|
|
130
|
+
// Block deep nested queries
|
|
131
|
+
(http.request.uri.path eq "/graphql" and
|
|
132
|
+
cf.api_gateway.graphql_query_depth gt 10)
|
|
133
|
+
// Action: Block
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Architecture Patterns
|
|
137
|
+
|
|
138
|
+
**Public API:** Discovery + Schema Validation 2.0 + JWT + Rate Limiting + Bot Management
|
|
139
|
+
**Partner API:** mTLS + Schema Validation + Sequence Mitigation
|
|
140
|
+
**Internal API:** Discovery + Schema Learning + Auth Posture
|
|
141
|
+
|
|
142
|
+
## OWASP API Security Top 10 Mapping (2026)
|
|
143
|
+
|
|
144
|
+
| OWASP Issue | API Shield Solutions |
|
|
145
|
+
| ------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
146
|
+
| API1:2023 Broken Object Level Authorization | **BOLA Detection** (enumeration + pollution), Sequence mitigation, Schema, JWT, Rate Limiting |
|
|
147
|
+
| API2:2023 Broken Authentication | **Auth Posture**, mTLS, JWT validation, Bot Management |
|
|
148
|
+
| API3:2023 Broken Object Property Auth | Schema validation, JWT validation |
|
|
149
|
+
| API4:2023 Unrestricted Resource Access | Rate Limiting, **Volumetric Abuse Detection**, **GraphQL Protection**, Bot Management |
|
|
150
|
+
| API5:2023 Broken Function Level Auth | Schema validation, JWT validation, Auth Posture |
|
|
151
|
+
| API6:2023 Unrestricted Business Flows | Sequence mitigation, Bot Management |
|
|
152
|
+
| API7:2023 SSRF | Schema validation, WAF managed rules |
|
|
153
|
+
| API8:2023 Security Misconfiguration | **Schema Validation 2.0**, Auth Posture, WAF rules |
|
|
154
|
+
| API9:2023 Improper Inventory Management | **API Discovery**, Schema learning, Auth Posture |
|
|
155
|
+
| API10:2023 Unsafe API Consumption | JWT validation, Schema validation, WAF managed |
|
|
156
|
+
|
|
157
|
+
## Monitoring
|
|
158
|
+
|
|
159
|
+
**Security Events:** `Security > Events` → Filter: Action = block, Service = API Shield
|
|
160
|
+
**Firewall Analytics:** `Analytics > Security` → Filter by `cf.api_gateway.*` fields
|
|
161
|
+
**Logpush fields:** APIGatewayAuthIDPresent, APIGatewayRequestViolatesSchema, APIGatewayFallthroughDetected, JWTValidationResult
|
|
162
|
+
|
|
163
|
+
## Availability (2026)
|
|
164
|
+
|
|
165
|
+
| Feature | Availability | Notes |
|
|
166
|
+
| -------------------------- | ----------------- | -------------------- |
|
|
167
|
+
| mTLS (CF-managed CA) | All plans | Self-service |
|
|
168
|
+
| Endpoint Management | All plans | Limited operations |
|
|
169
|
+
| Schema Validation 2.0 | All plans | Limited operations |
|
|
170
|
+
| API Discovery | Enterprise | 10K+ ops |
|
|
171
|
+
| JWT Validation | Enterprise add-on | Full validation |
|
|
172
|
+
| BOLA Detection | Enterprise add-on | Requires session IDs |
|
|
173
|
+
| Auth Posture | Enterprise add-on | Security audit |
|
|
174
|
+
| Volumetric Abuse Detection | Enterprise add-on | Traffic analysis |
|
|
175
|
+
| GraphQL Protection | Enterprise add-on | Query limits |
|
|
176
|
+
| Sequence Mitigation | Enterprise (beta) | Contact team |
|
|
177
|
+
| Full Suite | Enterprise add-on | All features |
|
|
178
|
+
|
|
179
|
+
**Enterprise limits:** 10K operations (contact for higher). Preview access available for non-contract evaluation.
|
|
180
|
+
|
|
181
|
+
## See Also
|
|
182
|
+
|
|
183
|
+
- [configuration.md](configuration.md) - Setup all features before creating rules
|
|
184
|
+
- [api.md](api.md) - Firewall field reference and API endpoints
|
|
185
|
+
- [gotchas.md](gotchas.md) - Common issues and limits
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Cloudflare Argo Smart Routing Skill Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Cloudflare Argo Smart Routing is a performance optimization service that detects real-time network issues and routes web traffic across the most efficient network path. It continuously monitors network conditions and intelligently routes traffic through the fastest, most reliable routes in Cloudflare's network.
|
|
6
|
+
|
|
7
|
+
**Note on Smart Shield:** Argo Smart Routing is being integrated into Cloudflare's Smart Shield product for enhanced DDoS protection and performance. Existing Argo customers maintain full functionality with gradual migration to Smart Shield features.
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
### Enable via cURL
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/argo/smart_routing" \
|
|
15
|
+
-H "Authorization: Bearer YOUR_API_TOKEN" \
|
|
16
|
+
-H "Content-Type: application/json" \
|
|
17
|
+
-d '{"value": "on"}'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Enable via TypeScript SDK
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import Cloudflare from 'cloudflare'
|
|
24
|
+
|
|
25
|
+
const client = new Cloudflare({ apiToken: process.env.CLOUDFLARE_API_TOKEN })
|
|
26
|
+
|
|
27
|
+
const result = await client.argo.smartRouting.edit({
|
|
28
|
+
zone_id: 'your-zone-id',
|
|
29
|
+
value: 'on',
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
console.log(`Argo enabled: ${result.value}`)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Core Concepts
|
|
36
|
+
|
|
37
|
+
### What It Does
|
|
38
|
+
|
|
39
|
+
- **Intelligent routing**: Detects congestion, outages, packet loss in real-time
|
|
40
|
+
- **Global optimization**: Routes across 300+ Cloudflare data centers
|
|
41
|
+
- **Automatic failover**: Switches paths when issues detected (typically <1s)
|
|
42
|
+
- **Works with existing setup**: No origin changes required
|
|
43
|
+
|
|
44
|
+
### Billing Model
|
|
45
|
+
|
|
46
|
+
- Usage-based: Charged per GB of traffic (excluding DDoS/WAF mitigated traffic)
|
|
47
|
+
- Requires billing configuration before enabling
|
|
48
|
+
- Available on Enterprise+ plans (check zone eligibility)
|
|
49
|
+
|
|
50
|
+
### When to Use
|
|
51
|
+
|
|
52
|
+
- **High-traffic production sites** with global user base
|
|
53
|
+
- **Latency-sensitive applications** (APIs, real-time services)
|
|
54
|
+
- **Sites behind Cloudflare proxy** (orange-clouded DNS records)
|
|
55
|
+
- **Combined with Tiered Cache** for maximum performance gains
|
|
56
|
+
|
|
57
|
+
### When NOT to Use
|
|
58
|
+
|
|
59
|
+
- Development/staging environments (cost control)
|
|
60
|
+
- Low-traffic sites (<1TB/month) where cost may exceed benefit
|
|
61
|
+
- Sites with primarily single-region traffic
|
|
62
|
+
|
|
63
|
+
## Should I Enable Argo?
|
|
64
|
+
|
|
65
|
+
| Your Situation | Recommendation |
|
|
66
|
+
| ----------------------------------------- | ----------------------------------- |
|
|
67
|
+
| Global production app, >1TB/month traffic | ✅ Enable - likely ROI positive |
|
|
68
|
+
| Enterprise plan, latency-critical APIs | ✅ Enable - performance matters |
|
|
69
|
+
| Regional site, <100GB/month traffic | ⚠️ Evaluate - cost may not justify |
|
|
70
|
+
| Development/staging environment | ❌ Disable - use in production only |
|
|
71
|
+
| Not yet configured billing | ❌ Configure billing first |
|
|
72
|
+
|
|
73
|
+
## Reading Order by Task
|
|
74
|
+
|
|
75
|
+
| Your Goal | Start With | Then Read |
|
|
76
|
+
| ----------------------------- | -------------------------------------------------------- | -------------------------- |
|
|
77
|
+
| Enable Argo for first time | Quick Start above → [configuration.md](configuration.md) | [gotchas.md](gotchas.md) |
|
|
78
|
+
| Use TypeScript/Python SDK | [api.md](api.md) | [patterns.md](patterns.md) |
|
|
79
|
+
| Terraform/IaC setup | [configuration.md](configuration.md) | - |
|
|
80
|
+
| Enable for Spectrum TCP app | [patterns.md](patterns.md) → Spectrum section | [api.md](api.md) |
|
|
81
|
+
| Troubleshoot enablement issue | [gotchas.md](gotchas.md) | [api.md](api.md) |
|
|
82
|
+
| Manage billing/usage | [patterns.md](patterns.md) → Billing section | [gotchas.md](gotchas.md) |
|
|
83
|
+
|
|
84
|
+
## In This Reference
|
|
85
|
+
|
|
86
|
+
- **[api.md](api.md)** - API endpoints, SDK methods, error handling, Python/TypeScript examples
|
|
87
|
+
- **[configuration.md](configuration.md)** - Terraform setup, environment config, billing configuration
|
|
88
|
+
- **[patterns.md](patterns.md)** - Tiered Cache integration, Spectrum TCP apps, billing management, validation patterns
|
|
89
|
+
- **[gotchas.md](gotchas.md)** - Common errors, permission issues, limits, best practices
|
|
90
|
+
|
|
91
|
+
## See Also
|
|
92
|
+
|
|
93
|
+
- [Cloudflare Argo Smart Routing Docs](https://developers.cloudflare.com/argo-smart-routing/)
|
|
94
|
+
- [Cloudflare Smart Shield](https://developers.cloudflare.com/smart-shield/)
|
|
95
|
+
- [Spectrum Documentation](https://developers.cloudflare.com/spectrum/)
|
|
96
|
+
- [Tiered Cache](https://developers.cloudflare.com/cache/how-to/tiered-cache/)
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
## API Reference
|
|
2
|
+
|
|
3
|
+
**Note on Smart Shield:** Argo Smart Routing is being integrated into Cloudflare's Smart Shield product. API endpoints remain stable; existing integrations continue to work without changes.
|
|
4
|
+
|
|
5
|
+
### Base Endpoint
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
https://api.cloudflare.com/client/v4
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
### Authentication
|
|
12
|
+
|
|
13
|
+
Use API tokens with Zone:Argo Smart Routing:Edit permissions:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Headers required
|
|
17
|
+
X-Auth-Email: user@example.com
|
|
18
|
+
Authorization: Bearer YOUR_API_TOKEN
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Get Argo Smart Routing Status
|
|
22
|
+
|
|
23
|
+
**Endpoint:** `GET /zones/{zone_id}/argo/smart_routing`
|
|
24
|
+
|
|
25
|
+
**Description:** Retrieves current Argo Smart Routing enablement status.
|
|
26
|
+
|
|
27
|
+
**cURL Example:**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
curl -X GET "https://api.cloudflare.com/client/v4/zones/{zone_id}/argo/smart_routing" \
|
|
31
|
+
-H "Authorization: Bearer YOUR_API_TOKEN" \
|
|
32
|
+
-H "Content-Type: application/json"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Response:**
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"result": {
|
|
40
|
+
"id": "smart_routing",
|
|
41
|
+
"value": "on",
|
|
42
|
+
"editable": true,
|
|
43
|
+
"modified_on": "2024-01-11T12:00:00Z"
|
|
44
|
+
},
|
|
45
|
+
"success": true,
|
|
46
|
+
"errors": [],
|
|
47
|
+
"messages": []
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**TypeScript SDK Example:**
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import Cloudflare from 'cloudflare'
|
|
55
|
+
|
|
56
|
+
const client = new Cloudflare({
|
|
57
|
+
apiToken: process.env.CLOUDFLARE_API_TOKEN,
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
const status = await client.argo.smartRouting.get({ zone_id: 'your-zone-id' })
|
|
61
|
+
console.log(`Argo status: ${status.value}, editable: ${status.editable}`)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Python SDK Example:**
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
from cloudflare import Cloudflare
|
|
68
|
+
|
|
69
|
+
client = Cloudflare(api_token=os.environ.get('CLOUDFLARE_API_TOKEN'))
|
|
70
|
+
|
|
71
|
+
status = client.argo.smart_routing.get(zone_id='your-zone-id')
|
|
72
|
+
print(f"Argo status: {status.value}, editable: {status.editable}")
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Update Argo Smart Routing Status
|
|
76
|
+
|
|
77
|
+
**Endpoint:** `PATCH /zones/{zone_id}/argo/smart_routing`
|
|
78
|
+
|
|
79
|
+
**Description:** Enable or disable Argo Smart Routing for a zone.
|
|
80
|
+
|
|
81
|
+
**Request Body:**
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"value": "on" // or "off"
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**cURL Example:**
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/argo/smart_routing" \
|
|
93
|
+
-H "Authorization: Bearer YOUR_API_TOKEN" \
|
|
94
|
+
-H "Content-Type: application/json" \
|
|
95
|
+
-d '{"value": "on"}'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**TypeScript SDK Example:**
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const result = await client.argo.smartRouting.edit({
|
|
102
|
+
zone_id: 'your-zone-id',
|
|
103
|
+
value: 'on',
|
|
104
|
+
})
|
|
105
|
+
console.log(`Updated: ${result.value} at ${result.modified_on}`)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Python SDK Example:**
|
|
109
|
+
|
|
110
|
+
```python
|
|
111
|
+
result = client.argo.smart_routing.edit(
|
|
112
|
+
zone_id='your-zone-id',
|
|
113
|
+
value='on'
|
|
114
|
+
)
|
|
115
|
+
print(f"Updated: {result.value} at {result.modified_on}")
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Checking Editability Before Updates
|
|
119
|
+
|
|
120
|
+
**Critical:** Always check the `editable` field before attempting to enable/disable Argo. When `editable: false`, the zone has restrictions (billing not configured, insufficient permissions, or plan limitations).
|
|
121
|
+
|
|
122
|
+
**Pattern:**
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
async function safelyEnableArgo(client: Cloudflare, zoneId: string): Promise<boolean> {
|
|
126
|
+
const status = await client.argo.smartRouting.get({ zone_id: zoneId })
|
|
127
|
+
|
|
128
|
+
if (!status.editable) {
|
|
129
|
+
console.error('Cannot modify Argo: editable=false (check billing/permissions)')
|
|
130
|
+
return false
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (status.value === 'on') {
|
|
134
|
+
console.log('Argo already enabled')
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
await client.argo.smartRouting.edit({ zone_id: zoneId, value: 'on' })
|
|
139
|
+
console.log('Argo enabled successfully')
|
|
140
|
+
return true
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Python Pattern:**
|
|
145
|
+
|
|
146
|
+
```python
|
|
147
|
+
def safely_enable_argo(client: Cloudflare, zone_id: str) -> bool:
|
|
148
|
+
status = client.argo.smart_routing.get(zone_id=zone_id)
|
|
149
|
+
|
|
150
|
+
if not status.editable:
|
|
151
|
+
print('Cannot modify Argo: editable=false (check billing/permissions)')
|
|
152
|
+
return False
|
|
153
|
+
|
|
154
|
+
if status.value == 'on':
|
|
155
|
+
print('Argo already enabled')
|
|
156
|
+
return True
|
|
157
|
+
|
|
158
|
+
client.argo.smart_routing.edit(zone_id=zone_id, value='on')
|
|
159
|
+
print('Argo enabled successfully')
|
|
160
|
+
return True
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Error Handling
|
|
164
|
+
|
|
165
|
+
The TypeScript SDK provides typed error classes for robust error handling:
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
import Cloudflare from 'cloudflare'
|
|
169
|
+
import { APIError, APIConnectionError, RateLimitError } from 'cloudflare'
|
|
170
|
+
|
|
171
|
+
async function enableArgoWithErrorHandling(client: Cloudflare, zoneId: string) {
|
|
172
|
+
try {
|
|
173
|
+
const result = await client.argo.smartRouting.edit({
|
|
174
|
+
zone_id: zoneId,
|
|
175
|
+
value: 'on',
|
|
176
|
+
})
|
|
177
|
+
return result
|
|
178
|
+
} catch (error) {
|
|
179
|
+
if (error instanceof RateLimitError) {
|
|
180
|
+
console.error('Rate limited. Retry after:', error.response?.headers.get('retry-after'))
|
|
181
|
+
// Implement exponential backoff
|
|
182
|
+
} else if (error instanceof APIError) {
|
|
183
|
+
console.error('API error:', error.status, error.message)
|
|
184
|
+
if (error.status === 403) {
|
|
185
|
+
console.error('Permission denied - check API token scopes')
|
|
186
|
+
} else if (error.status === 400) {
|
|
187
|
+
console.error('Bad request - verify zone_id and payload')
|
|
188
|
+
}
|
|
189
|
+
} else if (error instanceof APIConnectionError) {
|
|
190
|
+
console.error('Connection failed:', error.message)
|
|
191
|
+
// Retry with exponential backoff
|
|
192
|
+
} else {
|
|
193
|
+
console.error('Unexpected error:', error)
|
|
194
|
+
}
|
|
195
|
+
throw error
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Python Error Handling:**
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
from cloudflare import Cloudflare, APIError, RateLimitError
|
|
204
|
+
|
|
205
|
+
def enable_argo_with_error_handling(client: Cloudflare, zone_id: str):
|
|
206
|
+
try:
|
|
207
|
+
result = client.argo.smart_routing.edit(zone_id=zone_id, value='on')
|
|
208
|
+
return result
|
|
209
|
+
except RateLimitError as e:
|
|
210
|
+
print(f"Rate limited. Retry after: {e.response.headers.get('retry-after')}")
|
|
211
|
+
raise
|
|
212
|
+
except APIError as e:
|
|
213
|
+
print(f"API error: {e.status} - {e.message}")
|
|
214
|
+
if e.status == 403:
|
|
215
|
+
print('Permission denied - check API token scopes')
|
|
216
|
+
elif e.status == 400:
|
|
217
|
+
print('Bad request - verify zone_id and payload')
|
|
218
|
+
raise
|
|
219
|
+
except Exception as e:
|
|
220
|
+
print(f"Unexpected error: {e}")
|
|
221
|
+
raise
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Response Schema
|
|
225
|
+
|
|
226
|
+
All Argo Smart Routing API responses follow this structure:
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
interface ArgoSmartRoutingResponse {
|
|
230
|
+
result: {
|
|
231
|
+
id: 'smart_routing'
|
|
232
|
+
value: 'on' | 'off'
|
|
233
|
+
editable: boolean
|
|
234
|
+
modified_on: string // ISO 8601 timestamp
|
|
235
|
+
}
|
|
236
|
+
success: boolean
|
|
237
|
+
errors: Array<{
|
|
238
|
+
code: number
|
|
239
|
+
message: string
|
|
240
|
+
}>
|
|
241
|
+
messages: Array<string>
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Key Response Fields
|
|
246
|
+
|
|
247
|
+
| Field | Type | Description |
|
|
248
|
+
| ------------- | --------------- | ------------------------------------------------ |
|
|
249
|
+
| `value` | `"on" \| "off"` | Current enablement status |
|
|
250
|
+
| `editable` | `boolean` | Whether changes are allowed (check before PATCH) |
|
|
251
|
+
| `modified_on` | `string` | ISO timestamp of last modification |
|
|
252
|
+
| `success` | `boolean` | Whether request succeeded |
|
|
253
|
+
| `errors` | `Array` | Error details if `success: false` |
|