diff --git a/src/components/auth/AutoMFAVerificationModal.tsx b/src/components/auth/AutoMFAVerificationModal.tsx index 63c45df7..c2d86954 100644 --- a/src/components/auth/AutoMFAVerificationModal.tsx +++ b/src/components/auth/AutoMFAVerificationModal.tsx @@ -4,6 +4,7 @@ import { MFAChallenge } from './MFAChallenge'; import { Shield, AlertCircle, Loader2 } from 'lucide-react'; import { getEnrolledFactors } from '@/lib/authService'; import { useAuth } from '@/hooks/useAuth'; +import { handleError } from '@/lib/errorHandler'; interface AutoMFAVerificationModalProps { open: boolean; @@ -46,7 +47,10 @@ export function AutoMFAVerificationModal({ } } catch (err) { setError('Failed to load MFA settings. Please try again.'); - console.error('Failed to fetch MFA factors:', err); + handleError(err, { + action: 'Fetch MFA Factors for Auto-Verification', + metadata: { context: 'AutoMFAVerificationModal' } + }); } finally { setLoading(false); } diff --git a/src/components/auth/MFAChallenge.tsx b/src/components/auth/MFAChallenge.tsx index b3367fcc..34942ecc 100644 --- a/src/components/auth/MFAChallenge.tsx +++ b/src/components/auth/MFAChallenge.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; import { supabase } from "@/lib/supabaseClient"; import { useToast } from "@/hooks/use-toast"; -import { getErrorMessage } from "@/lib/errorHandler"; +import { handleError } from "@/lib/errorHandler"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp"; @@ -45,10 +45,13 @@ export function MFAChallenge({ factorId, onSuccess, onCancel }: MFAChallengeProp onSuccess(); } } catch (error: unknown) { - toast({ - variant: "destructive", - title: "Verification Failed", - description: getErrorMessage(error) || "Invalid code. Please try again.", + handleError(error, { + action: 'MFA Verification', + metadata: { + factorId, + codeLength: code.length, + context: 'MFAChallenge' + } }); setCode(""); } finally { diff --git a/src/components/auth/MFAGuard.tsx b/src/components/auth/MFAGuard.tsx index 8758ce63..ca2c3cf5 100644 --- a/src/components/auth/MFAGuard.tsx +++ b/src/components/auth/MFAGuard.tsx @@ -3,6 +3,7 @@ import { AutoMFAVerificationModal } from './AutoMFAVerificationModal'; import { MFAEnrollmentRequired } from './MFAEnrollmentRequired'; import { useAuth } from '@/hooks/useAuth'; import { useToast } from '@/hooks/use-toast'; +import { handleError } from '@/lib/errorHandler'; interface MFAGuardProps { children: React.ReactNode; @@ -24,13 +25,21 @@ export function MFAGuard({ children }: MFAGuardProps) { const { toast } = useToast(); const handleVerificationSuccess = async () => { - // Refresh the session to get updated AAL level - await verifySession(); - - toast({ - title: 'Verification Successful', - description: 'You can now access this area.', - }); + try { + // Refresh the session to get updated AAL level + await verifySession(); + + toast({ + title: 'Verification Successful', + description: 'You can now access this area.', + }); + } catch (error: unknown) { + handleError(error, { + action: 'MFA Session Verification', + metadata: { context: 'MFAGuard' } + }); + // Still attempt to show content - session might be valid despite refresh error + } }; const handleVerificationCancel = () => { diff --git a/src/hooks/useModerationQueue.ts b/src/hooks/useModerationQueue.ts index 7a3556c2..995239c1 100644 --- a/src/hooks/useModerationQueue.ts +++ b/src/hooks/useModerationQueue.ts @@ -2,7 +2,7 @@ import { useState, useEffect, useCallback, useRef } from 'react'; import { supabase } from '@/lib/supabaseClient'; import { useAuth } from './useAuth'; import { useToast } from './use-toast'; -import { getErrorMessage, handleNonCriticalError } from '@/lib/errorHandler'; +import { getErrorMessage, handleNonCriticalError, handleError } from '@/lib/errorHandler'; import { getSubmissionTypeLabel } from '@/lib/moderation/entities'; import { logger } from '@/lib/logger'; @@ -195,7 +195,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => { // Start countdown timer for restored lock startLockTimer(expiresAt); - console.log('Lock state restored from database', { + logger.info('Lock state restored from database', { submissionId: data.id, expiresAt: expiresAt.toISOString(), }); @@ -203,8 +203,8 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => { } } catch (error: unknown) { // Log but don't show user toast (they haven't taken any action yet) - console.debug('Failed to restore lock state', { - error: error instanceof Error ? error.message : String(error), + logger.debug('Failed to restore lock state', { + error: getErrorMessage(error), userId: user.id, }); } @@ -608,10 +608,10 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => { return data; } catch (error: unknown) { - toast({ - title: 'Failed to Release Lock', - description: getErrorMessage(error), - variant: 'destructive', + handleError(error, { + action: 'Superuser Release Lock', + userId: user.id, + metadata: { submissionId } }); return false; } finally { @@ -647,10 +647,10 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => { return count; } catch (error: unknown) { - toast({ - title: 'Failed to Clear Locks', - description: getErrorMessage(error), - variant: 'destructive', + handleError(error, { + action: 'Superuser Clear All Locks', + userId: user.id, + metadata: { attemptedAction: 'bulk_release' } }); return 0; } finally {