import { type HttpMethod } from '../../application/index.js';
import type { HttpError } from '../../domain/types/http-error.js';
import type { Logger } from '../../domain/types/logger.js';
import type { SessionStorage } from './session-storage.js';
export interface RequestOptions {
    headers?: Record<string, string>;
    timeout?: number;
    params?: Record<string, string | number | boolean>;
    cookies?: string[];
}
export type HttpResponse<T> = {
    data: T | null;
    success: boolean;
    error?: HttpError;
    cookies?: string[];
};
export type HttpClient = {
    get<T>(url: string, options?: RequestOptions): Promise<HttpResponse<T>>;
    post<T>(url: string, data?: unknown, options?: RequestOptions): Promise<HttpResponse<T>>;
    put<T>(url: string, data?: unknown, options?: RequestOptions): Promise<HttpResponse<T>>;
    patch<T>(url: string, data?: unknown, options?: RequestOptions): Promise<HttpResponse<T>>;
    delete<T>(url: string, options?: RequestOptions): Promise<HttpResponse<T>>;
};
export type HttpClientConfig = {
    timeout?: number;
    headers?: Record<string, string>;
    enableCookies?: boolean;
    maxRedirects?: number;
    enableBrowserHeaders?: boolean;
    retryAttempts?: number;
    retryDelay?: number;
    retryBackoff?: number;
    retryMaxDelay?: number;
    retryJitter?: boolean;
    logger?: Logger;
    sessionStorage?: SessionStorage;
};
export type InternalRequestConfig = {
    url: string;
    method: HttpMethod;
    data?: unknown;
    options?: RequestOptions;
};
//# sourceMappingURL=http-client.d.ts.map