53 lines
961 B
TypeScript
53 lines
961 B
TypeScript
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
|
|
});
|
|
}
|