retry-handler.d.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import Dispatcher from './dispatcher'
  2. export default RetryHandler
  3. declare class RetryHandler implements Dispatcher.DispatchHandler {
  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. ) => void
  30. export interface RetryOptions {
  31. /**
  32. * If true, the retry handler will throw an error if the request fails,
  33. * this will prevent the folling handlers from being called, and will destroy the socket.
  34. *
  35. * @type {boolean}
  36. * @memberof RetryOptions
  37. * @default true
  38. */
  39. throwOnError?: boolean;
  40. /**
  41. * Callback to be invoked on every retry iteration.
  42. * It receives the error, current state of the retry object and the options object
  43. * passed when instantiating the retry handler.
  44. *
  45. * @type {RetryCallback}
  46. * @memberof RetryOptions
  47. */
  48. retry?: RetryCallback;
  49. /**
  50. * Maximum number of retries to allow.
  51. *
  52. * @type {number}
  53. * @memberof RetryOptions
  54. * @default 5
  55. */
  56. maxRetries?: number;
  57. /**
  58. * Max number of milliseconds allow between retries
  59. *
  60. * @type {number}
  61. * @memberof RetryOptions
  62. * @default 30000
  63. */
  64. maxTimeout?: number;
  65. /**
  66. * Initial number of milliseconds to wait before retrying for the first time.
  67. *
  68. * @type {number}
  69. * @memberof RetryOptions
  70. * @default 500
  71. */
  72. minTimeout?: number;
  73. /**
  74. * Factior to multiply the timeout factor between retries.
  75. *
  76. * @type {number}
  77. * @memberof RetryOptions
  78. * @default 2
  79. */
  80. timeoutFactor?: number;
  81. /**
  82. * It enables to automatically infer timeout between retries based on the `Retry-After` header.
  83. *
  84. * @type {boolean}
  85. * @memberof RetryOptions
  86. * @default true
  87. */
  88. retryAfter?: boolean;
  89. /**
  90. * HTTP methods to retry.
  91. *
  92. * @type {Dispatcher.HttpMethod[]}
  93. * @memberof RetryOptions
  94. * @default ['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE'],
  95. */
  96. methods?: Dispatcher.HttpMethod[];
  97. /**
  98. * Error codes to be retried. e.g. `ECONNRESET`, `ENOTFOUND`, `ETIMEDOUT`, `ECONNREFUSED`, etc.
  99. *
  100. * @type {string[]}
  101. * @default ['ECONNRESET','ECONNREFUSED','ENOTFOUND','ENETDOWN','ENETUNREACH','EHOSTDOWN','EHOSTUNREACH','EPIPE']
  102. */
  103. errorCodes?: string[];
  104. /**
  105. * HTTP status codes to be retried.
  106. *
  107. * @type {number[]}
  108. * @memberof RetryOptions
  109. * @default [500, 502, 503, 504, 429],
  110. */
  111. statusCodes?: number[];
  112. }
  113. export interface RetryHandlers {
  114. dispatch: Dispatcher['dispatch'];
  115. handler: Dispatcher.DispatchHandler;
  116. }
  117. }