@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.
63 lines (62 loc) • 2.14 kB
TypeScript
/**
* @module CircuitBreaker
*/
import { type CircuitBreakerState, type CircuitBreakerTrigger, type ICircuitBreaker, type ICircuitBreakerAdapter, type CircuitBreakerEventMap } from "../../../../circuit-breaker/contracts/_module.js";
import { type IEventDispatcher } from "../../../../event-bus/contracts/_module.js";
import { type Key, type Namespace } from "../../../../namespace/_module.js";
import { type ITask } from "../../../../task/contracts/_module.js";
import { TimeSpan } from "../../../../time-span/implementations/_module.js";
import { type AsyncLazy, type ErrorPolicy } from "../../../../utilities/_module.js";
/**
* @internal
*/
export type CircuitBreakerSettings = {
enableAsyncTracking: boolean;
eventDispatcher: IEventDispatcher<CircuitBreakerEventMap>;
adapter: ICircuitBreakerAdapter;
key: Key;
slowCallTime: TimeSpan;
errorPolicy: ErrorPolicy;
trigger: CircuitBreakerTrigger;
serdeTransformerName: string;
namespace: Namespace;
};
/**
* @internal
*/
export type ISerializedCircuitBreaker = {
version: "1";
key: string;
};
/**
* @internal
*/
export declare class CircuitBreaker implements ICircuitBreaker {
/**
* @internal
*/
static _internal_serialize(deserializedValue: CircuitBreaker): ISerializedCircuitBreaker;
private readonly _key;
private readonly errorPolicy;
private readonly trigger;
private readonly slowCallTime;
private readonly adapter;
private readonly eventDispatcher;
private readonly serdeTransformerName;
private readonly namespace;
private readonly enableAsyncTracking;
constructor(settings: CircuitBreakerSettings);
_internal_getNamespace(): Namespace;
_internal_getSerdeTransformerName(): string;
_internal_getAdapter(): ICircuitBreakerAdapter;
get key(): string;
getState(): ITask<CircuitBreakerState>;
private trackFailure;
private trackSuccess;
private trackErrorWrapper;
private trackSlowCallWrapper;
private guard;
runOrFail<TValue = void>(asyncFn: AsyncLazy<TValue>): ITask<TValue>;
reset(): ITask<void>;
isolate(): ITask<void>;
}