/**
 * @module CircuitBreaker
 */
import { type BackoffPolicy } from "../../../../backoff-policies/_module.js";
import { type ICircuitBreakerAdapter, type ICircuitBreakerStorageAdapter, type CircuitBreakerState, type CircuitBreakerStateTransition, type ICircuitBreakerPolicy } from "../../../../circuit-breaker/contracts/_module.js";
/**
 * IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/database-circuit-breaker-adapter"`
 * @group Adapters
 */
export type DatabaseCircuitBreakerAdapterSettings = {
    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(key: string): Promise<CircuitBreakerState>;
    updateState(key: string): Promise<CircuitBreakerStateTransition>;
    trackFailure(key: string): Promise<void>;
    trackSuccess(key: string): Promise<void>;
    reset(key: string): Promise<void>;
    isolate(key: string): Promise<void>;
}
