diff --git a/extensions/github-copilot/login.test.ts b/extensions/github-copilot/login.test.ts index 7aeeb2194d39..20c434443fa8 100644 --- a/extensions/github-copilot/login.test.ts +++ b/extensions/github-copilot/login.test.ts @@ -370,7 +370,7 @@ describe("runGitHubCopilotDeviceFlow — polling intervals", () => { const pollTimes: number[] = []; const pollResponses = [ { error: "authorization_pending" }, - { error: "slow_down" }, + { error: "slow_down", interval: 7 }, { error: "slow_down" }, { access_token: "test-access-token", token_type: "bearer" }, ]; diff --git a/extensions/github-copilot/login.ts b/extensions/github-copilot/login.ts index ee0ae90807cc..8e9a371b5fd4 100644 --- a/extensions/github-copilot/login.ts +++ b/extensions/github-copilot/login.ts @@ -222,9 +222,11 @@ async function pollForAccessToken(params: { continue; } if (err === "slow_down") { - intervalMs = - positiveSecondsToSafeMilliseconds(json.interval) ?? - Math.min(Number.MAX_SAFE_INTEGER, intervalMs + GITHUB_DEVICE_FLOW_SLOW_DOWN_INCREMENT_MS); + // slow_down is cumulative; a returned interval may raise but never lower the required floor. + intervalMs = Math.max( + Math.min(Number.MAX_SAFE_INTEGER, intervalMs + GITHUB_DEVICE_FLOW_SLOW_DOWN_INCREMENT_MS), + positiveSecondsToSafeMilliseconds(json.interval) ?? 0, + ); continue; } if (err === "expired_token") {