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.

67 lines (66 loc) 2.9 kB
/** * @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>; }