37 lines
845 B
TypeScript
37 lines
845 B
TypeScript
import { jwtDecode } from 'jwt-decode';
|
|
|
|
export interface JWTPayload {
|
|
client_id?: number;
|
|
user_id?: number;
|
|
username: string;
|
|
role: string;
|
|
session_id: string;
|
|
iat: number;
|
|
exp: number;
|
|
iss: string;
|
|
}
|
|
|
|
export const decodeToken = (token: string): JWTPayload | null => {
|
|
try {
|
|
return jwtDecode<JWTPayload>(token);
|
|
} catch {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export const extractUsernameFromToken = (token: string): string | null => {
|
|
const payload = decodeToken(token);
|
|
return payload?.username ?? null;
|
|
};
|
|
|
|
export const extractRoleFromToken = (token: string): string | null => {
|
|
const payload = decodeToken(token);
|
|
return payload?.role ?? null;
|
|
};
|
|
|
|
export const isTokenExpired = (token: string): boolean => {
|
|
const payload = decodeToken(token);
|
|
if (!payload) return true;
|
|
return Date.now() >= payload.exp * 1000;
|
|
};
|