@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.
57 lines (56 loc) • 2.12 kB
TypeScript
/**
* @module RateLimiter
*/
import { type BackoffPolicy } from "../../../../backoff-policies/_module.js";
import { type IRateLimiterAdapter, type IRateLimiterAdapterState, type IRateLimiterPolicy, type IRateLimiterStorageAdapter } from "../../../../rate-limiter/contracts/_module.js";
/**
* IMPORT_PATH: `"@daiso-tech/core/rate-limiter/database-rate-limiter-adapter"`
* @group Adapters
*/
export type DatabaseRateLimiterAdapterSettings = {
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(key: string): Promise<IRateLimiterAdapterState | null>;
updateState(key: string, limit: number): Promise<IRateLimiterAdapterState>;
reset(key: string): Promise<void>;
}