import { ApiTypeBinder, DeriveBodyType, DeriveQueryType, DeriveResponseType, DeriveUrlType, ErrorResponse, HttpMethod, Module, QueryParams } from "@nu-art/ts-common";
import { HttpRequest } from "./http-request";
declare type HttpConfig = {
    origin: string;
    timeout: number;
};
export interface OnRequestListener {
    onRequestCompleted: (key: string, success: boolean, requestData?: string) => void;
}
export declare const ErrorHandler_Toast: RequestCompletionHandler;
export declare const SuccessHandler_Toast: RequestCompletionHandler;
export declare type RequestCompletionHandler = (key: string, message: string) => void;
export declare type RequestErrorHandler<E extends void | object> = (resError: ErrorResponse<E>, xhr: XMLHttpRequest, requestKey: string, errorMessage?: string, requestData?: string) => void;
export declare type RequestSuccessHandler = (requestKey: string, successMessage?: string, requestData?: string) => void;
export declare class HttpModule_Class extends Module<HttpConfig> {
    private dispatch_onRequestCompleted;
    private errorHandlers;
    private successHandlers;
    private origin;
    private timeout;
    private responseHandler?;
    private defaultHeaders;
    constructor();
    addDefaultHeader(key: string, header: () => string | string[]): void;
    init(): void;
    protected validate(): void;
    createRequest: <Binder extends ApiTypeBinder<U, R, B, P, any> = ApiTypeBinder<void, void, void, {}, any>, U extends string = DeriveUrlType<Binder>, R = DeriveResponseType<Binder>, B = DeriveBodyType<Binder>, P extends QueryParams = DeriveQueryType<Binder>>(method: HttpMethod, key: string, data?: string | undefined) => HttpRequest<DeriveRealBinder<Binder>, DeriveUrlType<DeriveRealBinder<Binder>>, DeriveResponseType<DeriveRealBinder<Binder>>, DeriveBodyType<DeriveRealBinder<Binder>>, DeriveQueryType<DeriveRealBinder<Binder>>, import("@nu-art/ts-common").DeriveErrorType<DeriveRealBinder<Binder>>>;
    processDefaultResponseHandlers: (httpRequest: HttpRequest<any, any, any, any, any, any>) => boolean | undefined;
    addResponseHandler(responseHandler: (request: HttpRequest<any>) => boolean): void;
    setErrorHandlers(errorHandlers: RequestCompletionHandler[]): void;
    setSuccessHandlers(successHandlers: RequestCompletionHandler[]): void;
    handleRequestFailure: RequestErrorHandler<any>;
    handleRequestSuccess: RequestSuccessHandler;
}
export declare type DeriveRealBinder<Binder> = Binder extends ApiTypeBinder<infer U, infer R, infer B, infer P> ? ApiTypeBinder<U, R, B, P> : void;
export declare const HttpModule: HttpModule_Class;
export {};
