import { MutationCache, QueryClient } from "@tanstack/react-query"; import axios from "axios"; import { createNotification } from "@app/components/notifications"; // akhilmhdh: doing individual imports to avoid cyclic import error import { Button } from "./components/v2/Button"; import { Modal, ModalContent, ModalTrigger } from "./components/v2/Modal"; import { Table, TableContainer, TBody, Td, Th, THead, Tr } from "./components/v2/Table"; import { formatedConditionsOperatorNames, PermissionConditionOperators } from "./context/ProjectPermissionContext/types"; 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"]; const camelCaseToSpaces = (input: string) => { return input.replace(/([a-z])([A-Z])/g, "$1 $2"); }; 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: "Please check the input and try again.", callToAction: ( {serverResponse.message?.map(({ message, path }) => ( ))}
Field Issue
{path.join(".")} {message.toLowerCase()}
), copyActions: [ { value: serverResponse.reqId, name: "Request ID", label: `Request ID: ${serverResponse.reqId}` } ] }, { closeOnClick: false } ); return; } if (serverResponse?.error === ApiErrorTypes.ForbiddenError) { createNotification( { title: "Forbidden Access", type: "error", text: `${serverResponse.message}.`, callToAction: serverResponse?.details?.length ? (
{serverResponse.details?.map((el, index) => { const hasConditions = Boolean(Object.keys(el.conditions || {}).length); return (
{el.inverted ? "Cannot" : "Can"}{" "} {el.action.toString().replaceAll(",", ", ")} {" "} {el.subject.toString()} {hasConditions && "with conditions:"}
{hasConditions && (
    {Object.keys(el.conditions || {}).flatMap((field, fieldIndex) => { const operators = ( el.conditions as Record< string, | string | { [K in PermissionConditionOperators]: string | string[] } > )[field]; const formattedFieldName = camelCaseToSpaces(field).toLowerCase(); if (typeof operators === "string") { return (
  • {formattedFieldName} {" "} equal to{" "} {operators}
  • ); } return Object.keys(operators).map((operator, operatorIndex) => (
  • {formattedFieldName} {" "} { formatedConditionsOperatorNames[ operator as PermissionConditionOperators ] } {" "} {operators[ operator as PermissionConditionOperators ].toString()}
  • )); })}
)}
); })}
) : undefined, copyActions: [ { value: serverResponse.reqId, name: "Request ID", label: `Request ID: ${serverResponse.reqId}` } ] }, { closeOnClick: false } ); return; } createNotification({ title: "Bad Request", type: "error", text: `${serverResponse.message}.`, copyActions: [ { value: serverResponse.reqId, name: "Request ID", label: `Request ID: ${serverResponse.reqId}` } ] }); } } }), 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());