interface TokenResponse { token: string | null | undefined; } interface TokenBody { token: string; iat: number; exp: number; } export interface LoginBody { login: string; password: string; } export interface TokenData { accessToken: string | null | undefined; issued: number; expires: number; } export const defaultTokenData: TokenData = { accessToken: "", issued: 0, expires: 0 } export async function fetchToken(apiUrl: string){ const res = await fetch(`${apiUrl}/refresh`); return await res.json() as TokenResponse; } export function parseToken(rawToken: string | null | undefined): TokenData { if(!rawToken){ return defaultTokenData; } const payloads = rawToken.split("."); if(payloads.length !== 3){ return defaultTokenData; } const payload = payloads[1]; const tokenBody = JSON.parse(atob(payload)) as TokenBody; return ({ accessToken: rawToken, issued: tokenBody.iat * 1000, expires: tokenBody.exp * 1000 }); }