import { ApiTypeBinder, ErrorResponse, HttpMethod, QueryParams } from "./types";
import { RequestErrorHandler, RequestSuccessHandler, TS_Progress } from "./request-types";
type DefaultHeaders = {
    [s: string]: ((url: string) => string | string[]) | string | string[];
};
export declare abstract class BaseHttpRequest<Binder extends ApiTypeBinder<U, R, B, P, E>, U extends string = Binder["url"], R = Binder["response"], B = Binder["body"], P extends QueryParams = Binder["queryParams"], E extends void | object = Binder["error"]> {
    key: string;
    requestData: string | undefined;
    errorMessage: string;
    successMessage: string;
    protected origin?: string;
    protected headers: {
        [s: string]: string[];
    };
    protected method: HttpMethod;
    protected timeout: number;
    protected body: B;
    protected url: string;
    protected params?: P;
    protected responseType: string;
    private defaultHeaders;
    protected label: string;
    protected onProgressListener: (ev: TS_Progress) => void;
    protected handleRequestSuccess: RequestSuccessHandler;
    protected handleRequestFailure: RequestErrorHandler<E>;
    protected onError?: RequestErrorHandler<E>;
    protected aborted: boolean;
    protected compress: boolean;
    private defaultResponseHandler?;
    constructor(requestKey: string, requestData?: string);
    setHandleRequestSuccess(handleRequestSuccess: RequestSuccessHandler): this;
    setHandleRequestFailure(handleRequestFailure: RequestErrorHandler<E>): this;
    getErrorMessage(): string;
    getSuccessMessage(): string;
    getRequestData(): string | undefined;
    setOrigin(origin?: string): this;
    setOnError(errorMessage: string | RequestErrorHandler<E>): this;
    setOnSuccessMessage(successMessage: string): this;
    setOnProgressListener(onProgressListener: (ev: TS_Progress) => void): this;
    setDefaultRequestHandler(processDefaultResponseHandlers: (request: BaseHttpRequest<any>) => boolean): this;
    setLabel(label: string): this;
    setMethod(method: HttpMethod): this;
    setResponseType(responseType: string): 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;
    setHeaders(headers: {
        [s: string]: string | string[];
    }): this;
    setDefaultHeaders(headers: DefaultHeaders): 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;
    protected _addHeaderImpl(key: string, value: string | string[]): this;
    setJsonBody(bodyObject: B, compress?: boolean): this;
    protected prepareJsonBody(bodyObject: B): any;
    setBody(bodyAsString: any, _compress?: boolean): this;
    asJson(): R;
    asText(): NonNullable<R>;
    protected resolveResponse(): R;
    private handleFailure;
    private isValidStatus;
    executeSync(): Promise<R>;
    execute(responseHandler?: (response: R, data?: string) => Promise<void> | void): this;
    getUrl: () => string;
    abstract getResponse(): R;
    abstract getErrorResponse(): ErrorResponse<E>;
    protected abstract abortImpl(): void;
    abstract getStatus(): number;
    abstract getResponseHeader(headerKey: string): string | undefined;
    abort(): void;
    protected abstract executeImpl(): Promise<void>;
    private addDefaultHeaders;
}
export {};
