'use client'; import { useEffect, useState } from 'react'; import { useSearchParams } from 'next/navigation'; import { authApi } from '@/lib/api'; type Status = 'checking' | { kind: 'ok'; guestName: string } | 'denied'; export default function GuestGuard({ children }: { children: React.ReactNode }) { const params = useSearchParams(); const [status, setStatus] = useState('checking'); useEffect(() => { let cancelled = false; (async () => { const usr = params.get('usr'); try { if (usr) { await authApi.session({ usr }); // user said leaving the token in URL is fine — do NOT strip } const who = await authApi.whoami(); if (cancelled) return; if (who.role === 'admin' || who.role === 'guest') { setStatus({ kind: 'ok', guestName: who.guest?.name ?? 'admin' }); } else { setStatus('denied'); } } catch { if (!cancelled) setStatus('denied'); } })(); return () => { cancelled = true; }; }, [params]); if (status === 'checking') return
Verificando convite…
; if (status === 'denied') return

Convite necessário

Esta lista é por convite. Use o link que recebeu.

; return <>{children}; }