@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
77 lines (76 loc) • 3.08 kB
TypeScript
/**
* @module RateLimiter
*/
import { type Redis, type Result } from "ioredis";
import { type BackoffSettingsEnum } from "../../../../backoff-policies/implementations/_module.js";
import { type IReadableContext } from "../../../../execution-context/contracts/_module.js";
import { type IRateLimiterAdapter, type IRateLimiterAdapterState } from "../../../../rate-limiter/contracts/_module.js";
import { type RateLimiterPolicySettingsEnum } from "../../../../rate-limiter/implementations/policies/_module.js";
declare module "ioredis" {
interface RedisCommander<Context> {
/**
* @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState`} or `null` as json string.
*/
daiso_rate_limiter_update_state(key: string, limit: number, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
/**
* @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState`} or `null` as json string.
*/
daiso_rate_limiter_get_state(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
}
}
/**
* Configuration for `RedisRateLimiterAdapter`.
* Requires a Redis client and handles serialization internally with JSON.stringify/JSON.parse.
*
* IMPORT_PATH: `"@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter"`
* @group Adapters
*/
export type RedisRateLimiterAdapterSettings = {
/**
* The Redis client instance for rate-limiter state operations.
*/
database: Redis;
/**
* You can choose between different types of predefined backoff policies.
* @default
* ```ts
* { type: BACKOFFS.EXPONENTIAL }
* ```
*/
backoffPolicy?: BackoffSettingsEnum;
/**
* You can choose between different types of predefined circuit breaker policies.
* @default
* ```ts
* { type: LIMITER.FIXED_WINDOW }
* ```
*/
rateLimiterPolicy?: RateLimiterPolicySettingsEnum;
};
/**
* IMPORT_PATH: `"@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter"`
* @group Adapters
*/
export declare class RedisRateLimiterAdapter implements IRateLimiterAdapter {
private readonly backoff;
private readonly policy;
private readonly database;
/**
* @example
* ```ts
* import { RedisRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter";
* import Redis from "ioredis";
*
* const database = new Redis("YOUR_REDIS_CONNECTION_STRING");
* const rateLimiterAdapter = new RedisRateLimiterAdapter({
* database
* });
* ```
*/
constructor(settings: RedisRateLimiterAdapterSettings);
private initGetStateCommand;
private initUpdateStateCommmand;
getState(_context: IReadableContext, key: string): Promise<IRateLimiterAdapterState | null>;
updateState(_context: IReadableContext, key: string, limit: number): Promise<IRateLimiterAdapterState>;
reset(_context: IReadableContext, key: string): Promise<void>;
}