import { useCurrentTenant } from "./currentTenant"; import axios from "axios"; import { AppEnum, JwtPayload, TokenPrefix } from ".."; import { jwtDecode } from "jwt-decode"; export const getAppIdFromTokenPrefix = (tokenPrefix: TokenPrefix): string => { switch (tokenPrefix) { case TokenPrefix.InstellingenTokenPrefix: return AppEnum.Instellingen; case TokenPrefix.PIMTokenPrefix: return AppEnum.PIM; case TokenPrefix.SalesAppTokenPrefix: return AppEnum.SalesApp; case TokenPrefix.LogistiekTokenPrefix: return AppEnum.Logistiek; case TokenPrefix.ParcelSendersTokenPrefix: return AppEnum.Pakketverzenders; case TokenPrefix.RelatiesTokenPrefix: return AppEnum.Relaties; case TokenPrefix.BestelPortaalTokenPrefix: return AppEnum.BestelPortaal; case TokenPrefix.ScannerTokenPrefix: return AppEnum.Scanner; case TokenPrefix.RetourmoduleTokenPrefix: return AppEnum.Retourmodule; case TokenPrefix.PrinterTokenPrefix: return ""; default: return ""; } } export const useToken = async (managementApiUrl: string, tokenPrefix: TokenPrefix): Promise => { const { getCurrentTenantAsync } = useCurrentTenant(); const currentTenant = await getCurrentTenantAsync(); const token = localStorage.getItem(`${tokenPrefix}${currentTenant}`); if ((!token || jwtDecode(token) && new Date(((jwtDecode(token).exp ?? 0) - 30) * 1000) < new Date())) { // Get the auth0 token from the auth0 instance const auth0Token = localStorage.getItem("auth0token"); if (!auth0Token) { // TODO: Fix this later with an auth0 silent refresh window.location.reload(); } const newToken = await axios.get(`token/${currentTenant}/${getAppIdFromTokenPrefix(tokenPrefix)}`, { headers: { Authorization: `Bearer ${auth0Token}` }, baseURL: managementApiUrl, }).then(x => x.data); localStorage.setItem(`${tokenPrefix}${currentTenant}`, newToken); return newToken; } return token; }