{"_id":"@d3-inc/d3-edge-cloudflare-adapter","_rev":"6-28be32f3660feddda87f951d397441de","name":"@d3-inc/d3-edge-cloudflare-adapter","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@d3-inc/d3-edge-cloudflare-adapter","version":"0.1.0","license":"Apache-2.0","_id":"@d3-inc/d3-edge-cloudflare-adapter@0.1.0","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"homepage":"https://github.com/d3-inc/d3-edge#readme","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"cc102abafe3047817c4cb221b31bd6e978ae84a0","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.1.0.tgz","fileCount":6,"integrity":"sha512-68rhyCjOdn25igyc8EIudsifyRIwVcTIr82qcWor9dAW7vURCasZOMQnHhq+YwEep5d9BsMgaDsNWSE1QOrQBw==","signatures":[{"sig":"MEYCIQD9QjJoCHxEjK/JS1APLVm8bfX2e3JRixYLKRubpgMLUgIhAOJfGr+1TwtazlJ6Yuj4AfrEkgZ9MD/m3V+sOwQMCc/g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31759},"main":"./dist/index.js","type":"module","_from":"file:d3-inc-d3-edge-cloudflare-adapter-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit"},"_npmUser":{"name":"d3inc","email":"devops@d3.email"},"_resolved":"/private/var/folders/bp/gbf6vn4d1hl587kp536wrpbm0000gn/T/e917e59d2c1038de8a4605394e8f03a0/d3-inc-d3-edge-cloudflare-adapter-0.1.0.tgz","_integrity":"sha512-68rhyCjOdn25igyc8EIudsifyRIwVcTIr82qcWor9dAW7vURCasZOMQnHhq+YwEep5d9BsMgaDsNWSE1QOrQBw==","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.12.1","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@d3-inc/d3-edge-core":"0.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.0","wrangler":"^4.118.0","typescript":"^5.9.3","@cloudflare/workers-types":"^5.20260731.1","@cloudflare/vitest-pool-workers":"^0.20.1"},"_npmOperationalInternal":{"tmp":"tmp/d3-edge-cloudflare-adapter_0.1.0_1785796767438_0.052421970898540504","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@d3-inc/d3-edge-cloudflare-adapter","version":"0.1.1","license":"Apache-2.0","_id":"@d3-inc/d3-edge-cloudflare-adapter@0.1.1","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"homepage":"https://github.com/d3-inc/d3-edge#readme","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"cd7df4bbc3f63973c44c3b5b05963f40908ee130","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.1.1.tgz","fileCount":6,"integrity":"sha512-kQi1an4rtD6mSx/kP7ysAIC343B8uU458Jbp+0yOEP/sfduvoOUOdWl2be2iuT0hhSTDJDCLN2z2ss+gpBtIBA==","signatures":[{"sig":"MEUCIQD2KlmZH/y9UwyCvSrRDX+knkJTqED+3XEFF60UB99nhAIgY6WNXhc/UZg2ryDPQL1yorQMMU0ZMweiYPg52t3UsFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32008},"main":"./dist/index.js","type":"module","_from":"file:d3-inc-d3-edge-cloudflare-adapter-0.1.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit"},"_npmUser":{"name":"d3inc","email":"devops@d3.email"},"_resolved":"/private/var/folders/bp/gbf6vn4d1hl587kp536wrpbm0000gn/T/f143155c5640e3a79b44fae67b77012a/d3-inc-d3-edge-cloudflare-adapter-0.1.1.tgz","_integrity":"sha512-kQi1an4rtD6mSx/kP7ysAIC343B8uU458Jbp+0yOEP/sfduvoOUOdWl2be2iuT0hhSTDJDCLN2z2ss+gpBtIBA==","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.12.1","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@d3-inc/d3-edge-core":"0.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.0","wrangler":"^4.118.0","typescript":"^6.0.3","@cloudflare/workers-types":"^5.20260731.1","@cloudflare/vitest-pool-workers":"^0.20.1"},"_npmOperationalInternal":{"tmp":"tmp/d3-edge-cloudflare-adapter_0.1.1_1785820113901_0.785120179094206","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@d3-inc/d3-edge-cloudflare-adapter","version":"0.2.0","license":"Apache-2.0","_id":"@d3-inc/d3-edge-cloudflare-adapter@0.2.0","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"homepage":"https://github.com/d3-inc/d3-edge#readme","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"f7761a230aafccf9837af7d16bb93fc8e199b680","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.2.0.tgz","fileCount":6,"integrity":"sha512-e1QQ3XMpzPdra83CKvguUQT386DFsayIBqd7lCTHGMprQgraAWYGyyCPMEMoiJRWj7Pk4RZNtFc1eVR96Z9G8A==","signatures":[{"sig":"MEUCIQD+sE9xBugYhTC//GSPfQvxxeFCztnEiYoes6EL+H6ImAIgGZnCJgh0a0VIA9J026uUjepS5Pd8TSwPaD4t9v8UjpQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35542},"main":"./dist/index.js","type":"module","_from":"file:d3-inc-d3-edge-cloudflare-adapter-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit"},"_npmUser":{"name":"d3inc","email":"devops@d3.email"},"_resolved":"/private/var/folders/bp/gbf6vn4d1hl587kp536wrpbm0000gn/T/009ab73f33dbaa18bc590e09a9063128/d3-inc-d3-edge-cloudflare-adapter-0.2.0.tgz","_integrity":"sha512-e1QQ3XMpzPdra83CKvguUQT386DFsayIBqd7lCTHGMprQgraAWYGyyCPMEMoiJRWj7Pk4RZNtFc1eVR96Z9G8A==","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.12.1","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@d3-inc/d3-edge-core":"0.1.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.0","wrangler":"^4.118.0","typescript":"^6.0.3","@cloudflare/workers-types":"^5.20260731.1","@cloudflare/vitest-pool-workers":"^0.20.1"},"_npmOperationalInternal":{"tmp":"tmp/d3-edge-cloudflare-adapter_0.2.0_1785869679405_0.822678588843976","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@d3-inc/d3-edge-cloudflare-adapter","version":"0.3.0","license":"Apache-2.0","_id":"@d3-inc/d3-edge-cloudflare-adapter@0.3.0","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"homepage":"https://github.com/d3-inc/d3-edge#readme","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"c102676197d9350fd4f5ad2d0dc49cf66546ddd3","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.3.0.tgz","fileCount":6,"integrity":"sha512-37CGUsCm9sYCJLosBHsCwuo0lLjGoAkpiggPNwFeCYp4oZ+xl3sRxr7XNxs2/nHOjF5BxQ5YkH5855siaDaUAg==","signatures":[{"sig":"MEYCIQDYPIDyUHl/UMit2mCcjbWlm4z1OUx13x/PehXrqhv4pQIhAM4dw8Cohqz8Ha/faxdHBdmF3lfdO2g/REM/M6QJ6pBT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44567},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"f1b6bdd1554449aef0f34dd115df3df0afe7acd6","scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit","prepublishOnly":"tsup"},"_npmUser":{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},"repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.13.0","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"_nodeVersion":"26.2.0","dependencies":{"@d3-inc/d3-edge-core":"workspace:*"},"publishConfig":{"main":"./dist/index.js","types":"./dist/index.d.ts","access":"public","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"catalog:","vitest":"catalog:","wrangler":"catalog:","typescript":"catalog:","@cloudflare/workers-types":"catalog:","@cloudflare/vitest-pool-workers":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/d3-edge-cloudflare-adapter_0.3.0_1789550883764_0.9299910656675621","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@d3-inc/d3-edge-cloudflare-adapter","version":"0.3.1","license":"Apache-2.0","_id":"@d3-inc/d3-edge-cloudflare-adapter@0.3.1","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"homepage":"https://github.com/d3-inc/d3-edge#readme","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"016564f067df65bd7e5bdb8b5fb283f7ba4fcff1","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.3.1.tgz","fileCount":6,"integrity":"sha512-w9KDS6zYpg9wwTtSrXrC37uxIGaVwWfp+fEvrIZaZVBcdXnl+blp2NFNTe19+iQ7ZxipUvF5I4Y2vz2nnHd7BQ==","signatures":[{"sig":"MEYCIQDf+yMLh+618KiJW6Ae1L5m5f+bpHbcmfv/5AjXWhMhSQIhANPdk7oXIXd2mrImBZWFcrZvEbQO2Y35K3NmW9oN5GtM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44408},"main":"./dist/index.js","type":"module","_from":"file:d3-inc-d3-edge-cloudflare-adapter-0.3.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit"},"_npmUser":{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},"_resolved":"C:\\Users\\YEVHEN~1.AND\\AppData\\Local\\Temp\\68f825e853a73ac65f3cc21204dde79d\\d3-inc-d3-edge-cloudflare-adapter-0.3.1.tgz","_integrity":"sha512-w9KDS6zYpg9wwTtSrXrC37uxIGaVwWfp+fEvrIZaZVBcdXnl+blp2NFNTe19+iQ7ZxipUvF5I4Y2vz2nnHd7BQ==","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.13.0","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"_nodeVersion":"26.2.0","dependencies":{"@d3-inc/d3-edge-core":"0.2.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.0","wrangler":"^4.120.1","typescript":"^6.0.3","@cloudflare/workers-types":"^5.20260804.1","@cloudflare/vitest-pool-workers":"^0.20.3"},"_npmOperationalInternal":{"tmp":"tmp/d3-edge-cloudflare-adapter_0.3.1_1789551099201_0.6119410166279464","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"_id":"@d3-inc/d3-edge-cloudflare-adapter@0.3.2","bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"dist":{"shasum":"ae72ff7e37a26f3b238f382a8dd27a316ebc8015","tarball":"https://registry.npmjs.org/@d3-inc/d3-edge-cloudflare-adapter/-/d3-edge-cloudflare-adapter-0.3.2.tgz","fileCount":6,"integrity":"sha512-OJN9fipKWhNcIfq7mcGkoQ8nITEIEfq60D9Aqp9VAsnR6IyeeyVOylisfKzs9lZnR9/t1SUNQ79zqqcYcwdxQw==","signatures":[{"sig":"MEUCIQCYKZ0gKwXW2cPDRW1FLqXb+AnaDnciKYvrbNjupP5wKQIgPtosuhVvh7rydAVQQ9iB3RJLb8p73FIqNM5/d74ajto=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCcfQ6gwkCp8OnAPlqMjhHwu7AvO30VIx90sLR1h3dmoQIhAKjW+Xf9HaFnyDtEJyZfq5ae0PSs4MEfC+vK+3FvVE9w"}],"unpackedSize":44421},"main":"./dist/index.js","name":"@d3-inc/d3-edge-cloudflare-adapter","type":"module","_from":"file:d3-inc-d3-edge-cloudflare-adapter-0.3.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"license":"Apache-2.0","scripts":{"dev":"wrangler dev","test":"vitest run","build":"tsup","deploy":"wrangler deploy","typecheck":"tsc --noEmit"},"version":"0.3.2","_npmUser":{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},"homepage":"https://github.com/d3-inc/d3-edge#readme","_resolved":"C:\\Users\\YEVHEN~1.AND\\AppData\\Local\\Temp\\3950c2b7b66291efdddf7e4b7ac6b461\\d3-inc-d3-edge-cloudflare-adapter-0.3.2.tgz","_integrity":"sha512-OJN9fipKWhNcIfq7mcGkoQ8nITEIEfq60D9Aqp9VAsnR6IyeeyVOylisfKzs9lZnR9/t1SUNQ79zqqcYcwdxQw==","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"_npmVersion":"11.13.0","description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","directories":{},"maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"_nodeVersion":"26.2.0","dependencies":{"@d3-inc/d3-edge-core":"0.2.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^4.1.0","wrangler":"^4.120.1","typescript":"^6.0.3","@cloudflare/workers-types":"^5.20260804.1","@cloudflare/vitest-pool-workers":"^0.20.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/d3-edge-cloudflare-adapter_0.3.2_1789992981905_0.7962142302600372"}}},"time":{"created":"2026-08-03T22:39:27.295Z","modified":"2026-09-21T12:16:22.173Z","0.1.0":"2026-08-03T22:39:27.607Z","0.1.1":"2026-08-04T05:08:34.069Z","0.2.0":"2026-08-04T18:54:39.604Z","0.3.0":"2026-09-16T09:28:03.898Z","0.3.1":"2026-09-16T09:31:39.345Z","0.3.2":"2026-09-21T12:16:21.977Z"},"bugs":{"url":"https://github.com/d3-inc/d3-edge/issues"},"license":"Apache-2.0","homepage":"https://github.com/d3-inc/d3-edge#readme","repository":{"url":"git+https://github.com/d3-inc/d3-edge.git","type":"git","directory":"packages/adapters/cloudflare-adapter"},"description":"Cloudflare Worker adapter for D3 Edge bot-auth enforcement, deployed in front of the protected site: extract → policy decision → enforce, fail-open.","maintainers":[{"name":"junaid.faryad","email":"junaid@d3.email"},{"name":"kaid3","email":"kai@d3.email"},{"name":"d3inc","email":"devops@d3.email"},{"name":"d3_yevhenii_andrushchak","email":"yevhenii@d3.com"},{"name":"renato.atd.3","email":"renato@d3.email"}],"readme":"# @d3-inc/d3-edge-cloudflare-adapter\n\nCloudflare Worker adapter for [D3 Edge](https://ai.d3.com) bot-auth\nenforcement. In front of your site, it extracts the signature\nheaders, user agent, and IP from each request, asks your D3 Edge policy\nendpoint for a decision, enforces it, and forwards allowed traffic to your\norigin — failing open if the policy call errors or times out, so an outage\nnever takes down your site.\n\n## Install\n\n```sh\nnpm i @d3-inc/d3-edge-cloudflare-adapter\n```\n\n## Usage — your site is already a Worker\n\nWrap your existing handler. One line, no second worker, no route changes:\n\n```ts\n// src/index.ts\nimport { withD3Edge } from '@d3-inc/d3-edge-cloudflare-adapter';\n\nexport default withD3Edge({\n  async fetch(request, env, ctx) {\n    // your existing worker, unchanged\n  },\n});\n```\n\nBlocked requests get a `403` before your `fetch` runs; everything else\nreaches it as before. Non-fetch handlers (`scheduled`, `queue`, …) pass\nthrough untouched. Add the config to your existing `wrangler.toml` —\n`ORIGIN`/`ORIGIN_URL` are not needed, the wrapped handler is the origin:\n\n```toml\n[vars]\nPOLICY_WORKER_URL = \"https://edge-api.d3.com/v1/decision\"\n```\n\n## Usage — external origin\n\nOrigin not on Workers (nginx, a VPS, another cloud)? The\n[Deploy to Cloudflare button](https://ai.d3.com/docs/sdks/cloudflare#the-deploy-button)\nsets this shape up from the browser, no code. By hand, deploy the adapter\nas a standalone worker on a zone route:\n\n```ts\n// src/index.ts\nimport worker from '@d3-inc/d3-edge-cloudflare-adapter';\n\nexport default worker;\n```\n\n```toml\n# wrangler.toml\nname = \"my-site-d3-edge\"\nmain = \"src/index.ts\"\ncompatibility_date = \"2025-06-01\"\n\n# Zone route: your DNS record stays as-is; pass-traffic flows to your origin.\nroutes = [{ pattern = \"www.example.com/*\", zone_name = \"example.com\" }]\n\n[vars]\nPOLICY_WORKER_URL = \"https://edge-api.d3.com/v1/decision\"\nPOLICY_TIMEOUT_MS = \"500\"\nFAIL_MODE = \"open\"\n```\n\nOrigin a Worker you can't edit, or a Pages project? Attach the standalone\nworker with `custom_domain = true` and an `ORIGIN` service binding instead —\na custom domain replaces the hostname's DNS record, so it always needs\n`ORIGIN` (or `ORIGIN_URL`) to reach the origin. The\n[docs](https://ai.d3.com/docs/sdks/cloudflare) cover every shape.\n\nWith either shape, set your org's adapter key (from your D3 Edge\ndashboard's install page) as a secret:\n\n```sh\nnpx wrangler secret put POLICY_ADAPTER_KEY\n```\n\nLeave `POLICY_WORKER_URL` unset for pure passthrough (no enforcement, no\nreporting) — useful for staging the rollout. The exported `Env` type documents\nevery variable.\n\nOur own deployment in front of delegated zones is `wrangler.fleet.toml`: no\nroute, no origin, no URL and no key — a `POLICY_WORKER` service binding to the\npolicy worker's `Fleet` entrypoint is both the address and the credential\n(ADR 0029, docs/fleet-adapter.md). Customers never run that shape.\n\n## Usage — no Worker at all: a Snippet\n\nOn a paid Cloudflare plan you can paste a single-file\n[Snippet](https://ai.d3.com/docs/sdks/cloudflare#paste-a-snippet) into your\nzone instead of deploying a Worker — same enforcement, no npm install (the\nfile can't import this package; Snippets have no dependencies). The pasteable\nfile lives in\n[d3-edge-adapters](https://github.com/d3-inc/d3-edge-adapters/tree/main/cloudflare-snippet),\ntested there.\n\n## Docs\n\nFull documentation, including origin binding options and the decision model:\n[ai.d3.com/docs](https://ai.d3.com/docs).\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md"}