1.0.6 โ€ข Published 1 year ago

@prkhrv/express-rate-limiter v1.0.6

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year 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

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago