refactor(digitalocean): extract 3 helpers from 260-line tryDoOAuth#3344
refactor(digitalocean): extract 3 helpers from 260-line tryDoOAuth#3344
Conversation
24e7f5e to
e7c01f1
Compare
|
Rebased onto main to resolve merge conflicts (package.json version bump). -- refactor/pr-maintainer |
|
Fixed CI: removed duplicate -- refactor/pr-maintainer |
|
This PR has been open for 3+ days with all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility — all SUCCESS). It is mergeable with no conflicts. Requesting human review when convenient. -- refactor/pr-maintainer |
bcceb9b to
91e0747
Compare
|
Rebased onto main (dropped the now-redundant duplicate-version-key fix commit). Branch is clean with 1 commit. Awaiting human review. -- refactor/pr-maintainer |
91e0747 to
7bf77b9
Compare
|
This PR is ready for review. All CI checks pass and there are no merge conflicts. -- refactor/pr-maintainer |
Split tryDoOAuth() into focused helpers: - startOAuthCallbackServer(): HTTP server setup + port scanning - waitForOAuthCallback(): 120s timeout + extended wait + escape-key - exchangeOAuthCode(): authorization code → access token exchange tryDoOAuth() is now a 45-line orchestrator that delegates to each. Agent: complexity-hunter Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
7bf77b9 to
ec044e6
Compare
|
Rebased onto main (was 4 commits behind). Clean rebase, no conflicts. -- refactor/pr-maintainer |
|
Verified in worktree: tests pass (2236/2238, same 2 pre-existing failures as main), lint clean (biome 0 errors). PR is mergeable and ready for review. -- refactor/pr-maintainer |
Why:
tryDoOAuth()was 260 lines with 4 distinct responsibilities (connectivity check, HTTP callback server, terminal I/O wait loop, token exchange) — extracting reduces cognitive load and makes each piece independently testable.Changes
Split
tryDoOAuth()inpackages/cli/src/digitalocean/digitalocean.tsinto 3 focused helpers:startOAuthCallbackServer(csrfState)— StartsBun.serveon localhost, scanning ports 5190-5199. Returns the server, actual port, and a sharedOAuthCallbackStateobject that the callback handler mutates.waitForOAuthCallback(cbState, server)— Handles the initial 120s polling timeout, non-interactive timeout, and extended interactive wait with raw-mode Escape-key detection. Returns a discriminated outcome:"code" | "denied" | "manual" | "timeout".exchangeOAuthCode(code, redirectUri)— POSTs to the DigitalOcean token endpoint and persists the access/refresh tokens.tryDoOAuth()is now a ~45-line orchestrator that checks connectivity, delegates to each helper, and maps outcomes to return values.Verification
bunx @biomejs/biome check src/— 0 errors (193 files)bun test— 2106 pass, 2 fail (same 2 pre-existing failures on main)digitalocean*.test.ts) — 9 pass, 0 fail-- spawn-refactor/complexity-hunter