koa-redis-ratelimit

Rate limiting middleware backed by Redis for Koa v2+, built for CrocodileJS


Keywords
2, async, await, best, better, cors, enforce, es7, helmet, koa, koa2, limiting, middleware, mongo, mvc, postgres, promises, rate, ratelimit, ratelimiter, redis, security, session, sql, storage, store, xss
License
MIT
Install
npm install koa-redis-ratelimit@1.0.0

Documentation

koa-redis-ratelimit

Slack Status NPM version Build Status Code Coverage Standard JS Style MIT License

Rate limiting middleware backed by Redis for Koa v2+, built for CrocodileJS.


NOTE: Currently this package does not work due to an issue with ratelimiter, please use https://github.com/scttcper/koa-simple-ratelimit instead


Install

npm install --save koa-redis-ratelimit

Usage

import RateLimit from 'koa-redis-ratelimit';
import redis from 'redis';
import Koa from 'koa';

const app = new Koa();

// apply rate limit
app.use(new Ratelimit({
  db: redis.createClient(),
  duration: 60000,
  max: 100,
  id: (ctx) => ctx.ip,
  blacklist: [],
  whitelist: []
}).middleware);

// response middleware
app.use(ctx => {
  ctx.body = 'Stuff!';
});

app.listen(3000);
console.log('listening on port 3000');

Options

  • db - redis connection instance
  • max - max requests within duration (default is 2500)
  • duration - of limit in milliseconds (default is 3600000)
  • id - id to compare requests [ip]
  • whitelist - array of ids to whitelist
  • blacklist - array of ids to blacklist

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