import { HttpMethod } from '../enum';
import { HttpContext } from './http-context';
export interface UseHttpClientParams {
    baseUrl: string;
}
export declare type AbortableHttpRequestReturn<HttpResponseT> = [
    res: Promise<HttpResponseT>,
    abort: AbortController
];
export interface PerformHttpRequestParams<HttpRequestBodyT, HttpResponseT> {
    relativeUrl: string;
    parser: HttpResponseParser<HttpResponseT>;
    baseUrlOverride: string;
    context: HttpContext;
    requestOptions: Partial<HttpRequestOptions<HttpRequestBodyT>>;
}
export declare type HttpClientRequest = <HttpResponseT, HttpRequestBodyT>(params: Partial<PerformHttpRequestParams<HttpRequestBodyT, HttpResponseT>>) => Promise<HttpResponseT>;
export declare type HttpClientAbortableRequest = <HttpResponseT, HttpRequestBodyT>(params: Partial<PerformHttpRequestParams<HttpRequestBodyT, HttpResponseT>>) => AbortableHttpRequestReturn<HttpResponseT>;
export interface UseHttpClientReturn {
    request: HttpClientRequest;
    get: HttpClientRequest;
    post: HttpClientRequest;
    put: HttpClientRequest;
    patch: HttpClientRequest;
    deleteReq: HttpClientRequest;
    abortableRequest: HttpClientAbortableRequest;
    abortableGet: HttpClientAbortableRequest;
    abortablePost: HttpClientAbortableRequest;
    abortablePatch: HttpClientAbortableRequest;
    abortablePut: HttpClientAbortableRequest;
    abortableDelete: HttpClientAbortableRequest;
}
export interface HttpRequestOptions<RequestBody> {
    body: RequestBody | null | undefined;
    credentials: RequestCredentials | undefined;
    headers?: HeadersInit;
    maxAge?: number;
    method: HttpMethod;
    queryParams?: Record<string, string>;
    signal?: AbortSignal;
}
export declare type HttpResponseParser<HttpResponse> = (response: Response) => Promise<HttpResponse>;
