import { AxiosInterceptorOptions, InternalAxiosRequestConfig, AxiosResponse } from 'axios'; import { Logger } from '../logging/logger.mjs'; interface Interceptor { options?: AxiosInterceptorOptions; request?: RequestInterceptor; response?: ResponseInterceptor; error?: ErrorInterceptor; } interface ErrorContext { /** * The error */ readonly error: T; /** * The clients logger instance */ readonly log: Logger; } /** * A method called to intercept a request that failed */ type ErrorInterceptor = (ctx: ErrorContext) => any; interface RequestContext { /** * The outgoing request config */ readonly config: InternalAxiosRequestConfig; /** * The clients logger instance */ readonly log: Logger; } /** * A method called to intercept a successful request */ type RequestInterceptor = (ctx: RequestContext) => InternalAxiosRequestConfig | Promise; interface ResponseContext { /** * The response */ readonly res: AxiosResponse; /** * The clients logger instance */ readonly log: Logger; } /** * A method called to intercept a successful response */ type ResponseInterceptor = (ctx: ResponseContext) => AxiosResponse | Promise; export type { ErrorContext, ErrorInterceptor, Interceptor, RequestContext, RequestInterceptor, ResponseContext, ResponseInterceptor };