import { Injector } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';
import { BaseRemoteMethod, BaseRemoteMethodMetadata } from '@rxap/remote-method';
import * as i0 from "@angular/core";
export interface HttpRemoteMethodMetadata extends BaseRemoteMethodMetadata {
    url: string | (() => string);
    method: 'DELETE' | 'GET' | 'HEAD' | 'JSONP' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH';
    headers?: HttpHeaders;
    reportProgress?: boolean;
    params?: HttpParams;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
    timeout?: number;
    retry?: number;
}
export interface HttpRemoteMethodParameter<PathParams = any> {
    headers?: HttpHeaders;
    reportProgress?: boolean;
    params?: HttpParams;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
    body?: any | null;
    setHeaders?: {
        [name: string]: string | string[];
    };
    setParams?: {
        [param: string]: string;
    };
    pathParams?: PathParams;
}
export declare abstract class BaseHttpRemoteMethod<ReturnType = any, PathParams = any, Parameter extends object = HttpRemoteMethodParameter<PathParams>, MetaData extends HttpRemoteMethodMetadata = HttpRemoteMethodMetadata> extends BaseRemoteMethod<ReturnType, Parameter, MetaData> {
    readonly http: HttpClient;
    timeout: number;
    protected _httpRequest: HttpRequest<ReturnType>;
    constructor(http: HttpClient, injector: Injector, metaData?: any | null);
    init(): void;
    updateRequest(parameters: Partial<HttpRemoteMethodParameter>): HttpRequest<ReturnType>;
    buildUrlWithParams(url: string, pathParams?: PathParams): string;
    protected getRequestUrl(): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseHttpRemoteMethod<any, any, any, any>, [null, null, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<BaseHttpRemoteMethod<any, any, any, any>>;
}
export interface HttpRemoteMethodMetadata extends BaseRemoteMethodMetadata {
    url: string | (() => string);
    method: 'DELETE' | 'GET' | 'HEAD' | 'JSONP' | 'OPTIONS' | 'POST' | 'PUT' | 'PATCH';
    headers?: HttpHeaders;
    reportProgress?: boolean;
    params?: HttpParams;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
}
export interface HttpRemoteMethodParameter<PathParams = any> {
    headers?: HttpHeaders;
    reportProgress?: boolean;
    params?: HttpParams;
    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
    withCredentials?: boolean;
    body?: any | null;
    setHeaders?: {
        [name: string]: string | string[];
    };
    setParams?: {
        [param: string]: string;
    };
    pathParams?: PathParams;
}
