Skip to main content

Customization

The library provides multiple options to customize rate limiting behavior.

info

Options without any default value are required by the user to be provided.

Options

OptionTypeDescriptionDefault
keyfunctionUnique key to identify each client (e.g., IP address or an API Key).Client's IP address
skipstring[]Keys to skip from rate-limiting.[]
skipFailedRequestsbooleanWhether to exclude failed requests from rate limits.false
messagestringCustom message when the rate limit is exceeded.Rate limit exceeded
statusCodenumberHTTP status code to send when the rate limit is exceeded.429
headersTypeHeadersTypeChoose between "legacy", "draft-6", "draft-7" or "draft-8"legacy
logsobjectConfiguration for logging requestsundefined
limitOptionsobjectFunction returning Object defining max (maximum requests) and window (time in seconds).None (required)
storeTypeStoreTypeChoose between "memory", "redis" or "mongodb"memory
externalStoreRedisClientType | DbExternal store instance for storing rate-limiting data.undefined

Example

import { expressRateLimiter } from "@radioac7iv/rate-limiter";
import { createClient } from "redis";

const redisClient = createClient({
host: "localhost",
port: 6379,
});

const rateLimit = expressRateLimiter({
key: (req) => req.ip as string,
skip: ["ip-1", "ip-2"],
skipFailedRequests: true,
message: "You have exceeded the rate limit",
statusCode: 430,
headersType: "draft-7",
logs: {
directory: "./logs",
},
limitOptions: () => {
return { max: 5, window: 10 };
},
storeType: "redis",
externalStore: redisClient,
});