1.0.6 โ€ข Published 12 months ago

@prkhrv/express-rate-limiter v1.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

Rate Limiter Middleware for Express ๐Ÿš€

npm version NPM Downloads License: MIT

A robust and flexible rate limiter middleware for Express applications written in TypeScript. Control the rate of requests to your API endpoints with ease! โœจ

Features ๐ŸŒŸ

  • โฑ Configurable time windows and request limits
  • ๐Ÿ“Š Rate limiting by IP address
  • ๐Ÿ›ก Customizable response messages
  • ๐Ÿ“‹ Optional response headers for rate limit status
  • ๐Ÿ”’ Lightweight and easy to integrate

Installation ๐Ÿ“ฆ

Install via npm:

npm i @prkhrv/express-rate-limiter

Or via Yarn:

yarn add @prkhrv/express-rate-limiter

Usage ๐Ÿ› 

Basic Usage

const express = require('express');
const rateLimiter = require('your-package-name');

const app = express();
app.use(rateLimiter({ windowMs: 60000, max: 100 }));

app.get('/', (req, res) => {
    res.send('Hello, world!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

Options

  • windowMs (number): Time window in milliseconds for which requests are checked.
  • max (number): Maximum number of requests allowed in the time window.
  • message (string): Custom message to send when rate limit is exceeded (default: 'Too many requests, please try again later.').
  • headers (boolean): Whether to include rate limit headers in the response (default: true).

Example with Custom Options

const express = require('express');
const rateLimiter = require('your-package-name');

const app = express();
app.use(rateLimiter({
    windowMs: 15 * 60 * 1000, // 15 minutes
    max: 100, // limit each IP to 100 requests per windowMs
    message: 'You have exceeded the 100 requests in 15 minutes limit!', 
    headers: true
}));

app.get('/', (req, res) => {
    res.send('Hello, world!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

Testing ๐Ÿงช

To run tests, use the following command:

npm test

Ensure you have all development dependencies installed:

npm install --save-dev jest @types/jest ts-jest supertest @types/supertest

Example Test

import express from 'express';
import request from 'supertest';
import rateLimiter from '../src/rateLimiter';

const app = express();
app.use(rateLimiter({ windowMs: 60000, max: 5 }));

app.get('/', (req, res) => {
    res.send('Hello, world!');
});

describe('Rate Limiter Middleware', () => {
    it('should allow up to the max number of requests', async () => {
        for (let i = 0; i < 5; i++) {
            await request(app).get('/').expect(200);
        }
    });

    it('should block requests exceeding the max number', async () => {
        for (let i = 0; i < 5; i++) {
            await request(app).get('/').expect(200);
        }
        await request(app).get('/').expect(429);
    });
});

Contributing ๐Ÿค

Contributions are welcome! Please open an issue or submit a pull request for any bugs, improvements, or new features.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/fooBar)
  3. Commit your changes (git commit -m 'Add some fooBar')
  4. Push to the branch (git push origin feature/fooBar)
  5. Open a Pull Request

License ๐Ÿ“„

This project is licensed under the MIT License - see the LICENSE file for details.

1.0.6

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago

1.0.3

12 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago