1.0.4 • Published 5 years ago

api-rate-limiter v1.0.4

Weekly downloads
2
License
GNU GENERAL PUBLI...
Repository
github
Last release
5 years ago

api-rate-limiter

Rate limiter package for Express server API requests

API ✍

api-rate-limiter API

init(...)

ParameterDescriptionRequiredDefault
payload.clientRedisClient instance (promisified)
payload.serverNameAPI 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 nameDescription
RateLimiterInvalidRedisClientErrorError thrown in case of invalid redis client
RateLimiterInvalidServerNameErrorError thrown in case of invalid server name parameter

preventRateLimitAbuse(...)

ParameterDescriptionRequiredDefault
payload.maxNumberOfRequestsMaximum allowed requests per time window
payload.rateLimitWindowInSecondsRate limit time window in seconds300 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 nameDescription
RateLimitExceededErrorError passed to the next() middleware function in case of rate limit abuse
RateLimiterMissingRedisClientErrorError thrown in case of missing redis client for rate limiter
RateLimiterMissingServerNameErrorError thrown in case of missing server name for rate limiter

HTTP Headers

HeaderDescription
X-RateLimit-LimitRequests permitted to make per time window
X-RateLimit-RemainingRequests remaining in the current time window
X-RateLimit-ResetUNIX timestamp detailing when the rate limit will reset

Sample:

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