/// import { AxiosRequestConfig, AxiosResponse } from 'axios'; import { Middleware } from 'koa-compose'; import { Span } from 'opentracing'; import { CacheLayer } from '../caches/CacheLayer'; import { MetricsAccumulator } from '../metrics/MetricsAccumulator'; import { IOContext } from '../service/worker/runtime/typings'; import { SpanReferenceTypes } from '../tracing'; import { IUserLandTracer } from '../tracing/UserLandTracer'; import { Cached, CacheType } from './middlewares/cache'; export type InflightKeyGenerator = (x: RequestConfig) => string; interface RequestTracingUserConfig { rootSpan?: Span; referenceType?: SpanReferenceTypes; requestSpanNameSuffix?: string; } export interface RequestTracingConfig { tracing?: RequestTracingUserConfig; } export interface RequestConfig extends AxiosRequestConfig, RequestTracingConfig { retries?: number; exponentialTimeoutCoefficient?: number; initialBackoffDelay?: number; exponentialBackoffCoefficient?: number; retryCount?: number; /** * Identifies the type of request for metrification purposes. Should vary with client method. */ metric?: string; /** * In verbose mode, a counter will be incremented for each request made with the same `metric` label. */ count?: number; /** * In verbose mode, a label will be created with a counter for each request made with the same `metric` label. */ label?: string; /** * Outputs verbose logs to console for this request. */ verbose?: boolean; production?: boolean; cacheable?: CacheType; memoizeable?: boolean; inflightKey?: InflightKeyGenerator; forceMaxAge?: number; responseEncoding?: BufferEncoding | string; nullIfNotFound?: boolean; ignoreRecorder?: boolean; } export interface CacheHit { disk?: 0 | 1; memory?: 0 | 1; revalidated?: 0 | 1; router?: 0 | 1; } export interface MiddlewaresTracingContext extends Omit { tracer: IUserLandTracer; logger: IOContext['logger']; rootSpan?: Span; isSampled: boolean; } export interface MiddlewareContext { config: RequestConfig; tracing?: MiddlewaresTracingContext; response?: AxiosResponse; cacheHit?: CacheHit; inflightHit?: boolean; memoizedHit?: boolean; } export type CacheStorage = CacheLayer; export interface InstanceOptions { authType?: AuthType; timeout?: number; memoryCache?: CacheLayer; diskCache?: CacheLayer; asyncSetCache?: boolean; /** * Enables memoization, ephemeral within each request, for all requests of this client. * Useful for services that makes recursive requests, like graphql resolvers, which * might fetch the same endpoint more than once. * If that's not the case for your service, disabling it might improve the CPU and * memory usage. * * Default value: true */ memoizable?: boolean; baseURL?: string; retries?: number; exponentialTimeoutCoefficient?: number; initialBackoffDelay?: number; exponentialBackoffCoefficient?: number; metrics?: MetricsAccumulator; /** * Maximum number of concurrent requests * * @type {number} * @memberof InstanceOptions */ concurrency?: number; /** * Default headers to be sent with every request * * @type {Record} * @memberof InstanceOptions */ headers?: Record; /** * Default query string parameters to be sent with every request * * @type {Record} * @memberof InstanceOptions */ params?: Record; middlewares?: Array>; verbose?: boolean; name?: string; serverTimings?: Record; httpsAgent?: AxiosRequestConfig['httpsAgent']; cacheableType?: CacheType; } export interface IOResponse { data: T; headers: Record; status: number; } export declare enum AuthType { basic = "Basic", bearer = "Bearer", /** * Supported for legacy reasons - this is not spec compliant! */ token = "token" } export {};