import { MutationCache, QueryClient } from "@tanstack/react-query";
import axios from "axios";
import { createNotification } from "@app/components/notifications";
import { ApiErrorTypes, TApiErrors } from "./hooks/api/types";
// this is saved in react-query cache
export const SIGNUP_TEMP_TOKEN_CACHE_KEY = ["infisical__signup-temp-token"];
export const MFA_TEMP_TOKEN_CACHE_KEY = ["infisical__mfa-temp-token"];
export const AUTH_TOKEN_CACHE_KEY = ["infisical__auth-token"];
export const queryClient = new QueryClient({
mutationCache: new MutationCache({
onError: (error) => {
if (axios.isAxiosError(error)) {
const serverResponse = error.response?.data as TApiErrors;
if (serverResponse?.error === ApiErrorTypes.ValidationError) {
createNotification({
title: "Validation Error",
type: "error",
text: (
{serverResponse.message?.map(({ message, path }) => (
Field {path.join(".")} {message.toLowerCase()}
))}
)
});
return;
}
if (serverResponse.statusCode === 401) {
createNotification({
title: "Forbidden Access",
type: "error",
text: serverResponse.message
});
return;
}
createNotification({ title: "Bad Request", type: "error", text: serverResponse.message });
}
}
}),
defaultOptions: {
queries: {
refetchOnWindowFocus: false,
retry: 1
}
}
});
// memory token storage will be moved to apiRequest module until securityclient is completely depreciated
// then all the getters will be also hidden scoped to apiRequest only
const MemoryTokenStorage = () => {
let authToken: string;
return {
setToken: (token: string) => {
authToken = token;
},
getToken: () => authToken
};
};
const signUpTempTokenStorage = MemoryTokenStorage();
const mfaAuthTokenStorage = MemoryTokenStorage();
const authTokenStorage = MemoryTokenStorage();
// set token in memory cache
export const setSignupTempToken = signUpTempTokenStorage.setToken;
export const setMfaTempToken = mfaAuthTokenStorage.setToken;
export const setAuthToken = authTokenStorage.setToken;
export const getSignupTempToken = signUpTempTokenStorage.getToken;
export const getMfaTempToken = mfaAuthTokenStorage.getToken;
export const getAuthToken = authTokenStorage.getToken;
export const isLoggedIn = () => Boolean(getAuthToken());