import { AxiosResponse, InternalAxiosRequestConfig } from 'axios'; import { Headers, Parameters, RequestCanceler, URL, UnauthorizedCallback } from './types'; import { RetryOptions } from './retryWithBackoff'; export { RequestCanceler } from './types'; export interface CustomInterceptor { request?: { onFulfilled?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig | Promise; onRejected?: (error: unknown) => unknown; }; response?: { onFulfilled?: (response: AxiosResponse) => AxiosResponse; onRejected?: (error: unknown) => unknown; }; } type NonZero = N extends 0 ? never : N; type GlobalRetryOptions = Omit & { maxRetries?: NonZero; }; export declare class HttpClient { private readonly axios; private readonly unauthorizedCallback; private retryOptions?; static globalInterceptors: CustomInterceptor[]; static globalRetryOptions?: RetryOptions; static setGlobalInterceptors(interceptors: CustomInterceptor[]): void; /** * Enables global retry with backoff for rate limit errors (429) across every HttpClient instance. * @param [options] - Optional retry configuration options * @param [options.maxRetries] - Maximum number of retry attempts (default: 5) * @param [options.maxRetryAfter] - Maximum wait time in ms regardless of retry-after header value (default: 70000) * @param [options.onRetry] - Callback invoked before each retry with the attempt number and delay in ms */ static enableGlobalRetry(options?: GlobalRetryOptions): void; static create(baseURL: URL, unauthorizedCallback?: UnauthorizedCallback, retryOptions?: RetryOptions): HttpClient; private constructor(); private execute; /** * Requests a GET * @param url * @param headers */ get(url: URL, headers: Headers): Promise; /** * Requests a GET * @param url * @param params * @param headers */ getWithParams(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a GET that returns raw binary bytes together with the response * headers. Useful for endpoints that stream files where the caller needs * `Content-Type`, `Content-Length` or `Content-Disposition`. * * Bypasses the response interceptor so headers are preserved. * * @param url * @param params * @param headers */ getBinary(url: URL, params: Parameters, headers: Headers): Promise<{ data: ArrayBuffer; headers: Record; }>; /** * Requests a GET with option to cancel * @param url * @param headers */ getCancellable(url: URL, headers: Headers): { promise: Promise; requestCanceler: RequestCanceler; }; /** * Requests a POST * @param url * @param params * @param headers */ post(url: URL, params: Parameters, headers: Headers, signal?: AbortSignal): Promise; /** * Requests a POST with fetch adapter and keep-alive option * @param url * @param params * @param headers */ postWithKeepAlive(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a POST FORM * @param url * @param params * @param headers */ postForm(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a POST FORM with option to cancel * @param url * @param params * @param headers */ postFormCancellable(url: URL, params: Parameters, headers: Headers): { promise: Promise; requestCanceler: RequestCanceler; }; /** * Requests a POST with option to cancel * @param url * @param params * @param headers */ postCancellable(url: URL, params: Parameters, headers: Headers): { promise: Promise; requestCanceler: RequestCanceler; }; /** * Requests PATCH * @param url * @param params * @param headers */ patch(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a PUT * @param url * @param params * @param headers */ put(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a PUT FORM * @param url * @param params * @param headers */ putForm(url: URL, params: Parameters, headers: Headers): Promise; /** * Requests a DELETE * @param url * @param headers * @param params */ delete(url: URL, headers: Headers, params?: Parameters): Promise; /** * Sets middlewares into the client for common behaviour managing * @private */ private initializeMiddleware; /** * Extracts the valuable data from the server's response * @param response * @private */ private static extractData; /** * Converts the specific client error into a proprietary error for our apps * @param error * @private */ private normalizeError; }