UNPKG

@kitstack/nest-powertools

Version:

A comprehensive collection of NestJS powertools, decorators, and utilities to supercharge your backend development

45 lines (44 loc) 1.98 kB
import type { HttpService } from '@nestjs/axios'; import { Observable } from 'rxjs'; import type { AxiosRequestConfig, AxiosResponse } from 'axios'; import type { ResilientHttpConfig, CircuitBreakerConfig, CircuitBreakerStats, HttpRequestMetrics } from '../types/hooks'; export declare class CircuitBreaker { private config; private state; private failureCount; private successCount; private lastFailureTime?; private nextAttemptTime?; private readonly logger; constructor(config: CircuitBreakerConfig); execute<T>(operation: () => Observable<T>): Promise<Observable<T>>; private shouldAttemptReset; private handleOpenCircuit; private onSuccess; private onFailure; getStats(): CircuitBreakerStats; reset(): void; } export declare class ResilientHttpService { private httpService; private readonly logger; private circuitBreakers; private metrics; constructor(httpService: HttpService); get<T = any>(url: string, config?: AxiosRequestConfig & ResilientHttpConfig): Observable<AxiosResponse<T>>; post<T = any>(url: string, data?: any, config?: AxiosRequestConfig & ResilientHttpConfig): Observable<AxiosResponse<T>>; put<T = any>(url: string, data?: any, config?: AxiosRequestConfig & ResilientHttpConfig): Observable<AxiosResponse<T>>; delete<T = any>(url: string, config?: AxiosRequestConfig & ResilientHttpConfig): Observable<AxiosResponse<T>>; patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig & ResilientHttpConfig): Observable<AxiosResponse<T>>; private makeRequest; private applyRetryLogic; private getOrCreateCircuitBreaker; private getCircuitBreakerKey; private extractResilientConfig; private extractAxiosConfig; private recordMetrics; getCircuitBreakerStats(url?: string): CircuitBreakerStats[]; getMetrics(limit?: number): HttpRequestMetrics[]; resetCircuitBreaker(url: string): void; clearMetrics(): void; }