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.

69 lines (68 loc) 2.74 kB
/** * @module CircuitBreaker */ import { type Redis, type Result } from "ioredis"; import { type BackoffSettingsEnum } from "../../../../backoff-policies/_module.js"; import { type CircuitBreakerStateTransition, type ICircuitBreakerAdapter, type CircuitBreakerState } from "../../../../circuit-breaker/contracts/_module.js"; import { type CircuitBreakerPolicySettingsEnum } from "../../../../circuit-breaker/implementations/policies/_module.js"; /** * IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/redis-circuit-breaker-adapter"` * @group Adapters */ export type RedisCircuitBreakerAdapterSettings = { database: Redis; /** * You can choose between different types of predefined backoff policies. * @default * ```ts * { type: BACKOFFS.EXPONENTIAL } * ``` */ backoff?: BackoffSettingsEnum; /** * You can choose between different types of predefined circuit breaker policies. * @default * ```ts * { type: POLICIES.CONSECUTIVE } * ``` */ policy?: CircuitBreakerPolicySettingsEnum; }; declare module "ioredis" { interface RedisCommander<Context> { daiso_circuit_breaker_update_state(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>; daiso_circuit_breaker_track_failure(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<void, Context>; daiso_circuit_breaker_track_success(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<void, Context>; } } /** * IMPORT_PATH: `"@daiso-tech/core/circuit-breaker/redis-circuit-breaker-adapter"` * @group Adapters */ export declare class RedisCircuitBreakerAdapter implements ICircuitBreakerAdapter { private readonly backoff; private readonly policy; private readonly database; /** * @example * ```ts * import { RedisCircuitBreakerAdapter } from "@daiso-tech/core/circuit-breaker/redis-circuit-breaker-adapter"; * import Redis from "ioredis"; * * const database = new Redis("YOUR_REDIS_CONNECTION_STRING"); * const circuitBreakerAdapter = new RedisCircuitBreakerAdapter({ * database * }); * ``` */ constructor(settings: RedisCircuitBreakerAdapterSettings); private initUpdateStateCommmand; private initTrackFailureCommmand; private initTrackSuccessCommmand; getState(key: string): Promise<CircuitBreakerState>; updateState(key: string): Promise<CircuitBreakerStateTransition>; isolate(key: string): Promise<void>; trackFailure(key: string): Promise<void>; trackSuccess(key: string): Promise<void>; reset(key: string): Promise<void>; }