{"_id":"@agenticprimitives/rate-control","_rev":"4-b1c34469c8598f54c53ce32c595dd670","name":"@agenticprimitives/rate-control","dist-tags":{"latest":"0.0.0-alpha.4"},"versions":{"0.0.0-alpha.1":{"name":"@agenticprimitives/rate-control","version":"0.0.0-alpha.1","keywords":["agentic","primitives","rate-limit","budget","quota"],"license":"MIT","_id":"@agenticprimitives/rate-control@0.0.0-alpha.1","maintainers":[{"name":"richcanvas","email":"richardpedersen3@gmail.com"}],"homepage":"https://github.com/agentictrustlabs/agenticprimitives/tree/master/packages/rate-control","bugs":{"url":"https://github.com/agentictrustlabs/agenticprimitives/issues"},"dist":{"shasum":"5e6b0018d2b9c7604134041878f1505711d2e8aa","tarball":"https://registry.npmjs.org/@agenticprimitives/rate-control/-/rate-control-0.0.0-alpha.1.tgz","fileCount":20,"integrity":"sha512-j6aYEFa5Muy9u+9qRMj47xJ0i+zb2r3lTmWjwy/lgY66nvKlA5omAhtxhHBvgeNTYeMwY8JHHbpd91748fq1fQ==","signatures":[{"sig":"MEQCIChTp//LbsoVnRpnvSeUAjYuZoj5LXL7hPPMQ6uxRGQAAiBH2IvIL/Sx91Il9R1TRTwkLH8QSjUieHC7xY0MFBDheA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37279},"main":"./dist/index.js","type":"module","_from":"file:agenticprimitives-rate-control-0.0.0-alpha.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","test:unit":"vitest run test/unit --passWithNoTests","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"richcanvas","email":"richardpedersen3@gmail.com"},"_resolved":"/tmp/ed78dcc2ab0b5e05e6160401f50b9c59/agenticprimitives-rate-control-0.0.0-alpha.1.tgz","_integrity":"sha512-j6aYEFa5Muy9u+9qRMj47xJ0i+zb2r3lTmWjwy/lgY66nvKlA5omAhtxhHBvgeNTYeMwY8JHHbpd91748fq1fQ==","repository":{"url":"git+https://github.com/agentictrustlabs/agenticprimitives.git","type":"git","directory":"packages/rate-control"},"_npmVersion":"11.16.0","description":"Vendor-neutral traffic-rate-limit + hard-usage-budget controls: VerifiedAuthorityContext, typed RateControlProfiles, cost units, HMAC-keyed buckets, and SoftRateLimiter/HardBudgetStore/ConcurrencyLimiter interfaces with in-memory reference impls. Cloudfla","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/rate-control_0.0.0-alpha.1_1782902643253_0.4290429335551236","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-alpha.2":{"name":"@agenticprimitives/rate-control","version":"0.0.0-alpha.2","keywords":["agentic","primitives","rate-limit","budget","quota"],"license":"MIT","_id":"@agenticprimitives/rate-control@0.0.0-alpha.2","maintainers":[{"name":"richcanvas","email":"richardpedersen3@gmail.com"}],"homepage":"https://github.com/agentictrustlabs/agenticprimitives/tree/master/packages/rate-control","bugs":{"url":"https://github.com/agentictrustlabs/agenticprimitives/issues"},"dist":{"shasum":"f7f07d565c6a84ca36e4d4ecf3f92f21e5b510b2","tarball":"https://registry.npmjs.org/@agenticprimitives/rate-control/-/rate-control-0.0.0-alpha.2.tgz","fileCount":20,"integrity":"sha512-hyz/YQfzL8CrcCN2elG0S6/EcBS/liIePbem7i5TNOjnIwPKWdWuB6fxuFHOTxNQqRTybLUgd0EsfNIMMkGQYw==","signatures":[{"sig":"MEUCIQCo7aS9lJ4z++x+Vg+5aINPp9RIuQ/HWquF3BV0djP9XQIgafN72ByTc1R0bIxLa5hq7jju/UloNBFy391Jurtf8LU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39556},"main":"./dist/index.js","type":"module","_from":"file:agenticprimitives-rate-control-0.0.0-alpha.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","test:unit":"vitest run test/unit --passWithNoTests","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8ab05dda-2344-4e82-8ab4-7934a43953d7"}},"_resolved":"/tmp/55c9660ffa64f1839540f1aba535f3ed/agenticprimitives-rate-control-0.0.0-alpha.2.tgz","_integrity":"sha512-hyz/YQfzL8CrcCN2elG0S6/EcBS/liIePbem7i5TNOjnIwPKWdWuB6fxuFHOTxNQqRTybLUgd0EsfNIMMkGQYw==","repository":{"url":"git+https://github.com/agentictrustlabs/agenticprimitives.git","type":"git","directory":"packages/rate-control"},"_npmVersion":"11.16.0","description":"Vendor-neutral traffic-rate-limit + hard-usage-budget controls: VerifiedAuthorityContext, typed RateControlProfiles, cost units, HMAC-keyed buckets, and SoftRateLimiter/HardBudgetStore/ConcurrencyLimiter interfaces with in-memory reference impls. Cloudfla","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/rate-control_0.0.0-alpha.2_1785727534214_0.650499807603176","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-alpha.3":{"name":"@agenticprimitives/rate-control","version":"0.0.0-alpha.3","keywords":["agentic","primitives","rate-limit","budget","quota"],"license":"MIT","_id":"@agenticprimitives/rate-control@0.0.0-alpha.3","maintainers":[{"name":"richcanvas","email":"richardpedersen3@gmail.com"}],"homepage":"https://github.com/agentictrustlabs/agenticprimitives/tree/master/packages/rate-control","bugs":{"url":"https://github.com/agentictrustlabs/agenticprimitives/issues"},"dist":{"shasum":"3b863a059e3d9f8dfdbc3232d82315a2af728383","tarball":"https://registry.npmjs.org/@agenticprimitives/rate-control/-/rate-control-0.0.0-alpha.3.tgz","fileCount":20,"integrity":"sha512-olJo0GsnRmiVxtZC/LI9mmWEdFJ7jNJLhW4rc2GC4jnOrDfeoPpz61tEQB2mHfrSsU/iBo838wp9QunpHSsUow==","signatures":[{"sig":"MEYCIQDmewi9us+ZpIhTsL0o9wNEmwwSmeMngYcXIfaYRFXvoQIhANszAHYq3xoZu5t5BQPvqsU1kvm58j8mIOFYei7cjAKm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39556},"main":"./dist/index.js","type":"module","_from":"file:agenticprimitives-rate-control-0.0.0-alpha.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","test:unit":"vitest run test/unit --passWithNoTests","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8ab05dda-2344-4e82-8ab4-7934a43953d7"}},"_resolved":"/tmp/74a34d0a21d9afea369396988af28341/agenticprimitives-rate-control-0.0.0-alpha.3.tgz","_integrity":"sha512-olJo0GsnRmiVxtZC/LI9mmWEdFJ7jNJLhW4rc2GC4jnOrDfeoPpz61tEQB2mHfrSsU/iBo838wp9QunpHSsUow==","repository":{"url":"git+https://github.com/agentictrustlabs/agenticprimitives.git","type":"git","directory":"packages/rate-control"},"_npmVersion":"11.19.0","description":"Vendor-neutral traffic-rate-limit + hard-usage-budget controls: VerifiedAuthorityContext, typed RateControlProfiles, cost units, HMAC-keyed buckets, and SoftRateLimiter/HardBudgetStore/ConcurrencyLimiter interfaces with in-memory reference impls. Cloudfla","directories":{},"_nodeVersion":"24.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8"},"_npmOperationalInternal":{"tmp":"tmp/rate-control_0.0.0-alpha.3_1789164140643_0.7690409288889177","host":"s3://npm-registry-packages-npm-production"}},"0.0.0-alpha.4":{"name":"@agenticprimitives/rate-control","version":"0.0.0-alpha.4","description":"Vendor-neutral traffic-rate-limit + hard-usage-budget controls: VerifiedAuthorityContext, typed RateControlProfiles, cost units, HMAC-keyed buckets, and SoftRateLimiter/HardBudgetStore/ConcurrencyLimiter interfaces with in-memory reference impls. Cloudfla","license":"MIT","repository":{"type":"git","url":"git+https://github.com/agentictrustlabs/agenticprimitives.git","directory":"packages/rate-control"},"homepage":"https://github.com/agentictrustlabs/agenticprimitives/tree/master/packages/rate-control","bugs":{"url":"https://github.com/agentictrustlabs/agenticprimitives/issues"},"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"publishConfig":{"access":"public"},"devDependencies":{"vitest":"^4.1.8"},"keywords":["agentic","primitives","rate-limit","budget","quota"],"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:unit":"vitest run test/unit --passWithNoTests","test:watch":"vitest","clean":"rm -rf dist"},"_id":"@agenticprimitives/rate-control@0.0.0-alpha.4","_integrity":"sha512-w7j3QON0VoO1wNzYSxJ89eWTDZuK3pG4+UQLOci7B29ixmnI9p0CIE50yEk2lxTSpvgnWmKGjcY7p3U00/B52A==","_resolved":"/tmp/f6bcc37dd5952865a6dab036ab517303/agenticprimitives-rate-control-0.0.0-alpha.4.tgz","_from":"file:agenticprimitives-rate-control-0.0.0-alpha.4.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-w7j3QON0VoO1wNzYSxJ89eWTDZuK3pG4+UQLOci7B29ixmnI9p0CIE50yEk2lxTSpvgnWmKGjcY7p3U00/B52A==","shasum":"c43bcbcf3567a09a9727d0656810e8a0a97bd7b0","tarball":"https://registry.npmjs.org/@agenticprimitives/rate-control/-/rate-control-0.0.0-alpha.4.tgz","fileCount":20,"unpackedSize":39556,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHI9lN2JhN7ub3pn9PldTAOqWspWe1wlrL6EzpKQKU2YAiEAgFoJFXAVV9S1/AyH/aUnKY23Av3jrKkna31JD7RvSYk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8ab05dda-2344-4e82-8ab4-7934a43953d7"}},"directories":{},"maintainers":[{"name":"richcanvas","email":"richardpedersen3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rate-control_0.0.0-alpha.4_1789230558031_0.7786391936201651"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-01T10:44:02.848Z","modified":"2026-09-12T16:29:18.302Z","0.0.0-alpha.1":"2026-07-01T10:44:03.383Z","0.0.0-alpha.2":"2026-08-03T03:25:34.347Z","0.0.0-alpha.3":"2026-09-11T22:02:20.771Z","0.0.0-alpha.4":"2026-09-12T16:29:18.163Z"},"bugs":{"url":"https://github.com/agentictrustlabs/agenticprimitives/issues"},"license":"MIT","homepage":"https://github.com/agentictrustlabs/agenticprimitives/tree/master/packages/rate-control","keywords":["agentic","primitives","rate-limit","budget","quota"],"repository":{"type":"git","url":"git+https://github.com/agentictrustlabs/agenticprimitives.git","directory":"packages/rate-control"},"description":"Vendor-neutral traffic-rate-limit + hard-usage-budget controls: VerifiedAuthorityContext, typed RateControlProfiles, cost units, HMAC-keyed buckets, and SoftRateLimiter/HardBudgetStore/ConcurrencyLimiter interfaces with in-memory reference impls. Cloudfla","maintainers":[{"name":"richcanvas","email":"richardpedersen3@gmail.com"}],"readme":"# @agenticprimitives/rate-control\n\nVendor-neutral **traffic-rate-limit** + **hard-usage-budget** controls — the two operational controls\nthat are *separate* from the authority/replay controls (`delegation` `usageLimit` + JTI). Every invocation\nmust satisfy both the authority controls AND the operational limits; a platform limiter never replaces the\nauthority decision, and its rejection never consumes a delegation use.\n\nSee [spec 290](../../specs/290-rate-control-and-usage-accounting.md).\n\n## What's in the box (W1 core)\n\n- **`VerifiedAuthorityContext`** — the trustworthy context emitted by the verify path; every\n  post-verification limiter keys on this, never a *claimed* address.\n- **`QuotaSubject`** — principal / actor / sponsor (they may differ: an Org delegates to a Treasury Agent\n  while the Org pays).\n- **`RateControlProfile`** — typed `attemptLimits` (pre-verification: ip/request-hash/capability) +\n  `verifiedLimits` (post-verification: principal/actor/sponsor/delegation/capability) + `concurrency` +\n  `hardBudget` + `failMode`. This is what `@sa-rate-limit` resolves to.\n- **`InvocationCost` + `costToUnits`** — counts protect throughput; cost units protect RPC/KMS/provider/\n  model spend.\n- **`rateKey`** — HMAC-SHA256 opaque bucket keys, so raw addresses / delegation hashes / entitlement refs\n  never appear in infra logs or dashboards.\n- **Three interfaces** — `SoftRateLimiter`, `HardBudgetStore`, `ConcurrencyLimiter` — with **in-memory\n  reference implementations** (`createMemorySoftRateLimiter` / `createMemoryHardBudgetStore` /\n  `createMemoryConcurrencyLimiter`). The hard-budget store is the reserve/commit/release contract the\n  Cloudflare `SmartAgentBudgetDO` must match.\n\n```ts\nimport {\n  quotaSubjectFromContext, rateKey, costToUnits, createMemoryHardBudgetStore,\n} from '@agenticprimitives/rate-control';\n\nconst subject = quotaSubjectFromContext(verifiedCtx);                 // principal/actor/sponsor\nconst key = await rateKey(SECRET, { environment, chainId, principalAgent: subject.principalAgent, capabilityId });\n\nconst budget = createMemoryHardBudgetStore({ limitUnits: 10_000 });\nconst r = await budget.reserve({ sponsorAgent: subject.sponsorAgent, capabilityId, estimatedUnits: costToUnits({ base: 1, kmsOperations: 1 }), idempotencyKey: requestId });\ntry { /* …execute… */ await budget.commit(r.reservationId!, actualUnits); }\ncatch (e) { await budget.release(r.reservationId!); throw e; }\n```\n\n## Not in the core\n\n- The Cloudflare (Worker rate-limiter + `SmartAgentBudgetDO`), Vercel, and Redis **adapters** — ship as\n  `@agenticprimitives/rate-control-{cloudflare,vercel,redis}` (spec 290 §7–§8). The core imports no vendor\n  SDK.\n- The **Phase-1.5 usage refactor** (delegation/a2a reserve-commit-release of JTI / message-id) — a\n  separate core-auth change.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}