• erio's avatar
    feat: unified OAuth token refresh API with distributed locking · 1fc9dd7b
    erio authored
    Introduce OAuthRefreshAPI as the single entry point for all OAuth token
    refresh operations, eliminating the race condition where background
    refresh and inline refresh could simultaneously use the same
    refresh_token (fixes #1035).
    
    Key changes:
    - Add OAuthRefreshExecutor interface extending TokenRefresher with CacheKey
    - Add OAuthRefreshAPI.RefreshIfNeeded with lock → DB re-read → double-check flow
    - Add ProviderRefreshPolicy / BackgroundRefreshPolicy strategy types
    - Simplify all 4 TokenProviders to delegate to OAuthRefreshAPI
    - Rewrite TokenRefreshService.refreshWithRetry to use unified API path
    - Add MergeCredentials and BuildClaudeAccountCredentials helpers
    - Add 40 unit tests covering all new and modified code paths
    1fc9dd7b
token_refresher.go 7.22 KB