|
|
@@ -62,16 +62,16 @@ func (p *GeminiTokenProvider) GetAccessToken(ctx context.Context, account *Accou
|
|
|
|
|
|
|
|
|
|
|
|
cacheKey := GeminiTokenCacheKey(account)
|
|
|
|
cacheKey := GeminiTokenCacheKey(account)
|
|
|
|
|
|
|
|
|
|
|
|
// 1) Try cache first.
|
|
|
|
// 1) Try cache first — skip if token is already expired or within refresh skew.
|
|
|
|
if p.tokenCache != nil {
|
|
|
|
expiresAt := account.GetCredentialAsTime("expires_at")
|
|
|
|
|
|
|
|
needsRefresh := expiresAt == nil || time.Until(*expiresAt) <= geminiTokenRefreshSkew
|
|
|
|
|
|
|
|
if !needsRefresh && p.tokenCache != nil {
|
|
|
|
if token, err := p.tokenCache.GetAccessToken(ctx, cacheKey); err == nil && strings.TrimSpace(token) != "" {
|
|
|
|
if token, err := p.tokenCache.GetAccessToken(ctx, cacheKey); err == nil && strings.TrimSpace(token) != "" {
|
|
|
|
return token, nil
|
|
|
|
return token, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 2) Refresh if needed (pre-expiry skew).
|
|
|
|
// 2) Refresh if needed (pre-expiry skew).
|
|
|
|
expiresAt := account.GetCredentialAsTime("expires_at")
|
|
|
|
|
|
|
|
needsRefresh := expiresAt == nil || time.Until(*expiresAt) <= geminiTokenRefreshSkew
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if needsRefresh && p.refreshAPI != nil && p.executor != nil {
|
|
|
|
if needsRefresh && p.refreshAPI != nil && p.executor != nil {
|
|
|
|
result, err := p.refreshAPI.RefreshIfNeeded(ctx, account, p.executor, geminiTokenRefreshSkew)
|
|
|
|
result, err := p.refreshAPI.RefreshIfNeeded(ctx, account, p.executor, geminiTokenRefreshSkew)
|
|
|
|