| 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; currentTimeout: 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; |
| } |
| } |