npm.io
1.0.4 • Published 7 years ago

api-rate-limiter

Licence
GNU GENERAL PUBLIC LICENSE
Version
1.0.4
Deps
1
Size
50 kB
Vulns
0
Weekly
0
Stars
2

api-rate-limiter

Rate limiter package for Express server API requests

API

api-rate-limiter API

init(...)

Parameter Description Required Default
payload.client RedisClient instance (promisified)
payload.serverName API server name

Sample:

   const RateLimiter = require('api-rate-limiter')
   
   const Promise = require('bluebird')
   const redis = require('redis')
   
   Promise.promisifyAll(redis.RedisClient.prototype)
   const redisClient = redis.createClient()
   
   RateLimiter.init({ client: redisClient, serverName: 'code-mentor-api' })

RateLimiter should be initialized before initializing API routes.

Errors
Error name Description
RateLimiterInvalidRedisClientError Error thrown in case of invalid redis client
RateLimiterInvalidServerNameError Error thrown in case of invalid server name parameter
preventRateLimitAbuse(...)
Parameter Description Required Default
payload.maxNumberOfRequests Maximum allowed requests per time window
payload.rateLimitWindowInSeconds Rate limit time window in seconds 300 seconds

Sample:


  const express = require('express')
  const router = express.Router()

  const RateLimiter = require('api-rate-limiter')

  router.get('/',
    RateLimiter.preventRateLimitAbuse({ maxNumberOfRequests: 50,  rateLimitWindowInSeconds: 600 }),
    function (req, res, next) {
        ...request handler code
    })
Errors
Error name Description
RateLimitExceededError Error passed to the next() middleware function in case of rate limit abuse
RateLimiterMissingRedisClientError Error thrown in case of missing redis client for rate limiter
RateLimiterMissingServerNameError Error thrown in case of missing server name for rate limiter
HTTP Headers
Header Description
X-RateLimit-Limit Requests permitted to make per time window
X-RateLimit-Remaining Requests remaining in the current time window
X-RateLimit-Reset UNIX timestamp detailing when the rate limit will reset

Sample:

X-RateLimit-Limit: 50
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1541169284467

Keywords