UNPKG

736 BJavaScriptView Raw
1const Redis = require('redis')
2const Limiter = require('ratelimiter')
3
4class RedisRateLimit {
5 constructor (options = {redis: {}}) {
6 this.options = options
7
8 this.redisClient = Redis.createClient(
9 options.redis.port,
10 options.redis.host,
11 options.redis.options
12 )
13 }
14
15 check (id, limit, duration) {
16 const routeLimiter = new Limiter({id, max: limit, duration})
17
18 return new Promise((resolve, reject) => {
19 routeLimiter.get((err, rateLimit) => {
20 if (err) {
21 return reject(err)
22 }
23 resolve({
24 limit: rateLimit.total,
25 remaining: rateLimit.remaining,
26 reset: rateLimit.reset
27 })
28 })
29 })
30 }
31}
32
33module.exports = RedisRateLimit