import { ApiError } from '../../clients/errorHandler';
/**
 * HTTP client library based on request-promise
 */
export default class HttpClient {
    private _timeout;
    private _extendedTimeout;
    private _retries;
    private _minRetryDelay;
    private _maxRetryDelay;
    /**
     * @typedef {Object} RetryOptions retry options
     * @property {Number} [retries] the number of attempts to retry failed request, default 5
     * @property {Number} [minDelayInSeconds] minimum delay in seconds before retrying, default 1
     * @property {Number} [maxDelayInSeconds] maximum delay in seconds before retrying, default 30
     */
    /**
     * Constructs HttpClient class instance
     * @param {Number} [timeout] request timeout in seconds
     * @param {Number} [extendedTimeout] request timeout in seconds
     * @param {RetryOptions} [retryOpts] retry options
     */
    constructor(timeout?: number, extendedTimeout?: number, retryOpts?: RetryOptions);
    /**
     * Performs a request. Response errors are returned as ApiError or subclasses.
     * @param {Object} options request options
     * @param {Boolean} isExtendedTimeout whether to run the request with an extended timeout
     * @returns {Object|String|any} request result
     */
    request(options: any, isExtendedTimeout?: any): Promise<any>;
    /**
     * Performs a request with a failover. Response errors are returned as ApiError or subclasses.
     * @param {Object} options request options
     * @returns {Object|String|any} request result
     */
    requestWithFailover(options: any, retryCounter?: number, endTime?: number): any;
    _makeRequest(options: any): any;
    _wait(pause: any): Promise<void>;
    _handleRetry(endTime: any, retryAfter: any): Promise<void>;
    _handleError(err: any, retryCounter: any, endTime: any): Promise<any>;
    _convertError(err: any): ApiError;
}
/**
 * HTTP client service mock for tests
 */
export declare class HttpClientMock extends HttpClient {
    _requestFn: any;
    /**
     * Constructs HTTP client mock
     * @param {Function(options:Object):Promise} requestFn mocked request function
     * @param {Number} timeout request timeout in seconds
     * @param {RetryOptions} retryOpts retry options
     */
    constructor(requestFn: any, timeout?: any, extendedTimeout?: any, retryOpts?: any);
    _makeRequest(...args: any[]): any;
}
/**
 * retry options
 */
export declare type RetryOptions = {
    /**
     * the number of attempts to retry failed request, default 5
     */
    retries?: number;
    /**
     * minimum delay in seconds before retrying, default 1
     */
    minDelayInSeconds?: number;
    /**
     * maximum delay in seconds before retrying, default 30
     */
    maxDelayInSeconds?: number;
};
