mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-01-10 07:18:10 -05:00
49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { QueryCache, MutationCache, QueryClient } from "@tanstack/react-query";
|
|
import i18next from "i18next";
|
|
import { AxiosError } from "axios";
|
|
import { I18nKey } from "./i18n/declaration";
|
|
import { retrieveAxiosErrorMessage } from "./utils/retrieve-axios-error-message";
|
|
import { displayErrorToast } from "./utils/custom-toast-handlers";
|
|
|
|
const handle401Error = (error: AxiosError, queryClient: QueryClient) => {
|
|
if (error?.response?.status === 401 || error?.status === 401) {
|
|
queryClient.invalidateQueries({ queryKey: ["user", "authenticated"] });
|
|
}
|
|
};
|
|
|
|
const shownErrors = new Set<string>();
|
|
export const queryClient = new QueryClient({
|
|
queryCache: new QueryCache({
|
|
onError: (error, query) => {
|
|
const isAuthQuery =
|
|
query.queryKey[0] === "user" && query.queryKey[1] === "authenticated";
|
|
if (!isAuthQuery) {
|
|
handle401Error(error, queryClient);
|
|
}
|
|
|
|
if (!query.meta?.disableToast) {
|
|
const errorMessage = retrieveAxiosErrorMessage(error);
|
|
|
|
if (!shownErrors.has(errorMessage || "")) {
|
|
displayErrorToast(errorMessage || i18next.t(I18nKey.ERROR$GENERIC));
|
|
shownErrors.add(errorMessage);
|
|
|
|
setTimeout(() => {
|
|
shownErrors.delete(errorMessage);
|
|
}, 3000);
|
|
}
|
|
}
|
|
},
|
|
}),
|
|
mutationCache: new MutationCache({
|
|
onError: (error, _, __, mutation) => {
|
|
handle401Error(error, queryClient);
|
|
|
|
if (!mutation?.meta?.disableToast) {
|
|
const message = retrieveAxiosErrorMessage(error);
|
|
displayErrorToast(message || i18next.t(I18nKey.ERROR$GENERIC));
|
|
}
|
|
},
|
|
}),
|
|
});
|