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