From 682d3f2eb391672075549735ba3b419d16f3c31c Mon Sep 17 00:00:00 2001 From: paregi12 Date: Sun, 1 Feb 2026 22:46:33 +0530 Subject: [PATCH] refactor: improve IntroDB API key verification and handle unmounted state --- src/screens/settings/PlaybackSettingsScreen.tsx | 11 +++++++++++ src/services/introService.ts | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/screens/settings/PlaybackSettingsScreen.tsx b/src/screens/settings/PlaybackSettingsScreen.tsx index 290d3ab0..c3559e3c 100644 --- a/src/screens/settings/PlaybackSettingsScreen.tsx +++ b/src/screens/settings/PlaybackSettingsScreen.tsx @@ -82,6 +82,15 @@ export const PlaybackSettingsContent: React.FC = ( const [apiKeyInput, setApiKeyInput] = useState(settings?.introDbApiKey || ''); const [isVerifyingKey, setIsVerifyingKey] = useState(false); + const isMounted = useRef(true); + + useEffect(() => { + isMounted.current = true; + return () => { + isMounted.current = false; + }; + }, []); + useEffect(() => { setApiKeyInput(settings?.introDbApiKey || ''); }, [settings?.introDbApiKey]); @@ -95,6 +104,8 @@ export const PlaybackSettingsContent: React.FC = ( setIsVerifyingKey(true); const isValid = await introService.verifyApiKey(apiKeyInput); + + if (!isMounted.current) return; setIsVerifyingKey(false); if (isValid) { diff --git a/src/services/introService.ts b/src/services/introService.ts index 2a96545c..de9a1c78 100644 --- a/src/services/introService.ts +++ b/src/services/introService.ts @@ -209,6 +209,11 @@ export async function verifyApiKey(apiKey: string): Promise { // 200/201 would also mean valid (though unexpected with empty body) if (response.status === 200 || response.status === 201) return true; + // Explicitly handle auth failures + if (response.status === 401 || response.status === 403) return false; + + // Log warning for unexpected states (500, 429, etc.) but fail safe + logger.warn(`[IntroService] Verification received unexpected status: ${response.status}`); return false; } catch (error: any) { logger.log('[IntroService] API Key verification failed:', error.message);