diff --git a/src/src/common/query/lib/create-query-client/main.ts b/src/src/common/query/lib/create-query-client/main.ts index bc69a69..0dfdcc4 100644 --- a/src/src/common/query/lib/create-query-client/main.ts +++ b/src/src/common/query/lib/create-query-client/main.ts @@ -10,6 +10,7 @@ import { serialize, shouldDehydrateQuery, shouldRedactErrors, + shouldRetryQuery, } from "./utils"; export function createQueryClient({}: CreateQueryClientInput = {}): CreateQueryClientOutput { @@ -26,6 +27,7 @@ export function createQueryClient({}: CreateQueryClientInput = {}): CreateQueryC queries: { queryKeyHashFn: hashKey, refetchInterval: constants.times.refetch, + retry: shouldRetryQuery, staleTime: constants.times.stale, }, }, diff --git a/src/src/common/query/lib/create-query-client/utils.ts b/src/src/common/query/lib/create-query-client/utils.ts index 21a1b1b..3776028 100644 --- a/src/src/common/query/lib/create-query-client/utils.ts +++ b/src/src/common/query/lib/create-query-client/utils.ts @@ -1,9 +1,11 @@ import type { Mutation, Query, QueryClient } from "@tanstack/react-query"; +import { ORPCError } from "@orpc/contract"; import { defaultShouldDehydrateQuery, matchQuery } from "@tanstack/react-query"; import type { SerializedData } from "./types"; +import { getExecutionContext } from "../../../generic/lib/get-execution-context"; import { serializer } from "./vars"; export function serialize(data: unknown) { @@ -32,6 +34,15 @@ export function shouldRedactErrors() { return false; } +export function shouldRetryQuery(failureCount: number, error: unknown) { + if (getExecutionContext().context.runtime === "server") return false; + + if (error instanceof ORPCError && error.status >= 400 && error.status < 500) + return false; + + return failureCount < 3; +} + export async function invalidateQueriesForMutation( mutation: Mutation, client: QueryClient,