Class RateLimiterProviderFactory<TAdapters>

The RateLimiterProviderFactory class is immutable.

IMPORT_PATH: "@daiso-tech/core/rate-limiter"

Type Parameters

  • TAdapters extends string

Implements

Constructors

Methods

  • Parameters

    Returns IRateLimiterProvider

    import { RateLimiterProviderFactory } from "@daiso-tech/core/rate-limiter";
    import { MemoryRateLimiterStorageAdapter } from "@daiso-tech/core/rate-limiter/memory-rate-limiter-storate-adapter";
    import { DatabaseRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/database-rate-limiter-adapter";
    import { RedisRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter";
    import { Serde } from "@daiso-tech/core/serde";
    import { SuperJsonSerdeAdapter } from "@daiso-tech/core/serde/super-json-serde-adapter";
    import Redis from "ioredis"

    const serde = new Serde(new SuperJsonSerdeAdapter());
    const rateLimiterProviderFactory = new RateLimiterProviderFactory({
    serde,
    adapters: {
    memory: new DatabaseRateLimiterAdapter({
    adapter: new MemoryRateLimiterStorageAdapter()
    }),
    redis: new RedisRateLimiterAdapter({
    database: new Redis("YOUR_REDIS_CONNECTION")
    }),
    },
    defaultAdapter: "memory",
    });

    // Will apply rate limiter logic the default adapter which is MemoryRateLimiterStorageAdapter
    await rateLimiterProviderFactory
    .use()
    .create("a")
    .runOrFail(async () => {
    // ... code to apply rate limiter logic
    });

    // Will apply rate limiter logic the default adapter which is RedisRateLimiterAdapter
    await rateLimiterProviderFactory
    .use("redis")
    .create("a")
    .runOrFail(async () => {
    // ... code to apply rate limiter logic
    });