1 | const Redis = require('redis')
|
2 | const Limiter = require('ratelimiter')
|
3 |
|
4 | class 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 |
|
33 | module.exports = RedisRateLimit
|