import { ApiTypeBinder, DeriveBodyType, DeriveErrorType, DeriveQueryType, DeriveResponseType, DeriveUrlType, ErrorResponse, HttpMethod, QueryParams } from "@nu-art/ts-common";
import { RequestErrorHandler } from "./http-module";
export declare class HttpException extends Error {
    constructor(responseCode: number, url: string);
}
export declare class HttpRequest<Binder extends ApiTypeBinder<U, R, B, P>, U extends string = DeriveUrlType<Binder>, R = DeriveResponseType<Binder>, B = DeriveBodyType<Binder>, P extends QueryParams = DeriveQueryType<Binder>, E extends void | object = DeriveErrorType<Binder>> {
    private readonly requestKey;
    private readonly requestData;
    private origin;
    private headers;
    private method;
    private timeout;
    private body;
    private url;
    private params;
    private onProgressListener;
    xhr: XMLHttpRequest;
    private label;
    private errorMessage;
    private successMessage;
    private onResponseListener;
    private handleRequestSuccess;
    private handleRequestFailure;
    private aborted;
    private compress;
    constructor(requestKey: string, requestData?: string);
    setOrigin(origin: string): this;
    setOnError(errorMessage: string | RequestErrorHandler<E>): this;
    setOnSuccessMessage(successMessage: string): this;
    setOnResponseListener(listener: (response: R) => void): this;
    setLabel(label: string): this;
    setMethod(method: HttpMethod): this;
    setUrlParams(params: P): this;
    setUrlParam<K extends keyof P = keyof P>(key: K, value: P[K]): this;
    setUrl(url: string): this;
    setRelativeUrl(relativeUrl: U): this;
    setTimeout(timeout: number): this;
    setOnProgressListener(onProgressListener: (ev: ProgressEvent) => void): this;
    setHeaders(headers: {
        [s: string]: string | string[];
    }): this;
    addHeaders(headers: {
        [s: string]: string | string[];
    }): this;
    setHeader(_key: string, value: string | string[]): this;
    addHeader(_key: string, value: string | string[]): this;
    removeHeader(key: string): this;
    private _addHeaderImpl;
    setJsonBody(bodyObject: B, compress?: boolean): this;
    setBody(bodyAsString: BodyInit, compress?: boolean): this;
    asJson(): R;
    asText(): R;
    private resolveResponse;
    execute(responseHandler?: (response: R) => Promise<void> | void): this;
    getErrorResponse(): ErrorResponse<E>;
    executeSync(): Promise<R>;
    abort(): void;
    private executeImpl;
}
