import Dispatcher from "./dispatcher";
|
|
export default RetryHandler;
|
|
declare class RetryHandler implements Dispatcher.DispatchHandlers {
|
constructor(
|
options: Dispatcher.DispatchOptions & {
|
retryOptions?: RetryHandler.RetryOptions;
|
},
|
retryHandlers: RetryHandler.RetryHandlers
|
);
|
}
|
|
declare namespace RetryHandler {
|
export type RetryState = { counter: number; };
|
|
export type RetryContext = {
|
state: RetryState;
|
opts: Dispatcher.DispatchOptions & {
|
retryOptions?: RetryHandler.RetryOptions;
|
};
|
}
|
|
export type OnRetryCallback = (result?: Error | null) => void;
|
|
export type RetryCallback = (
|
err: Error,
|
context: {
|
state: RetryState;
|
opts: Dispatcher.DispatchOptions & {
|
retryOptions?: RetryHandler.RetryOptions;
|
};
|
},
|
callback: OnRetryCallback
|
) => number | null;
|
|
export interface RetryOptions {
|
/**
|
* Callback to be invoked on every retry iteration.
|
* It receives the error, current state of the retry object and the options object
|
* passed when instantiating the retry handler.
|
*
|
* @type {RetryCallback}
|
* @memberof RetryOptions
|
*/
|
retry?: RetryCallback;
|
/**
|
* Maximum number of retries to allow.
|
*
|
* @type {number}
|
* @memberof RetryOptions
|
* @default 5
|
*/
|
maxRetries?: number;
|
/**
|
* Max number of milliseconds allow between retries
|
*
|
* @type {number}
|
* @memberof RetryOptions
|
* @default 30000
|
*/
|
maxTimeout?: number;
|
/**
|
* Initial number of milliseconds to wait before retrying for the first time.
|
*
|
* @type {number}
|
* @memberof RetryOptions
|
* @default 500
|
*/
|
minTimeout?: number;
|
/**
|
* Factior to multiply the timeout factor between retries.
|
*
|
* @type {number}
|
* @memberof RetryOptions
|
* @default 2
|
*/
|
timeoutFactor?: number;
|
/**
|
* It enables to automatically infer timeout between retries based on the `Retry-After` header.
|
*
|
* @type {boolean}
|
* @memberof RetryOptions
|
* @default true
|
*/
|
retryAfter?: boolean;
|
/**
|
* HTTP methods to retry.
|
*
|
* @type {Dispatcher.HttpMethod[]}
|
* @memberof RetryOptions
|
* @default ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],
|
*/
|
methods?: Dispatcher.HttpMethod[];
|
/**
|
* Error codes to be retried. e.g. `ECONNRESET`, `ENOTFOUND`, `ETIMEDOUT`, `ECONNREFUSED`, etc.
|
*
|
* @type {string[]}
|
* @default ['ECONNRESET','ECONNREFUSED','ENOTFOUND','ENETDOWN','ENETUNREACH','EHOSTDOWN','EHOSTUNREACH','EPIPE']
|
*/
|
errorCodes?: string[];
|
/**
|
* HTTP status codes to be retried.
|
*
|
* @type {number[]}
|
* @memberof RetryOptions
|
* @default [500, 502, 503, 504, 429],
|
*/
|
statusCodes?: number[];
|
}
|
|
export interface RetryHandlers {
|
dispatch: Dispatcher["dispatch"];
|
handler: Dispatcher.DispatchHandlers;
|
}
|
}
|