UNPKG

@egalteam/framework

Version:

Egal

273 lines (272 loc) 14.3 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpRequest = void 0; var ActionError_1 = require("../ActionResponses/ActionError"); var GlobalVariables_1 = require("../../GlobalVariables"); var AxiosInstance_1 = require("../../AxiosInstance"); var isRefreshing = false; var refreshSubscribers = []; var initialRequest = undefined; var targetServiceName = ''; var newToken = ''; var HttpRequest = /** @class */ (function () { function HttpRequest() { this.actionResult = {}; this.actionError = {}; } HttpRequest.prototype.subscribeTokenRefresh = function (cb) { refreshSubscribers.push(cb); }; HttpRequest.prototype.onRefreshed = function (token) { refreshSubscribers.map(function (cb) { return cb(token); }); }; HttpRequest.prototype.refreshAccessToken = function (serviceName, requestServiceName) { return __awaiter(this, void 0, void 0, function () { var domain; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: AxiosInstance_1.default.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(_this, void 0, void 0, function () { var config; var _this = this; return __generator(this, function (_a) { config = error.config; if (error.response.data.action_error.internal_code === 'umt_expired') { this.refreshMasterToken(serviceName).then(function () { _this.refreshAccessToken(serviceName, requestServiceName).then(function () { // @ts-ignore initialRequest.headers['Authorization'] = (0, GlobalVariables_1.getCookie)(requestServiceName); (0, AxiosInstance_1.default)(initialRequest); refreshSubscribers = []; }); }).catch(function (error) { return Promise.reject(error); }); } else { return [2 /*return*/, Promise.reject(error)]; } return [2 /*return*/]; }); }); }); if (!(localStorage.getItem('umt') && localStorage.getItem('umrt'))) return [3 /*break*/, 2]; domain = GlobalVariables_1.GlobalVariables.httpBaseUrl ? GlobalVariables_1.GlobalVariables.httpBaseUrl : GlobalVariables_1.GlobalVariables.authBaseUrl; delete AxiosInstance_1.default.defaults.headers.common.Authorization; return [4 /*yield*/, (0, AxiosInstance_1.default)({ url: "".concat(domain, "/").concat(serviceName, "/User/loginToService"), method: 'POST', data: { service_name: requestServiceName, token: localStorage.getItem('umt') } }) .then(function (response) { // @ts-ignore (0, GlobalVariables_1.deleteCookie)(requestServiceName); _this.setTargetMicroserviceName(response.data.action_result.data); _this.onRefreshed(response.data.action_result.data); newToken = response.data.action_result.data; return response.data.action_result.data; }) .catch(function (error) { return error; })]; case 1: _a.sent(); _a.label = 2; case 2: return [2 /*return*/]; } }); }); }; HttpRequest.prototype.refreshMasterToken = function (serviceName) { return __awaiter(this, void 0, void 0, function () { var domain; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!localStorage.getItem('umrt')) return [3 /*break*/, 2]; domain = GlobalVariables_1.GlobalVariables.httpBaseUrl ? GlobalVariables_1.GlobalVariables.httpBaseUrl : GlobalVariables_1.GlobalVariables.authBaseUrl; delete AxiosInstance_1.default.defaults.headers.common.Authorization; return [4 /*yield*/, (0, AxiosInstance_1.default)({ url: "".concat(domain, "/").concat(serviceName, "/User/refreshUserMasterToken"), method: 'POST', data: { token: localStorage.getItem('umrt') } }) .then(function (response) { localStorage.setItem('umrt', response.data.action_result.data.user_master_refresh_token); localStorage.setItem('umt', response.data.action_result.data.user_master_token); }) .catch(function (error) { localStorage.removeItem('umrt'); return error; })]; case 1: _a.sent(); return [3 /*break*/, 3]; case 2: return [2 /*return*/, new ActionError_1.ActionError('Session expired!', 401).getMessage()]; case 3: return [2 /*return*/]; } }); }); }; HttpRequest.prototype.axiosConnect = function (serviceName, modelName, actionName, httpMethod, actionParameters, customActionParameters, refreshTokenName) { var _this = this; var domain = GlobalVariables_1.GlobalVariables.httpBaseUrl ? GlobalVariables_1.GlobalVariables.httpBaseUrl : GlobalVariables_1.GlobalVariables.authBaseUrl; var userTokenName = GlobalVariables_1.GlobalVariables.tokenUST; // let instance = axios.create(); if (actionName !== 'register' && actionName !== 'login' && actionName !== 'loginToService' && actionName !== 'loginAndGetRefreshToken') { AxiosInstance_1.default.defaults.headers.common['Authorization'] = (0, GlobalVariables_1.getCookie)(userTokenName); } AxiosInstance_1.default.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(_this, void 0, void 0, function () { var config, originalRequest, requestServiceName_1; var _this = this; return __generator(this, function (_a) { config = error.config; originalRequest = config; initialRequest = originalRequest; if (error.response.data.action_error.code === 401 && error.response.data.action_error.internal_code === 'ust_expired') { requestServiceName_1 = this.setTargetMicroserviceName(initialRequest.headers.Authorization); if (!isRefreshing) { isRefreshing = true; this.refreshAccessToken(refreshTokenName, requestServiceName_1).then(function () { isRefreshing = false; }); } return [2 /*return*/, new Promise(function (resolve, reject) { _this.subscribeTokenRefresh(function (newToken) { originalRequest.headers['Authorization'] = (0, GlobalVariables_1.getCookie)(requestServiceName_1); resolve((0, AxiosInstance_1.default)(originalRequest)); refreshSubscribers = []; }); })]; } else { return [2 /*return*/, Promise.reject(error)]; } return [2 /*return*/]; }); }); }); return new Promise(function (resolve, reject) { var data; switch (actionName) { case 'register': case 'login': case 'loginToService': case 'loginAndGetRefreshToken': case 'getItems': case 'getItem': case 'delete': case 'getCount': case 'updateManyRaw': case 'deleteManyRaw': case 'deleteMany': data = actionParameters; break; case 'createMany': case 'updateMany': var actionManyParams = { objects: {} }; // @ts-ignore actionManyParams.objects = actionParameters; data = actionManyParams; break; default: data = __assign({ attributes: actionParameters }, customActionParameters); } if (GlobalVariables_1.GlobalVariables.httpBaseUrl || GlobalVariables_1.GlobalVariables.authBaseUrl) { (0, AxiosInstance_1.default)({ url: "".concat(domain, "/").concat(serviceName, "/").concat(modelName, "/").concat(actionName), method: httpMethod, data: data }) .then(function (response) { resolve(response); }) .catch(function (error) { if ('response' in error) { reject(error.response); } else { reject(error); } }); } else { _this.actionError = new ActionError_1.ActionError('Укажите URL!'); reject(_this.actionError.getMessage()); } }); }; HttpRequest.prototype.setTargetMicroserviceName = function (token) { var decipheredToken = (0, GlobalVariables_1.decipherJWT)(token); targetServiceName = decipheredToken.target_service_name; (0, GlobalVariables_1.setCookie)(targetServiceName, token); return targetServiceName; }; return HttpRequest; }()); exports.HttpRequest = HttpRequest;