@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.
67 lines (66 loc) • 2.9 kB
TypeScript
/**
* @module CircuitBreaker
*/
import { type BackoffPolicy } from "../../../../backoff-policies/contracts/_module.js";
import { type ICircuitBreakerAdapter, type ICircuitBreakerStorageAdapter, type CircuitBreakerState, type CircuitBreakerStateTransition, type ICircuitBreakerPolicy } from "../../../../circuit-breaker/contracts/_module.js";
import { type IReadableContext } from "../../../../execution-context/contracts/_module.js";
/**
* Configuration for `DatabaseCircuitBreakerAdapter`.
* Wraps a {@link ICircuitBreakerStorageAdapter | `ICircuitBreakerStorageAdapter`} with circuit-breaker logic.
*
* IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter"`
* @group Adapters
*/
export type DatabaseCircuitBreakerAdapterSettings = {
/**
* The underlying storage adapter used to persist and retrieve circuit-breaker state.
*/
adapter: ICircuitBreakerStorageAdapter;
/**
* 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 ICircuitBreakerPolicy | `ICircuitBreakerPolicy`}.
* @default
* ```ts
* import { ConsecutiveBreaker } from "@daiso-tech/core/circuit-breaker/policies";
*
* new ConsecutiveBreaker();
* ```
*/
circuitBreakerPolicy?: ICircuitBreakerPolicy;
};
/**
* IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter"`
* @group Adapters
*/
export declare class DatabaseCircuitBreakerAdapter<TMetrics = unknown> implements ICircuitBreakerAdapter {
private readonly circuitBreakerStorage;
private readonly circuitBreakerStateManager;
/**
* @example
* ```ts
* import { DatabaseCircuitBreakerAdapter } from "@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter";
* import { MemoryCircuitBreakerStorageAdapter } from "@daiso-tech/core/circuit-breaker/memory-circuit-breaker-storage-adapter";
*
* const circuitBreakerStorageAdapter = new MemoryCircuitBreakerStorageAdapter();
* const circuitBreakerAdapter = new DatabaseCircuitBreakerAdapter({
* adapter: circuitBreakerStorageAdapter
* });
* ```
*/
constructor(settings: DatabaseCircuitBreakerAdapterSettings);
getState(context: IReadableContext, key: string): Promise<CircuitBreakerState>;
updateState(context: IReadableContext, key: string): Promise<CircuitBreakerStateTransition>;
trackFailure(context: IReadableContext, key: string): Promise<void>;
trackSuccess(context: IReadableContext, key: string): Promise<void>;
reset(context: IReadableContext, key: string): Promise<void>;
isolate(context: IReadableContext, key: string): Promise<void>;
}