diff --git a/apps/frontend/src/middleware/project.global.ts b/apps/frontend/src/middleware/project.global.ts index fec952a024..af34e10c33 100644 --- a/apps/frontend/src/middleware/project.global.ts +++ b/apps/frontend/src/middleware/project.global.ts @@ -32,10 +32,11 @@ export default defineNuxtRouteMiddleware(async (to) => { const projectId = to.params.id as string try { - // Fetch v2 project for redirect check AND cache it for the page - // Using fetchQuery ensures the page's useQuery gets this cached result - const project = await queryClient.fetchQuery(projectQueryOptions.v2(projectId, client)) - const projectV3 = await queryClient.fetchQuery(projectQueryOptions.v3(projectId, client)) + // Fetch v2 and v3 in parallel — cache both for the page's useQuery calls + const [project, projectV3] = await Promise.all([ + queryClient.fetchQuery(projectQueryOptions.v2(projectId, client)), + queryClient.fetchQuery(projectQueryOptions.v3(projectId, client)), + ]) // Let page handle 404 if (!project) return diff --git a/apps/frontend/src/plugins/tanstack.ts b/apps/frontend/src/plugins/tanstack.ts index 252c0a53b3..7c859b2722 100644 --- a/apps/frontend/src/plugins/tanstack.ts +++ b/apps/frontend/src/plugins/tanstack.ts @@ -8,7 +8,16 @@ export default defineNuxtPlugin((nuxt) => { const vueQueryState = useState('vue-query') const queryClient = new QueryClient({ - defaultOptions: { queries: { staleTime: 10000 } }, + defaultOptions: { + queries: { + staleTime: 10000, + retry: (failureCount, error) => { + const status = (error as any)?.statusCode ?? (error as any)?.status + if (status !== undefined && status >= 400 && status < 500 && status !== 429) return false + return failureCount < 3 + }, + }, + }, }) const options: VueQueryPluginOptions = { queryClient }