import { Emitter, FetchFunction, FetchHeaders, FetchResponse } from "../types";
interface HttpOptions {
    timeout?: number | null;
    requestMode?: RequestMode;
    fetchFunc?: FetchFunction;
}
interface RequestOptions {
    retry: number;
}
export interface HttpResponse<T> {
    status: number;
    json: T;
    headers: FetchHeaders;
}
/**
 * Enhanced HTTP client for the Kinto protocol.
 * @private
 */
export default class HTTP {
    /**
     * Default HTTP request headers applied to each outgoing request.
     *
     * @type {Object}
     */
    static get DEFAULT_REQUEST_HEADERS(): Record<string, string>;
    /**
     * Default options.
     *
     * @type {Object}
     */
    static get defaultOptions(): HttpOptions;
    events?: Emitter;
    requestMode: RequestMode;
    timeout: number;
    fetchFunc: FetchFunction;
    /**
     * Constructor.
     *
     * @param {EventEmitter} events                       The event handler.
     * @param {Object}       [options={}}                 The options object.
     * @param {Number}       [options.timeout=null]       The request timeout in ms, if any (default: `null`).
     * @param {String}       [options.requestMode="cors"] The HTTP request mode (default: `"cors"`).
     */
    constructor(events?: Emitter, options?: HttpOptions);
    /**
     * @private
     */
    timedFetch(url: string, options: RequestInit): Promise<FetchResponse>;
    /**
     * @private
     */
    processResponse<T>(response: FetchResponse): Promise<HttpResponse<T>>;
    /**
     * @private
     */
    retry<T>(url: string, retryAfter: number, request: RequestInit, options: RequestOptions): Promise<HttpResponse<T>>;
    /**
     * Performs an HTTP request to the Kinto server.
     *
     * Resolves with an objet containing the following HTTP response properties:
     * - `{Number}  status`  The HTTP status code.
     * - `{Object}  json`    The JSON response body.
     * - `{Headers} headers` The response headers object; see the ES6 fetch() spec.
     *
     * @param  {String} url               The URL.
     * @param  {Object} [request={}]      The request object, passed to
     *     fetch() as its options object.
     * @param  {Object} [request.headers] The request headers object (default: {})
     * @param  {Object} [options={}]      Options for making the
     *     request
     * @param  {Number} [options.retry]   Number of retries (default: 0)
     * @return {Promise}
     */
    request<T>(url: string, request?: RequestInit, options?: RequestOptions): Promise<HttpResponse<T>>;
    _checkForDeprecationHeader(headers: FetchHeaders): void;
    _checkForBackoffHeader(headers: FetchHeaders): void;
    _checkForRetryAfterHeader(headers: FetchHeaders): number | null;
}
export {};
