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