import { useEffect, useState } from 'react'; import { supabase } from '@/lib/supabaseClient'; import { authStorage } from '@/lib/authStorage'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { logger } from '@/lib/logger'; interface AuthDiagnosticsData { timestamp: string; storage: { type: string; persistent: boolean; }; session: { exists: boolean; user: string | null; expiresAt: number | null; error: string | null; }; network: { online: boolean; }; environment: { url: string; isIframe: boolean; cookiesEnabled: boolean; }; } export function AuthDiagnostics() { const [diagnostics, setDiagnostics] = useState(null); const [isOpen, setIsOpen] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); const runDiagnostics = async () => { setIsRefreshing(true); try { const storageStatus = authStorage.getStorageStatus(); const { data: { session }, error: sessionError } = await supabase.auth.getSession(); const results = { timestamp: new Date().toISOString(), storage: storageStatus, session: { exists: !!session, user: session?.user?.email || null, expiresAt: session?.expires_at || null, error: sessionError?.message || null, }, network: { online: navigator.onLine, }, environment: { url: window.location.href, isIframe: window.self !== window.top, cookiesEnabled: navigator.cookieEnabled, } }; setDiagnostics(results); logger.debug('Auth diagnostics', { results }); } finally { setIsRefreshing(false); } }; useEffect(() => { // Run diagnostics on mount if there's a session issue const checkSession = async () => { const { data: { session } } = await supabase.auth.getSession(); if (!session) { await runDiagnostics(); setIsOpen(true); } }; // Only run if not already authenticated const timer = setTimeout(checkSession, 3000); return () => clearTimeout(timer); }, []); if (!isOpen || !diagnostics) return null; return ( Authentication Diagnostics Debug information for session issues
Storage Type:{' '} {diagnostics.storage.type}
Session Status:{' '} {diagnostics.session.exists ? 'Active' : 'None'}
{diagnostics.session.user && (
User: {diagnostics.session.user}
)} {diagnostics.session.error && (
Error: {diagnostics.session.error}
)}
Cookies Enabled:{' '} {diagnostics.environment.cookiesEnabled ? 'Yes' : 'No'}
{diagnostics.environment.isIframe && (
⚠️ Running in iframe - storage may be restricted
)}
); }