refactor(service): 统一时间戳解析,支持多种格式

新增 Account.GetCredentialAsTime 方法,统一处理凭证中的时间戳字段,
兼容 RFC3339 字符串、Unix 时间戳字符串和数字类型。

- 重构 Claude/Gemini/Antigravity TokenRefresher.NeedsRefresh
- 移除重复的 parseExpiresAt/parseAntigravityExpiresAt 函数
- 简化 GetOpenAITokenExpiresAt 实现
- 新增 RFC3339 格式单元测试用例
This commit is contained in:
shaw
2025-12-31 16:25:45 +08:00
parent aac7dd6b08
commit 81213f2324
9 changed files with 55 additions and 81 deletions

View File

@@ -43,17 +43,11 @@ func (r *ClaudeTokenRefresher) CanRefresh(account *Account) bool {
// NeedsRefresh 检查token是否需要刷新
// 基于 expires_at 字段判断是否在刷新窗口内
func (r *ClaudeTokenRefresher) NeedsRefresh(account *Account, refreshWindow time.Duration) bool {
s := account.GetCredential("expires_at")
if s == "" {
expiresAt := account.GetCredentialAsTime("expires_at")
if expiresAt == nil {
return false
}
expiresAt, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return false
}
return time.Until(time.Unix(expiresAt, 0)) < refreshWindow
return time.Until(*expiresAt) < refreshWindow
}
// Refresh 执行token刷新