import { RateLimiterFactoryResolver } 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 rateLimiterFactoryResolver = new RateLimiterFactoryResolver({
serde,
adapters: {
memory: new DatabaseRateLimiterAdapter({
adapter: new MemoryRateLimiterStorageAdapter()
}),
redis: new RedisRateLimiterAdapter({
database: new Redis("YOUR_REDIS_CONNECTION")
}),
},
defaultAdapter: "memory",
});
OptionalonlyError: booleanimport { RateLimiterFactoryResolver } 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 rateLimiterFactoryResolver = new RateLimiterFactoryResolver({
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 rateLimiterFactoryResolver
.use()
.create("a")
.runOrFail(async () => {
// ... code to apply rate limiter logic
});
// Will apply rate limiter logic the default adapter which is RedisRateLimiterAdapter
await rateLimiterFactoryResolver
.use("redis")
.create("a")
.runOrFail(async () => {
// ... code to apply rate limiter logic
});
The
RateLimiterFactoryResolverclass is immutable.IMPORT_PATH:
"@daiso-tech/core/rate-limiter"