UNPKG

@parkingboss/api

Version:
83 lines (82 loc) 2.57 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.unsetUser = exports.setUser = exports.loadUser = exports.jwtUser = void 0; const store_modern_1 = __importDefault(require("store/dist/store.modern")); const jwt_decode_1 = __importDefault(require("jwt-decode")); const AUTH_KEY = "user/auth"; function loadFromUrl(skipExpiryCheck) { const url = new URL(location.toString()); const source = Array.from(url.searchParams.entries()) .concat(Array.from(new URLSearchParams(url.hash.replace(/^#/, "")).entries())) .reduce((acc, item) => { acc[item[0]] = item[1]; return acc; }, {}); const token = source.access_token || source.token; if (!token) return null; const usr = jwtUser({ token, type: "bearer" }, skipExpiryCheck); if (usr) setUser(usr); return usr; } function loadFromStorage(skipExpiryCheck) { const data = store_modern_1.default.get(AUTH_KEY); return jwtUser(data, skipExpiryCheck); } function jwtUser(jwt, skipExpiryCheck) { return jwtToUser(parseJwt(jwt, !!skipExpiryCheck)); } exports.jwtUser = jwtUser; function loadUser(skipExpiryCheck = false) { return loadFromUrl(skipExpiryCheck) || loadFromStorage(skipExpiryCheck); } exports.loadUser = loadUser; function setUser(data) { store_modern_1.default.set(AUTH_KEY, data); } exports.setUser = setUser; function unsetUser() { store_modern_1.default.remove(AUTH_KEY); } exports.unsetUser = unsetUser; function parseJwt(data, skipExpiryCheck) { if (data && data.token) { try { const jwt = jwt_decode_1.default(data.token); if (jwt && (skipExpiryCheck || notExpired(jwt))) { return Object.assign(data, jwt); } } catch (e) { console.warn("Failed to Decode JWT. Use is not logged in.", e); unsetUser(); } } return null; } function notExpired(jwt) { if (jwt && jwt.exp) { return jwt.exp * 1000 > Date.now(); } return false; } function jwtToUser(jwt) { if (!jwt) return jwt; const expms = jwt.exp * 1000; const iatms = jwt.iat * 1000; const nbfms = jwt.nbf * 1000; return Object.assign(jwt, { user: jwt.sub, expms, expires: new Date(expms), iatms, created: new Date(iatms), nbfms, starts: new Date(nbfms), }); }