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
TypeScript
/**
* 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