import { AxiosRequestConfig } from 'axios';
import { HttpClient, IHttpLogger, IHttpStatsClient } from './clients/types';
export { ApiResponse, ApplicationErrorApiResponse, ClientErrorApiResponse, SuccessfulApiResponse, ResponseParser, IHttpLogger, IHttpStatsClient, } from './clients/types';
export declare enum ClientNames {
    Axios = "axios"
}
export type clientOptions = AxiosRequestConfig;
/**
 * @class HttpClientFactory
 * @classdesc
 * A factory class to generate http clients
 * @example
 * const httpClient = HttpClientFactory.getHttpClient('axios');
 * const response = await httpClient.post("https://example.com", { foo: "bar" });
 * if (response.type === "success") {
 * console.log(response.statusCode);
 * console.log(response.responseBody);
 * } else if (response.type === "application-error") {
 * console.log(response.statusCode);
 * console.log(response.message);
 * console.log(response.responseBody);
 * } else if (response.type === "client-error") {
 * console.log(response.statusCode);
 * console.log(response.message);
 * }
 */
export declare class HttpClientFactory {
    static getHttpClient(name: ClientNames, options?: clientOptions): HttpClient;
    /**
     * Create HTTP client with metrics and logging capabilities
     * @param name - Client name (currently only supports Axios)
     * @param logger - Logger instance for request/response logging
     * @param statsClient - Stats client instance for metrics collection
     * @param defaultStatTags - Default stat tags for all requests
     * @param options - Axios configuration options
     * @returns Enhanced HTTP client with logging and metrics
     */
    static getHttpClientWithMetrics(name: ClientNames, logger?: IHttpLogger, statsClient?: IHttpStatsClient, defaultStatTags?: Record<string, unknown>, options?: clientOptions): HttpClient;
}
//# sourceMappingURL=factory.d.ts.map