"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; function configureRefreshFetch(configuration) { var refreshToken = configuration.refreshToken, shouldRefreshToken = configuration.shouldRefreshToken, fetch = configuration.fetch; var refreshingTokenPromise = null; return function (url, options) { if (refreshingTokenPromise !== null) { return refreshingTokenPromise.then(function () { return fetch(url, options); }) // Even if the refreshing fails, do the fetch so we reject with // error of that request ["catch"](function () { return fetch(url, options); }); } return fetch(url, options)["catch"](function (error) { if (shouldRefreshToken(error)) { if (refreshingTokenPromise === null) { refreshingTokenPromise = new Promise(function (resolve, reject) { refreshToken().then(function () { refreshingTokenPromise = null; resolve(); })["catch"](function (refreshTokenError) { refreshingTokenPromise = null; reject(refreshTokenError); }); }); } return refreshingTokenPromise["catch"](function () { // If refreshing fails, continue with original error throw error; }).then(function () { return fetch(url, options); }); } else { throw error; } }); }; } var _default = configureRefreshFetch; exports["default"] = _default;