@intuitionrobotics/user-account
Version:
164 lines • 8.45 kB
JavaScript
;
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