configureRefreshFetch.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = void 0;
  6. function configureRefreshFetch(configuration) {
  7. var refreshToken = configuration.refreshToken,
  8. shouldRefreshToken = configuration.shouldRefreshToken,
  9. fetch = configuration.fetch;
  10. var refreshingTokenPromise = null;
  11. return function (url, options) {
  12. if (refreshingTokenPromise !== null) {
  13. return refreshingTokenPromise.then(function () {
  14. return fetch(url, options);
  15. }) // Even if the refreshing fails, do the fetch so we reject with
  16. // error of that request
  17. ["catch"](function () {
  18. return fetch(url, options);
  19. });
  20. }
  21. return fetch(url, options)["catch"](function (error) {
  22. if (shouldRefreshToken(error)) {
  23. if (refreshingTokenPromise === null) {
  24. refreshingTokenPromise = new Promise(function (resolve, reject) {
  25. refreshToken().then(function () {
  26. refreshingTokenPromise = null;
  27. resolve();
  28. })["catch"](function (refreshTokenError) {
  29. refreshingTokenPromise = null;
  30. reject(refreshTokenError);
  31. });
  32. });
  33. }
  34. return refreshingTokenPromise["catch"](function () {
  35. // If refreshing fails, continue with original error
  36. throw error;
  37. }).then(function () {
  38. return fetch(url, options);
  39. });
  40. } else {
  41. throw error;
  42. }
  43. });
  44. };
  45. }
  46. var _default = configureRefreshFetch;
  47. exports["default"] = _default;