@parkingboss/api
Version:
The Parking Boss API
83 lines (82 loc) • 2.57 kB
JavaScript
;
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),
});
}