diff --git a/backend/cmd/server/wire_gen.go b/backend/cmd/server/wire_gen.go index 47cf5f3a..32a5f650 100644 --- a/backend/cmd/server/wire_gen.go +++ b/backend/cmd/server/wire_gen.go @@ -105,7 +105,7 @@ func initializeApplication(buildInfo handler.BuildInfo) (*Application, error) { concurrencyCache := repository.ProvideConcurrencyCache(redisClient, configConfig) concurrencyService := service.ProvideConcurrencyService(concurrencyCache, accountRepository, configConfig) crsSyncService := service.NewCRSSyncService(accountRepository, proxyRepository, oAuthService, openAIOAuthService, geminiOAuthService) - accountHandler := admin.NewAccountHandler(adminService, oAuthService, openAIOAuthService, geminiOAuthService, rateLimitService, accountUsageService, accountTestService, concurrencyService, crsSyncService) + accountHandler := admin.NewAccountHandler(adminService, oAuthService, openAIOAuthService, geminiOAuthService, antigravityOAuthService, rateLimitService, accountUsageService, accountTestService, concurrencyService, crsSyncService) oAuthHandler := admin.NewOAuthHandler(oAuthService) openAIOAuthHandler := admin.NewOpenAIOAuthHandler(openAIOAuthService, adminService) geminiOAuthHandler := admin.NewGeminiOAuthHandler(geminiOAuthService) diff --git a/backend/internal/handler/admin/account_handler.go b/backend/internal/handler/admin/account_handler.go index e9a27ba6..e6f25798 100644 --- a/backend/internal/handler/admin/account_handler.go +++ b/backend/internal/handler/admin/account_handler.go @@ -34,15 +34,16 @@ func NewOAuthHandler(oauthService *service.OAuthService) *OAuthHandler { // AccountHandler handles admin account management type AccountHandler struct { - adminService service.AdminService - oauthService *service.OAuthService - openaiOAuthService *service.OpenAIOAuthService - geminiOAuthService *service.GeminiOAuthService - rateLimitService *service.RateLimitService - accountUsageService *service.AccountUsageService - accountTestService *service.AccountTestService - concurrencyService *service.ConcurrencyService - crsSyncService *service.CRSSyncService + adminService service.AdminService + oauthService *service.OAuthService + openaiOAuthService *service.OpenAIOAuthService + geminiOAuthService *service.GeminiOAuthService + antigravityOAuthService *service.AntigravityOAuthService + rateLimitService *service.RateLimitService + accountUsageService *service.AccountUsageService + accountTestService *service.AccountTestService + concurrencyService *service.ConcurrencyService + crsSyncService *service.CRSSyncService } // NewAccountHandler creates a new admin account handler @@ -51,6 +52,7 @@ func NewAccountHandler( oauthService *service.OAuthService, openaiOAuthService *service.OpenAIOAuthService, geminiOAuthService *service.GeminiOAuthService, + antigravityOAuthService *service.AntigravityOAuthService, rateLimitService *service.RateLimitService, accountUsageService *service.AccountUsageService, accountTestService *service.AccountTestService, @@ -58,15 +60,16 @@ func NewAccountHandler( crsSyncService *service.CRSSyncService, ) *AccountHandler { return &AccountHandler{ - adminService: adminService, - oauthService: oauthService, - openaiOAuthService: openaiOAuthService, - geminiOAuthService: geminiOAuthService, - rateLimitService: rateLimitService, - accountUsageService: accountUsageService, - accountTestService: accountTestService, - concurrencyService: concurrencyService, - crsSyncService: crsSyncService, + adminService: adminService, + oauthService: oauthService, + openaiOAuthService: openaiOAuthService, + geminiOAuthService: geminiOAuthService, + antigravityOAuthService: antigravityOAuthService, + rateLimitService: rateLimitService, + accountUsageService: accountUsageService, + accountTestService: accountTestService, + concurrencyService: concurrencyService, + crsSyncService: crsSyncService, } } @@ -415,6 +418,19 @@ func (h *AccountHandler) Refresh(c *gin.Context) { newCredentials[k] = v } } + } else if account.Platform == service.PlatformAntigravity { + tokenInfo, err := h.antigravityOAuthService.RefreshAccountToken(c.Request.Context(), account) + if err != nil { + response.ErrorFrom(c, err) + return + } + + newCredentials = h.antigravityOAuthService.BuildAccountCredentials(tokenInfo) + for k, v := range account.Credentials { + if _, exists := newCredentials[k]; !exists { + newCredentials[k] = v + } + } } else { // Use Anthropic/Claude OAuth service to refresh token tokenInfo, err := h.oauthService.RefreshAccountToken(c.Request.Context(), account)