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,96 @@
|
|
|
1
|
+
# Cloudflare Workers Analytics Engine Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing unlimited-cardinality analytics at scale using Cloudflare Workers Analytics Engine.
|
|
4
|
+
|
|
5
|
+
## What is Analytics Engine?
|
|
6
|
+
|
|
7
|
+
Time-series analytics database designed for high-cardinality data (millions of unique dimensions). Write data points from Workers, query via SQL API. Use for:
|
|
8
|
+
|
|
9
|
+
- Custom user-facing analytics dashboards
|
|
10
|
+
- Usage-based billing & metering
|
|
11
|
+
- Per-customer/per-feature monitoring
|
|
12
|
+
- High-frequency instrumentation without performance impact
|
|
13
|
+
|
|
14
|
+
**Key Capability:** Track metrics with unlimited unique values (e.g., millions of user IDs, API keys) without performance degradation.
|
|
15
|
+
|
|
16
|
+
## Core Concepts
|
|
17
|
+
|
|
18
|
+
| Concept | Description | Example |
|
|
19
|
+
| -------------- | ------------------------------------ | --------------------------------- |
|
|
20
|
+
| **Dataset** | Logical table for related metrics | `api_requests`, `user_events` |
|
|
21
|
+
| **Data Point** | Single measurement with timestamp | One API request's metrics |
|
|
22
|
+
| **Blobs** | String dimensions (max 20) | endpoint, method, status, user_id |
|
|
23
|
+
| **Doubles** | Numeric values (max 20) | latency_ms, request_count, bytes |
|
|
24
|
+
| **Indexes** | Filtered blobs for efficient queries | customer_id, api_key |
|
|
25
|
+
|
|
26
|
+
## Reading Order
|
|
27
|
+
|
|
28
|
+
| Task | Start Here | Then Read |
|
|
29
|
+
| -------------------- | ------------------------------------------------------------------------------------ | --------- |
|
|
30
|
+
| **First-time setup** | [configuration.md](configuration.md) → [api.md](api.md) → [patterns.md](patterns.md) | |
|
|
31
|
+
| **Writing data** | [api.md](api.md) → [gotchas.md](gotchas.md) (sampling) | |
|
|
32
|
+
| **Querying data** | [api.md](api.md) (SQL API) → [patterns.md](patterns.md) (examples) | |
|
|
33
|
+
| **Debugging** | [gotchas.md](gotchas.md) → [api.md](api.md) (limits) | |
|
|
34
|
+
| **Optimization** | [patterns.md](patterns.md) (anti-patterns) → [gotchas.md](gotchas.md) | |
|
|
35
|
+
|
|
36
|
+
## When to Use Analytics Engine
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
Need to track metrics? → Yes
|
|
40
|
+
↓
|
|
41
|
+
Millions of unique dimension values? → Yes
|
|
42
|
+
↓
|
|
43
|
+
Need real-time queries? → Yes
|
|
44
|
+
↓
|
|
45
|
+
Use Analytics Engine ✓
|
|
46
|
+
|
|
47
|
+
Alternative scenarios:
|
|
48
|
+
- Low cardinality (<10k unique values) → Workers Analytics (free tier)
|
|
49
|
+
- Complex joins/relations → D1 Database
|
|
50
|
+
- Logs/debugging → Tail Workers (logpush)
|
|
51
|
+
- External tools → Send to external analytics (Datadog, etc.)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
1. Add binding to `wrangler.jsonc`:
|
|
57
|
+
|
|
58
|
+
```jsonc
|
|
59
|
+
{
|
|
60
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS", "dataset": "my_events" }],
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
2. Write data points (fire-and-forget, no await):
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
env.ANALYTICS.writeDataPoint({
|
|
68
|
+
blobs: ['/api/users', 'GET', '200'],
|
|
69
|
+
doubles: [145.2, 1], // latency_ms, count
|
|
70
|
+
indexes: [customerId],
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
3. Query via SQL API (HTTP):
|
|
75
|
+
|
|
76
|
+
```sql
|
|
77
|
+
SELECT blob1, SUM(double2) AS total_requests
|
|
78
|
+
FROM my_events
|
|
79
|
+
WHERE index1 = 'customer_123'
|
|
80
|
+
AND timestamp >= NOW() - INTERVAL '7' DAY
|
|
81
|
+
GROUP BY blob1
|
|
82
|
+
ORDER BY total_requests DESC
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## In This Reference
|
|
86
|
+
|
|
87
|
+
- **[configuration.md](configuration.md)** - Setup, bindings, TypeScript types, limits
|
|
88
|
+
- **[api.md](api.md)** - `writeDataPoint()`, SQL API, query syntax
|
|
89
|
+
- **[patterns.md](patterns.md)** - Use cases, examples, anti-patterns
|
|
90
|
+
- **[gotchas.md](gotchas.md)** - Sampling, index selection, troubleshooting
|
|
91
|
+
|
|
92
|
+
## See Also
|
|
93
|
+
|
|
94
|
+
- [Cloudflare Analytics Engine Docs](https://developers.cloudflare.com/analytics/analytics-engine/)
|
|
95
|
+
- [GraphQL Analytics API Reference](../graphql-api/) - Query built-in Cloudflare analytics (HTTP, Workers, DNS, Firewall, etc.)
|
|
96
|
+
- [Observability Reference](../observability/) - Workers Logs, Traces, and real-time debugging
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Analytics Engine API Reference
|
|
2
|
+
|
|
3
|
+
## Writing Data
|
|
4
|
+
|
|
5
|
+
### `writeDataPoint()`
|
|
6
|
+
|
|
7
|
+
Fire-and-forget (returns `void`, not Promise). Writes happen asynchronously.
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
interface AnalyticsEngineDataPoint {
|
|
11
|
+
blobs?: string[] // Up to 20 strings (dimensions), 16KB each
|
|
12
|
+
doubles?: number[] // Up to 20 numbers (metrics)
|
|
13
|
+
indexes?: string[] // 1 indexed string for high-cardinality filtering
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
env.ANALYTICS.writeDataPoint({
|
|
17
|
+
blobs: ['/api/users', 'GET', '200'],
|
|
18
|
+
doubles: [145.2, 1], // latency_ms, count
|
|
19
|
+
indexes: ['customer_abc123'],
|
|
20
|
+
})
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Behaviors:** No await needed, no error thrown (check tail logs), auto-sampled at high volumes, auto-timestamped.
|
|
24
|
+
|
|
25
|
+
**Blob vs Index:** Blob for GROUP BY (<100k unique), Index for filter-only (millions unique).
|
|
26
|
+
|
|
27
|
+
### Full Example
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
export default {
|
|
31
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
32
|
+
const start = Date.now()
|
|
33
|
+
const url = new URL(request.url)
|
|
34
|
+
try {
|
|
35
|
+
const response = await handleRequest(request)
|
|
36
|
+
env.ANALYTICS.writeDataPoint({
|
|
37
|
+
blobs: [url.pathname, request.method, response.status.toString()],
|
|
38
|
+
doubles: [Date.now() - start, 1],
|
|
39
|
+
indexes: [request.headers.get('x-api-key') || 'anonymous'],
|
|
40
|
+
})
|
|
41
|
+
return response
|
|
42
|
+
} catch (error) {
|
|
43
|
+
env.ANALYTICS.writeDataPoint({
|
|
44
|
+
blobs: [url.pathname, request.method, '500'],
|
|
45
|
+
doubles: [Date.now() - start, 1, 0],
|
|
46
|
+
})
|
|
47
|
+
throw error
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## SQL API (External Only)
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql \
|
|
57
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
58
|
+
-d "SELECT blob1 AS endpoint, COUNT(*) AS requests FROM dataset WHERE timestamp >= NOW() - INTERVAL '1' HOUR GROUP BY blob1"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Column References
|
|
62
|
+
|
|
63
|
+
```sql
|
|
64
|
+
-- blob1..blob20, double1..double20, index1, timestamp
|
|
65
|
+
SELECT blob1 AS endpoint, SUM(double1) AS latency, COUNT(*) AS requests
|
|
66
|
+
FROM my_dataset
|
|
67
|
+
WHERE index1 = 'customer_123' AND timestamp >= NOW() - INTERVAL '7' DAY
|
|
68
|
+
GROUP BY blob1
|
|
69
|
+
HAVING COUNT(*) > 100
|
|
70
|
+
ORDER BY requests DESC LIMIT 100
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Aggregations:** `SUM()`, `AVG()`, `COUNT()`, `MIN()`, `MAX()`, `quantile(0.95)()`
|
|
74
|
+
|
|
75
|
+
**Time ranges:** `NOW() - INTERVAL '1' HOUR`, `BETWEEN '2026-01-01' AND '2026-01-31'`
|
|
76
|
+
|
|
77
|
+
### Query Examples
|
|
78
|
+
|
|
79
|
+
```sql
|
|
80
|
+
-- Top endpoints
|
|
81
|
+
SELECT blob1, COUNT(*) AS requests, AVG(double1) AS avg_latency
|
|
82
|
+
FROM api_requests WHERE timestamp >= NOW() - INTERVAL '24' HOUR
|
|
83
|
+
GROUP BY blob1 ORDER BY requests DESC LIMIT 20
|
|
84
|
+
|
|
85
|
+
-- Error rate
|
|
86
|
+
SELECT blob1, COUNT(*) AS total,
|
|
87
|
+
SUM(CASE WHEN blob3 LIKE '5%' THEN 1 ELSE 0 END) AS errors
|
|
88
|
+
FROM api_requests WHERE timestamp >= NOW() - INTERVAL '1' HOUR
|
|
89
|
+
GROUP BY blob1 HAVING total > 50
|
|
90
|
+
|
|
91
|
+
-- P95 latency
|
|
92
|
+
SELECT blob1, quantile(0.95)(double1) AS p95
|
|
93
|
+
FROM api_requests GROUP BY blob1
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Response Format
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{ "data": [{ "endpoint": "/api/users", "requests": 1523 }], "rows": 2 }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Limits
|
|
103
|
+
|
|
104
|
+
| Resource | Limit |
|
|
105
|
+
| ----------------------- | ------- |
|
|
106
|
+
| Blobs/Doubles per point | 20 each |
|
|
107
|
+
| Indexes per point | 1 |
|
|
108
|
+
| Blob/Index size | 16KB |
|
|
109
|
+
| Data retention | 90 days |
|
|
110
|
+
| Query timeout | 30s |
|
|
111
|
+
|
|
112
|
+
**Critical:** High write volumes (>1M/min) trigger automatic sampling.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Analytics Engine Configuration
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
1. Add binding to `wrangler.jsonc`
|
|
6
|
+
2. Deploy Worker
|
|
7
|
+
3. Dataset created automatically on first write
|
|
8
|
+
4. Query via SQL API
|
|
9
|
+
|
|
10
|
+
## wrangler.jsonc
|
|
11
|
+
|
|
12
|
+
```jsonc
|
|
13
|
+
{
|
|
14
|
+
"name": "my-worker",
|
|
15
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS", "dataset": "my_events" }],
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Multiple datasets for separate concerns:
|
|
20
|
+
|
|
21
|
+
```jsonc
|
|
22
|
+
{
|
|
23
|
+
"analytics_engine_datasets": [
|
|
24
|
+
{ "binding": "API_ANALYTICS", "dataset": "api_requests" },
|
|
25
|
+
{ "binding": "USER_EVENTS", "dataset": "user_activity" },
|
|
26
|
+
],
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## TypeScript
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
interface Env {
|
|
34
|
+
ANALYTICS: AnalyticsEngineDataset
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export default {
|
|
38
|
+
async fetch(request: Request, env: Env) {
|
|
39
|
+
// No await - returns void, fire-and-forget
|
|
40
|
+
env.ANALYTICS.writeDataPoint({
|
|
41
|
+
blobs: [pathname, method, status], // String dimensions (max 20)
|
|
42
|
+
doubles: [latency, 1], // Numeric metrics (max 20)
|
|
43
|
+
indexes: [apiKey], // High-cardinality filter (max 1)
|
|
44
|
+
})
|
|
45
|
+
return response
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Data Point Limits
|
|
51
|
+
|
|
52
|
+
| Field | Limit | SQL Access |
|
|
53
|
+
| ------- | --------------------- | ---------------------- |
|
|
54
|
+
| blobs | 20 strings, 16KB each | `blob1`...`blob20` |
|
|
55
|
+
| doubles | 20 numbers | `double1`...`double20` |
|
|
56
|
+
| indexes | 1 string, 16KB | `index1` |
|
|
57
|
+
|
|
58
|
+
## Write Behavior
|
|
59
|
+
|
|
60
|
+
| Scenario | Behavior |
|
|
61
|
+
| -------------- | -------------------------------- |
|
|
62
|
+
| <1M writes/min | All accepted |
|
|
63
|
+
| >1M writes/min | Automatic sampling |
|
|
64
|
+
| Invalid data | Silent failure (check tail logs) |
|
|
65
|
+
|
|
66
|
+
**Mitigate sampling:** Pre-aggregate, use multiple datasets, write only critical metrics.
|
|
67
|
+
|
|
68
|
+
## Query Limits
|
|
69
|
+
|
|
70
|
+
| Resource | Limit |
|
|
71
|
+
| -------------- | ----------------- |
|
|
72
|
+
| Query timeout | 30 seconds |
|
|
73
|
+
| Data retention | 90 days (default) |
|
|
74
|
+
| Result size | ~10MB |
|
|
75
|
+
|
|
76
|
+
## Cost
|
|
77
|
+
|
|
78
|
+
**Free tier:** 10M writes/month, 1M reads/month
|
|
79
|
+
|
|
80
|
+
**Paid:** $0.05 per 1M writes, $1.00 per 1M reads
|
|
81
|
+
|
|
82
|
+
## Environment-Specific
|
|
83
|
+
|
|
84
|
+
```jsonc
|
|
85
|
+
{
|
|
86
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS", "dataset": "prod_events" }],
|
|
87
|
+
"env": {
|
|
88
|
+
"staging": {
|
|
89
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS", "dataset": "staging_events" }],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Monitoring
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npx wrangler tail # Check for sampling/write errors
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```sql
|
|
102
|
+
-- Check write activity
|
|
103
|
+
SELECT DATE_TRUNC('hour', timestamp) AS hour, COUNT(*) AS writes
|
|
104
|
+
FROM my_dataset
|
|
105
|
+
WHERE timestamp >= NOW() - INTERVAL '24' HOUR
|
|
106
|
+
GROUP BY hour
|
|
107
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Analytics Engine Gotchas
|
|
2
|
+
|
|
3
|
+
## Critical Issues
|
|
4
|
+
|
|
5
|
+
### Sampling at High Volumes
|
|
6
|
+
|
|
7
|
+
**Problem:** Queries return fewer points than written at >1M writes/min.
|
|
8
|
+
|
|
9
|
+
**Solution:**
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// Pre-aggregate before writing
|
|
13
|
+
let buffer = { count: 0, total: 0 }
|
|
14
|
+
buffer.count++
|
|
15
|
+
buffer.total += value
|
|
16
|
+
|
|
17
|
+
// Write once per second instead of per request
|
|
18
|
+
if (Date.now() % 1000 === 0) {
|
|
19
|
+
env.ANALYTICS.writeDataPoint({ doubles: [buffer.count, buffer.total] })
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Detection:** `npx wrangler tail` → look for "sampling enabled"
|
|
24
|
+
|
|
25
|
+
### writeDataPoint Returns void
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// ❌ Pointless await
|
|
29
|
+
await env.ANALYTICS.writeDataPoint({...});
|
|
30
|
+
|
|
31
|
+
// ✅ Fire-and-forget
|
|
32
|
+
env.ANALYTICS.writeDataPoint({...});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Writes can fail silently. Check tail logs.
|
|
36
|
+
|
|
37
|
+
### Index vs Blob
|
|
38
|
+
|
|
39
|
+
| Cardinality | Use | Example |
|
|
40
|
+
| ----------- | --------- | ------------------------------ |
|
|
41
|
+
| Millions | **Index** | user_id, api_key |
|
|
42
|
+
| Hundreds | **Blob** | endpoint, status_code, country |
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// ✅ Correct
|
|
46
|
+
{ blobs: [method, path, status], indexes: [userId] }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Can't Query from Workers
|
|
50
|
+
|
|
51
|
+
Query API requires HTTP auth. Use external service or cache in KV/D1.
|
|
52
|
+
|
|
53
|
+
### No Custom Timestamps
|
|
54
|
+
|
|
55
|
+
Auto-generated at write time. Store original in blob if needed.
|
|
56
|
+
|
|
57
|
+
## Common Errors
|
|
58
|
+
|
|
59
|
+
| Error | Fix |
|
|
60
|
+
| ----------------- | ---------------------------------------------- |
|
|
61
|
+
| Binding not found | Check wrangler.jsonc, redeploy |
|
|
62
|
+
| No data in query | Wait 30s; check dataset name; check time range |
|
|
63
|
+
| Query timeout | Add time filter; use index for filtering |
|
|
64
|
+
|
|
65
|
+
## Limits
|
|
66
|
+
|
|
67
|
+
| Resource | Limit |
|
|
68
|
+
| ------------------------ | ------- |
|
|
69
|
+
| Blobs per point | 20 |
|
|
70
|
+
| Doubles per point | 20 |
|
|
71
|
+
| Indexes per point | 1 |
|
|
72
|
+
| Blob/Index size | 16KB |
|
|
73
|
+
| Write rate (no sampling) | ~1M/min |
|
|
74
|
+
| Retention | 90 days |
|
|
75
|
+
| Query timeout | 30s |
|
|
76
|
+
|
|
77
|
+
## Best Practices
|
|
78
|
+
|
|
79
|
+
✅ Pre-aggregate at high volumes
|
|
80
|
+
✅ Use index for high-cardinality (millions)
|
|
81
|
+
✅ Always include time filter in queries
|
|
82
|
+
✅ Design schema before coding
|
|
83
|
+
|
|
84
|
+
❌ Don't await writeDataPoint
|
|
85
|
+
❌ Don't use index for low-cardinality
|
|
86
|
+
❌ Don't query without time range
|
|
87
|
+
❌ Don't assume all writes succeed
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Analytics Engine Patterns
|
|
2
|
+
|
|
3
|
+
## Use Cases
|
|
4
|
+
|
|
5
|
+
| Use Case | Key Metrics | Index On |
|
|
6
|
+
| -------------- | ------------------------------ | ----------- |
|
|
7
|
+
| API Metering | requests, bytes, compute_units | api_key |
|
|
8
|
+
| Feature Usage | feature, action, duration | user_id |
|
|
9
|
+
| Error Tracking | error_type, endpoint, count | customer_id |
|
|
10
|
+
| Performance | latency_ms, cache_status | endpoint |
|
|
11
|
+
| A/B Testing | variant, conversions | user_id |
|
|
12
|
+
|
|
13
|
+
## API Metering (Billing)
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
env.ANALYTICS.writeDataPoint({
|
|
17
|
+
blobs: [pathname, method, status, tier],
|
|
18
|
+
doubles: [1, computeUnits, bytes, latencyMs],
|
|
19
|
+
indexes: [apiKey],
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
// Query: Monthly usage by customer
|
|
23
|
+
// SELECT index1 AS api_key, SUM(double2) AS compute_units
|
|
24
|
+
// FROM usage WHERE timestamp >= DATE_TRUNC('month', NOW()) GROUP BY index1
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Error Tracking
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
env.ANALYTICS.writeDataPoint({
|
|
31
|
+
blobs: [endpoint, method, errorName, errorMessage.slice(0, 1000)],
|
|
32
|
+
doubles: [1, timeToErrorMs],
|
|
33
|
+
indexes: [customerId],
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Performance Monitoring
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
env.ANALYTICS.writeDataPoint({
|
|
41
|
+
blobs: [pathname, method, cacheStatus, status],
|
|
42
|
+
doubles: [latencyMs, 1],
|
|
43
|
+
indexes: [userId],
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
// Query: P95 latency by endpoint
|
|
47
|
+
// SELECT blob1, quantile(0.95)(double1) AS p95_ms FROM perf GROUP BY blob1
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Anti-Patterns
|
|
51
|
+
|
|
52
|
+
| ❌ Wrong | ✅ Correct |
|
|
53
|
+
| ------------------------------------- | -------------------------------------- |
|
|
54
|
+
| `await writeDataPoint()` | `writeDataPoint()` (fire-and-forget) |
|
|
55
|
+
| `indexes: [method]` (low cardinality) | `blobs: [method]`, `indexes: [userId]` |
|
|
56
|
+
| `blobs: [JSON.stringify(obj)]` | Store ID in blob, full object in D1/KV |
|
|
57
|
+
| Write every request at 10M/min | Pre-aggregate per second |
|
|
58
|
+
| Query from Worker | Query from external service/API |
|
|
59
|
+
|
|
60
|
+
## Best Practices
|
|
61
|
+
|
|
62
|
+
1. **Design schema upfront** - Document blob/double/index assignments
|
|
63
|
+
2. **Always include count metric** - `doubles: [latency, 1]` for AVG calculations
|
|
64
|
+
3. **Use enums for blobs** - Consistent values like `Status.SUCCESS`
|
|
65
|
+
4. **Handle sampling** - Use ratios (avg_latency = SUM(latency)/SUM(count))
|
|
66
|
+
5. **Test queries early** - Validate schema before heavy writes
|
|
67
|
+
|
|
68
|
+
## Schema Template
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
/**
|
|
72
|
+
* Dataset: my_metrics
|
|
73
|
+
*
|
|
74
|
+
* Blobs:
|
|
75
|
+
* blob1: endpoint, blob2: method, blob3: status
|
|
76
|
+
*
|
|
77
|
+
* Doubles:
|
|
78
|
+
* double1: latency_ms, double2: count (always 1)
|
|
79
|
+
*
|
|
80
|
+
* Indexes:
|
|
81
|
+
* index1: customer_id (high cardinality)
|
|
82
|
+
*/
|
|
83
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Cloudflare API Integration
|
|
2
|
+
|
|
3
|
+
Guide for working with Cloudflare's REST API - authentication, SDK usage, common patterns, and troubleshooting.
|
|
4
|
+
|
|
5
|
+
## Quick Decision Tree
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
How are you calling the Cloudflare API?
|
|
9
|
+
├─ From Workers runtime → Use bindings, not REST API (see ../bindings/)
|
|
10
|
+
├─ Server-side (Node/Python/Go) → Official SDK (see api.md)
|
|
11
|
+
├─ CLI/scripts → Wrangler or curl (see configuration.md)
|
|
12
|
+
├─ Infrastructure-as-code → See ../pulumi/ or ../terraform/
|
|
13
|
+
└─ One-off requests → curl examples (see api.md)
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## SDK Selection
|
|
17
|
+
|
|
18
|
+
| Language | Package | Best For | Default Retries |
|
|
19
|
+
| ---------- | ------------------ | ------------------------------ | --------------- |
|
|
20
|
+
| TypeScript | `cloudflare` | Node.js, Bun, Next.js, Workers | 2 |
|
|
21
|
+
| Python | `cloudflare` | FastAPI, Django, scripts | 2 |
|
|
22
|
+
| Go | `cloudflare-go/v4` | CLI tools, microservices | 10 |
|
|
23
|
+
|
|
24
|
+
All SDKs are Stainless-generated from OpenAPI spec (consistent APIs).
|
|
25
|
+
|
|
26
|
+
## Authentication Methods
|
|
27
|
+
|
|
28
|
+
| Method | Security | Use Case | Scope |
|
|
29
|
+
| ---------------- | ------------------- | -------------------- | ------------------- |
|
|
30
|
+
| **API Token** ✓ | Scoped, rotatable | Production | Per-zone or account |
|
|
31
|
+
| API Key + Email | Full account access | Legacy only | Everything |
|
|
32
|
+
| User Service Key | Limited | Origin CA certs only | Origin CA |
|
|
33
|
+
|
|
34
|
+
**Always use API tokens** for new projects.
|
|
35
|
+
|
|
36
|
+
## Rate Limits
|
|
37
|
+
|
|
38
|
+
| Limit | Value |
|
|
39
|
+
| -------------- | ---------------------------- |
|
|
40
|
+
| Per user/token | 1200 requests / 5 minutes |
|
|
41
|
+
| Per IP | 200 requests / second |
|
|
42
|
+
| GraphQL | 320 / 5 minutes (cost-based) |
|
|
43
|
+
|
|
44
|
+
## Reading Order
|
|
45
|
+
|
|
46
|
+
| Task | Files to Read |
|
|
47
|
+
| ---------------------------- | --------------------------------- |
|
|
48
|
+
| Initialize SDK client | api.md |
|
|
49
|
+
| Configure auth/timeout/retry | configuration.md |
|
|
50
|
+
| Find usage patterns | patterns.md |
|
|
51
|
+
| Debug errors/rate limits | gotchas.md |
|
|
52
|
+
| Product-specific APIs | ../workers/, ../r2/, ../kv/, etc. |
|
|
53
|
+
|
|
54
|
+
## In This Reference
|
|
55
|
+
|
|
56
|
+
- **[api.md](api.md)** - SDK client initialization, pagination, error handling, examples
|
|
57
|
+
- **[configuration.md](configuration.md)** - Environment variables, SDK config, Wrangler setup
|
|
58
|
+
- **[patterns.md](patterns.md)** - Real-world patterns, batch operations, workflows
|
|
59
|
+
- **[gotchas.md](gotchas.md)** - Rate limits, SDK-specific issues, troubleshooting
|
|
60
|
+
|
|
61
|
+
## See Also
|
|
62
|
+
|
|
63
|
+
- [Cloudflare API Docs](https://developers.cloudflare.com/api/)
|
|
64
|
+
- [Bindings Reference](../bindings/) - Workers runtime bindings (preferred over REST API)
|
|
65
|
+
- [Wrangler Reference](../wrangler/) - CLI tool for Cloudflare development
|
|
66
|
+
- [GraphQL Analytics API Reference](../graphql-api/) - Analytics data via GraphQL (separate endpoint from REST API)
|