UNPKG

react-jwt

Version:

Small library for decoding json web tokens (JWT)

70 lines (69 loc) 2.32 kB
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 };