///
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 {};