{"_id":"@ajay9299/rate-limiter","_rev":"2-6091dfbf0988225c03f32e82ae7a2850","name":"@ajay9299/rate-limiter","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@ajay9299/rate-limiter","version":"1.0.0","keywords":["rate-limiter","express-middleware","api-security","throttling","nodejs"],"author":{"name":"Ajay Jangid"},"license":"ISC","_id":"@ajay9299/rate-limiter@1.0.0","maintainers":[{"name":"ajay9299","email":"ajayjangid9299@gmail.com"}],"dist":{"shasum":"a26ed2dbef34cd0027a068a3c960604ce7b9ff0c","tarball":"https://registry.npmjs.org/@ajay9299/rate-limiter/-/rate-limiter-1.0.0.tgz","fileCount":13,"integrity":"sha512-FIeKtD5Ln9SerF+3hxVVgpXwBr7YIIF4P6RBHcq+/9JG/XJYk+ng/8eUl3UI+iztEEnGHlzNq3z1kbFMphnyhA==","signatures":[{"sig":"MEUCICU4GvETsWNabHK0TqZD+Su7CTvKtCAlaiDtOrVeTV9rAiEAogTlU78T+N/8C7P0l8YaytxkHYxQP51bJpBRIq5R+FM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5270},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d098ba83ccd15d807e6fe60cf781085d2743c09c","scripts":{"build":"tsc","clean":"rm -rf dist","watch":"tsc -w","prepublishOnly":"npm run build"},"_npmUser":{"name":"ajay9299","email":"ajayjangid9299@gmail.com"},"_npmVersion":"11.6.0","description":"Lightweight API rate limiter middleware for Node.js and Express","directories":{},"_nodeVersion":"24.9.0","_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^6.0.3","@types/node":"^25.9.1","@types/express":"^5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/rate-limiter_1.0.0_1780635862377_0.8647089686719893","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ajay9299/rate-limiter","version":"1.0.1","description":"Lightweight API rate limiter middleware for Node.js and Express","license":"ISC","author":{"name":"Ajay Jangid"},"type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","watch":"tsc -w","clean":"rm -rf dist","prepublishOnly":"npm run build"},"keywords":["rate-limiter","express-middleware","api-security","throttling","nodejs"],"engines":{"node":">=18"},"devDependencies":{"@types/express":"^5.0.6","@types/node":"^25.9.1","ts-node":"^10.9.2","typescript":"^6.0.3"},"_id":"@ajay9299/rate-limiter@1.0.1","gitHead":"9dfde03b6f1e3ed6eb00ebe5215d8905d7e0b512","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-DrTQHCoyiss1/LoNmZI3cTiKiVitc31xfdPejqTnEXIulGn0egPKIybFsoyaa8168i7N9HnzU6EfhX5GmkL2Gg==","shasum":"9394636b36d2597087ca5a6ae4523a21dd258a24","tarball":"https://registry.npmjs.org/@ajay9299/rate-limiter/-/rate-limiter-1.0.1.tgz","fileCount":15,"unpackedSize":7207,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCOcTQeUmMdaAprSWIPiRnTHQUBRDZPipD+2n7p3uuZqgIgRiCFrumdzj1HEhoyLXMVsOtMpjC5zP+vykxp8nNzVM0="}]},"_npmUser":{"name":"ajay9299","email":"ajayjangid9299@gmail.com"},"directories":{},"maintainers":[{"name":"ajay9299","email":"ajayjangid9299@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rate-limiter_1.0.1_1780679695809_0.3219903979638794"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-05T05:04:22.177Z","modified":"2026-06-05T17:14:56.061Z","1.0.0":"2026-06-05T05:04:22.545Z","1.0.1":"2026-06-05T17:14:55.965Z"},"author":{"name":"Ajay Jangid"},"license":"ISC","keywords":["rate-limiter","express-middleware","api-security","throttling","nodejs"],"description":"Lightweight API rate limiter middleware for Node.js and Express","maintainers":[{"name":"ajay9299","email":"ajayjangid9299@gmail.com"}],"readme":"![npm](https://img.shields.io/npm/v/@ajay9299/rate-limiter)\n![license](https://img.shields.io/npm/l/@ajay9299/rate-limiter)\n\n# 🚀 @ajay9299/rate-limiter\n\nA simple and flexible **Token Bucket based Rate Limiter** middleware for Express.js.\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install @ajay9299/rate-limiter\n```\n\n---\n\n## ⚡ Quick Start\n\n```js\nimport express from 'express';\nimport { RateLimiter } from '@ajay9299/rate-limiter';\n\nconst app = express();\nconst limiter = new RateLimiter();\n\napp.use(\n  limiter.middleware(\n    (req) => req.ip, // keyGenerator\n    () => 5,         // capacity (max tokens)\n    () => 1          // refill rate (tokens per second)\n  )\n);\n\napp.get('/', (req, res) => {\n  res.send('Hello World!');\n});\n\napp.listen(3000, () => {\n  console.log('Server running on port 3000');\n});\n```\n\n---\n\n## ⚙️ Configuration\n\n### middleware parameters:\n\n| Parameter    | Type              | Description             |\n| ------------ | ----------------- | ----------------------- |\n| keyGenerator | `(req) => string` | Unique key per user/IP  |\n| capacity     | `(req) => number` | Max tokens in bucket    |\n| refillRate   | `(req) => number` | Tokens added per second |\n\n---\n\n## 🧠 How it works\n\n* Each request consumes 1 token\n* Tokens refill over time\n* If no tokens → request is rejected (429)\n\n---\n\n## 📌 Per Route Rate Limiting\n\n```js\napp.use(\n  '/user',\n  limiter.middleware(\n    (req) => `${req.ip}:user`,\n    () => 10,\n    () => 2\n  )\n);\n\napp.use(\n  '/post',\n  limiter.middleware(\n    (req) => `${req.ip}:post`,\n    () => 5,\n    () => 1\n  )\n);\n```\n\n---\n\n## 🔥 Advanced Key Example\n\n```js\n(req) => `${req.ip}:${req.baseUrl}:${req.method}`\n```\n\n---\n\n## 🚧 Future Enhancements\n\n* Redis support (distributed rate limiting)\n* Sliding window algorithm\n* Rate limit headers\n* Auto cleanup of buckets\n\n---\n\n## 📄 License\n\nISC\n","readmeFilename":"README.md"}