diff --git a/src/app/routes/__root.tsx b/src/app/routes/__root.tsx index 33daa3b..60b84fa 100644 --- a/src/app/routes/__root.tsx +++ b/src/app/routes/__root.tsx @@ -4,6 +4,7 @@ import { Outlet, Scripts, createRootRouteWithContext, + redirect, } from "@tanstack/react-router"; import * as React from "react"; import { DefaultCatchBoundary } from "@/components/DefaultCatchBoundary"; @@ -132,6 +133,15 @@ export const Route = createRootRouteWithContext<{ throw error; } + if (error instanceof Response && error.status === 440) { + console.log('__root beforeLoad: Session needs refresh, redirecting'); + const from = encodeURIComponent(location.pathname + location.search); + throw redirect({ + to: "/refresh-session", + search: { redirect: from } + }); + } + console.error('__root beforeLoad error:', error); return {}; } diff --git a/src/lib/tanstack-query/utils/ensure.ts b/src/lib/tanstack-query/utils/ensure.ts index dbe3b80..3b57a81 100644 --- a/src/lib/tanstack-query/utils/ensure.ts +++ b/src/lib/tanstack-query/utils/ensure.ts @@ -23,6 +23,9 @@ export async function ensureServerQueryData( if (error?.options?.to && error?.options?.statusCode) { throw error; } + if (error instanceof Response && error.status === 440) { + throw error; + } throw error; } } diff --git a/src/lib/tanstack-query/utils/to-server-result.ts b/src/lib/tanstack-query/utils/to-server-result.ts index ed3c429..c812368 100644 --- a/src/lib/tanstack-query/utils/to-server-result.ts +++ b/src/lib/tanstack-query/utils/to-server-result.ts @@ -34,6 +34,11 @@ export const toServerResult = async ( } } + if (error instanceof Response && error.status === 440) { + logger.info('toServerResult: Re-throwing 440 Response for session refresh'); + throw error; + } + const duration = Date.now() - startTime; logger.error('Server Fn Error', error);