Skip to content
Simple rate limiter for Koa.js v2 web framework
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src fix: functions that return promises should be async Jul 19, 2019
test fix: functions that return promises should be async Jul 19, 2019
.codecov.yml feat: use typescript, add interfaces for options May 11, 2019
.editorconfig feat: use typescript, add interfaces for options May 11, 2019
.eslintrc.js
.gitignore feat: use typescript, add interfaces for options May 11, 2019
LICENSE feat: use typescript, add interfaces for options May 11, 2019
README.md docs: add circleci badge May 11, 2019
circle.yml build: add redis May 11, 2019
example.ts feat: use typescript, add interfaces for options May 11, 2019
jest.config.js feat: use typescript, add interfaces for options May 11, 2019
package-lock.json chore: upgrade dep Jul 17, 2019
package.json chore: upgrade dep Jul 17, 2019
renovate.json feat: use typescript, add interfaces for options May 11, 2019
tsconfig.json

README.md

koa-simple-ratelimit

NPM version build status coverage

Rate limiter middleware for koa v2. Differs from koa-ratelimit by not depending on ratelimiter and using redis ttl (time to live) to handle expiration time remaining. This creates only one entry in redis instead of the three that node-ratelimiter does.

Installation

npm install koa-simple-ratelimit

Example

import Koa from 'koa';
import redis from 'redis';

import ratelimit from './src';

const app = new Koa();

// Apply rate limit

app.use(ratelimit({
	db: redis.createClient(),
	duration: 60000,
	max: 100
}));

// Response middleware

app.use((ctx, next) => {
	ctx.body = 'Stuff!';
	return next();
});

app.listen(4000);
console.log('listening on port http://localhost:4000');

Options

  • db redis connection instance
  • max max requests within duration [2500]
  • duration of limit in milliseconds [3600000]
  • id id to compare requests [ip]
  • whitelist array of ids to whitelist
  • blacklist array of ids to blacklist
  • prefix redis key prefix ["limit"]

Responses

Example 200 with header fields:

HTTP/1.1 200 OK
X-Powered-By: koa
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 99
X-RateLimit-Reset: 1384377793
Content-Type: text/plain; charset=utf-8
Content-Length: 6
Date: Wed, 13 Nov 2013 21:22:13 GMT
Connection: keep-alive

Stuff!

Example 429 response:

HTTP/1.1 429 Too Many Requests
X-Powered-By: koa
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1384377716
Content-Type: text/plain; charset=utf-8
Content-Length: 39
Retry-After: 7
Date: Wed, 13 Nov 2013 21:21:48 GMT
Connection: keep-alive

Rate limit exceeded, retry in 8 seconds

License

MIT

You can’t perform that action at this time.