fix: clear expire timer on 410/error and reset pollInFlight on retry

This commit is contained in:
Fringg
2026-03-22 05:37:09 +03:00
parent e57166745c
commit 1538879f97

View File

@@ -235,7 +235,7 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
const startDeepLinkAuth = useCallback(async () => { const startDeepLinkAuth = useCallback(async () => {
setDeepLinkError(''); setDeepLinkError('');
// Clear any previous timers // Clear any previous timers and in-flight guard
if (pollTimeoutRef.current) { if (pollTimeoutRef.current) {
clearTimeout(pollTimeoutRef.current); clearTimeout(pollTimeoutRef.current);
pollTimeoutRef.current = null; pollTimeoutRef.current = null;
@@ -244,6 +244,7 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
clearTimeout(expireTimeoutRef.current); clearTimeout(expireTimeoutRef.current);
expireTimeoutRef.current = null; expireTimeoutRef.current = null;
} }
pollInFlightRef.current = false;
try { try {
// Consume campaign slug ONCE (first call only). // Consume campaign slug ONCE (first call only).
@@ -288,14 +289,22 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
return; return;
} }
if (err.response?.status === 410) { if (err.response?.status === 410) {
// Token expired // Token expired — clear expire timer to prevent stale timer killing future sessions
if (expireTimeoutRef.current) {
clearTimeout(expireTimeoutRef.current);
expireTimeoutRef.current = null;
}
setDeepLinkPolling(false); setDeepLinkPolling(false);
setDeepLinkToken(null); setDeepLinkToken(null);
setDeepLinkError(t('auth.deepLinkExpired')); setDeepLinkError(t('auth.deepLinkExpired'));
return; return;
} }
} }
// Other error — stop polling // Other error — stop polling and clear expire timer
if (expireTimeoutRef.current) {
clearTimeout(expireTimeoutRef.current);
expireTimeoutRef.current = null;
}
setDeepLinkPolling(false); setDeepLinkPolling(false);
setDeepLinkError(t('common.error')); setDeepLinkError(t('common.error'));
} finally { } finally {
@@ -376,12 +385,20 @@ export default function TelegramLoginButton({ referralCode }: TelegramLoginButto
return; return;
} }
if (err.response?.status === 410) { if (err.response?.status === 410) {
if (expireTimeoutRef.current) {
clearTimeout(expireTimeoutRef.current);
expireTimeoutRef.current = null;
}
setDeepLinkPolling(false); setDeepLinkPolling(false);
setDeepLinkToken(null); setDeepLinkToken(null);
setDeepLinkError(t('auth.deepLinkExpired')); setDeepLinkError(t('auth.deepLinkExpired'));
return; return;
} }
} }
if (expireTimeoutRef.current) {
clearTimeout(expireTimeoutRef.current);
expireTimeoutRef.current = null;
}
setDeepLinkPolling(false); setDeepLinkPolling(false);
setDeepLinkError(t('common.error')); setDeepLinkError(t('common.error'));
} finally { } finally {