mirror of
https://git.mirrors.martin98.com/https://github.com/cyberman54/curl
synced 2026-04-01 23:13:16 +08:00
fix: validate status and some security
This commit is contained in:
152
node_modules/axios-retry/CHANGELOG.md
generated
vendored
Normal file
152
node_modules/axios-retry/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [3.2.3] - 2021-10-19
|
||||
|
||||
- fix: removed breaking requirements introduced in 3.2.1
|
||||
- fix: allow Typescript CommonJS default import
|
||||
|
||||
## [3.2.2] - 2021-10-14
|
||||
|
||||
- fix: added missing @babel/runtime runtime dep
|
||||
|
||||
## [3.2.1] - 2021-10-14
|
||||
|
||||
- updated all dependencies
|
||||
- made the package hybrid (ES modules and CommonJS)
|
||||
- BREAKING: axios >=0.21.2 is now required to work as a peer dep.
|
||||
- BREAKING: NodeJS "^12.20.0 || ^14.13.1 || >=16.0.0" to work
|
||||
|
||||
## [3.2.0] - 2021-09-28
|
||||
|
||||
### Added
|
||||
|
||||
- Retry condition accepts a function that returns a Promise resolving to a boolean
|
||||
|
||||
## [3.1.9] - 2020-09-18
|
||||
|
||||
### Fixed
|
||||
|
||||
- TS: extended AxiosRequestConfig with optional "axios-retry" property
|
||||
|
||||
## [3.1.8] - 2019-04-24
|
||||
|
||||
### Fixed
|
||||
|
||||
- TS: export types for all functions
|
||||
|
||||
## [3.1.7] - 2019-04-23
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed default export to resolve TS2309
|
||||
- Updated dependencies to fix build error
|
||||
- Added missing CHANGELOG entries (versions 3.0.1 until today)
|
||||
|
||||
## [3.1.6] - 2019-04-21
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed export of `IAxiosRetryConfig`
|
||||
|
||||
## [3.1.5] - 2019-04-20
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed TS definitions
|
||||
|
||||
## [3.1.4] - 2019-04-18
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed TS definitions
|
||||
|
||||
### Added
|
||||
|
||||
- Added note in README related to compatibility issue with `axios 0.19.0`
|
||||
- Updated LICENSE
|
||||
|
||||
## [3.1.2] - 2019-01-24
|
||||
|
||||
### Added
|
||||
|
||||
- TravisCI build status badge in README
|
||||
- Update `index.d.ts` with missing functions
|
||||
|
||||
## [3.1.1] - 2018-06-13
|
||||
|
||||
### Fixed
|
||||
|
||||
- Do not run `requestTransform` again after retry
|
||||
|
||||
### Added
|
||||
|
||||
- Explicit return type on `axiosRetry`
|
||||
- Prettier
|
||||
|
||||
## [3.1.0] - 2018-04-26
|
||||
|
||||
### Fixed
|
||||
|
||||
- Export `isRetryableError` for CommonJS
|
||||
|
||||
### Added
|
||||
|
||||
- Added additional param `shouldResetTimeout`
|
||||
|
||||
## [3.0.2] - 2018-02-09
|
||||
|
||||
### Added
|
||||
|
||||
- Now `isRetryableError` method is accessible.
|
||||
- Added `delayStrategy` option to be able to have exponential backoff for successive retries.
|
||||
|
||||
## [3.0.1] - 2017-08-16
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed first request time not being taken into account in timeout across retries.
|
||||
- Fixed negative timeouts being passed to XHR (browsers), causing that no timeout was applied.
|
||||
- Fixed safe methods and idempotent errors not being retried on unknown network errors.
|
||||
|
||||
## [3.0.0] - 2017-08-13
|
||||
|
||||
### Changed
|
||||
|
||||
- Retried errors on idempotent requests (5xx with get, head, options, put and delete) by default,
|
||||
along with safe network errors.
|
||||
- Moved some hard-coded conditions to the default `retryCondition` function so users can define a
|
||||
custom function that overwrites them. The conditions that verify that the error is not a timeout or
|
||||
an unsafe network error have been moved to `isNetworkError`.
|
||||
|
||||
### Added
|
||||
|
||||
- Added additional pre-defined retry conditions: `isSafeRequestError`, `isIdempotentRequestError`.
|
||||
|
||||
## [2.0.1] - 2017-06-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- Removed dependency from the `package.json` file.
|
||||
|
||||
## [2.0.0] - 2017-06-15
|
||||
|
||||
### Changed
|
||||
|
||||
- Now the configured timeout in Axios is not for each retry request but for the whole request lifecycle.
|
||||
|
||||
## [1.3.1] - 2017-06-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- Removed dependency from the `package.json` file.
|
||||
|
||||
## [1.3.0] - 2017-06-15
|
||||
|
||||
### Added
|
||||
|
||||
- Allowed per-request configuration using the `axios-retry` namespace.
|
||||
13
node_modules/axios-retry/LICENSE
generated
vendored
Normal file
13
node_modules/axios-retry/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
Copyright 2019 Softonic International S.A.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
84
node_modules/axios-retry/README.md
generated
vendored
Normal file
84
node_modules/axios-retry/README.md
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
# axios-retry
|
||||
|
||||
[](https://github.com/softonic/axios-retry/actions/workflows/node.js.yml)
|
||||
|
||||
Axios plugin that intercepts failed requests and retries them whenever possible.
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
npm install axios-retry
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
// CommonJS
|
||||
// const axiosRetry = require('axios-retry');
|
||||
|
||||
// ES6
|
||||
import axiosRetry from 'axios-retry';
|
||||
|
||||
axiosRetry(axios, { retries: 3 });
|
||||
|
||||
axios.get('http://example.com/test') // The first request fails and the second returns 'ok'
|
||||
.then(result => {
|
||||
result.data; // 'ok'
|
||||
});
|
||||
|
||||
// Exponential back-off retry delay between requests
|
||||
axiosRetry(axios, { retryDelay: axiosRetry.exponentialDelay});
|
||||
|
||||
// Custom retry delay
|
||||
axiosRetry(axios, { retryDelay: (retryCount) => {
|
||||
return retryCount * 1000;
|
||||
}});
|
||||
|
||||
// Works with custom axios instances
|
||||
const client = axios.create({ baseURL: 'http://example.com' });
|
||||
axiosRetry(client, { retries: 3 });
|
||||
|
||||
client.get('/test') // The first request fails and the second returns 'ok'
|
||||
.then(result => {
|
||||
result.data; // 'ok'
|
||||
});
|
||||
|
||||
// Allows request-specific configuration
|
||||
client
|
||||
.get('/test', {
|
||||
'axios-retry': {
|
||||
retries: 0
|
||||
}
|
||||
})
|
||||
.catch(error => { // The first request fails
|
||||
error !== undefined
|
||||
});
|
||||
```
|
||||
|
||||
**Note:** Unless `shouldResetTimeout` is set, the plugin interprets the request timeout as a global value, so it is not used for each retry but for the whole request lifecycle.
|
||||
|
||||
## Options
|
||||
|
||||
| Name | Type | Default | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| retries | `Number` | `3` | The number of times to retry before failing. |
|
||||
| retryCondition | `Function` | `isNetworkOrIdempotentRequestError` | A callback to further control if a request should be retried. By default, it retries if it is a network error or a 5xx error on an idempotent request (GET, HEAD, OPTIONS, PUT or DELETE). |
|
||||
| shouldResetTimeout | `Boolean` | false | Defines if the timeout should be reset between retries |
|
||||
| retryDelay | `Function` | `function noDelay() { return 0; }` | A callback to further control the delay in milliseconds between retried requests. By default there is no delay between retries. Another option is exponentialDelay ([Exponential Backoff](https://developers.google.com/analytics/devguides/reporting/core/v3/errors#backoff)). The function is passed `retryCount` and `error`. |
|
||||
|
||||
## Testing
|
||||
|
||||
Clone the repository and execute:
|
||||
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
## Contribute
|
||||
|
||||
1. Fork it: `git clone https://github.com/softonic/axios-retry.git`
|
||||
2. Create your feature branch: `git checkout -b feature/my-new-feature`
|
||||
3. Commit your changes: `git commit -am 'Added some feature'`
|
||||
4. Check the build: `npm run build`
|
||||
4. Push to the branch: `git push origin my-new-feature`
|
||||
5. Submit a pull request :D
|
||||
249
node_modules/axios-retry/es/index.mjs
generated
vendored
Normal file
249
node_modules/axios-retry/es/index.mjs
generated
vendored
Normal file
@@ -0,0 +1,249 @@
|
||||
import isRetryAllowed from 'is-retry-allowed';
|
||||
|
||||
const namespace = 'axios-retry';
|
||||
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
export function isNetworkError(error) {
|
||||
return (
|
||||
!error.response &&
|
||||
Boolean(error.code) && // Prevents retrying cancelled requests
|
||||
error.code !== 'ECONNABORTED' && // Prevents retrying timed out requests
|
||||
isRetryAllowed(error)
|
||||
); // Prevents retrying unsafe errors
|
||||
}
|
||||
|
||||
const SAFE_HTTP_METHODS = ['get', 'head', 'options'];
|
||||
const IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);
|
||||
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
export function isRetryableError(error) {
|
||||
return (
|
||||
error.code !== 'ECONNABORTED' &&
|
||||
(!error.response || (error.response.status >= 500 && error.response.status <= 599))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
export function isSafeRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
export function isIdempotentRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean | Promise}
|
||||
*/
|
||||
export function isNetworkOrIdempotentRequestError(error) {
|
||||
return isNetworkError(error) || isIdempotentRequestError(error);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {number} - delay in milliseconds, always 0
|
||||
*/
|
||||
function noDelay() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} [retryNumber=0]
|
||||
* @return {number} - delay in milliseconds
|
||||
*/
|
||||
export function exponentialDelay(retryNumber = 0) {
|
||||
const delay = Math.pow(2, retryNumber) * 100;
|
||||
const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
|
||||
return delay + randomSum;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes and returns the retry state for the given request/config
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @return {Object}
|
||||
*/
|
||||
function getCurrentState(config) {
|
||||
const currentState = config[namespace] || {};
|
||||
currentState.retryCount = currentState.retryCount || 0;
|
||||
config[namespace] = currentState;
|
||||
return currentState;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the axios-retry options for the current request
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @param {AxiosRetryConfig} defaultOptions
|
||||
* @return {AxiosRetryConfig}
|
||||
*/
|
||||
function getRequestOptions(config, defaultOptions) {
|
||||
return { ...defaultOptions, ...config[namespace] };
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Axios} axios
|
||||
* @param {AxiosRequestConfig} config
|
||||
*/
|
||||
function fixConfig(axios, config) {
|
||||
if (axios.defaults.agent === config.agent) {
|
||||
delete config.agent;
|
||||
}
|
||||
if (axios.defaults.httpAgent === config.httpAgent) {
|
||||
delete config.httpAgent;
|
||||
}
|
||||
if (axios.defaults.httpsAgent === config.httpsAgent) {
|
||||
delete config.httpsAgent;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks retryCondition if request can be retried. Handles it's retruning value or Promise.
|
||||
* @param {number} retries
|
||||
* @param {Function} retryCondition
|
||||
* @param {Object} currentState
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
async function shouldRetry(retries, retryCondition, currentState, error) {
|
||||
const shouldRetryOrPromise = currentState.retryCount < retries && retryCondition(error);
|
||||
|
||||
// This could be a promise
|
||||
if (typeof shouldRetryOrPromise === 'object') {
|
||||
try {
|
||||
await shouldRetryOrPromise;
|
||||
return true;
|
||||
} catch (_err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return shouldRetryOrPromise;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds response interceptors to an axios instance to retry requests failed due to network issues
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* import axios from 'axios';
|
||||
*
|
||||
* axiosRetry(axios, { retries: 3 });
|
||||
*
|
||||
* axios.get('http://example.com/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Exponential back-off retry delay between requests
|
||||
* axiosRetry(axios, { retryDelay : axiosRetry.exponentialDelay});
|
||||
*
|
||||
* // Custom retry delay
|
||||
* axiosRetry(axios, { retryDelay : (retryCount) => {
|
||||
* return retryCount * 1000;
|
||||
* }});
|
||||
*
|
||||
* // Also works with custom axios instances
|
||||
* const client = axios.create({ baseURL: 'http://example.com' });
|
||||
* axiosRetry(client, { retries: 3 });
|
||||
*
|
||||
* client.get('/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Allows request-specific configuration
|
||||
* client
|
||||
* .get('/test', {
|
||||
* 'axios-retry': {
|
||||
* retries: 0
|
||||
* }
|
||||
* })
|
||||
* .catch(error => { // The first request fails
|
||||
* error !== undefined
|
||||
* });
|
||||
*
|
||||
* @param {Axios} axios An axios instance (the axios object or one created from axios.create)
|
||||
* @param {Object} [defaultOptions]
|
||||
* @param {number} [defaultOptions.retries=3] Number of retries
|
||||
* @param {boolean} [defaultOptions.shouldResetTimeout=false]
|
||||
* Defines if the timeout should be reset between retries
|
||||
* @param {Function} [defaultOptions.retryCondition=isNetworkOrIdempotentRequestError]
|
||||
* A function to determine if the error can be retried
|
||||
* @param {Function} [defaultOptions.retryDelay=noDelay]
|
||||
* A function to determine the delay between retry requests
|
||||
*/
|
||||
export default function axiosRetry(axios, defaultOptions) {
|
||||
axios.interceptors.request.use((config) => {
|
||||
const currentState = getCurrentState(config);
|
||||
currentState.lastRequestTime = Date.now();
|
||||
return config;
|
||||
});
|
||||
|
||||
axios.interceptors.response.use(null, async (error) => {
|
||||
const { config } = error;
|
||||
|
||||
// If we have no information to retry the request
|
||||
if (!config) {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
const {
|
||||
retries = 3,
|
||||
retryCondition = isNetworkOrIdempotentRequestError,
|
||||
retryDelay = noDelay,
|
||||
shouldResetTimeout = false
|
||||
} = getRequestOptions(config, defaultOptions);
|
||||
|
||||
const currentState = getCurrentState(config);
|
||||
|
||||
if (await shouldRetry(retries, retryCondition, currentState, error)) {
|
||||
currentState.retryCount += 1;
|
||||
const delay = retryDelay(currentState.retryCount, error);
|
||||
|
||||
// Axios fails merging this configuration to the default configuration because it has an issue
|
||||
// with circular structures: https://github.com/mzabriskie/axios/issues/370
|
||||
fixConfig(axios, config);
|
||||
|
||||
if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {
|
||||
const lastRequestDuration = Date.now() - currentState.lastRequestTime;
|
||||
// Minimum 1ms timeout (passing 0 or less to XHR means no timeout)
|
||||
config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);
|
||||
}
|
||||
|
||||
config.transformRequest = [(data) => data];
|
||||
|
||||
return new Promise((resolve) => setTimeout(() => resolve(axios(config)), delay));
|
||||
}
|
||||
|
||||
return Promise.reject(error);
|
||||
});
|
||||
}
|
||||
|
||||
// Compatibility with CommonJS
|
||||
axiosRetry.isNetworkError = isNetworkError;
|
||||
axiosRetry.isSafeRequestError = isSafeRequestError;
|
||||
axiosRetry.isIdempotentRequestError = isIdempotentRequestError;
|
||||
axiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;
|
||||
axiosRetry.exponentialDelay = exponentialDelay;
|
||||
axiosRetry.isRetryableError = isRetryableError;
|
||||
66
node_modules/axios-retry/index.d.ts
generated
vendored
Normal file
66
node_modules/axios-retry/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
import * as axios from 'axios'
|
||||
|
||||
interface IAxiosRetry {
|
||||
(
|
||||
axios: axios.AxiosStatic | axios.AxiosInstance,
|
||||
axiosRetryConfig?: IAxiosRetry.IAxiosRetryConfig
|
||||
): void;
|
||||
|
||||
isNetworkError(error: Error): boolean;
|
||||
isRetryableError(error: Error): boolean;
|
||||
isSafeRequestError(error: Error): boolean;
|
||||
isIdempotentRequestError(error: Error): boolean;
|
||||
isNetworkOrIdempotentRequestError(error: Error): boolean;
|
||||
exponentialDelay(retryNumber: number): number;
|
||||
}
|
||||
|
||||
export function isNetworkError(error: Error): boolean;
|
||||
export function isRetryableError(error: Error): boolean;
|
||||
export function isSafeRequestError(error: Error): boolean;
|
||||
export function isIdempotentRequestError(error: Error): boolean;
|
||||
export function isNetworkOrIdempotentRequestError(error: Error): boolean;
|
||||
export function exponentialDelay(retryNumber: number): number;
|
||||
|
||||
declare namespace IAxiosRetry {
|
||||
export interface IAxiosRetryConfig {
|
||||
/**
|
||||
* The number of times to retry before failing
|
||||
* default: 3
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
retries?: number,
|
||||
/**
|
||||
* Defines if the timeout should be reset between retries
|
||||
* default: false
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
shouldResetTimeout?: boolean,
|
||||
/**
|
||||
* A callback to further control if a request should be retried. By default, it retries if the result did not have a response.
|
||||
* default: error => !error.response
|
||||
*
|
||||
* @type {Function}
|
||||
*/
|
||||
retryCondition?: (error: axios.AxiosError) => boolean | Promise<boolean>,
|
||||
/**
|
||||
* A callback to further control the delay between retry requests. By default there is no delay.
|
||||
*
|
||||
* @type {Function}
|
||||
*/
|
||||
retryDelay?: (retryCount: number, error: axios.AxiosError) => number
|
||||
}
|
||||
}
|
||||
|
||||
declare const axiosRetry: IAxiosRetry;
|
||||
|
||||
export type IAxiosRetryConfig = IAxiosRetry.IAxiosRetryConfig;
|
||||
|
||||
export default axiosRetry;
|
||||
|
||||
declare module 'axios' {
|
||||
export interface AxiosRequestConfig {
|
||||
'axios-retry'?: IAxiosRetryConfig;
|
||||
}
|
||||
}
|
||||
4
node_modules/axios-retry/index.js
generated
vendored
Normal file
4
node_modules/axios-retry/index.js
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
const axiosRetry = require('./lib/cjs/index').default;
|
||||
|
||||
module.exports = axiosRetry;
|
||||
module.exports.default = axiosRetry;
|
||||
339
node_modules/axios-retry/lib/cjs/index.js
generated
vendored
Normal file
339
node_modules/axios-retry/lib/cjs/index.js
generated
vendored
Normal file
@@ -0,0 +1,339 @@
|
||||
"use strict";
|
||||
|
||||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.isNetworkError = isNetworkError;
|
||||
exports.isRetryableError = isRetryableError;
|
||||
exports.isSafeRequestError = isSafeRequestError;
|
||||
exports.isIdempotentRequestError = isIdempotentRequestError;
|
||||
exports.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;
|
||||
exports.exponentialDelay = exponentialDelay;
|
||||
exports.default = axiosRetry;
|
||||
|
||||
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
||||
|
||||
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
||||
|
||||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
||||
|
||||
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
||||
|
||||
var _isRetryAllowed = _interopRequireDefault(require("is-retry-allowed"));
|
||||
|
||||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||||
|
||||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||||
|
||||
var namespace = 'axios-retry';
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
function isNetworkError(error) {
|
||||
return !error.response && Boolean(error.code) && // Prevents retrying cancelled requests
|
||||
error.code !== 'ECONNABORTED' && // Prevents retrying timed out requests
|
||||
(0, _isRetryAllowed.default)(error); // Prevents retrying unsafe errors
|
||||
}
|
||||
|
||||
var SAFE_HTTP_METHODS = ['get', 'head', 'options'];
|
||||
var IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
function isRetryableError(error) {
|
||||
return error.code !== 'ECONNABORTED' && (!error.response || error.response.status >= 500 && error.response.status <= 599);
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
|
||||
function isSafeRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
|
||||
function isIdempotentRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean | Promise}
|
||||
*/
|
||||
|
||||
|
||||
function isNetworkOrIdempotentRequestError(error) {
|
||||
return isNetworkError(error) || isIdempotentRequestError(error);
|
||||
}
|
||||
/**
|
||||
* @return {number} - delay in milliseconds, always 0
|
||||
*/
|
||||
|
||||
|
||||
function noDelay() {
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* @param {number} [retryNumber=0]
|
||||
* @return {number} - delay in milliseconds
|
||||
*/
|
||||
|
||||
|
||||
function exponentialDelay() {
|
||||
var retryNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
||||
var delay = Math.pow(2, retryNumber) * 100;
|
||||
var randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
|
||||
|
||||
return delay + randomSum;
|
||||
}
|
||||
/**
|
||||
* Initializes and returns the retry state for the given request/config
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @return {Object}
|
||||
*/
|
||||
|
||||
|
||||
function getCurrentState(config) {
|
||||
var currentState = config[namespace] || {};
|
||||
currentState.retryCount = currentState.retryCount || 0;
|
||||
config[namespace] = currentState;
|
||||
return currentState;
|
||||
}
|
||||
/**
|
||||
* Returns the axios-retry options for the current request
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @param {AxiosRetryConfig} defaultOptions
|
||||
* @return {AxiosRetryConfig}
|
||||
*/
|
||||
|
||||
|
||||
function getRequestOptions(config, defaultOptions) {
|
||||
return _objectSpread(_objectSpread({}, defaultOptions), config[namespace]);
|
||||
}
|
||||
/**
|
||||
* @param {Axios} axios
|
||||
* @param {AxiosRequestConfig} config
|
||||
*/
|
||||
|
||||
|
||||
function fixConfig(axios, config) {
|
||||
if (axios.defaults.agent === config.agent) {
|
||||
delete config.agent;
|
||||
}
|
||||
|
||||
if (axios.defaults.httpAgent === config.httpAgent) {
|
||||
delete config.httpAgent;
|
||||
}
|
||||
|
||||
if (axios.defaults.httpsAgent === config.httpsAgent) {
|
||||
delete config.httpsAgent;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Checks retryCondition if request can be retried. Handles it's retruning value or Promise.
|
||||
* @param {number} retries
|
||||
* @param {Function} retryCondition
|
||||
* @param {Object} currentState
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
|
||||
function shouldRetry(_x, _x2, _x3, _x4) {
|
||||
return _shouldRetry.apply(this, arguments);
|
||||
}
|
||||
/**
|
||||
* Adds response interceptors to an axios instance to retry requests failed due to network issues
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* import axios from 'axios';
|
||||
*
|
||||
* axiosRetry(axios, { retries: 3 });
|
||||
*
|
||||
* axios.get('http://example.com/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Exponential back-off retry delay between requests
|
||||
* axiosRetry(axios, { retryDelay : axiosRetry.exponentialDelay});
|
||||
*
|
||||
* // Custom retry delay
|
||||
* axiosRetry(axios, { retryDelay : (retryCount) => {
|
||||
* return retryCount * 1000;
|
||||
* }});
|
||||
*
|
||||
* // Also works with custom axios instances
|
||||
* const client = axios.create({ baseURL: 'http://example.com' });
|
||||
* axiosRetry(client, { retries: 3 });
|
||||
*
|
||||
* client.get('/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Allows request-specific configuration
|
||||
* client
|
||||
* .get('/test', {
|
||||
* 'axios-retry': {
|
||||
* retries: 0
|
||||
* }
|
||||
* })
|
||||
* .catch(error => { // The first request fails
|
||||
* error !== undefined
|
||||
* });
|
||||
*
|
||||
* @param {Axios} axios An axios instance (the axios object or one created from axios.create)
|
||||
* @param {Object} [defaultOptions]
|
||||
* @param {number} [defaultOptions.retries=3] Number of retries
|
||||
* @param {boolean} [defaultOptions.shouldResetTimeout=false]
|
||||
* Defines if the timeout should be reset between retries
|
||||
* @param {Function} [defaultOptions.retryCondition=isNetworkOrIdempotentRequestError]
|
||||
* A function to determine if the error can be retried
|
||||
* @param {Function} [defaultOptions.retryDelay=noDelay]
|
||||
* A function to determine the delay between retry requests
|
||||
*/
|
||||
|
||||
|
||||
function _shouldRetry() {
|
||||
_shouldRetry = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(retries, retryCondition, currentState, error) {
|
||||
var shouldRetryOrPromise;
|
||||
return _regenerator.default.wrap(function _callee2$(_context2) {
|
||||
while (1) {
|
||||
switch (_context2.prev = _context2.next) {
|
||||
case 0:
|
||||
shouldRetryOrPromise = currentState.retryCount < retries && retryCondition(error); // This could be a promise
|
||||
|
||||
if (!((0, _typeof2.default)(shouldRetryOrPromise) === 'object')) {
|
||||
_context2.next = 11;
|
||||
break;
|
||||
}
|
||||
|
||||
_context2.prev = 2;
|
||||
_context2.next = 5;
|
||||
return shouldRetryOrPromise;
|
||||
|
||||
case 5:
|
||||
return _context2.abrupt("return", true);
|
||||
|
||||
case 8:
|
||||
_context2.prev = 8;
|
||||
_context2.t0 = _context2["catch"](2);
|
||||
return _context2.abrupt("return", false);
|
||||
|
||||
case 11:
|
||||
return _context2.abrupt("return", shouldRetryOrPromise);
|
||||
|
||||
case 12:
|
||||
case "end":
|
||||
return _context2.stop();
|
||||
}
|
||||
}
|
||||
}, _callee2, null, [[2, 8]]);
|
||||
}));
|
||||
return _shouldRetry.apply(this, arguments);
|
||||
}
|
||||
|
||||
function axiosRetry(axios, defaultOptions) {
|
||||
axios.interceptors.request.use(function (config) {
|
||||
var currentState = getCurrentState(config);
|
||||
currentState.lastRequestTime = Date.now();
|
||||
return config;
|
||||
});
|
||||
axios.interceptors.response.use(null, /*#__PURE__*/function () {
|
||||
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(error) {
|
||||
var config, _getRequestOptions, _getRequestOptions$re, retries, _getRequestOptions$re2, retryCondition, _getRequestOptions$re3, retryDelay, _getRequestOptions$sh, shouldResetTimeout, currentState, delay, lastRequestDuration;
|
||||
|
||||
return _regenerator.default.wrap(function _callee$(_context) {
|
||||
while (1) {
|
||||
switch (_context.prev = _context.next) {
|
||||
case 0:
|
||||
config = error.config; // If we have no information to retry the request
|
||||
|
||||
if (config) {
|
||||
_context.next = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context.abrupt("return", Promise.reject(error));
|
||||
|
||||
case 3:
|
||||
_getRequestOptions = getRequestOptions(config, defaultOptions), _getRequestOptions$re = _getRequestOptions.retries, retries = _getRequestOptions$re === void 0 ? 3 : _getRequestOptions$re, _getRequestOptions$re2 = _getRequestOptions.retryCondition, retryCondition = _getRequestOptions$re2 === void 0 ? isNetworkOrIdempotentRequestError : _getRequestOptions$re2, _getRequestOptions$re3 = _getRequestOptions.retryDelay, retryDelay = _getRequestOptions$re3 === void 0 ? noDelay : _getRequestOptions$re3, _getRequestOptions$sh = _getRequestOptions.shouldResetTimeout, shouldResetTimeout = _getRequestOptions$sh === void 0 ? false : _getRequestOptions$sh;
|
||||
currentState = getCurrentState(config);
|
||||
_context.next = 7;
|
||||
return shouldRetry(retries, retryCondition, currentState, error);
|
||||
|
||||
case 7:
|
||||
if (!_context.sent) {
|
||||
_context.next = 14;
|
||||
break;
|
||||
}
|
||||
|
||||
currentState.retryCount += 1;
|
||||
delay = retryDelay(currentState.retryCount, error); // Axios fails merging this configuration to the default configuration because it has an issue
|
||||
// with circular structures: https://github.com/mzabriskie/axios/issues/370
|
||||
|
||||
fixConfig(axios, config);
|
||||
|
||||
if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {
|
||||
lastRequestDuration = Date.now() - currentState.lastRequestTime; // Minimum 1ms timeout (passing 0 or less to XHR means no timeout)
|
||||
|
||||
config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);
|
||||
}
|
||||
|
||||
config.transformRequest = [function (data) {
|
||||
return data;
|
||||
}];
|
||||
return _context.abrupt("return", new Promise(function (resolve) {
|
||||
return setTimeout(function () {
|
||||
return resolve(axios(config));
|
||||
}, delay);
|
||||
}));
|
||||
|
||||
case 14:
|
||||
return _context.abrupt("return", Promise.reject(error));
|
||||
|
||||
case 15:
|
||||
case "end":
|
||||
return _context.stop();
|
||||
}
|
||||
}
|
||||
}, _callee);
|
||||
}));
|
||||
|
||||
return function (_x5) {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
}());
|
||||
} // Compatibility with CommonJS
|
||||
|
||||
|
||||
axiosRetry.isNetworkError = isNetworkError;
|
||||
axiosRetry.isSafeRequestError = isSafeRequestError;
|
||||
axiosRetry.isIdempotentRequestError = isIdempotentRequestError;
|
||||
axiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;
|
||||
axiosRetry.exponentialDelay = exponentialDelay;
|
||||
axiosRetry.isRetryableError = isRetryableError;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/axios-retry/lib/cjs/index.js.map
generated
vendored
Normal file
1
node_modules/axios-retry/lib/cjs/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
node_modules/axios-retry/lib/cjs/package.json
generated
vendored
Normal file
3
node_modules/axios-retry/lib/cjs/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "commonjs"
|
||||
}
|
||||
270
node_modules/axios-retry/lib/esm/index.js
generated
vendored
Normal file
270
node_modules/axios-retry/lib/esm/index.js
generated
vendored
Normal file
@@ -0,0 +1,270 @@
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
||||
|
||||
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
||||
|
||||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
||||
|
||||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
||||
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
import isRetryAllowed from 'is-retry-allowed';
|
||||
var namespace = 'axios-retry';
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
export function isNetworkError(error) {
|
||||
return !error.response && Boolean(error.code) && // Prevents retrying cancelled requests
|
||||
error.code !== 'ECONNABORTED' && // Prevents retrying timed out requests
|
||||
isRetryAllowed(error); // Prevents retrying unsafe errors
|
||||
}
|
||||
var SAFE_HTTP_METHODS = ['get', 'head', 'options'];
|
||||
var IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
export function isRetryableError(error) {
|
||||
return error.code !== 'ECONNABORTED' && (!error.response || error.response.status >= 500 && error.response.status <= 599);
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
export function isSafeRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
export function isIdempotentRequestError(error) {
|
||||
if (!error.config) {
|
||||
// Cannot determine if the request can be retried
|
||||
return false;
|
||||
}
|
||||
|
||||
return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;
|
||||
}
|
||||
/**
|
||||
* @param {Error} error
|
||||
* @return {boolean | Promise}
|
||||
*/
|
||||
|
||||
export function isNetworkOrIdempotentRequestError(error) {
|
||||
return isNetworkError(error) || isIdempotentRequestError(error);
|
||||
}
|
||||
/**
|
||||
* @return {number} - delay in milliseconds, always 0
|
||||
*/
|
||||
|
||||
function noDelay() {
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* @param {number} [retryNumber=0]
|
||||
* @return {number} - delay in milliseconds
|
||||
*/
|
||||
|
||||
|
||||
export function exponentialDelay() {
|
||||
var retryNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
||||
var delay = Math.pow(2, retryNumber) * 100;
|
||||
var randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay
|
||||
|
||||
return delay + randomSum;
|
||||
}
|
||||
/**
|
||||
* Initializes and returns the retry state for the given request/config
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @return {Object}
|
||||
*/
|
||||
|
||||
function getCurrentState(config) {
|
||||
var currentState = config[namespace] || {};
|
||||
currentState.retryCount = currentState.retryCount || 0;
|
||||
config[namespace] = currentState;
|
||||
return currentState;
|
||||
}
|
||||
/**
|
||||
* Returns the axios-retry options for the current request
|
||||
* @param {AxiosRequestConfig} config
|
||||
* @param {AxiosRetryConfig} defaultOptions
|
||||
* @return {AxiosRetryConfig}
|
||||
*/
|
||||
|
||||
|
||||
function getRequestOptions(config, defaultOptions) {
|
||||
return _objectSpread(_objectSpread({}, defaultOptions), config[namespace]);
|
||||
}
|
||||
/**
|
||||
* @param {Axios} axios
|
||||
* @param {AxiosRequestConfig} config
|
||||
*/
|
||||
|
||||
|
||||
function fixConfig(axios, config) {
|
||||
if (axios.defaults.agent === config.agent) {
|
||||
delete config.agent;
|
||||
}
|
||||
|
||||
if (axios.defaults.httpAgent === config.httpAgent) {
|
||||
delete config.httpAgent;
|
||||
}
|
||||
|
||||
if (axios.defaults.httpsAgent === config.httpsAgent) {
|
||||
delete config.httpsAgent;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Checks retryCondition if request can be retried. Handles it's retruning value or Promise.
|
||||
* @param {number} retries
|
||||
* @param {Function} retryCondition
|
||||
* @param {Object} currentState
|
||||
* @param {Error} error
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
|
||||
function shouldRetry(_x, _x2, _x3, _x4) {
|
||||
return _shouldRetry.apply(this, arguments);
|
||||
}
|
||||
/**
|
||||
* Adds response interceptors to an axios instance to retry requests failed due to network issues
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* import axios from 'axios';
|
||||
*
|
||||
* axiosRetry(axios, { retries: 3 });
|
||||
*
|
||||
* axios.get('http://example.com/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Exponential back-off retry delay between requests
|
||||
* axiosRetry(axios, { retryDelay : axiosRetry.exponentialDelay});
|
||||
*
|
||||
* // Custom retry delay
|
||||
* axiosRetry(axios, { retryDelay : (retryCount) => {
|
||||
* return retryCount * 1000;
|
||||
* }});
|
||||
*
|
||||
* // Also works with custom axios instances
|
||||
* const client = axios.create({ baseURL: 'http://example.com' });
|
||||
* axiosRetry(client, { retries: 3 });
|
||||
*
|
||||
* client.get('/test') // The first request fails and the second returns 'ok'
|
||||
* .then(result => {
|
||||
* result.data; // 'ok'
|
||||
* });
|
||||
*
|
||||
* // Allows request-specific configuration
|
||||
* client
|
||||
* .get('/test', {
|
||||
* 'axios-retry': {
|
||||
* retries: 0
|
||||
* }
|
||||
* })
|
||||
* .catch(error => { // The first request fails
|
||||
* error !== undefined
|
||||
* });
|
||||
*
|
||||
* @param {Axios} axios An axios instance (the axios object or one created from axios.create)
|
||||
* @param {Object} [defaultOptions]
|
||||
* @param {number} [defaultOptions.retries=3] Number of retries
|
||||
* @param {boolean} [defaultOptions.shouldResetTimeout=false]
|
||||
* Defines if the timeout should be reset between retries
|
||||
* @param {Function} [defaultOptions.retryCondition=isNetworkOrIdempotentRequestError]
|
||||
* A function to determine if the error can be retried
|
||||
* @param {Function} [defaultOptions.retryDelay=noDelay]
|
||||
* A function to determine the delay between retry requests
|
||||
*/
|
||||
|
||||
|
||||
function _shouldRetry() {
|
||||
_shouldRetry = _asyncToGenerator(function* (retries, retryCondition, currentState, error) {
|
||||
var shouldRetryOrPromise = currentState.retryCount < retries && retryCondition(error); // This could be a promise
|
||||
|
||||
if (typeof shouldRetryOrPromise === 'object') {
|
||||
try {
|
||||
yield shouldRetryOrPromise;
|
||||
return true;
|
||||
} catch (_err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return shouldRetryOrPromise;
|
||||
});
|
||||
return _shouldRetry.apply(this, arguments);
|
||||
}
|
||||
|
||||
export default function axiosRetry(axios, defaultOptions) {
|
||||
axios.interceptors.request.use(config => {
|
||||
var currentState = getCurrentState(config);
|
||||
currentState.lastRequestTime = Date.now();
|
||||
return config;
|
||||
});
|
||||
axios.interceptors.response.use(null, /*#__PURE__*/function () {
|
||||
var _ref = _asyncToGenerator(function* (error) {
|
||||
var {
|
||||
config
|
||||
} = error; // If we have no information to retry the request
|
||||
|
||||
if (!config) {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
var {
|
||||
retries = 3,
|
||||
retryCondition = isNetworkOrIdempotentRequestError,
|
||||
retryDelay = noDelay,
|
||||
shouldResetTimeout = false
|
||||
} = getRequestOptions(config, defaultOptions);
|
||||
var currentState = getCurrentState(config);
|
||||
|
||||
if (yield shouldRetry(retries, retryCondition, currentState, error)) {
|
||||
currentState.retryCount += 1;
|
||||
var delay = retryDelay(currentState.retryCount, error); // Axios fails merging this configuration to the default configuration because it has an issue
|
||||
// with circular structures: https://github.com/mzabriskie/axios/issues/370
|
||||
|
||||
fixConfig(axios, config);
|
||||
|
||||
if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {
|
||||
var lastRequestDuration = Date.now() - currentState.lastRequestTime; // Minimum 1ms timeout (passing 0 or less to XHR means no timeout)
|
||||
|
||||
config.timeout = Math.max(config.timeout - lastRequestDuration - delay, 1);
|
||||
}
|
||||
|
||||
config.transformRequest = [data => data];
|
||||
return new Promise(resolve => setTimeout(() => resolve(axios(config)), delay));
|
||||
}
|
||||
|
||||
return Promise.reject(error);
|
||||
});
|
||||
|
||||
return function (_x5) {
|
||||
return _ref.apply(this, arguments);
|
||||
};
|
||||
}());
|
||||
} // Compatibility with CommonJS
|
||||
|
||||
axiosRetry.isNetworkError = isNetworkError;
|
||||
axiosRetry.isSafeRequestError = isSafeRequestError;
|
||||
axiosRetry.isIdempotentRequestError = isIdempotentRequestError;
|
||||
axiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;
|
||||
axiosRetry.exponentialDelay = exponentialDelay;
|
||||
axiosRetry.isRetryableError = isRetryableError;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/axios-retry/lib/esm/index.js.map
generated
vendored
Normal file
1
node_modules/axios-retry/lib/esm/index.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
3
node_modules/axios-retry/lib/esm/package.json
generated
vendored
Normal file
3
node_modules/axios-retry/lib/esm/package.json
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
72
node_modules/axios-retry/package.json
generated
vendored
Normal file
72
node_modules/axios-retry/package.json
generated
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"name": "axios-retry",
|
||||
"version": "3.2.4",
|
||||
"author": "Rubén Norte <ruben.norte@softonic.com>",
|
||||
"description": "Axios plugin that intercepts failed requests and retries them whenever posible.",
|
||||
"license": "Apache-2.0",
|
||||
"homepage": "https://github.com/softonic/axios-retry",
|
||||
"files": [
|
||||
"es",
|
||||
"lib",
|
||||
"index.js",
|
||||
"index.d.ts"
|
||||
],
|
||||
"scripts": {
|
||||
"lint": "eslint es/**/*.mjs spec/**/*.spec.mjs",
|
||||
"pretest": "npm run lint",
|
||||
"test": "NODE_OPTIONS=--es-module-specifier-resolution=node jasmine",
|
||||
"prebuild": "npm run test",
|
||||
"build": "rm -rf lib && babel es -d lib/esm --source-maps && babel es -d lib/cjs --config-file ./babel.config.cjs.json --source-maps && ./fixup",
|
||||
"prerelease": "npm run build",
|
||||
"release": "npm version -m \"New version: %s\"",
|
||||
"postrelease": "npm run push && npm publish",
|
||||
"push": "git push origin master && git push origin --tags",
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.+(js|mjs)": [
|
||||
"eslint --cache --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.js": "eslint --cache --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.15.4",
|
||||
"is-retry-allowed": "^2.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.15.7",
|
||||
"@babel/core": "^7.15.5",
|
||||
"@babel/plugin-transform-runtime": "^7.15.8",
|
||||
"@babel/preset-env": "^7.15.6",
|
||||
"axios": "^0.21.2",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-config-airbnb-base": "^14.2.1",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-import": "^2.24.2",
|
||||
"eslint-plugin-jasmine": "^4.1.2",
|
||||
"eslint-plugin-prettier": "^4.0.0",
|
||||
"husky": "^7.0.2",
|
||||
"jasmine": "^3.9.0",
|
||||
"lint-staged": "^11.2.0",
|
||||
"nock": "^13.1.3",
|
||||
"prettier": "^2.4.1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/softonic/axios-retry.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/softonic/axios-retry/issues"
|
||||
},
|
||||
"typings": "./index.d.ts",
|
||||
"main": "index.js",
|
||||
"module": "lib/esm/index.js",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./lib/esm/index.js",
|
||||
"require": "./index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user