import { FileObject } from './models/file_object.cjs';
import { HttpClientConfig } from './models/http_client_config.port.cjs';

declare type HttpResponse<T, R = never> = T;
declare type HttpClient<C, R = never> = {
    getClient(): C;
    setClient(client: C): void;
    setOptions(configs: HttpClientConfig): HttpClientConfig;
    getOptions(): HttpClientConfig;
    get<T>(url: string, data?: any, configs?: HttpClientConfig): Promise<HttpResponse<T, R>>;
    getFile<T extends FileObject>(url: string, data?: any, configs?: HttpClientConfig): Promise<HttpResponse<T, R> | undefined>;
    post<T>(url: string, data: any, configs?: HttpClientConfig): Promise<HttpResponse<T, R>>;
    put<T>(url: string, data: any, configs?: HttpClientConfig): Promise<HttpResponse<T, R>>;
    delete<T>(url: string, data: any, configs?: HttpClientConfig): Promise<HttpResponse<T, R>>;
    custom<T>(request: {
        url: string;
        method: `get` | `post` | `put` | `delete` | `list` | `patch` | `head` | `options`;
        data?: any;
        configs?: HttpClientConfig;
    }): Promise<HttpResponse<T, R>>;
};

export { HttpClient, HttpResponse };
