/** * Unified auth provider. Selects the Spring (self-hosted JWT) or Supabase * (cloud) backend by `mode` and feeds the single shared AuthContext, so * consumers read `useAuth()` identically either way. */ import { lazy, Suspense, type ReactNode } from "react"; import { SpringAuthProvider } from "@shared/auth/spring/UseSession"; import { type AuthMode, type AuthTranslate } from "@shared/auth/types"; // Lazy so Spring-mode hosts (e.g. the portal) don't bundle @supabase/supabase-js // they never use; only loaded when mode="supabase". const SupabaseAuthProvider = lazy(() => import("@shared/auth/supabase/UseSession").then((m) => ({ default: m.SupabaseAuthProvider, })), ); export interface AuthProviderProps { children: ReactNode; /** Which backend to authenticate against. Defaults to "spring". */ mode?: AuthMode; /** Optional i18n translate for user-facing copy (defaults to English). */ translate?: AuthTranslate; } export function AuthProvider({ children, mode = "spring", translate, }: AuthProviderProps) { if (mode === "supabase") { return ( {children} ); } return ( {children} ); }