UNPKG

@getpassage/react-native

Version:

Passage React Native SDK for mobile authentication

81 lines (80 loc) 2.45 kB
import { logger } from "./logger"; // Cache for JWT decoding to avoid repeated parsing of the same token let cachedToken = null; let cachedDecoded = null; /** * Decode a JWT token and extract its payload */ export function decodeJWT(token) { if (!token) return null; // Return cached result if token hasn't changed if (cachedToken === token && cachedDecoded) { return cachedDecoded; } try { const parts = token.split("."); if (parts.length !== 3) { logger.debug("[JWT_UTILS] Invalid JWT format - not 3 parts"); return null; } let payload = parts[1]; // Add padding if needed while (payload.length % 4 !== 0) { payload += "="; } const decodedBytes = atob(payload); const decodedPayload = JSON.parse(decodedBytes); // Cache the result cachedToken = token; cachedDecoded = decodedPayload; logger.debug("[JWT_UTILS] JWT decoded successfully", { hasSessionId: !!decodedPayload.sessionId, recordFlag: decodedPayload.record, debugFlag: decodedPayload.debug, clearCookiesFlag: decodedPayload.clearCookies, }); return decodedPayload; } catch (error) { logger.debug("[JWT_UTILS] Failed to decode JWT", error); cachedToken = null; cachedDecoded = null; return null; } } /** * Extract session ID from JWT token */ export function extractSessionId(token) { const decoded = decodeJWT(token); return (decoded === null || decoded === void 0 ? void 0 : decoded.sessionId) || null; } /** * Extract record flag from JWT token */ export function extractRecordFlag(token) { const decoded = decodeJWT(token); return (decoded === null || decoded === void 0 ? void 0 : decoded.record) === true; } /** * Extract debug flag from JWT token */ export function extractDebugFlag(token) { const decoded = decodeJWT(token); return (decoded === null || decoded === void 0 ? void 0 : decoded.debug) === true; } /** * Extract clearCookies flag from JWT token */ export function extractClearCookiesFlag(token) { const decoded = decodeJWT(token); return (decoded === null || decoded === void 0 ? void 0 : decoded.clearCookies) === true; } /** * Clear cached token data */ export function clearJWTCache() { cachedToken = null; cachedDecoded = null; }