/**
 * Опции повторных попыток запроса
 */
export interface RetryOptions {
    /**
     * Максимальное количество повторных попыток
     */
    maxRetries?: number;
    /**
     * Базовая задержка между попытками (в мс)
     */
    retryDelay?: number;
    /**
     * Максимальная задержка между попытками (в мс)
     */
    maxRetryDelay?: number;
    /**
     * HTTP статусы, для которых нужно делать повторную попытку
     */
    retryStatusCodes?: number[];
    /**
     * Глобально отключить повторные попытки
     */
    disabled?: boolean;
}
/**
 * Опции HTTP клиента
 */
export interface HttpClientOptions {
    /**
     * HTTP заголовки
     */
    headers?: Record<string, string>;
    /**
     * Таймаут запроса (в мс)
     */
    timeout?: number;
    /**
     * Опции повторных попыток
     */
    retry?: RetryOptions;
    /**
     * HTTPS агент для Node.js среды
     * В браузере не используется
     */
    httpsAgent?: any;
}
/**
 * Опции запроса
 */
export interface RequestOptions {
    /**
     * URL для запроса (относительно baseURL)
     */
    url: string;
    /**
     * HTTP метод
     */
    method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
    /**
     * Данные для отправки (для POST, PUT, PATCH)
     */
    data?: any;
    /**
     * Query параметры
     */
    params?: Record<string, any>;
    /**
     * HTTP заголовки для этого запроса
     */
    headers?: Record<string, string>;
    /**
     * Таймаут для этого запроса (в мс)
     */
    timeout?: number;
    /**
     * Отключить автоматические повторные попытки для этого запроса
     */
    noRetry?: boolean;
    /**
     * Тип ответа (stream для потоковой передачи)
     */
    responseType?: 'json' | 'text' | 'stream';
}
/**
 * Интерфейс HTTP клиента
 */
export interface IHttpClient {
    /**
     * Выполняет HTTP запрос
     */
    request<T = any>(options: RequestOptions): Promise<T>;
    /**
     * Выполняет GET запрос
     */
    get<T = any>(url: string, params?: Record<string, any>, headers?: Record<string, string>): Promise<T>;
    /**
     * Выполняет POST запрос
     */
    post<T = any>(url: string, data?: any, headers?: Record<string, string>): Promise<T>;
    /**
     * Выполняет PUT запрос
     */
    put<T = any>(url: string, data?: any, headers?: Record<string, string>): Promise<T>;
    /**
     * Выполняет DELETE запрос
     */
    delete<T = any>(url: string, params?: Record<string, any>, headers?: Record<string, string>): Promise<T>;
    /**
     * Выполняет PATCH запрос
     */
    patch<T = any>(url: string, data?: any, headers?: Record<string, string>): Promise<T>;
    /**
     * Выполняет POST запрос с потоковым ответом
     */
    postStream(url: string, data?: any, headers?: Record<string, string>): Promise<Response>;
}
//# sourceMappingURL=http-client.d.ts.map