Numerous Problems Multiplied

    @journyio/ratelimiter
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.3 • Public • Published

    journy.io

    Rate limiter

    npm npm downloads

    A sliding rate limiter using Redis. This package depends on moment/luxon and luin/ioredis.

    We don't recommend consuming this package in plain JavaScript (to be able to use interfaces).

    Inspired by these blogposts:

    💾 Installation

    You can use your package manager (npm or yarn) to install:

    npm install --save @journyio/ratelimiter

    or

    yarn add @journyio/ratelimiter

    🔌 Getting started

    import Client from "ioredis";
    import { Duration } from "luxon";
    import { RateLimiter, RateLimiterRedis, RateLimitedResource } from "@journyio/ratelimiter";
    
    class API {
      constructor(private readonly rateLimiter: RateLimiter) {}
    
      async getUser(id: UserId) {
        const resource = new RateLimitedResource(
          `API-calls-user-${id}`,
          100,
          Duration.fromObject({ minute: 1 })
        );
    
        const allowed = await this.rateLimiter.consume(resource);
    
        if (!allowed) {
          throw new Error("Rate limited!");
        }
    
        /* ... */
      }
    }
    
    const redis = new Client(process.env.REDIS_URL)
    const rateLimiter = new RateLimiterRedis(redis);
    const api = new API(rateLimiter);
    const user = await api.getUser(/* ... */);
    const resource = new RateLimitedResource(
      "API-calls-user-1313",
      100,
      Duration.fromObject({ minute: 1 })
    );
    
    const allowed = await this.rateLimiter.consume(resource);
    const remainingCalls = await rateLimiter.remaining(resource);
    await rateLimiter.reset(resource);

    💯 Tests

    To run the tests:

    npm run test

    (assuming redis runs on port 6379)

    🔒 Security

    If you discover any security related issues, please email hans at journy io instead of using the issue tracker.

    Install

    npm i @journyio/ratelimiter

    DownloadsWeekly Downloads

    8

    Version

    1.0.3

    License

    MIT

    Unpacked Size

    9.87 kB

    Total Files

    11

    Last publish

    Collaborators

    • hansjourny
    • manujourny