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.

64 lines (63 loc) 2.57 kB
/** * @module RateLimiter */ import { type BackoffPolicy } from "../../../../backoff-policies/contracts/_module.js"; import { type IReadableContext } from "../../../../execution-context/contracts/_module.js"; import { type IRateLimiterAdapter, type IRateLimiterAdapterState, type IRateLimiterPolicy, type IRateLimiterStorageAdapter } from "../../../../rate-limiter/contracts/_module.js"; /** * Configuration for `DatabaseRateLimiterAdapter`. * Wraps a {@link IRateLimiterStorageAdapter | `IRateLimiterStorageAdapter`} with rate-limiter logic. * * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/database-rate-limiter-adapter"` * @group Adapters */ export type DatabaseRateLimiterAdapterSettings = { /** * The underlying storage adapter used to persist and retrieve rate-limiter state. */ adapter: IRateLimiterStorageAdapter; /** * You can define your own {@link BackoffPolicy | `BackoffPolicy`}. * @default * ```ts * import { exponentialBackoff } from "@daiso-tech/core/backoff-policies"; * * exponentialBackoff(); * ``` */ backoffPolicy?: BackoffPolicy; /** * You can define your own {@link IRateLimiterPolicy | `IRateLimiterPolicy`}. * @default * ```ts * import { FixedWindowLimiter } from "@daiso-tech/core/rate-limiter/policies"; * * new FixedWindowLimiter(); * ``` */ rateLimiterPolicy?: IRateLimiterPolicy; }; /** * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/database-rate-limiter-adapter"` * @group Adapters */ export declare class DatabaseRateLimiterAdapter<TMetrics = unknown> implements IRateLimiterAdapter { private readonly rateLimiterStorage; private readonly rateLimiterStateManager; /** * @example * ```ts * import { DatabaseRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/database-rate-limiter-adapter"; * import { MemoryRateLimiterStorageAdapter } from "@daiso-tech/core/rate-limiter/memory-rate-limiter-storage-adapter"; * * const rateLimiterStorageAdapter = new MemoryRateLimiterStorageAdapter(); * const rateLimiterAdapter = new DatabaseRateLimiterAdapter({ * adapter: rateLimiterStorageAdapter * }); * ``` */ constructor(settings: DatabaseRateLimiterAdapterSettings); getState(context: IReadableContext, key: string): Promise<IRateLimiterAdapterState | null>; updateState(context: IReadableContext, key: string, limit: number): Promise<IRateLimiterAdapterState>; reset(context: IReadableContext, key: string): Promise<void>; }