import { defaultShouldDehydrateQuery, isServer, QueryClient, } from "@tanstack/react-query"; import superjson from "superjson"; export function makeQueryClient() { return new QueryClient({ defaultOptions: { queries: { // Default staleTime of 2 minutes - queries won't refetch if data is fresh // For static data (user settings, team config), override with longer staleTime (5+ min) staleTime: 2 * 60 * 1000, // Keep unused data in cache for 10 minutes before garbage collection gcTime: 10 * 60 * 1000, // On the server, limit retries to 1 so fetchQuery/prefetchQuery fail // fast (prevents 3× exponential-backoff delays that stall SSR). // On the client, allow 2 retries for resilience against transient // network hiccups (mobile, slow connections, etc.). retry: isServer ? 1 : 2, }, dehydrate: { serializeData: superjson.serialize, shouldDehydrateQuery: (query) => defaultShouldDehydrateQuery(query) || query.state.status === "pending", }, hydrate: { deserializeData: superjson.deserialize, }, }, }); }