index.d.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import type { AxiosError, AxiosRequestConfig, AxiosInstance, AxiosStatic, AxiosResponse } from 'axios';
  2. export interface IAxiosRetryConfig {
  3. /**
  4. * The number of times to retry before failing
  5. * default: 3
  6. */
  7. retries?: number;
  8. /**
  9. * Defines if the timeout should be reset between retries
  10. * default: false
  11. */
  12. shouldResetTimeout?: boolean;
  13. /**
  14. * A callback to further control if a request should be retried.
  15. * default: it retries if it is a network error or a 5xx error on an idempotent request (GET, HEAD, OPTIONS, PUT or DELETE).
  16. */
  17. retryCondition?: (error: AxiosError) => boolean | Promise<boolean>;
  18. /**
  19. * A callback to further control the delay between retry requests. By default there is no delay.
  20. */
  21. retryDelay?: (retryCount: number, error: AxiosError) => number;
  22. /**
  23. * A callback to get notified when a retry occurs, the number of times it has occurred, and the error
  24. */
  25. onRetry?: (retryCount: number, error: AxiosError, requestConfig: AxiosRequestConfig) => Promise<void> | void;
  26. /**
  27. * After all the retries are failed, this callback will be called with the last error
  28. * before throwing the error.
  29. */
  30. onMaxRetryTimesExceeded?: (error: AxiosError, retryCount: number) => Promise<void> | void;
  31. /**
  32. * A callback to define whether a response should be resolved or rejected. If null is passed, it will fallback to
  33. * the axios default (only 2xx status codes are resolved).
  34. */
  35. validateResponse?: ((response: AxiosResponse) => boolean) | null;
  36. }
  37. export interface IAxiosRetryConfigExtended extends IAxiosRetryConfig {
  38. /**
  39. * The number of times the request was retried
  40. */
  41. retryCount?: number;
  42. /**
  43. * The last time the request was retried (timestamp in milliseconds)
  44. */
  45. lastRequestTime?: number;
  46. }
  47. export interface IAxiosRetryReturn {
  48. /**
  49. * The interceptorId for the request interceptor
  50. */
  51. requestInterceptorId: number;
  52. /**
  53. * The interceptorId for the response interceptor
  54. */
  55. responseInterceptorId: number;
  56. }
  57. export interface AxiosRetry {
  58. (axiosInstance: AxiosStatic | AxiosInstance, axiosRetryConfig?: IAxiosRetryConfig): IAxiosRetryReturn;
  59. isNetworkError(error: AxiosError): boolean;
  60. isRetryableError(error: AxiosError): boolean;
  61. isSafeRequestError(error: AxiosError): boolean;
  62. isIdempotentRequestError(error: AxiosError): boolean;
  63. isNetworkOrIdempotentRequestError(error: AxiosError): boolean;
  64. exponentialDelay(retryNumber?: number, error?: AxiosError, delayFactor?: number): number;
  65. }
  66. declare module 'axios' {
  67. interface AxiosRequestConfig {
  68. 'axios-retry'?: IAxiosRetryConfigExtended;
  69. }
  70. }
  71. export declare const namespace = "axios-retry";
  72. export declare function isNetworkError(error: any): boolean;
  73. export declare function isRetryableError(error: AxiosError): boolean;
  74. export declare function isSafeRequestError(error: AxiosError): boolean;
  75. export declare function isIdempotentRequestError(error: AxiosError): boolean;
  76. export declare function isNetworkOrIdempotentRequestError(error: AxiosError): boolean;
  77. export declare function retryAfter(error?: AxiosError | undefined): number;
  78. export declare function exponentialDelay(retryNumber?: number, error?: AxiosError | undefined, delayFactor?: number): number;
  79. export declare const DEFAULT_OPTIONS: Required<IAxiosRetryConfig>;
  80. declare const axiosRetry: AxiosRetry;
  81. export default axiosRetry;