RateLimiter resolver factory classes
RateLimiterFactoryResolver
The RateLimiterFactoryResolver class provides a flexible way to configure and switch between different rate-limiter adapters at runtime.
Initial configuration
To begin using the RateLimiterFactoryResolver, You will need to register all required adapters during initialization.
./samples/rate-limiter-factory-resolver-initial-config.ts
import { RateLimiterFactoryResolver } from "eridu-tech/rate-limiter";
import { MemoryRateLimiterStorageAdapter } from "eridu-tech/rate-limiter/memory-rate-limiter-storage-adapter";
import { DatabaseRateLimiterAdapter } from "eridu-tech/rate-limiter/database-rate-limiter-adapter";
import { RedisRateLimiterAdapter } from "eridu-tech/rate-limiter/redis-rate-limiter-adapter";
import { SuperJsonSerde } from "eridu-tech/serde/super-json-serde";
import { Redis } from "ioredis";
const serde = new SuperJsonSerde();
export const rateLimiterFactoryResolver = new RateLimiterFactoryResolver({
serde,
adapters: {
memory: new DatabaseRateLimiterAdapter({
adapter: new MemoryRateLimiterStorageAdapter(),
}),
redis: new RedisRateLimiterAdapter({
database: new Redis("YOUR_REDIS_CONNECTION"),
}),
},
defaultAdapter: "memory",
});
await rateLimiterFactoryResolver.init();
Usage
1. Using the default adapter
./samples/rate-limiter-factory-resolver-default-adapter.ts
import { rateLimiterFactoryResolver } from "./rate-limiter-factory-resolver-initial-config.js";
// Will apply rate-limiter logic the default adapter which is MemoryRateLimiterStorageAdapter
await rateLimiterFactoryResolver
.use()
.create("a", {
limit: 10,
})
.runOrFail(async () => {
// ... code to apply rate-limiter logic
});
danger
Note that if you dont set a default adapter, an error will be thrown.
2. Specifying an adapter explicitly
./samples/rate-limiter-factory-resolver-specific-adapter.ts
import { rateLimiterFactoryResolver } from "./rate-limiter-factory-resolver-initial-config.js";
// Will apply rate-limiter logic using the redis adapter
await rateLimiterFactoryResolver
.use("redis")
.create("a", {
limit: 10,
})
.runOrFail(async () => {
// ... code to apply rate-limiter logic
});
danger
Note that if you specify a non-existent adapter, an error will be thrown.
Further information
For further information refer to eridu-tech/rate-limiter API docs.