/// import { AgentOptions } from 'http'; export type HttpClientOptions = { agent?: AgentOptions; dnsCache?: DnsCacheOptions; metrics: MetricsOptions; }; export interface Logger { info(obj: unknown, msg?: string, ...args: any[]): void; error(obj: unknown, msg?: string, ...args: any[]): void; } export type DnsCacheOptions = { maxTtlInSeconds?: number; errorTtlInSeconds?: number; enabled: boolean; }; export type MetricsOptions = { enabled: boolean; originService: string; }; export interface HttpClient { get(url: string, options: RequestOptions): Promise>; post(url: string, body: any, options: RequestOptions): Promise>; patch(url: string, body: any, options: RequestOptions): Promise>; put(url: string, body: any, options: RequestOptions): Promise>; delete(url: string, options: RequestOptions): Promise>; request(method: HttpMethod, url: string, options: RequestOptions): Promise>; } export type Response = { data: T; status: number; }; export type RequestOptions = { headers?: Record; params?: Record; data?: any; timeout?: number; maxRedirects?: number; validateStatus: (statusCode: number) => boolean; retry?: RetryOptions; pathParams?: Record; externalStoreId?: string; metricEnabled?: boolean; logging?: LoggingOptions; isInstabilityError?: (errorCode: string | undefined, statusCode: number | undefined, responseData: any) => boolean; }; export type LoggingOptions = { logRequest?: boolean; logResponse?: boolean; redactRequestFields?: string[]; redactResponseFields?: string[]; }; export type RetryOptions = { retryOn502?: boolean; retryOnTimeout?: boolean; retryOnAbort?: boolean; retryOnStatusCodes?: number[]; maxAttempts?: number; startingDelay?: number; maxDelayBetweenAttempts?: number; delayFirstAttempt?: boolean; timeMultiple?: number; jitter?: Jitter; }; export declare enum Jitter { None = "none", Full = "full" } export declare enum HttpMethod { GET = "get", POST = "post", PATCH = "patch", PUT = "put", DELETE = "delete", HEAD = "head", OPTIONS = "options", PURGE = "purge", LINK = "link", UNLINK = "unlink" }