/// <reference types="node" />
/// <reference types="node" />
import { Agent as HttpsAgent } from 'https';
import { Agent as HttpAgent } from 'http';
export type HTTPHeaders = {
    [key: string]: string;
};
type HttpClientFetchConfig = {
    headers?: HTTPHeaders;
    baseURL?: string;
    httpAgent?: HttpAgent;
    httpsAgent?: HttpsAgent;
    timeout?: number;
};
type AgentConfig = {
    agent?: HttpAgent | HttpsAgent;
    httpAgent?: HttpAgent;
    httpsAgent?: HttpsAgent;
};
export type RequestConfig = {
    json?: boolean;
    data?: object | string;
    url: string;
    headers?: HTTPHeaders;
    method: string;
    timeout?: number;
    params?: {
        [key: string]: string;
    };
    validateStatus?: Function;
} & AgentConfig;
export type FetchResult = {
    status: number;
    data?: any;
    config?: {
        [key: string]: any;
    };
    headers?: HTTPHeaders;
};
export declare class HttpClientFetch {
    private _config;
    constructor(config?: HttpClientFetchConfig);
    get headers(): HTTPHeaders;
    get baseURL(): string | undefined;
    get hasBaseUrl(): boolean;
    getTimeout(timeout: number | undefined): number;
    refreshAuthorizationHeader(token: string): void;
    getAgent(url: string, config: RequestConfig): HttpsAgent | HttpAgent | undefined;
    getUrl(url: string): string;
    request(req: RequestConfig): Promise<FetchResult>;
}
export declare function create(config?: HttpClientFetchConfig): HttpClientFetch;
export declare function request(req: RequestConfig): Promise<FetchResult>;
export {};
