Auth client: fetch machine context even if session is null; derive role/id from machineContext

This commit is contained in:
Esdras Renan 2025-10-14 21:57:21 -03:00
parent 43576ff8d7
commit 8292abee88

View file

@ -102,8 +102,14 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
} }
}, [session?.user]) }, [session?.user])
// Sempre tenta obter o contexto da máquina.
// 1) Se a sessão Better Auth indicar role "machine", buscamos normalmente.
// 2) Se a sessão vier nula (alguns ambientes WebView), ainda assim tentamos
// carregar o contexto — se a API responder 200, assumimos que há sessão válida
// do lado do servidor e populamos o contexto para o restante do app.
useEffect(() => { useEffect(() => {
if (!session?.user || session.user.role !== "machine") { const shouldFetch = Boolean(session?.user?.role === "machine") || !session?.user
if (!shouldFetch) {
setMachineContext(null) setMachineContext(null)
setMachineContextError(null) setMachineContextError(null)
setMachineContextLoading(false) setMachineContextLoading(false)
@ -233,13 +239,13 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [ensureUser, session?.user?.email, session?.user?.tenantId, session?.user?.role, convexUserId]) }, [ensureUser, session?.user?.email, session?.user?.tenantId, session?.user?.role, convexUserId])
const baseRole = session?.user?.role ? session.user.role.toLowerCase() : null // Se não houver sessão mas tivermos contexto de máquina, tratamos como "machine"
const baseRole = session?.user?.role ? session.user.role.toLowerCase() : (machineContext ? "machine" : null)
const personaRole = session?.user?.machinePersona ? session.user.machinePersona.toLowerCase() : null const personaRole = session?.user?.machinePersona ? session.user.machinePersona.toLowerCase() : null
const normalizedRole = const normalizedRole =
baseRole === "machine" ? machineContext?.persona ?? personaRole ?? null : baseRole baseRole === "machine" ? (machineContext?.persona ?? personaRole ?? null) : baseRole
const effectiveConvexUserId = const effectiveConvexUserId = baseRole === "machine" ? (machineContext?.assignedUserId ?? null) : convexUserId
baseRole === "machine" ? machineContext?.assignedUserId ?? null : convexUserId
const value = useMemo<AuthContextValue>( const value = useMemo<AuthContextValue>(
() => ({ () => ({