32 lines
921 B
TypeScript
32 lines
921 B
TypeScript
import { MutationCache, QueryCache, QueryClient } from "@tanstack/react-query";
|
|
|
|
import { isRateLimitError, isUnauthorizedError } from "@/lib/trpc-errors";
|
|
|
|
export function createAppQueryClient(onUnauthorized: () => void) {
|
|
const handleError = (error: unknown) => {
|
|
if (isUnauthorizedError(error)) {
|
|
onUnauthorized();
|
|
}
|
|
};
|
|
|
|
return new QueryClient({
|
|
queryCache: new QueryCache({ onError: handleError }),
|
|
mutationCache: new MutationCache({ onError: handleError }),
|
|
defaultOptions: {
|
|
queries: {
|
|
staleTime: 30_000,
|
|
retry: (failureCount, error) => {
|
|
if (isUnauthorizedError(error) || isRateLimitError(error)) return false;
|
|
return failureCount < 1;
|
|
},
|
|
},
|
|
mutations: {
|
|
retry: (failureCount, error) => {
|
|
if (isRateLimitError(error)) return false;
|
|
return failureCount < 1;
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}
|