retry-handler.d.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import Dispatcher from "./dispatcher";
  2. export default RetryHandler;
  3. declare class RetryHandler implements Dispatcher.DispatchHandlers {
  4. constructor(
  5. options: Dispatcher.DispatchOptions & {
  6. retryOptions?: RetryHandler.RetryOptions;
  7. },
  8. retryHandlers: RetryHandler.RetryHandlers
  9. );
  10. }
  11. declare namespace RetryHandler {
  12. export type RetryState = { counter: number; };
  13. export type RetryContext = {
  14. state: RetryState;
  15. opts: Dispatcher.DispatchOptions & {
  16. retryOptions?: RetryHandler.RetryOptions;
  17. };
  18. }
  19. export type OnRetryCallback = (result?: Error | null) => void;
  20. export type RetryCallback = (
  21. err: Error,
  22. context: {
  23. state: RetryState;
  24. opts: Dispatcher.DispatchOptions & {
  25. retryOptions?: RetryHandler.RetryOptions;
  26. };
  27. },
  28. callback: OnRetryCallback
  29. ) => number | null;
  30. export interface RetryOptions {
  31. /**
  32. * Callback to be invoked on every retry iteration.
  33. * It receives the error, current state of the retry object and the options object
  34. * passed when instantiating the retry handler.
  35. *
  36. * @type {RetryCallback}
  37. * @memberof RetryOptions
  38. */
  39. retry?: RetryCallback;
  40. /**
  41. * Maximum number of retries to allow.
  42. *
  43. * @type {number}
  44. * @memberof RetryOptions
  45. * @default 5
  46. */
  47. maxRetries?: number;
  48. /**
  49. * Max number of milliseconds allow between retries
  50. *
  51. * @type {number}
  52. * @memberof RetryOptions
  53. * @default 30000
  54. */
  55. maxTimeout?: number;
  56. /**
  57. * Initial number of milliseconds to wait before retrying for the first time.
  58. *
  59. * @type {number}
  60. * @memberof RetryOptions
  61. * @default 500
  62. */
  63. minTimeout?: number;
  64. /**
  65. * Factior to multiply the timeout factor between retries.
  66. *
  67. * @type {number}
  68. * @memberof RetryOptions
  69. * @default 2
  70. */
  71. timeoutFactor?: number;
  72. /**
  73. * It enables to automatically infer timeout between retries based on the `Retry-After` header.
  74. *
  75. * @type {boolean}
  76. * @memberof RetryOptions
  77. * @default true
  78. */
  79. retryAfter?: boolean;
  80. /**
  81. * HTTP methods to retry.
  82. *
  83. * @type {Dispatcher.HttpMethod[]}
  84. * @memberof RetryOptions
  85. * @default ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],
  86. */
  87. methods?: Dispatcher.HttpMethod[];
  88. /**
  89. * Error codes to be retried. e.g. `ECONNRESET`, `ENOTFOUND`, `ETIMEDOUT`, `ECONNREFUSED`, etc.
  90. *
  91. * @type {string[]}
  92. * @default ['ECONNRESET','ECONNREFUSED','ENOTFOUND','ENETDOWN','ENETUNREACH','EHOSTDOWN','EHOSTUNREACH','EPIPE']
  93. */
  94. errorCodes?: string[];
  95. /**
  96. * HTTP status codes to be retried.
  97. *
  98. * @type {number[]}
  99. * @memberof RetryOptions
  100. * @default [500, 502, 503, 504, 429],
  101. */
  102. statusCodes?: number[];
  103. }
  104. export interface RetryHandlers {
  105. dispatch: Dispatcher["dispatch"];
  106. handler: Dispatcher.DispatchHandlers;
  107. }
  108. }