UNPKG

@kineticdata/react

Version:
66 lines (65 loc) 2.84 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass")); var _axios = _interopRequireDefault(require("axios")); var AuthInterceptor = exports["default"] = /*#__PURE__*/function () { function AuthInterceptor(store, unauthenticatedAction, authenticatedSelector, cancelledSelector) { (0, _classCallCheck2["default"])(this, AuthInterceptor); this.store = store; this.unauthenticatedAction = unauthenticatedAction; this.authenticatedSelector = authenticatedSelector; this.cancelledSelector = cancelledSelector; this.authPromise = null; this.handleRejected = this.handleRejected.bind(this); this.authenticate = this.authenticate.bind(this); } (0, _createClass2["default"])(AuthInterceptor, [{ key: "authenticate", value: function authenticate() { var _this = this; this.store.dispatch(this.unauthenticatedAction()); if (this.authenticatedSelector(this.store.getState()) || this.cancelledSelector(this.store.getState())) { console.error('AuthInterceptor found invalid state when handling unauthenticated ' + 'response. The selectors given (authenticated and cancelled) should ' + 'both return false initially and then return true once the user has ' + 'successfully authenticated or cancelled respectively.'); return Promise.reject(); } return new Promise(function (resolve, reject) { var unsub = _this.store.subscribe(function () { if (_this.authenticatedSelector(_this.store.getState())) { unsub(); resolve(); } else if (_this.cancelledSelector && _this.cancelledSelector(_this.store.getState())) { unsub(); reject(); } }); }); } }, { key: "handleRejected", value: function handleRejected(error) { var _this2 = this; if (error.response && error.response.status === 401 && !error.response.config.__bypassAuthInterceptor) { if (!this.authPromise) { this.authPromise = this.authenticate(); } return new Promise(function (resolve, reject) { _this2.authPromise.then(function () { (0, _axios["default"])(error.response.config).then(resolve)["catch"](reject); })["catch"](function () { reject(error); })["finally"](function () { _this2.authPromise = null; }); }); } else { return Promise.reject(error); } } }]); return AuthInterceptor; }();