import type { JwtPayload } from "jwt-decode"; import type { Ref, UnwrapRef } from "vue"; import jwtDecode from "jwt-decode"; import { isErrorResponse } from "./base"; import { refresh_token } from "./auth"; export async function check_token( token: TokenInjectType ): Promise { if (!token.jwt.value) return token.logout(); const payload = jwtDecode(token.jwt.value); if (!payload) return token.logout(); // Expires in more than 60 Minute if (payload.exp && payload.exp > Math.floor(Date.now() / 1000 + 60 * 60)) return token.jwt.value; const new_token = await refresh_token(token.jwt.value); if (isErrorResponse(new_token)) return token.logout(); token.setToken(new_token.jwt); return new_token.jwt; } export type TokenInjectType = { jwt: Ref>; setToken: (token: string) => void; logout: () => void; };