UNPKG

@intuitionrobotics/user-account

Version:
164 lines 8.45 kB
"use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AccountModule = exports.AccountModule_Class = exports.LoggedStatus = exports.RequestKey_ValidateSession = exports.RequestKey_AccountLoginSAML = exports.RequestKey_AccountLogin = exports.RequestKey_AccountCreate = exports.StorageKey_JWT = exports.StorageKey_UserEmail = void 0; const ts_common_1 = require("@intuitionrobotics/ts-common"); const frontend_1 = require("@intuitionrobotics/thunderstorm/frontend"); const api_1 = require("../../shared/api"); const thunderstorm_1 = require("@intuitionrobotics/thunderstorm"); const __1 = require("../.."); exports.StorageKey_UserEmail = new frontend_1.StorageKey(`storage-${api_1.QueryParam_Email}`); exports.StorageKey_JWT = new frontend_1.StorageKey(`storage-${api_1.QueryParam_JWT}`); exports.RequestKey_AccountCreate = "account-create"; exports.RequestKey_AccountLogin = "account-login"; exports.RequestKey_AccountLoginSAML = "account-login-saml"; exports.RequestKey_ValidateSession = "account-validate"; var LoggedStatus; (function (LoggedStatus) { LoggedStatus[LoggedStatus["VALIDATING"] = 0] = "VALIDATING"; LoggedStatus[LoggedStatus["LOGGED_OUT"] = 1] = "LOGGED_OUT"; LoggedStatus[LoggedStatus["LOGGED_IN"] = 2] = "LOGGED_IN"; })(LoggedStatus || (exports.LoggedStatus = LoggedStatus = {})); const dispatch_onAccountsLoaded = new frontend_1.ThunderDispatcher("__onAccountsLoaded"); class AccountModule_Class extends ts_common_1.Module { constructor() { super("AccountModule"); this.status = LoggedStatus.VALIDATING; this.accounts = []; this.onUnauthenticatedResponse = () => { this.logout(); }; this.getLoggedStatus = () => this.status; this.isStatus = (status) => this.status === status; this.setLoggedStatus = (newStatus) => { if (this.status === newStatus) return; const pervStatus = this.status; this.status = newStatus; this.logInfo(`Login status changes: ${LoggedStatus[pervStatus]} => ${LoggedStatus[newStatus]}`); this.dispatchUI_loginChanged.dispatchUI(); this.dispatchUI_loginChanged.dispatchModule(); }; this.validateToken = () => { frontend_1.XhrHttpModule .createRequest(thunderstorm_1.HttpMethod.GET, exports.RequestKey_ValidateSession) .setLabel(`Validate token...`) .setRelativeUrl("/v1/account/validate") .setOnError((request, resError) => { if (request.getStatus() === 0) { frontend_1.ToastModule.toastError("Cannot reach Server... trying in 30 sec"); setTimeout(() => exports.AccountModule.validateToken(), 30 * ts_common_1.Second); return; } exports.StorageKey_JWT.delete(); return exports.AccountModule.setLoggedStatus(LoggedStatus.LOGGED_OUT); }) .execute(() => __awaiter(this, void 0, void 0, function* () { exports.AccountModule.setLoggedStatus(LoggedStatus.LOGGED_IN); })); }; this.logout = (url) => { exports.StorageKey_JWT.delete(); if (url) return window.location.href = url; this.setLoggedStatus(LoggedStatus.LOGGED_OUT); }; this.listUsers = () => { frontend_1.XhrHttpModule .createRequest(thunderstorm_1.HttpMethod.GET, exports.RequestKey_ValidateSession) .setLabel(`Fetching users...`) .setRelativeUrl("/v1/account/query") .execute((res) => __awaiter(this, void 0, void 0, function* () { this.accounts = res.accounts.filter(account => account._id); dispatch_onAccountsLoaded.dispatchUI(); })); }; frontend_1.XhrHttpModule.addDefaultResponseHandler((request) => { var _a; const status = request.getStatus(); if (status < 200 || status >= 300) return false; try { const functionExecutionId = (_a = request === null || request === void 0 ? void 0 : request.getResponseHeader) === null || _a === void 0 ? void 0 : _a.call(request, thunderstorm_1.HeaderKey_FunctionExecutionId); frontend_1.XhrHttpModule.logDebug(`${request.key} Function execution id: ${functionExecutionId}`); const jwt = request.getResponseHeader(thunderstorm_1.HeaderKey_JWT); if (jwt) exports.StorageKey_JWT.set(jwt); } catch (e) { frontend_1.XhrHttpModule.logError(`${request.key} - Failed to retrieve headers from xhr call`, e); } return false; }); } getAccounts() { return this.accounts; } init() { frontend_1.XhrHttpModule.addDefaultHeader(__1.AUTHENTICATION_KEY, () => `${__1.AUTHENTICATION_PREFIX} ${exports.StorageKey_JWT.get()}`); this.dispatchUI_loginChanged = new frontend_1.ThunderDispatcher("onLoginStatusUpdated"); const email = frontend_1.BaseComponent.getQueryParameter(api_1.QueryParam_Email); const jwt = frontend_1.BaseComponent.getQueryParameter(api_1.QueryParam_JWT); if (email && jwt) { exports.StorageKey_JWT.set(jwt); exports.StorageKey_UserEmail.set(email); frontend_1.BrowserHistoryModule.removeQueryParam(api_1.QueryParam_Email); frontend_1.BrowserHistoryModule.removeQueryParam(api_1.QueryParam_JWT); } if (exports.StorageKey_JWT.get()) return exports.AccountModule.validateToken(); this.logDebug("login out user.... "); this.setLoggedStatus(LoggedStatus.LOGGED_OUT); } create(request) { frontend_1.XhrHttpModule .createRequest(thunderstorm_1.HttpMethod.POST, exports.RequestKey_AccountCreate) .setRelativeUrl("/v1/account/create") .setJsonBody(request) .setLabel(`User register...`) .setOnError("Error registering user") .execute((response) => __awaiter(this, void 0, void 0, function* () { frontend_1.ToastModule.toastSuccess(`Account successfully created with email: ${response.email}`); })); } login(request) { frontend_1.XhrHttpModule .createRequest(thunderstorm_1.HttpMethod.POST, exports.RequestKey_AccountLogin) .setRelativeUrl("/v1/account/login") .setJsonBody(request) .setLabel(`User login with password...`) .setOnError("Error login user") .execute((response) => __awaiter(this, void 0, void 0, function* () { this.setLoginInfo(response); })); } setLoginInfo(response) { exports.StorageKey_JWT.set(response.jwt); exports.StorageKey_UserEmail.set(response.email); this.setLoggedStatus(LoggedStatus.LOGGED_IN); } loginSAML(request) { frontend_1.XhrHttpModule .createRequest(thunderstorm_1.HttpMethod.GET, exports.RequestKey_AccountLoginSAML) .setRelativeUrl("/v1/account/login-saml") .setUrlParams(request) .setLabel(`User login SAML...`) .setOnError('Error login user') .execute((response) => __awaiter(this, void 0, void 0, function* () { if (!response.loginUrl) return; window.location.href = response.loginUrl; })); } } exports.AccountModule_Class = AccountModule_Class; exports.AccountModule = new AccountModule_Class(); //# sourceMappingURL=AccountModule.js.map