import { redirect } from "next/navigation"; import { type ReactNode } from "react"; import { GatewayOfflineFallback } from "@/components/workspace/gateway-offline-fallback"; import { AuthProvider } from "@/core/auth/AuthProvider"; import { getServerSideUser } from "@/core/auth/server"; import { assertNever } from "@/core/auth/types"; export const dynamic = "force-dynamic"; export default async function AuthLayout({ children, }: { children: ReactNode; }) { const result = await getServerSideUser(); switch (result.tag) { case "authenticated": redirect("/workspace"); case "needs_setup": // Allow access to setup page return {children}; case "system_setup_required": case "unauthenticated": return {children}; case "gateway_unavailable": // Auth pages have no banner of their own, so render one here. The // fallback's AuthProvider replaces the bare-HTML branch that // previously locked users out without any logout/retry capability. return (

Service temporarily unavailable.

); case "config_error": throw new Error(result.message); default: assertNever(result); } }