UNPKG

@vtex/api

Version:
136 lines (135 loc) 4.29 kB
/// <reference types="node" /> 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<RequestTracingUserConfig, 'rootSpan'> { 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<string, Cached>; export interface InstanceOptions { authType?: AuthType; timeout?: number; memoryCache?: CacheLayer<string, Cached>; diskCache?: CacheLayer<string, Cached>; 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<string, string>} * @memberof InstanceOptions */ headers?: Record<string, string>; /** * Default query string parameters to be sent with every request * * @type {Record<string, string>} * @memberof InstanceOptions */ params?: Record<string, string>; middlewares?: Array<Middleware<MiddlewareContext>>; verbose?: boolean; name?: string; serverTimings?: Record<string, string>; httpsAgent?: AxiosRequestConfig['httpsAgent']; cacheableType?: CacheType; } export interface IOResponse<T> { data: T; headers: Record<string, string>; status: number; } export declare enum AuthType { basic = "Basic", bearer = "Bearer", /** * Supported for legacy reasons - this is not spec compliant! */ token = "token" } export {};