index.d.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import type { AxiosError, AxiosRequestConfig, AxiosInstance, AxiosStatic } 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. export interface IAxiosRetryConfigExtended extends IAxiosRetryConfig {
  33. /**
  34. * The number of times the request was retried
  35. */
  36. retryCount?: number;
  37. /**
  38. * The last time the request was retried (timestamp in milliseconds)
  39. */
  40. lastRequestTime?: number;
  41. }
  42. export interface IAxiosRetryReturn {
  43. /**
  44. * The interceptorId for the request interceptor
  45. */
  46. requestInterceptorId: number;
  47. /**
  48. * The interceptorId for the response interceptor
  49. */
  50. responseInterceptorId: number;
  51. }
  52. export interface AxiosRetry {
  53. (axiosInstance: AxiosStatic | AxiosInstance, axiosRetryConfig?: IAxiosRetryConfig): IAxiosRetryReturn;
  54. isNetworkError(error: AxiosError): boolean;
  55. isRetryableError(error: AxiosError): boolean;
  56. isSafeRequestError(error: AxiosError): boolean;
  57. isIdempotentRequestError(error: AxiosError): boolean;
  58. isNetworkOrIdempotentRequestError(error: AxiosError): boolean;
  59. exponentialDelay(retryNumber?: number, error?: AxiosError, delayFactor?: number): number;
  60. }
  61. declare module 'axios' {
  62. interface AxiosRequestConfig {
  63. 'axios-retry'?: IAxiosRetryConfigExtended;
  64. }
  65. }
  66. export declare const namespace = "axios-retry";
  67. export declare function isNetworkError(error: any): boolean;
  68. export declare function isRetryableError(error: AxiosError): boolean;
  69. export declare function isSafeRequestError(error: AxiosError): boolean;
  70. export declare function isIdempotentRequestError(error: AxiosError): boolean;
  71. export declare function isNetworkOrIdempotentRequestError(error: AxiosError): boolean;
  72. export declare function exponentialDelay(retryNumber?: number, _error?: AxiosError | undefined, delayFactor?: number): number;
  73. export declare const DEFAULT_OPTIONS: Required<IAxiosRetryConfig>;
  74. declare const axiosRetry: AxiosRetry;
  75. export default axiosRetry;