{"_id":"@absolutejs/rate-limit","_rev":"15-f5aa5eac7bd9682d142bb4b49a4423a9","name":"@absolutejs/rate-limit","dist-tags":{"latest":"0.6.1"},"versions":{"0.0.1":{"name":"@absolutejs/rate-limit","version":"0.0.1","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.0.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"9da22a1563064702d9bce9298c89fa434582fb1f","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.0.1.tgz","fileCount":17,"integrity":"sha512-1fxoMp2h9VMUXwKeATML9NSe8dumTF+h8/J70lESFd1XK+DxAIXCwMY0oqOCfJz9a7gsxJTSRlXL+UnltY4hpg==","signatures":[{"sig":"MEYCIQCYe/wyxbwnQfBursTvuToCa4RPsEoFMHgk+mjxS6EaEQIhAKf5PGnwISOuk9dhsbAzgPnuECDcVEPOjCocdltu0x9E","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141106},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"9da22a1563064702d9bce9298c89fa434582fb1f","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"}},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-1fxoMp2h9VMUXwKeATML9NSe8dumTF+h8/J70lESFd1XK+DxAIXCwMY0oqOCfJz9a7gsxJTSRlXL+UnltY4hpg==","repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.0.1_1780087544054_0.4899650850105477","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@absolutejs/rate-limit","version":"0.1.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"523863e4df589c5134ce7f5ea6300a57b88e20a0","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.1.0.tgz","fileCount":18,"integrity":"sha512-cT/h+CAIeLUfppDlHM1R5nfT2WTctokewlXOVZYPS4aT211q23aqenIVIWFJ54+A3vOdt7g8vSAcn914bY9FgA==","signatures":[{"sig":"MEUCIByF9PIr3bcg7U4JNN5qezRX/ezRCCItRPEf9wWdq3fPAiEA8O9V8qtZazX8ZkNrqe5X1e95pazB3vXUI/gAeYyHGH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184640},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"523863e4df589c5134ce7f5ea6300a57b88e20a0","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"}},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-cT/h+CAIeLUfppDlHM1R5nfT2WTctokewlXOVZYPS4aT211q23aqenIVIWFJ54+A3vOdt7g8vSAcn914bY9FgA==","repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.1.0_1780088011698_0.3494566922167963","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/rate-limit","version":"0.2.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.2.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"438582c16a529b66bc443fbcb9e7f88f2a835622","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.2.0.tgz","fileCount":18,"integrity":"sha512-zCQM5mBMgBCw7SpajFW4VFl1FAIgdG+LJZBXmSl3Fz+edfYo949td3GUKNgKP8rGPSgHblpA5rJFvgEsdEOEDg==","signatures":[{"sig":"MEYCIQCrhemerjfv0HMFzlhJYOT5RLX6rbNSZVbCdH6cUr/lAgIhAPFT644P7SpJPz7uDz+vbVxUjiMoGqmVpvNjVZfukeDq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188723},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"438582c16a529b66bc443fbcb9e7f88f2a835622","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"}},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-zCQM5mBMgBCw7SpajFW4VFl1FAIgdG+LJZBXmSl3Fz+edfYo949td3GUKNgKP8rGPSgHblpA5rJFvgEsdEOEDg==","repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.2.0_1780109954874_0.6596408938795402","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@absolutejs/rate-limit","version":"0.3.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.3.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"a6ef7f774da977ad1b5bbd9485b4fe6279cd1e20","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.3.0.tgz","fileCount":18,"integrity":"sha512-3L9kfeU+0cnwcGcC7ljzJj41FkQ6sFWjEpZgsJur+AoJJeWwcZTlIngo/Uw9fmHEJP4LRHBUsUWTEwtAq63Eig==","signatures":[{"sig":"MEUCIQD8KtS5zqJCI2qJVj7jjWBU1sPFSHGNHhxwGQJ9iNYjVwIgTzzwHH5/wNQqakqO+mtP8TyX51394rE/QpM9f2KNz9U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206806},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"a6ef7f774da977ad1b5bbd9485b4fe6279cd1e20","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"}},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-3L9kfeU+0cnwcGcC7ljzJj41FkQ6sFWjEpZgsJur+AoJJeWwcZTlIngo/Uw9fmHEJP4LRHBUsUWTEwtAq63Eig==","repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@absolutejs/telemetry":"^0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3","@absolutejs/telemetry":"^0.0.2"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.3.0_1780169394192_0.908648037975557","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@absolutejs/rate-limit","version":"0.3.1","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.3.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"5d26c54d7d040c88e3029a87a86ffcf52e210ace","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.3.1.tgz","fileCount":22,"integrity":"sha512-PM0s1C1jqd5iknJCYFVQQSsewTvGcpwShpXvUR077iQG5l1q8H3GAjwSW3TLaNTVMhqWiuAFiYBjmBtn2Ur1Pg==","signatures":[{"sig":"MEUCIFIvj5fveYuBeqXWMHqd2D6KTEcMUjKbInKv+gD6dGyCAiEAj0fmhKs8BN9wZY055rffOjO2qNnzf56vqfXEP5OfLPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1317163},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"5d26c54d7d040c88e3029a87a86ffcf52e210ace","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-PM0s1C1jqd5iknJCYFVQQSsewTvGcpwShpXvUR077iQG5l1q8H3GAjwSW3TLaNTVMhqWiuAFiYBjmBtn2Ur1Pg==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3","@absolutejs/telemetry":"^0.0.2"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.3.1_1783964185224_0.015301926458316517","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@absolutejs/rate-limit","version":"0.3.2","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.3.2","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"6021d6297884a37b9af14c766cf6d2855d98f79b","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.3.2.tgz","fileCount":22,"integrity":"sha512-SI8WizEA5wbPZMoaD2F1ku8KoYMHJavGeDk6W4Ny8dxhfentzJHYa0LC3se5USb+wPb3SkZtCxBEBC7X/5j8rA==","signatures":[{"sig":"MEUCIDkun4jqH8aTiPgcHqi+RdyFUjZ3Fja+BBbIQrTg/3uCAiEA+lZ6kwqWVpuEfaKBBMQglm3H9yfdetQ8AgbddC/jk4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1317954},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"6021d6297884a37b9af14c766cf6d2855d98f79b","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-SI8WizEA5wbPZMoaD2F1ku8KoYMHJavGeDk6W4Ny8dxhfentzJHYa0LC3se5USb+wPb3SkZtCxBEBC7X/5j8rA==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.3.2_1784012783839_0.7404416250511046","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@absolutejs/rate-limit","version":"0.4.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.4.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"4a39254dd2d25a05a608ffc549ae8e02ce032890","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.4.0.tgz","fileCount":25,"integrity":"sha512-32V8vMFb4oBpkZ0Ogj0nlwjCx1Lmsq2hKPIP/76O72jorOrEa5sTlptmkoWWASacnl7Hv1clQPNR+nP5coffAg==","signatures":[{"sig":"MEQCIBEpqrFhy3/GCLYL4ilyAOv4MSXVRBHFqqfNw2wo4hjHAiBxJF4A9boLaZTR6W4cuqWiOFVMP2Y5MN8LPiKV+sVlug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1326572},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"21d83fa025135ecefd7597065ca0af66ffeb179a","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.4.0_1784122751406_0.9353986470893705","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@absolutejs/rate-limit","version":"0.4.1","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.4.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"6183f1514ed1863260381ca91c3cd6c95b383867","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.4.1.tgz","fileCount":25,"integrity":"sha512-65xVVBWMzvmuDQbIGiuQYNAGRTGLpfvgbivM7wIG0sq5o4L02vbGF2YWhtwnXD20Acy3d8AxBn+fqlNOGv7r8w==","signatures":[{"sig":"MEUCIQCqOKFSFaaZ+XHwiPtJFRZU7hVKkv+QYpv5Da1VxHHVLwIgAeWQqfKVSV1lViSihkzTTwk1bsExTbsb0Aunk3UZuIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1326657},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"76f56cdcb859a7c2712e5083a8357290c3d49cbb","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.4.1_1784123120561_0.38821773578785845","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@absolutejs/rate-limit","version":"0.4.2","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.4.2","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"6c6795812bb39cb5c0ced2baa9b5ed2588fa307a","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.4.2.tgz","fileCount":25,"integrity":"sha512-IFmwNYaTfB4uxsZaTpZFrCa9r+uMSJG1K14EtBhYqcNmUJ7xATH2yqmWdFaBwHR2froNVj6mh0Ipi86laYL19A==","signatures":[{"sig":"MEUCIQCn6jABXjOo9wr0FiWMBNEG8Z9iryP7XFy6flIq/rj2kQIgPIKBu4johBQYI2i7jXQBYctQl1/1ns8sV6vKs0zst+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1326824},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"9ef95a03ff971ba1ffef29a9917d77e850a3a004","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.4.2_1784123318329_0.4654312032036174","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@absolutejs/rate-limit","version":"0.4.3","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.4.3","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"474bdb535ffcb394b370b718eb7bce7f7489a784","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.4.3.tgz","fileCount":25,"integrity":"sha512-ysB9MXRFHGkjYSiZsPBt+ZX/VroLx/DMD0+9G1GUICl9pSADSNpecZB5nqdsQx5npXfHwWuOHzwHsmWrI0P5DA==","signatures":[{"sig":"MEUCIQCU+GdH6QysUO480fPxZszVj+h5gmnCkpXzrIalnzNSAQIgIPlCrklaCTlJq6J6RhpP4mjj5PngWmnlb0xxrW9ysSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1327111},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"474bdb535ffcb394b370b718eb7bce7f7489a784","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-ysB9MXRFHGkjYSiZsPBt+ZX/VroLx/DMD0+9G1GUICl9pSADSNpecZB5nqdsQx5npXfHwWuOHzwHsmWrI0P5DA==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.4.3_1784170073438_0.1740464645522697","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@absolutejs/rate-limit","version":"0.5.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.5.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"dde7c44ba4d8de74b06ecd8ca8b939c207ae54bf","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.5.0.tgz","fileCount":25,"integrity":"sha512-jWIAtt7UiD7p6QK/jB8icvhTdKCpn7/+UuiRRwfaM/j+E7a4p6i/GbKmMc1jDgOExypkUnAACDGY2+I3EQcEKQ==","signatures":[{"sig":"MEYCIQCcnlVsrfcmHcEN4nkbeg2DU1m4aMHIajZiDa4E+a5XfwIhAJqtTVHAQA8pBDwf2eMfzVaKq9zhoNLOM+eyGsbyvVhg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1350864},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"01c5e3919183f7e5b706b1634b5335ff9ecdcaa5","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.4.0","@absolutejs/telemetry":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"^1.4.28","prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^6.0.3"},"peerDependencies":{"elysia":">= 1.0.0","bun-types":"^1.3.14"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.5.0_1784807185196_0.03150535510703678","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@absolutejs/rate-limit","version":"0.5.1","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.5.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"f4b2331a72eb5a523cc374404e1cb30b3a43347c","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.5.1.tgz","fileCount":25,"integrity":"sha512-IwzZEHqy+iJwUmxf8QJp4aS/sXUBjDgPdihdoV8SyiOhwrrVGrtkKaIjrq68hk0uTRmfL5GEOwodVRIWRIwYVQ==","signatures":[{"sig":"MEUCIG35o3mqZaI4ntYxcmKDF0cTGGmohqfo4VzvRTNDEkRsAiEAlI499ZcSGp8bF6K5RNb2DFLnDPOPJHGfEPcZAttnkjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":699096},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"f4b2331a72eb5a523cc374404e1cb30b3a43347c","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-IwzZEHqy+iJwUmxf8QJp4aS/sXUBjDgPdihdoV8SyiOhwrrVGrtkKaIjrq68hk0uTRmfL5GEOwodVRIWRIwYVQ==","absolutejs":{"runtimePeers":{"elysia":{"range":">= 1.0.0","tested":"1.4.29","optional":true,"buildExternals":["elysia"],"artifactImports":["elysia"]}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.8.3","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.7.2","@absolutejs/telemetry":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"1.4.29","prettier":"3.8.3","@types/bun":"1.3.14","typescript":"6.0.3"},"peerDependencies":{"elysia":">= 1.0.0"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.5.1_1784959109082_0.6639841252032965","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@absolutejs/rate-limit","version":"0.5.2","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.5.2","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"bfad037d11de1ac6dfab5d99acfca5a189bf1196","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.5.2.tgz","fileCount":25,"integrity":"sha512-jUOXeKVJa45N72frH9fcOW1nT0AvkwZTc1G0aRNUcMGNkMZVxuADr+Rj+fFouXI/Ij3OQ8bZN3iAjzI5StlD2g==","signatures":[{"sig":"MEUCIDhwzv6lQUbB0zDU5M3Hl+5kqnIJcRicPslUjlXqbsPoAiEA5oe2uc8erx8jgIw2s7QyJ+5cVBlu+8DtEKks6F1G5pE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719528},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"runtimePeers":{"elysia":{"range":">= 1.0.0","tested":"1.4.29","optional":true,"buildExternals":["elysia"],"artifactImports":["elysia"]}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.7.2","@absolutejs/telemetry":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"1.4.29","prettier":"3.8.3","@types/bun":"1.3.14","typescript":"6.0.3"},"peerDependencies":{"elysia":">= 1.0.0"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.5.2_1786078109709_0.6738838274496071","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@absolutejs/rate-limit","version":"0.6.0","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/rate-limit@0.6.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"dist":{"shasum":"e2528505ccb78363fec1a2eb0ee52b163ced06bd","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.6.0.tgz","fileCount":25,"integrity":"sha512-twMjGlJ9hdrBPR93mKd4D1AzuKBTQn6oxs+c4UI3bWS7Q1IPkJUeh4HpbG3cSZJNcc+z+dyigHatfLRFej3oOg==","signatures":[{"sig":"MEYCIQCt7Z9PPMq/vCmETu8ZJJ7za6tiYS7wMRp+PDJyydY9RAIhAKx1kIVN0yhXydOt9h9g6m9YETETMMoWqZghbOWuimZW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":706207},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"b7ab43c9dedc5a2a4d5ff1c4ac286e00aa5616ac","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/rate-limit.git","type":"git"},"_npmVersion":"10.9.2","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0","@absolutejs/telemetry":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"elysia":"2.0.0-beta.6","typebox":"1.3.16","prettier":"3.8.3","@types/bun":"1.3.14","typescript":"6.0.3","exact-mirror":"1.2.4"},"peerDependencies":{"elysia":"^2.0.0-beta.6"},"peerDependenciesMeta":{"elysia":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rate-limit_0.6.0_1787188195390_0.2530830157360511","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@absolutejs/rate-limit","version":"0.6.1","description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","repository":{"type":"git","url":"git+https://github.com/absolutejs/rate-limit.git"},"homepage":"https://github.com/absolutejs/rate-limit","bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"BSL-1.1","author":{"name":"Alex Kahn"},"absolutejs":{"manifestContract":2},"publishConfig":{"access":"public"},"keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"scripts":{"build":"rm -rf dist && bun build src/index.ts src/elysia.ts src/core.ts src/postgres.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external elysia && tsc --project tsconfig.build.json && absolute-manifest emit","test":"bun test tests/","typecheck":"tsc --noEmit","format":"prettier --write \"./**/*.{ts,json,md}\"","check:package":"bun run typecheck && bun run build && bun run test","release":"bun run format && bun run check:package && bun publish"},"dependencies":{"@absolutejs/manifest":"^0.9.0","@absolutejs/telemetry":">=0.2.0 <0.4.0","@sinclair/typebox":"^0.34.0"},"peerDependencies":{"elysia":"^2.0.0-beta.6"},"peerDependenciesMeta":{"elysia":{"optional":true}},"devDependencies":{"@types/bun":"1.3.14","elysia":"2.0.0-beta.6","exact-mirror":"1.2.4","prettier":"3.8.3","typebox":"1.3.16","typescript":"6.0.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./elysia":{"types":"./dist/elysia.d.ts","import":"./dist/elysia.js","default":"./dist/elysia.js"},"./core":{"types":"./dist/core.d.ts","import":"./dist/core.js","default":"./dist/core.js"},"./postgres":{"types":"./dist/postgres.d.ts","import":"./dist/postgres.js","default":"./dist/postgres.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"_id":"@absolutejs/rate-limit@0.6.1","gitHead":"5f70b13eec072d6f075f7c8baa82df634686c394","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-9nhS4a6wbH9Vfd7lNr1L5QlrOiBKX7WkDBIJTaeIv3RzXW8RFCXJAj2x15ZUSq4TDsuTh48Fpc0XdmcZ7dechg==","shasum":"b70a4e46eac5ae27b681f4a8c11934ac3949a408","tarball":"https://registry.npmjs.org/@absolutejs/rate-limit/-/rate-limit-0.6.1.tgz","fileCount":25,"unpackedSize":706215,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBq6A8o5fiMF5/7GZH4f4vHqQAxfiLai0YGtjP4w815gAiB6YN1xwPYrhlWhucLv/7vQTz3Jc3Xj6yPIX1snUt6Xaw=="}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rate-limit_0.6.1_1787449016087_0.4246513185107148"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-29T20:45:43.881Z","modified":"2026-08-23T01:36:56.425Z","0.0.1":"2026-05-29T20:45:44.202Z","0.1.0":"2026-05-29T20:53:31.834Z","0.2.0":"2026-05-30T02:59:15.024Z","0.3.0":"2026-05-30T19:29:54.406Z","0.3.1":"2026-07-13T17:36:25.399Z","0.3.2":"2026-07-14T07:06:24.031Z","0.4.0":"2026-07-15T13:39:11.565Z","0.4.1":"2026-07-15T13:45:20.755Z","0.4.2":"2026-07-15T13:48:38.521Z","0.4.3":"2026-07-16T02:47:53.621Z","0.5.0":"2026-07-23T11:46:25.375Z","0.5.1":"2026-07-25T05:58:29.219Z","0.5.2":"2026-08-07T04:48:29.881Z","0.6.0":"2026-08-20T01:09:55.549Z","0.6.1":"2026-08-23T01:36:56.276Z"},"bugs":{"url":"https://github.com/absolutejs/rate-limit/issues"},"author":{"name":"Alex Kahn"},"license":"BSL-1.1","homepage":"https://github.com/absolutejs/rate-limit","keywords":["absolutejs","bun","elysia","rate-limit","throttle","gcra","token-bucket","sliding-window"],"repository":{"type":"git","url":"git+https://github.com/absolutejs/rate-limit.git"},"description":"First-class 2026 rate limit for Bun + Elysia. GCRA by default (exact, O(1) memory per key, no boundary effect — the algorithm Stripe uses), IETF draft-09 RateLimit-* headers, IPv6 /64 grouping, X-Forwarded-For trust modes, BigInt nanosecond TAT, pluggable","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# @absolutejs/rate-limit\n\nFirst-class, from-scratch, 2026 rate limit for Bun + Elysia. **GCRA by default**\n(the algorithm Stripe uses — exact, O(1) memory per key, no boundary effects),\n**IETF draft-09 `RateLimit-*` headers**, **IPv6 /64 grouping**,\n**`X-Forwarded-For` trust modes**, **BigInt nanosecond TAT** (no float drift),\npluggable store (LRU in-memory bundled).\n\n```ts\nimport { Elysia } from 'elysia';\nimport { rateLimit, gcra } from '@absolutejs/rate-limit';\n\nnew Elysia()\n  .use(rateLimit({\n    algorithm: gcra({ requestsPerPeriod: 100, periodMs: 60_000, burst: 20 }),\n    key: 'ip',\n    trustedProxies: 1, // single CDN/LB hop trusted\n  }))\n  .get('/', () => 'ok')\n  .listen(3000);\n```\n\n## Why not just use the existing libraries\n\nThe leader in the Elysia ecosystem is rayriffy/elysia-rate-limit. It uses a\ntoken bucket over a `Map` with a `setInterval` cleanup. That's fine, but every\nchoice in it is from 2020. The 2026 from-scratch answers:\n\n| Concern | What others do | What we do |\n|---|---|---|\n| **Algorithm** | Token bucket (allows brief bursts at refill boundaries) | **GCRA** by default. Exact, no boundary effect, one BigInt of state per key. Token bucket and sliding window also bundled when you want them. |\n| **Time precision** | `Date.now()` ms (float drift over long-lived keys) | **BigInt nanoseconds** for GCRA TAT. Drift-free over any horizon. |\n| **IPv6** | Per-/128 (one cap per device — a `/64` user with N devices gets N× their cap) | **Per-/64 group** by default (RIR allocation = one user). Configurable. |\n| **Proxy trust** | Trust `X-Forwarded-For` blindly OR ignore it | `trustedProxies: N` — honor only the last N hops; spoof-resistant by default (`N=0`). |\n| **Headers** | `X-RateLimit-*` (legacy GitHub-style) | **IETF draft-09 `RateLimit-*` + `RateLimit-Policy`** by default. Legacy + `both` modes also available. |\n| **Store cleanup** | `setInterval` sweeper (timer per process; lock contention on iteration) | **Lazy TTL** at lookup time. No background timer. |\n| **Hot path** | Async even on memory store | **Sync when the store is sync**, async only when it has to be. |\n| **CDN headers** | XFF only | XFF + `cf-connecting-ip` + `fly-client-ip` + `true-client-ip` + `x-real-ip`. |\n\n## Surface\n\n### Elysia plugin (`@absolutejs/rate-limit`)\n\n```ts\nrateLimit({\n  algorithm: gcra({ requestsPerPeriod: 100, periodMs: 60_000, burst: 20 }),\n  store: memoryStore({ maxKeys: 100_000 }),\n\n  // key — defaults to 'ip' (uses extractIp).\n  key: 'ip',                                                   // built-in\n  // key: 'authorization',                                       // built-in\n  // key: (ctx) => ctx.request.headers.get('x-user') ?? null,    // custom\n\n  trustedProxies: 1,         // honor only the last hop of XFF (typical: 1)\n  ipv6Prefix: 64,            // group IPv6 by /64\n\n  skip: (ctx) => ctx.request.headers.get('authorization') === ADMIN_TOKEN,\n\n  headers: 'standard',       // 'standard' | 'legacy' | 'both' | false\n\n  onLimit: (ctx, info) => new Response(JSON.stringify({\n    ok: false,\n    retryAfterSec: info.decision.retryAfterSec,\n  }), { status: 429, headers: { 'Content-Type': 'application/json' } }),\n})\n```\n\n### Algorithms (`@absolutejs/rate-limit/core`)\n\n```ts\nimport { gcra, tokenBucket, slidingWindow, memoryStore } from '@absolutejs/rate-limit/core';\n\nconst limiter = gcra({ requestsPerPeriod: 100, periodMs: 60_000, burst: 20 });\nconst store = memoryStore();\nconst decision = limiter.check(store, 'user-42', Date.now());\n// → { allowed, limit, remaining, retryAfterSec, resetSec, policy }\n```\n\nUse the core directly for non-HTTP rate-limiting — WebSocket-message rate\nlimiting, queue-consumer throttling, AI-call quotas.\n\n### Store interface\n\n```ts\ntype Store = {\n  update<T>(key: string, ttlMs: number, fn: (prev: T | null) => T): T | Promise<T>;\n  delete?(key: string): void | Promise<void>;\n  clear?(): void | Promise<void>;\n};\n```\n\nImplement `update` atomically (read-modify-write); the rest is optional. For\nBun in-process use `memoryStore()`. Multi-replica Bun services backed by\nPostgreSQL can use the bundled durable adapter:\n\n```ts\nimport { SQL } from 'bun';\nimport { postgresStore } from '@absolutejs/rate-limit/postgres';\n\nconst store = postgresStore({\n  sql: new SQL(process.env.DATABASE_URL),\n  table: 'absolute_rate_limit_entries',\n});\n```\n\nThe application owns the table migration. It requires `key text PRIMARY KEY`,\n`value jsonb NOT NULL`, `expires_at timestamp NOT NULL`, and\n`updated_at timestamp NOT NULL`. Per-key PostgreSQL transaction advisory locks\nlinearize updates across replicas, including the first update before a row\nexists. Expired rows are replaced lazily on their next update;\n`activeEntries()` reports current cardinality and `pruneExpired()` provides a\nbounded operator cleanup primitive for abandoned keys.\n\n## Algorithm picker\n\n- **GCRA** — pick this unless you have a reason not to. Exact, O(1) memory,\n  no boundary effects, BigInt math = no drift. Burst is configurable; set\n  `burst: 0` for strict pacing.\n- **Token bucket** — pick this when you specifically WANT the \"fill the\n  bucket and let the user fire it all at once\" behavior. Cleaner mental\n  model for end-users.\n- **Sliding window** — pick this when the customer-facing story is \"you\n  have N requests in the last M seconds.\" It's an approximation that can\n  under-count by ~1 slot at heavy clustering, but it's the most intuitive\n  to explain on a status page.\n\n## License\n\nBSL 1.1 with a named carveout for the hosted rate-limit / WAF / API gateway throttling category (Cloudflare WAF + Rate Limiting, AWS WAF + API Gateway throttling, Kong, Tyk, Imperva, Akamai, GCP Cloud Armor, Azure Front Door rate-limiting, Upstash Ratelimit, Stripe's API gateway throttling). See [LICENSE](./LICENSE). Change Date: 4 years from first release; Change License: Apache 2.0.\n","readmeFilename":"README.md"}