From fbc8cf28d6914f3e89bf11e2692f7a5252f3e183 Mon Sep 17 00:00:00 2001 From: Ishaan Gupta Date: Mon, 13 Jul 2026 14:49:54 +0530 Subject: [PATCH] Fix OAuth upgrade sync retry loop --- apps/web/app/auth/connect/page.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/web/app/auth/connect/page.tsx b/apps/web/app/auth/connect/page.tsx index 0dc9968f..2989ee5e 100644 --- a/apps/web/app/auth/connect/page.tsx +++ b/apps/web/app/auth/connect/page.tsx @@ -278,6 +278,7 @@ function AuthConnectContent() { const hasAutoConnectedAfterUpgrade = useRef(false) const upgradeSyncStartedAt = useRef(null) const upgradeSyncRetryTimer = useRef(null) + const handleConnectRef = useRef<(() => Promise) | null>(null) const callback = params.get("callback") const client = params.get("client") @@ -392,14 +393,19 @@ function AuthConnectContent() { upgradeSyncStartedAt.current = startedAt if (Date.now() - startedAt < UPGRADE_PLAN_SYNC_TIMEOUT_MS) { - hasAutoConnectedAfterUpgrade.current = false setStatus("loading") if (upgradeSyncRetryTimer.current !== null) { window.clearTimeout(upgradeSyncRetryTimer.current) } upgradeSyncRetryTimer.current = window.setTimeout(() => { upgradeSyncRetryTimer.current = null - void autumn.refetch?.() + void (async () => { + try { + await autumn.refetch?.() + } finally { + void handleConnectRef.current?.() + } + })() }, UPGRADE_PLAN_SYNC_RETRY_MS) return } @@ -492,6 +498,10 @@ function AuthConnectContent() { shouldAutoConnectAfterUpgrade, ]) + useEffect(() => { + handleConnectRef.current = handleConnect + }, [handleConnect]) + async function handleUpgrade() { try { setIsUpgrading(true) @@ -510,7 +520,6 @@ function AuthConnectContent() { const retryUpgradeSync = useCallback(() => { upgradeSyncStartedAt.current = Date.now() - hasAutoConnectedAfterUpgrade.current = false setError(null) setStatus("loading") void autumn.refetch?.()