@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
TypeScript
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;
}