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,111 @@
|
|
|
1
|
+
# GraphQL Analytics API Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Rate Limits
|
|
4
|
+
|
|
5
|
+
| Limit | Value |
|
|
6
|
+
| ------------------------ | --------------------------------------------------------- |
|
|
7
|
+
| GraphQL queries per user | **Default 300 per 5 minutes** (max 320, at least 1/sec) |
|
|
8
|
+
| General API rate limit | 1200 requests per 5 minutes (shared across all API calls) |
|
|
9
|
+
| Zone scope per query | Up to **10 zones** |
|
|
10
|
+
| Account scope per query | Exactly **1 account** |
|
|
11
|
+
|
|
12
|
+
The GraphQL rate limit is separate from the general API limit. Exceeding either results in `HTTP 429` and blocks all API calls for 5 minutes. Enterprise customers can contact support to raise limits.
|
|
13
|
+
|
|
14
|
+
### "429 Too Many Requests"
|
|
15
|
+
|
|
16
|
+
**Cause:** Exceeded rate limit.
|
|
17
|
+
|
|
18
|
+
**Solution:** Batch multiple datasets into single queries, cache results, increase intervals between queries. Use `{ viewer { budget } }` to monitor remaining budget.
|
|
19
|
+
|
|
20
|
+
## Sampling & Data Accuracy
|
|
21
|
+
|
|
22
|
+
### Adaptive Bit Rate (ABR) Sampling
|
|
23
|
+
|
|
24
|
+
Datasets with `Adaptive` in the name use adaptive sampling:
|
|
25
|
+
|
|
26
|
+
- Results are **statistically representative**, not exact
|
|
27
|
+
- Same query may return **slightly different numbers** each run
|
|
28
|
+
- Higher traffic = higher sampling rate = more accurate
|
|
29
|
+
- `sampleInterval` dimension shows the ratio (1 = no sampling, 10 = ~1-in-10 sampled)
|
|
30
|
+
|
|
31
|
+
For high-confidence numbers, use `confidence(level: 0.95)` to get estimate bounds. For exact counts, use rollup nodes (`httpRequests1hGroups`, `httpRequests1dGroups`) which are pre-aggregated without sampling.
|
|
32
|
+
|
|
33
|
+
### Rollup vs. Adaptive
|
|
34
|
+
|
|
35
|
+
| Feature | Rollup (`*1hGroups`, `*1dGroups`) | Adaptive (`*AdaptiveGroups`) |
|
|
36
|
+
| ----------- | --------------------------------- | ---------------------------- |
|
|
37
|
+
| Sampling | No (pre-aggregated) | Yes (ABR) |
|
|
38
|
+
| Flexibility | Fixed time buckets | Any granularity |
|
|
39
|
+
| Dimensions | Fewer | Many more |
|
|
40
|
+
| Accuracy | Exact | Statistical estimate |
|
|
41
|
+
|
|
42
|
+
## Common Errors
|
|
43
|
+
|
|
44
|
+
### "Access denied" / "authentication error"
|
|
45
|
+
|
|
46
|
+
**Cause:** Token lacks required permission or wrong scope.
|
|
47
|
+
|
|
48
|
+
**Solution:** Account-scoped queries need **Account Analytics: Read**. Zone-scoped queries need **Zone Analytics: Read**. Verify: `curl -s https://api.cloudflare.com/client/v4/user/tokens/verify -H "Authorization: Bearer $TOKEN"`
|
|
49
|
+
|
|
50
|
+
### "field not found" / "Cannot query field"
|
|
51
|
+
|
|
52
|
+
**Cause:** Wrong dataset name, nonexistent field, or wrong scope (zone vs. account).
|
|
53
|
+
|
|
54
|
+
**Solution:** Names are case-sensitive camelCase (`httpRequestsAdaptiveGroups`). Zone datasets go under `zones(...)`, account datasets under `accounts(...)`. Use introspection to verify.
|
|
55
|
+
|
|
56
|
+
### "filter is required" / empty results
|
|
57
|
+
|
|
58
|
+
**Cause:** Missing required time range filter or incorrect zone/account tag.
|
|
59
|
+
|
|
60
|
+
**Solution:** Always include `datetime_gt` / `datetime_lt` (or `_geq` / `_leq`).
|
|
61
|
+
|
|
62
|
+
### "limit is required" / "limit exceeds maximum"
|
|
63
|
+
|
|
64
|
+
**Cause:** Missing `limit` or exceeding node's max page size.
|
|
65
|
+
|
|
66
|
+
**Solution:** Always specify `limit`. Max varies by dataset (typically 10,000 for groups, 100 for raw events). Check via settings query.
|
|
67
|
+
|
|
68
|
+
### "query is too complex" / "query exceeds budget"
|
|
69
|
+
|
|
70
|
+
**Cause:** Too many fields, datasets, or too broad a time range.
|
|
71
|
+
|
|
72
|
+
**Solution:** Reduce time range, request fewer dimensions/metrics, break into smaller queries. Monitor `cost` and `budget` in responses.
|
|
73
|
+
|
|
74
|
+
### 200 Response with Errors
|
|
75
|
+
|
|
76
|
+
GraphQL returns HTTP 200 even on failures. **Always check `response.errors`:**
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{ "data": null, "errors": [{ "message": "filter is required for httpRequestsAdaptiveGroups" }] }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Plan-Based Availability
|
|
83
|
+
|
|
84
|
+
Not all datasets are available on all plans. Higher plans get more datasets, longer retention (`notOlderThan`), wider time ranges (`maxDuration`), more fields, and larger page sizes.
|
|
85
|
+
|
|
86
|
+
### "node is not available" / "node is disabled"
|
|
87
|
+
|
|
88
|
+
**Cause:** Dataset not on your plan, or product not enabled.
|
|
89
|
+
|
|
90
|
+
**Solution:** Check `settings { <nodeName> { enabled } }`. Some datasets require specific subscriptions (e.g., Network Analytics requires Magic Transit/Spectrum).
|
|
91
|
+
|
|
92
|
+
## DateTime & Timezone Handling
|
|
93
|
+
|
|
94
|
+
- All times are **UTC only** (ISO 8601: `"2025-01-15T10:30:00Z"`)
|
|
95
|
+
- `Date` type: `"2025-01-15"` (used in `date_geq`/`date_leq` for storage datasets)
|
|
96
|
+
- `Time` type: `"2025-01-15T10:30:00Z"` (used in `datetime_gt`/`datetime_lt`)
|
|
97
|
+
- Filters are start-inclusive: events that start within the window are included
|
|
98
|
+
|
|
99
|
+
## Performance Tips
|
|
100
|
+
|
|
101
|
+
- **Narrow time ranges** are faster and cheaper
|
|
102
|
+
- **Select only needed dimensions** — each additional dimension increases cost
|
|
103
|
+
- **Use rollup nodes** (`*1dGroups`) for simple daily totals without dimension breakdowns
|
|
104
|
+
- **Batch datasets** into one query instead of separate HTTP requests
|
|
105
|
+
|
|
106
|
+
## See Also
|
|
107
|
+
|
|
108
|
+
- [README.md](README.md) - Overview, decision tree, dataset index
|
|
109
|
+
- [api.md](api.md) - Query structure, aggregation fields, filtering operators
|
|
110
|
+
- [configuration.md](configuration.md) - Authentication, client setup, introspection queries
|
|
111
|
+
- [patterns.md](patterns.md) - Common query patterns (time-series, top-N, per-product)
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# GraphQL Analytics API Patterns & Best Practices
|
|
2
|
+
|
|
3
|
+
## Time-Series Queries
|
|
4
|
+
|
|
5
|
+
Use time dimension granularity matching your range (see Best Practices below).
|
|
6
|
+
|
|
7
|
+
```graphql
|
|
8
|
+
query TrafficTimeSeries($zoneTag: string!, $start: Time!, $end: Time!) {
|
|
9
|
+
viewer {
|
|
10
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
11
|
+
httpRequestsAdaptiveGroups(
|
|
12
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
13
|
+
limit: 1000
|
|
14
|
+
orderBy: [datetimeFiveMinutes_ASC] # or datetimeHour_ASC for longer ranges
|
|
15
|
+
) {
|
|
16
|
+
count
|
|
17
|
+
dimensions {
|
|
18
|
+
datetimeFiveMinutes
|
|
19
|
+
}
|
|
20
|
+
sum {
|
|
21
|
+
edgeResponseBytes
|
|
22
|
+
}
|
|
23
|
+
ratio {
|
|
24
|
+
status4xx
|
|
25
|
+
status5xx
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Top-N Queries
|
|
34
|
+
|
|
35
|
+
### Top Countries by Request Count
|
|
36
|
+
|
|
37
|
+
```graphql
|
|
38
|
+
query TopCountries($zoneTag: string!, $start: Time!, $end: Time!) {
|
|
39
|
+
viewer {
|
|
40
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
41
|
+
httpRequestsAdaptiveGroups(
|
|
42
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
43
|
+
limit: 10
|
|
44
|
+
orderBy: [count_DESC]
|
|
45
|
+
) {
|
|
46
|
+
count
|
|
47
|
+
dimensions {
|
|
48
|
+
clientCountryName
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Use `orderBy: [sum_edgeResponseBytes_DESC]` for top paths by bandwidth. Add `edgeResponseStatus_geq: 400` to the filter for top error status codes.
|
|
57
|
+
|
|
58
|
+
## Workers Analytics
|
|
59
|
+
|
|
60
|
+
```graphql
|
|
61
|
+
query WorkersOverview($accountTag: string!, $start: Time!, $end: Time!) {
|
|
62
|
+
viewer {
|
|
63
|
+
accounts(filter: { accountTag: $accountTag }) {
|
|
64
|
+
workersInvocationsAdaptive(
|
|
65
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
66
|
+
limit: 100
|
|
67
|
+
orderBy: [sum_requests_DESC]
|
|
68
|
+
) {
|
|
69
|
+
sum {
|
|
70
|
+
requests
|
|
71
|
+
errors
|
|
72
|
+
subrequests
|
|
73
|
+
wallTime
|
|
74
|
+
}
|
|
75
|
+
quantiles {
|
|
76
|
+
cpuTimeP50
|
|
77
|
+
cpuTimeP99
|
|
78
|
+
wallTimeP50
|
|
79
|
+
wallTimeP99
|
|
80
|
+
}
|
|
81
|
+
dimensions {
|
|
82
|
+
scriptName
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Filter by `scriptName` for a specific Worker. Add `datetimeFiveMinutes` dimension + `orderBy: [datetimeFiveMinutes_ASC]` for error rate over time.
|
|
91
|
+
|
|
92
|
+
## Firewall / Security
|
|
93
|
+
|
|
94
|
+
```graphql
|
|
95
|
+
query RecentFirewallEvents($zoneTag: string!, $start: Time!) {
|
|
96
|
+
viewer {
|
|
97
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
98
|
+
firewallEventsAdaptive(filter: { datetime_gt: $start }, limit: 50, orderBy: [datetime_DESC]) {
|
|
99
|
+
action
|
|
100
|
+
source
|
|
101
|
+
clientIP
|
|
102
|
+
clientCountryName
|
|
103
|
+
userAgent
|
|
104
|
+
clientRequestHTTPHost
|
|
105
|
+
clientRequestPath
|
|
106
|
+
ruleId
|
|
107
|
+
datetime
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
For aggregated firewall stats, use `firewallEventsAdaptiveGroups` with `action: "block"` filter and group by `ruleId`, `source`, `datetimeHour`.
|
|
115
|
+
|
|
116
|
+
## DNS Analytics
|
|
117
|
+
|
|
118
|
+
```graphql
|
|
119
|
+
query DNSQueryVolume($zoneTag: string!, $start: Time!, $end: Time!) {
|
|
120
|
+
viewer {
|
|
121
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
122
|
+
dnsAnalyticsAdaptiveGroups(
|
|
123
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
124
|
+
limit: 500
|
|
125
|
+
orderBy: [datetimeFiveMinutes_ASC]
|
|
126
|
+
) {
|
|
127
|
+
count
|
|
128
|
+
dimensions {
|
|
129
|
+
datetimeFiveMinutes
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Storage Analytics (Account-Scoped)
|
|
138
|
+
|
|
139
|
+
R2, KV, and D1 use `date` (Date type) filters instead of `datetime` (Time type).
|
|
140
|
+
|
|
141
|
+
```graphql
|
|
142
|
+
# R2 operations
|
|
143
|
+
r2OperationsAdaptiveGroups(filter: { date_geq: $start, date_leq: $end }, limit: 100, orderBy: [date_DESC]) {
|
|
144
|
+
dimensions { date bucketName actionType }
|
|
145
|
+
sum { requests }
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
# KV operations
|
|
149
|
+
kvOperationsAdaptiveGroups(filter: { date_geq: $start, date_leq: $end }, limit: 100, orderBy: [date_DESC]) {
|
|
150
|
+
dimensions { date actionType }
|
|
151
|
+
sum { requests }
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
# D1 analytics
|
|
155
|
+
d1AnalyticsAdaptiveGroups(filter: { date_geq: $start, date_leq: $end }, limit: 100, orderBy: [date_DESC]) {
|
|
156
|
+
dimensions { date databaseId }
|
|
157
|
+
sum { readQueries writeQueries rowsRead rowsWritten }
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Cache Analytics
|
|
162
|
+
|
|
163
|
+
```graphql
|
|
164
|
+
query CacheStatusBreakdown($zoneTag: string!, $start: Time!, $end: Time!) {
|
|
165
|
+
viewer {
|
|
166
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
167
|
+
httpRequestsAdaptiveGroups(
|
|
168
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
169
|
+
limit: 20
|
|
170
|
+
orderBy: [count_DESC]
|
|
171
|
+
) {
|
|
172
|
+
count
|
|
173
|
+
dimensions {
|
|
174
|
+
cacheStatus
|
|
175
|
+
}
|
|
176
|
+
sum {
|
|
177
|
+
edgeResponseBytes
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
For cache hit ratio over time, use aliases to query the same dataset twice — once with `cacheStatus: "hit"` filter and once without — then compute the ratio client-side.
|
|
186
|
+
|
|
187
|
+
## Multi-Dataset Queries
|
|
188
|
+
|
|
189
|
+
A single request can query multiple datasets, avoiding extra HTTP round-trips:
|
|
190
|
+
|
|
191
|
+
```graphql
|
|
192
|
+
query DashboardOverview($zoneTag: string!, $start: Time!, $end: Time!) {
|
|
193
|
+
viewer {
|
|
194
|
+
zones(filter: { zoneTag: $zoneTag }) {
|
|
195
|
+
httpTraffic: httpRequestsAdaptiveGroups(
|
|
196
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
197
|
+
limit: 1
|
|
198
|
+
) {
|
|
199
|
+
count
|
|
200
|
+
sum {
|
|
201
|
+
edgeResponseBytes
|
|
202
|
+
}
|
|
203
|
+
ratio {
|
|
204
|
+
status4xx
|
|
205
|
+
status5xx
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
firewallEvents: firewallEventsAdaptiveGroups(
|
|
209
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
210
|
+
limit: 5
|
|
211
|
+
orderBy: [count_DESC]
|
|
212
|
+
) {
|
|
213
|
+
count
|
|
214
|
+
dimensions {
|
|
215
|
+
action
|
|
216
|
+
source
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
dnsQueries: dnsAnalyticsAdaptiveGroups(
|
|
220
|
+
filter: { datetime_gt: $start, datetime_lt: $end }
|
|
221
|
+
limit: 1
|
|
222
|
+
) {
|
|
223
|
+
count
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## AI & Gateway Analytics
|
|
231
|
+
|
|
232
|
+
```graphql
|
|
233
|
+
# Workers AI inference
|
|
234
|
+
aiInferenceAdaptiveGroups(
|
|
235
|
+
filter: { datetime_gt: $start, datetime_lt: $end }, limit: 100, orderBy: [datetimeHour_DESC]
|
|
236
|
+
) {
|
|
237
|
+
count
|
|
238
|
+
sum { totalInputTokens totalOutputTokens totalRequestBytesIn }
|
|
239
|
+
dimensions { modelId datetimeHour }
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
# AI Gateway requests
|
|
243
|
+
aiGatewayRequestsAdaptiveGroups(
|
|
244
|
+
filter: { datetime_gt: $start, datetime_lt: $end }, limit: 100, orderBy: [datetimeHour_DESC]
|
|
245
|
+
) {
|
|
246
|
+
count
|
|
247
|
+
dimensions { gateway provider model datetimeHour }
|
|
248
|
+
sum { cachedTokensIn cachedTokensOut uncachedTokensIn uncachedTokensOut }
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Both are account-scoped — nest under `accounts(filter: { accountTag: $accountTag })`.
|
|
253
|
+
|
|
254
|
+
## Best Practices
|
|
255
|
+
|
|
256
|
+
**Always include time filters.** Queries without time filters scan all data and are slow/expensive.
|
|
257
|
+
|
|
258
|
+
**Match time granularity to range:**
|
|
259
|
+
|
|
260
|
+
| Time Range | Recommended Dimension |
|
|
261
|
+
| ---------- | ------------------------------------------------- |
|
|
262
|
+
| < 6 hours | `datetimeMinute` or `datetimeFiveMinutes` |
|
|
263
|
+
| 6-48 hours | `datetimeFiveMinutes` or `datetimeFifteenMinutes` |
|
|
264
|
+
| 2-14 days | `datetimeHour` |
|
|
265
|
+
| 14+ days | `date` |
|
|
266
|
+
|
|
267
|
+
**Use aliases** for querying the same dataset with different filters in one request.
|
|
268
|
+
|
|
269
|
+
**Request only needed fields.** Extra dimensions and metrics increase query cost.
|
|
270
|
+
|
|
271
|
+
## See Also
|
|
272
|
+
|
|
273
|
+
- [README.md](README.md) - Overview, decision tree, dataset index
|
|
274
|
+
- [api.md](api.md) - Query structure, aggregation fields, filtering operators
|
|
275
|
+
- [configuration.md](configuration.md) - Authentication, client setup, introspection queries
|
|
276
|
+
- [gotchas.md](gotchas.md) - Rate limits, sampling, troubleshooting
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Hyperdrive
|
|
2
|
+
|
|
3
|
+
Accelerates database queries from Workers via connection pooling, edge setup, query caching.
|
|
4
|
+
|
|
5
|
+
## Key Features
|
|
6
|
+
|
|
7
|
+
- **Connection Pooling**: Persistent connections eliminate TCP/TLS/auth handshakes (~7 round-trips)
|
|
8
|
+
- **Edge Setup**: Connection negotiation at edge, pooling near origin
|
|
9
|
+
- **Query Caching**: Auto-cache non-mutating queries (default 60s TTL)
|
|
10
|
+
- **Support**: PostgreSQL, MySQL + compatibles (CockroachDB, Timescale, PlanetScale, Neon, Supabase)
|
|
11
|
+
|
|
12
|
+
## Architecture
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
Worker → Edge (setup) → Pool (near DB) → Origin
|
|
16
|
+
↓ cached reads
|
|
17
|
+
Cache
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Create config
|
|
24
|
+
npx wrangler hyperdrive create my-db \
|
|
25
|
+
--connection-string="postgres://user:pass@host:5432/db"
|
|
26
|
+
|
|
27
|
+
# wrangler.jsonc
|
|
28
|
+
{
|
|
29
|
+
"compatibility_flags": ["nodejs_compat"],
|
|
30
|
+
"hyperdrive": [{"binding": "HYPERDRIVE", "id": "<ID>"}]
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { Client } from 'pg'
|
|
36
|
+
|
|
37
|
+
export default {
|
|
38
|
+
async fetch(req: Request, env: Env): Promise<Response> {
|
|
39
|
+
const client = new Client({
|
|
40
|
+
connectionString: env.HYPERDRIVE.connectionString,
|
|
41
|
+
})
|
|
42
|
+
await client.connect()
|
|
43
|
+
const result = await client.query('SELECT * FROM users WHERE id = $1', [123])
|
|
44
|
+
await client.end()
|
|
45
|
+
return Response.json(result.rows)
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## When to Use
|
|
51
|
+
|
|
52
|
+
✅ Global access to single-region DBs, high read ratios, popular queries, connection-heavy loads
|
|
53
|
+
❌ Write-heavy, real-time data (<1s), single-region apps close to DB
|
|
54
|
+
|
|
55
|
+
**💡 Pair with Smart Placement** for Workers making multiple queries - executes near DB to minimize latency.
|
|
56
|
+
|
|
57
|
+
## Driver Choice
|
|
58
|
+
|
|
59
|
+
| Driver | Use When | Notes |
|
|
60
|
+
| -------------------- | ------------------------------------------------ | ------------------------------------------- |
|
|
61
|
+
| **pg** (recommended) | General use, TypeScript, ecosystem compatibility | Stable, widely used, works with most ORMs |
|
|
62
|
+
| **postgres.js** | Advanced features, template literals, streaming | Lighter than pg, `prepare: true` is default |
|
|
63
|
+
| **mysql2** | MySQL/MariaDB/PlanetScale | MySQL only, less mature support |
|
|
64
|
+
|
|
65
|
+
## Reading Order
|
|
66
|
+
|
|
67
|
+
| New to Hyperdrive | Implementing | Troubleshooting |
|
|
68
|
+
| ----------------------------------------- | ----------------------------------------- | ------------------------------- |
|
|
69
|
+
| 1. README (this) | 1. [configuration.md](./configuration.md) | 1. [gotchas.md](./gotchas.md) |
|
|
70
|
+
| 2. [configuration.md](./configuration.md) | 2. [api.md](./api.md) | 2. [patterns.md](./patterns.md) |
|
|
71
|
+
| 3. [api.md](./api.md) | 3. [patterns.md](./patterns.md) | 3. [api.md](./api.md) |
|
|
72
|
+
|
|
73
|
+
## In This Reference
|
|
74
|
+
|
|
75
|
+
- [configuration.md](./configuration.md) - Setup, wrangler config, Smart Placement
|
|
76
|
+
- [api.md](./api.md) - Binding APIs, query patterns, driver usage
|
|
77
|
+
- [patterns.md](./patterns.md) - Use cases, ORMs, multi-query optimization
|
|
78
|
+
- [gotchas.md](./gotchas.md) - Limits, troubleshooting, connection management
|
|
79
|
+
|
|
80
|
+
## See Also
|
|
81
|
+
|
|
82
|
+
- [smart-placement](../smart-placement/) - Optimize multi-query Workers near databases
|
|
83
|
+
- [d1](../d1/) - Serverless SQLite alternative for edge-native apps
|
|
84
|
+
- [workers](../workers/) - Worker runtime with database bindings
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
See [README.md](./README.md) for overview, [configuration.md](./configuration.md) for setup.
|
|
4
|
+
|
|
5
|
+
## Binding Interface
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
interface Hyperdrive {
|
|
9
|
+
connectionString: string // PostgreSQL
|
|
10
|
+
// MySQL properties:
|
|
11
|
+
host: string
|
|
12
|
+
port: number
|
|
13
|
+
user: string
|
|
14
|
+
password: string
|
|
15
|
+
database: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface Env {
|
|
19
|
+
HYPERDRIVE: Hyperdrive
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Generate types:** `npx wrangler types` (auto-creates worker-configuration.d.ts from wrangler.jsonc)
|
|
24
|
+
|
|
25
|
+
## PostgreSQL (node-postgres) - RECOMMENDED
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { Client } from 'pg' // pg@^8.17.2
|
|
29
|
+
|
|
30
|
+
export default {
|
|
31
|
+
async fetch(req: Request, env: Env): Promise<Response> {
|
|
32
|
+
const client = new Client({ connectionString: env.HYPERDRIVE.connectionString })
|
|
33
|
+
try {
|
|
34
|
+
await client.connect()
|
|
35
|
+
const result = await client.query('SELECT * FROM users WHERE id = $1', [123])
|
|
36
|
+
return Response.json(result.rows)
|
|
37
|
+
} finally {
|
|
38
|
+
await client.end()
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**⚠️ Workers connection limit: 6 per Worker invocation** - use connection pooling wisely.
|
|
45
|
+
|
|
46
|
+
## PostgreSQL (postgres.js)
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import postgres from 'postgres' // postgres@^3.4.8
|
|
50
|
+
|
|
51
|
+
const sql = postgres(env.HYPERDRIVE.connectionString, {
|
|
52
|
+
max: 5, // Limit per Worker (Workers max: 6)
|
|
53
|
+
prepare: true, // Enabled by default, required for caching
|
|
54
|
+
fetch_types: false, // Reduce latency if not using arrays
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
const users = await sql`SELECT * FROM users WHERE active = ${true} LIMIT 10`
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**⚠️ `prepare: true` is enabled by default and required for Hyperdrive caching.** Setting to `false` disables prepared statements + cache.
|
|
61
|
+
|
|
62
|
+
## MySQL (mysql2)
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { createConnection } from 'mysql2/promise' // mysql2@^3.16.2
|
|
66
|
+
|
|
67
|
+
const conn = await createConnection({
|
|
68
|
+
host: env.HYPERDRIVE.host,
|
|
69
|
+
user: env.HYPERDRIVE.user,
|
|
70
|
+
password: env.HYPERDRIVE.password,
|
|
71
|
+
database: env.HYPERDRIVE.database,
|
|
72
|
+
port: env.HYPERDRIVE.port,
|
|
73
|
+
disableEval: true, // ⚠️ REQUIRED for Workers
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const [results] = await conn.query('SELECT * FROM users WHERE active = ? LIMIT ?', [true, 10])
|
|
77
|
+
ctx.waitUntil(conn.end())
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**⚠️ MySQL support is less mature than PostgreSQL** - expect fewer optimizations and potential edge cases.
|
|
81
|
+
|
|
82
|
+
## Query Caching
|
|
83
|
+
|
|
84
|
+
**Cacheable:**
|
|
85
|
+
|
|
86
|
+
```sql
|
|
87
|
+
SELECT * FROM posts WHERE published = true;
|
|
88
|
+
SELECT COUNT(*) FROM users;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**NOT cacheable:**
|
|
92
|
+
|
|
93
|
+
```sql
|
|
94
|
+
-- Writes
|
|
95
|
+
INSERT/UPDATE/DELETE
|
|
96
|
+
|
|
97
|
+
-- Volatile functions
|
|
98
|
+
SELECT NOW();
|
|
99
|
+
SELECT random();
|
|
100
|
+
SELECT LASTVAL(); -- PostgreSQL
|
|
101
|
+
SELECT UUID(); -- MySQL
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Cache config:**
|
|
105
|
+
|
|
106
|
+
- Default: `max_age=60s`, `swr=15s`
|
|
107
|
+
- Max `max_age`: 3600s
|
|
108
|
+
- Disable: `--caching-disabled=true`
|
|
109
|
+
|
|
110
|
+
**Multiple configs pattern:**
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Reads: cached
|
|
114
|
+
const sqlCached = postgres(env.HYPERDRIVE_CACHED.connectionString)
|
|
115
|
+
const posts = await sqlCached`SELECT * FROM posts ORDER BY views DESC LIMIT 10`
|
|
116
|
+
|
|
117
|
+
// Writes/time-sensitive: no cache
|
|
118
|
+
const sqlNoCache = postgres(env.HYPERDRIVE_NO_CACHE.connectionString)
|
|
119
|
+
const orders = await sqlNoCache`SELECT * FROM orders WHERE created_at > NOW() - INTERVAL 5 MINUTE`
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## ORMs
|
|
123
|
+
|
|
124
|
+
**Drizzle:**
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
import { drizzle } from 'drizzle-orm/postgres-js' // drizzle-orm@^0.45.1
|
|
128
|
+
import postgres from 'postgres'
|
|
129
|
+
|
|
130
|
+
const client = postgres(env.HYPERDRIVE.connectionString, { max: 5, prepare: true })
|
|
131
|
+
const db = drizzle(client)
|
|
132
|
+
const users = await db.select().from(users).where(eq(users.active, true)).limit(10)
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Kysely:**
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { Kysely, PostgresDialect } from 'kysely' // kysely@^0.27+
|
|
139
|
+
import postgres from 'postgres'
|
|
140
|
+
|
|
141
|
+
const db = new Kysely({
|
|
142
|
+
dialect: new PostgresDialect({
|
|
143
|
+
postgres: postgres(env.HYPERDRIVE.connectionString, { max: 5, prepare: true }),
|
|
144
|
+
}),
|
|
145
|
+
})
|
|
146
|
+
const users = await db.selectFrom('users').selectAll().where('active', '=', true).execute()
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
See [patterns.md](./patterns.md) for use cases, [gotchas.md](./gotchas.md) for limits.
|