///
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"
}