UNPKG

@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
/** * @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>; }