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