react-jwt
Version:
Small library for decoding json web tokens (JWT)
70 lines (69 loc) • 2.32 kB
JavaScript
import { useState as a, useEffect as p } from "react";
const i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", d = /* @__PURE__ */ new Map();
for (let e = 0; e < i.length; e++) {
let r = e.toString(2);
const n = 6 - r.length;
r = "0".repeat(n) + r, d.set(i.charCodeAt(e), r);
}
function s(e) {
let r = "";
for (let o = 0; o < e.length; o++)
r += d.get(e.charCodeAt(o));
r = r.slice(0, r.length - r.length % 8);
const n = [];
for (let o = 0; o < r.length / 8; o++)
n.push(r.slice(o * 8, o * 8 + 8));
return n;
}
function f(e) {
return e = e.replaceAll("=", ""), e = e.replaceAll("-", "+"), e = e.replaceAll("_", "/"), s(e).map((n) => parseInt(n, 2));
}
function h(e) {
let r = "", n;
const o = e.length;
for (let t = 0; t < o; t++)
n = e[t], r += String.fromCodePoint(
n > 251 && n < 254 && t + 5 < o ? (
/* (nPart - 252 << 30) may be not so safe in ECMAScript! So... */
(n - 252) * 1073741824 + (e[++t] - 128 << 24) + (e[++t] - 128 << 18) + (e[++t] - 128 << 12) + (e[++t] - 128 << 6) + e[++t] - 128
) : n > 247 && n < 252 && t + 4 < o ? (n - 248 << 24) + (e[++t] - 128 << 18) + (e[++t] - 128 << 12) + (e[++t] - 128 << 6) + e[++t] - 128 : n > 239 && n < 248 && t + 3 < o ? (n - 240 << 18) + (e[++t] - 128 << 12) + (e[++t] - 128 << 6) + e[++t] - 128 : n > 223 && n < 240 && t + 2 < o ? (n - 224 << 12) + (e[++t] - 128 << 6) + e[++t] - 128 : n > 191 && n < 224 && t + 1 < o ? (n - 192 << 6) + e[++t] - 128 : (
/* one byte */
n
)
);
return r;
}
function u(e) {
try {
if (typeof e != "string" || e.split(".").length !== 3)
return null;
const r = e.split(".")[1], n = f(r), o = h(n);
return JSON.parse(o);
} catch (r) {
return console.error("There was an error decoding token: ", r), null;
}
}
function g(e) {
const r = u(e);
let n = !0;
if (r && r.exp) {
const o = /* @__PURE__ */ new Date(0);
o.setUTCSeconds(r.exp), n = o.valueOf() < (/* @__PURE__ */ new Date()).valueOf();
}
return n;
}
function A(e) {
const [r, n] = a(!1), [o, t] = a(null);
p(() => {
l(e);
}, [e]);
const l = (c) => {
t(u(c)), n(g(c));
};
return { isExpired: r, decodedToken: o, reEvaluateToken: l };
}
export {
u as decodeToken,
g as isExpired,
A as useJwt
};