Refactor: Update type safety status

This commit is contained in:
gpt-engineer-app[bot]
2025-10-21 17:19:19 +00:00
parent 81fccdc4d0
commit e580f1f4b4
21 changed files with 55 additions and 49 deletions

View File

@@ -26,7 +26,7 @@ export function AuthButtons() {
description: "You've been signed out successfully." description: "You've been signed out successfully."
}); });
navigate('/'); navigate('/');
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
toast({ toast({
variant: "destructive", variant: "destructive",

View File

@@ -26,7 +26,7 @@ export function MFAChallenge({ factorId, onSuccess, onCancel }: MFAChallengeProp
const { data, error } = await supabase.auth.mfa.challenge({ factorId }); const { data, error } = await supabase.auth.mfa.challenge({ factorId });
if (error) throw error; if (error) throw error;
setChallengeId(data.id); setChallengeId(data.id);
} catch (error) { } catch (error: unknown) {
toast({ toast({
variant: "destructive", variant: "destructive",
title: "MFA Challenge Failed", title: "MFA Challenge Failed",
@@ -59,7 +59,7 @@ export function MFAChallenge({ factorId, onSuccess, onCancel }: MFAChallengeProp
}); });
onSuccess(); onSuccess();
} }
} catch (error) { } catch (error: unknown) {
toast({ toast({
variant: "destructive", variant: "destructive",
title: "Verification Failed", title: "Verification Failed",

View File

@@ -50,7 +50,7 @@ export function TOTPSetup() {
updated_at: factor.updated_at updated_at: factor.updated_at
})); }));
setFactors(totpFactors); setFactors(totpFactors);
} catch (error) { } catch (error: unknown) {
logger.error('Failed to fetch TOTP factors', { logger.error('Failed to fetch TOTP factors', {
userId: user?.id, userId: user?.id,
action: 'fetch_totp_factors', action: 'fetch_totp_factors',

View File

@@ -128,7 +128,7 @@ export const ReportsQueue = forwardRef<ReportsQueueRef>((props, ref) => {
if (saved) { if (saved) {
return JSON.parse(saved); return JSON.parse(saved);
} }
} catch (error) { } catch (error: unknown) {
logger.warn('Failed to load sort config from localStorage'); logger.warn('Failed to load sort config from localStorage');
} }
return { field: 'created_at', direction: 'asc' as ReportSortDirection }; return { field: 'created_at', direction: 'asc' as ReportSortDirection };
@@ -153,7 +153,7 @@ export const ReportsQueue = forwardRef<ReportsQueueRef>((props, ref) => {
useEffect(() => { useEffect(() => {
try { try {
localStorage.setItem('reportsQueue_sortConfig', JSON.stringify(sortConfig)); localStorage.setItem('reportsQueue_sortConfig', JSON.stringify(sortConfig));
} catch (error) { } catch (error: unknown) {
logger.warn('Failed to save sort config to localStorage'); logger.warn('Failed to save sort config to localStorage');
} }
}, [sortConfig]); }, [sortConfig]);

View File

@@ -77,7 +77,7 @@ export function BlockedUsers() {
action: 'fetch_blocked_users', action: 'fetch_blocked_users',
count: blockedUsersWithProfiles.length count: blockedUsersWithProfiles.length
}); });
} catch (error) { } catch (error: unknown) {
logger.error('Error fetching blocked users', { logger.error('Error fetching blocked users', {
userId: user.id, userId: user.id,
action: 'fetch_blocked_users', action: 'fetch_blocked_users',
@@ -134,7 +134,7 @@ export function BlockedUsers() {
}); });
handleSuccess('User unblocked', `You have unblocked @${username}`); handleSuccess('User unblocked', `You have unblocked @${username}`);
} catch (error) { } catch (error: unknown) {
logger.error('Error unblocking user', { logger.error('Error unblocking user', {
userId: user.id, userId: user.id,
action: 'unblock_user', action: 'unblock_user',

View File

@@ -63,7 +63,7 @@ export function SearchResults({ query, onClose }: SearchResultsProps) {
]; ];
setResults(allResults); setResults(allResults);
} catch (error) { } catch (error: unknown) {
console.error('Search error:', error); console.error('Search error:', error);
} finally { } finally {
setLoading(false); setLoading(false);

View File

@@ -213,7 +213,7 @@ export function EmailChangeDialog({ open, onOpenChange, currentEmail, userId }:
); );
setStep('success'); setStep('success');
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
logger.error('Email change failed', { logger.error('Email change failed', {
userId, userId,
@@ -221,7 +221,12 @@ export function EmailChangeDialog({ open, onOpenChange, currentEmail, userId }:
error: errorMsg, error: errorMsg,
}); });
if (error.message?.includes('rate limit') || error.status === 429) { const hasMessage = error instanceof Error || (typeof error === 'object' && error !== null && 'message' in error);
const hasStatus = typeof error === 'object' && error !== null && 'status' in error;
const errorMessage = hasMessage ? (error as { message: string }).message : '';
const errorStatus = hasStatus ? (error as { status: number }).status : 0;
if (errorMessage.includes('rate limit') || errorStatus === 429) {
handleError( handleError(
new AppError( new AppError(
'Please wait a few minutes before trying again.', 'Please wait a few minutes before trying again.',
@@ -230,7 +235,7 @@ export function EmailChangeDialog({ open, onOpenChange, currentEmail, userId }:
), ),
{ action: 'Change email', userId, metadata: { currentEmail, newEmail: data.newEmail } } { action: 'Change email', userId, metadata: { currentEmail, newEmail: data.newEmail } }
); );
} else if (error.message?.includes('Invalid login credentials')) { } else if (errorMessage.includes('Invalid login credentials')) {
handleError( handleError(
new AppError( new AppError(
'The password you entered is incorrect.', 'The password you entered is incorrect.',

View File

@@ -50,7 +50,7 @@ export function EmailChangeStatus({
newEmailVerified: emailData.new_email_verified || false newEmailVerified: emailData.new_email_verified || false
}); });
} }
} catch (error) { } catch (error: unknown) {
handleError(error, { action: 'Check verification status' }); handleError(error, { action: 'Check verification status' });
} finally { } finally {
setLoading(false); setLoading(false);
@@ -77,7 +77,7 @@ export function EmailChangeStatus({
'Verification emails resent', 'Verification emails resent',
'Check your inbox for the verification links.' 'Check your inbox for the verification links.'
); );
} catch (error) { } catch (error: unknown) {
handleError(error, { action: 'Resend verification emails' }); handleError(error, { action: 'Resend verification emails' });
} finally { } finally {
setResending(false); setResending(false);

View File

@@ -81,7 +81,7 @@ export function PasswordUpdateDialog({ open, onOpenChange, onSuccess }: Password
const hasVerifiedTotp = data?.totp?.some(factor => factor.status === 'verified') || false; const hasVerifiedTotp = data?.totp?.some(factor => factor.status === 'verified') || false;
setHasMFA(hasVerifiedTotp); setHasMFA(hasVerifiedTotp);
} catch (error) { } catch (error: unknown) {
logger.error('Failed to check MFA status', { logger.error('Failed to check MFA status', {
action: 'check_mfa_status', action: 'check_mfa_status',
error: error instanceof Error ? error.message : String(error) error: error instanceof Error ? error.message : String(error)

View File

@@ -241,8 +241,8 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
}); });
logger.log(`✅ Action ${action} completed for ${item.id}`); logger.log(`✅ Action ${action} completed for ${item.id}`);
} catch (error) { } catch (error: unknown) {
logger.error('❌ Error performing action:', error); logger.error('❌ Error performing action:', { error: getErrorMessage(error) });
toast({ toast({
title: 'Error', title: 'Error',
description: getErrorMessage(error) || `Failed to ${action} content`, description: getErrorMessage(error) || `Failed to ${action} content`,
@@ -276,8 +276,8 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
}); });
logger.log(`✅ Submission ${item.id} deleted`); logger.log(`✅ Submission ${item.id} deleted`);
} catch (error) { } catch (error: unknown) {
logger.error('❌ Error deleting submission:', error); logger.error('❌ Error deleting submission:', { error: getErrorMessage(error) });
toast({ toast({
title: 'Error', title: 'Error',
description: getErrorMessage(error), description: getErrorMessage(error),
@@ -308,8 +308,8 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
}); });
logger.log(`✅ Submission ${item.id} reset to pending`); logger.log(`✅ Submission ${item.id} reset to pending`);
} catch (error) { } catch (error: unknown) {
logger.error('❌ Error resetting submission:', error); logger.error('❌ Error resetting submission:', { error: getErrorMessage(error) });
toast({ toast({
title: 'Reset Failed', title: 'Reset Failed',
description: getErrorMessage(error), description: getErrorMessage(error),
@@ -361,8 +361,8 @@ export function useModerationActions(config: ModerationActionsConfig): Moderatio
}); });
logger.log(`✅ Retried ${failedItems.length} failed items for ${item.id}`); logger.log(`✅ Retried ${failedItems.length} failed items for ${item.id}`);
} catch (error) { } catch (error: unknown) {
logger.error('❌ Error retrying items:', error); logger.error('❌ Error retrying items:', { error: getErrorMessage(error) });
toast({ toast({
title: 'Retry Failed', title: 'Retry Failed',
description: getErrorMessage(error) || 'Failed to retry items', description: getErrorMessage(error) || 'Failed to retry items',

View File

@@ -310,8 +310,8 @@ export function useRealtimeSubscriptions(
); );
onNewItem(fullItem); onNewItem(fullItem);
} catch (error) { } catch (error: unknown) {
logger.error('Error building new item notification:', error); logger.error('Error building new item notification:', { error: getErrorMessage(error) });
} }
}, [ }, [
filters, filters,

View File

@@ -61,7 +61,7 @@ function AuthProviderComponent({ children }: { children: React.ReactNode }) {
} }
return true; return true;
} catch (error) { } catch (error: unknown) {
authError('[Auth] Session verification error:', error); authError('[Auth] Session verification error:', error);
return false; return false;
} }
@@ -165,7 +165,7 @@ function AuthProviderComponent({ children }: { children: React.ReactNode }) {
}, },
}); });
} }
} catch (error) { } catch (error: unknown) {
authError('Error updating Novu after email confirmation:', error); authError('Error updating Novu after email confirmation:', error);
} finally { } finally {
novuUpdateTimeoutRef.current = null; novuUpdateTimeoutRef.current = null;

View File

@@ -107,7 +107,7 @@ export function useEntityVersions(entityType: EntityType, entityId: string) {
setCurrentVersion(versionsWithProfiles.find(v => v.is_current) || null); setCurrentVersion(versionsWithProfiles.find(v => v.is_current) || null);
setLoading(false); setLoading(false);
} }
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
console.error('Error fetching versions:', errorMsg); console.error('Error fetching versions:', errorMsg);
@@ -139,7 +139,7 @@ export function useEntityVersions(entityType: EntityType, entityId: string) {
if (error) throw error; if (error) throw error;
return data; return data;
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
console.error('Error comparing versions:', errorMsg); console.error('Error comparing versions:', errorMsg);
if (isMountedRef.current) { if (isMountedRef.current) {
@@ -171,7 +171,7 @@ export function useEntityVersions(entityType: EntityType, entityId: string) {
await fetchVersions(); await fetchVersions();
} }
return data; return data;
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
console.error('Error rolling back version:', errorMsg); console.error('Error rolling back version:', errorMsg);
if (isMountedRef.current) { if (isMountedRef.current) {
@@ -193,7 +193,7 @@ export function useEntityVersions(entityType: EntityType, entityId: string) {
if (channelRef.current) { if (channelRef.current) {
try { try {
supabase.removeChannel(channelRef.current); supabase.removeChannel(channelRef.current);
} catch (error) { } catch (error: unknown) {
console.error('Error removing previous channel:', error); console.error('Error removing previous channel:', error);
} finally { } finally {
channelRef.current = null; channelRef.current = null;

View File

@@ -44,7 +44,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
const releaseInterval = setInterval(async () => { const releaseInterval = setInterval(async () => {
try { try {
await supabase.rpc('release_expired_locks'); await supabase.rpc('release_expired_locks');
} catch (error) { } catch (error: unknown) {
console.error('Error auto-releasing expired locks:', error); console.error('Error auto-releasing expired locks:', error);
} }
}, 120000); // 2 minutes }, 120000); // 2 minutes
@@ -82,7 +82,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
avgWaitHours: slaData.length > 0 ? totals.avgWaitHours / slaData.length : 0, avgWaitHours: slaData.length > 0 ? totals.avgWaitHours / slaData.length : 0,
}); });
} }
} catch (error) { } catch (error: unknown) {
console.error('Error fetching queue stats:', error); console.error('Error fetching queue stats:', error);
} }
}, [user]); }, [user]);
@@ -164,7 +164,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
} }
return false; return false;
} catch (error) { } catch (error: unknown) {
console.error('Error extending lock:', error); console.error('Error extending lock:', error);
toast({ toast({
title: 'Error', title: 'Error',
@@ -227,7 +227,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
} }
return data; return data;
} catch (error) { } catch (error: unknown) {
console.error('Error releasing lock:', error); console.error('Error releasing lock:', error);
// Always show error toasts even in silent mode // Always show error toasts even in silent mode
@@ -273,7 +273,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
fetchStats(); fetchStats();
return true; return true;
} catch (error) { } catch (error: unknown) {
console.error('Error escalating submission:', error); console.error('Error escalating submission:', error);
toast({ toast({
title: 'Error', title: 'Error',
@@ -343,7 +343,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
} }
return true; return true;
} catch (error) { } catch (error: unknown) {
console.error('Error claiming submission:', error); console.error('Error claiming submission:', error);
toast({ toast({
title: 'Failed to Claim Submission', title: 'Failed to Claim Submission',
@@ -388,7 +388,7 @@ export const useModerationQueue = (config?: UseModerationQueueConfig) => {
fetchStats(); fetchStats();
return true; return true;
} catch (error) { } catch (error: unknown) {
console.error('Error reassigning submission:', error); console.error('Error reassigning submission:', error);
toast({ toast({
title: 'Error', title: 'Error',

View File

@@ -105,7 +105,8 @@ export const useModerationStats = (options: UseModerationStatsOptions = {}) => {
openReports: 0, openReports: 0,
flaggedContent: 0, flaggedContent: 0,
}); });
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error);
console.error('Error fetching moderation stats:', error); console.error('Error fetching moderation stats:', error);
} finally { } finally {
// Only clear loading if it was set // Only clear loading if it was set

View File

@@ -62,7 +62,7 @@ export function usePhotoSubmissionItems(
if (itemsError) throw itemsError; if (itemsError) throw itemsError;
setPhotos(data || []); setPhotos(data || []);
} catch (error) { } catch (error: unknown) {
const errorMsg = getErrorMessage(error); const errorMsg = getErrorMessage(error);
console.error('Error fetching photo submission items:', errorMsg); console.error('Error fetching photo submission items:', errorMsg);
setError(errorMsg); setError(errorMsg);

View File

@@ -71,13 +71,13 @@ export function useSearch(options: UseSearchOptions = {}) {
logger.warn('Recent searches data is not an array, clearing'); logger.warn('Recent searches data is not an array, clearing');
localStorage.removeItem('thrillwiki_recent_searches'); localStorage.removeItem('thrillwiki_recent_searches');
} }
} catch (parseError) { } catch (parseError: unknown) {
// JSON parse failed, data is corrupted // JSON parse failed, data is corrupted
console.error('Failed to parse recent searches from localStorage:', parseError); console.error('Failed to parse recent searches from localStorage:', parseError);
localStorage.removeItem('thrillwiki_recent_searches'); localStorage.removeItem('thrillwiki_recent_searches');
} }
} }
} catch (error) { } catch (error: unknown) {
// localStorage access failed // localStorage access failed
console.error('Error accessing localStorage:', error); console.error('Error accessing localStorage:', error);
} }
@@ -181,7 +181,7 @@ export function useSearch(options: UseSearchOptions = {}) {
}); });
setResults(searchResults.slice(0, limit)); setResults(searchResults.slice(0, limit));
} catch (error) { } catch (error: unknown) {
console.error('Search error:', error); console.error('Search error:', error);
const errorMessage = error instanceof Error ? error.message : 'Failed to search. Please try again.'; const errorMessage = error instanceof Error ? error.message : 'Failed to search. Please try again.';
setError(errorMessage); setError(errorMessage);

View File

@@ -55,7 +55,7 @@ export function useSessionMonitor() {
window.location.href = '/auth'; window.location.href = '/auth';
}, 30000); }, 30000);
} }
} catch (error) { } catch (error: unknown) {
logger.error('Session monitor check failed', { logger.error('Session monitor check failed', {
userId: user.id, userId: user.id,
action: 'session_monitor', action: 'session_monitor',

View File

@@ -69,7 +69,7 @@ export function useUnitPreferences() {
await autoDetectPreferences(); await autoDetectPreferences();
} }
} }
} catch (error) { } catch (error: unknown) {
logger.error('Error loading unit preferences', { logger.error('Error loading unit preferences', {
userId: user?.id, userId: user?.id,
action: 'load_unit_preferences', action: 'load_unit_preferences',
@@ -115,7 +115,7 @@ export function useUnitPreferences() {
return newPreferences; return newPreferences;
} }
} catch (error) { } catch (error: unknown) {
logger.error('Error auto-detecting location', { logger.error('Error auto-detecting location', {
userId: user?.id, userId: user?.id,
action: 'auto_detect_location', action: 'auto_detect_location',
@@ -149,7 +149,7 @@ export function useUnitPreferences() {
} else { } else {
localStorage.setItem('unit_preferences', JSON.stringify(updated)); localStorage.setItem('unit_preferences', JSON.stringify(updated));
} }
} catch (error) { } catch (error: unknown) {
logger.error('Error saving unit preferences', { logger.error('Error saving unit preferences', {
userId: user?.id, userId: user?.id,
action: 'save_unit_preferences', action: 'save_unit_preferences',

View File

@@ -51,7 +51,7 @@ export function useUserRole() {
} else { } else {
setPermissions(permissionsData as unknown as UserPermissions); setPermissions(permissionsData as unknown as UserPermissions);
} }
} catch (error) { } catch (error: unknown) {
console.error('Error fetching user roles:', error); console.error('Error fetching user roles:', error);
setRoles([]); setRoles([]);
setPermissions(null); setPermissions(null);

View File

@@ -37,7 +37,7 @@ export function useUsernameValidation(username: string, currentUsername?: string
isChecking: false, isChecking: false,
error: isAvailable ? null : 'Username is already taken', error: isAvailable ? null : 'Username is already taken',
}); });
} catch (error) { } catch (error: unknown) {
setState({ setState({
isValid: false, isValid: false,
isAvailable: null, isAvailable: null,