24 أسطر
771 B
TypeScript
24 أسطر
771 B
TypeScript
export function parseJwtPayload(token: string): Record<string, unknown> | null {
|
|
const parts = token.split(".");
|
|
if (parts.length < 2) return null;
|
|
|
|
try {
|
|
const normalized = parts[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
const decoded =
|
|
typeof window !== "undefined"
|
|
? window.atob(normalized)
|
|
: Buffer.from(normalized, "base64").toString("utf8");
|
|
return JSON.parse(decoded) as Record<string, unknown>;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function isJwtExpired(token: string, skewSeconds = 15): boolean {
|
|
const payload = parseJwtPayload(token);
|
|
const exp = typeof payload?.exp === "number" ? payload.exp : null;
|
|
if (!exp) return false;
|
|
const now = Math.floor(Date.now() / 1000);
|
|
return exp <= now + skewSeconds;
|
|
}
|