import { QueryClient } from "@tanstack/react-query"; import { isApiError } from "@/client/lib/api"; import { redirectToLogin } from "@/client/auth/login-redirect"; import { toast } from "@/client/lib/toast"; function isUnauthorizedError(err: unknown): boolean { if (!err) return false; if (typeof err === "object" && err !== null && "status" in err) { const status = (err as { status?: number }).status; if (status === 401) return true; } if (isApiError(err) && err.error.code === "unauthorized") return true; return false; } export const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 30_000, retry: (_failureCount, err) => { if (isUnauthorizedError(err)) return false; return _failureCount < 1; }, refetchOnWindowFocus: false, }, mutations: { onError: (err) => { if (isUnauthorizedError(err)) { redirectToLogin(); return; } const message = (err && typeof err === "object" && "error" in err && isApiError(err) && err.error.message) || (err instanceof Error && err.message) || "Something went wrong."; toast.error(message); }, }, }, });