mirror of
https://github.com/tiennm99/ccs.git
synced 2026-10-13 02:14:32 +00:00
feat(quota): implement proactive token refresh (5-min lead time)
- Refresh token 5 minutes before expiry (matches CLIProxyAPIPlus) - Only refresh when: expired, no expiry info, or expiring within 5 min - Reduces unnecessary OAuth API calls when token is still valid
This commit is contained in:
1 parent
19550b28f0
commit
00597b3358
1 file changed
+13
-7
@@ -456,17 +456,23 @@ export async function fetchAccountQuota(
|
|||||||
|
|
||||||
// Determine which access token to use
|
// Determine which access token to use
|
||||||
// File-based token is often stale (CLIProxyAPIPlus refreshes at runtime but doesn't persist)
|
// File-based token is often stale (CLIProxyAPIPlus refreshes at runtime but doesn't persist)
|
||||||
// If we have refresh_token, proactively refresh to get a fresh access_token
|
// Proactive refresh: refresh 5 minutes before expiry (matches CLIProxyAPIPlus behavior)
|
||||||
let accessToken = authData.accessToken;
|
let accessToken = authData.accessToken;
|
||||||
|
const REFRESH_LEAD_TIME_MS = 5 * 60 * 1000; // 5 minutes
|
||||||
|
|
||||||
if (authData.refreshToken) {
|
if (authData.refreshToken) {
|
||||||
// Always refresh to ensure we have a valid token
|
const shouldRefresh =
|
||||||
// This is necessary because CLIProxyAPIPlus doesn't persist refreshed tokens
|
authData.isExpired || // Already expired
|
||||||
const refreshResult = await refreshAccessToken(authData.refreshToken);
|
!authData.expiresAt || // No expiry info - refresh to be safe
|
||||||
if (refreshResult.accessToken) {
|
new Date(authData.expiresAt).getTime() - Date.now() < REFRESH_LEAD_TIME_MS; // Expiring soon
|
||||||
accessToken = refreshResult.accessToken;
|
|
||||||
|
if (shouldRefresh) {
|
||||||
|
const refreshResult = await refreshAccessToken(authData.refreshToken);
|
||||||
|
if (refreshResult.accessToken) {
|
||||||
|
accessToken = refreshResult.accessToken;
|
||||||
|
}
|
||||||
|
// If refresh fails, fall back to existing token (might still work)
|
||||||
}
|
}
|
||||||
// If refresh fails, fall back to existing token (might still work)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get project ID - prefer stored value, fallback to API call
|
// Get project ID - prefer stored value, fallback to API call
|
||||||
|
|||||||
Reference in new issue
Block a user