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