UNPKG

guardz-axios

Version:

Type-safe HTTP client built on top of Axios with runtime validation using guardz. Part of the guardz ecosystem for comprehensive TypeScript type safety.

155 lines 4.56 kB
/** * Request Service - Core domain service for HTTP requests * Following Domain-Driven Design (DDD) principles */ import { RequestResult, CompleteRequestConfig } from "../domain/types"; /** * HTTP Client Interface - Dependency abstraction for testability * Following Dependency Inversion Principle */ export interface HttpClient { request(config: Record<string, unknown>): Promise<Record<string, unknown>>; } /** * Logger Interface - Dependency abstraction for testability * Following Dependency Inversion Principle */ export interface Logger { error(message: string, context?: unknown): void; warn(message: string, context?: unknown): void; info(message: string, context?: unknown): void; debug(message: string, context?: unknown): void; } /** * Request Service Configuration */ export interface RequestServiceConfig { httpClient: HttpClient; logger?: Logger; defaultTimeout?: number; defaultRetryConfig?: { attempts: number; delay: number; backoff: "linear" | "exponential"; }; enableDebugLogging?: boolean; } /** * Request Service - Core domain service * Following Single Responsibility Principle and Dependency Injection */ export declare class RequestService { private readonly httpClient; private readonly logger; private readonly defaultTimeout; private readonly defaultRetryConfig; private readonly enableDebugLogging; constructor(config: RequestServiceConfig); /** * Executes a request with validation and retry logic * Main domain operation following DDD principles * * @param config - Complete request configuration * @returns Promise resolving to request result */ executeRequest<T>(config: CompleteRequestConfig<T>): Promise<RequestResult<T>>; /** * Executes a single request without retry * Pure business logic following DDD principles * * @param config - Complete request configuration * @returns Promise resolving to request result */ private executeSingleRequest; /** * Executes request with retry logic * Business logic for retry behavior * * @param config - Complete request configuration * @returns Promise resolving to request result */ private executeWithRetry; /** * Validates response data using type guard * Pure business logic for validation * * @param response - HTTP response * @param config - Request configuration * @returns Request result with validated data or error */ private validateResponse; /** * Handles request errors with comprehensive error categorization * * @param error - Error that occurred * @param config - Request configuration * @returns Error result */ private handleRequestError; /** * Handles unexpected errors * Business logic for unexpected error handling * * @param error - Unexpected error * @param config - Request configuration * @returns Error result */ private handleUnexpectedError; /** * Validates request configuration * * @param config - Configuration to validate * @returns Error message if invalid, null if valid */ private validateConfiguration; /** * Prepares HTTP configuration for axios * * @param config - Request configuration * @returns HTTP configuration object */ private prepareHttpConfig; /** * Determines if error should be logged based on type and status * * @param errorType - Type of error * @param statusCode - HTTP status code * @returns Whether error should be logged */ private shouldLogError; /** * Sleep utility for retry delays * * @param ms - Milliseconds to sleep * @returns Promise that resolves after delay */ private sleep; /** * Creates default logger implementation * * @returns Default logger instance */ private createDefaultLogger; /** * Logs debug messages if debug logging is enabled * * @param message - Debug message * @param context - Debug context */ private logDebug; /** * Logs error messages * * @param message - Error message * @param context - Error context */ private logError; /** * Logs warning messages * * @param message - Warning message * @param context - Warning context */ private logWarn; } //# sourceMappingURL=request-service.d.ts.map