diff --git a/src/cliproxy/quota-fetcher.ts b/src/cliproxy/quota-fetcher.ts index 6011ea41..b009da92 100644 --- a/src/cliproxy/quota-fetcher.ts +++ b/src/cliproxy/quota-fetcher.ts @@ -182,7 +182,7 @@ async function refreshAccessToken( refreshToken: string, verbose = false ): Promise<{ accessToken: string | null; error?: string }> { - if (verbose) console.log('[i] Refreshing access token...'); + if (verbose) console.error('[i] Refreshing access token...'); const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), 10000); @@ -204,13 +204,13 @@ async function refreshAccessToken( clearTimeout(timeoutId); - if (verbose) console.log(`[i] Token refresh status: ${response.status}`); + if (verbose) console.error(`[i] Token refresh status: ${response.status}`); const data = (await response.json()) as TokenRefreshResponse; if (!response.ok || data.error) { const error = data.error_description || data.error || `OAuth error: ${response.status}`; - if (verbose) console.log(`[!] Token refresh failed: ${error}`); + if (verbose) console.error(`[!] Token refresh failed: ${error}`); return { accessToken: null, error, @@ -218,11 +218,11 @@ async function refreshAccessToken( } if (!data.access_token) { - if (verbose) console.log('[!] Token refresh failed: No access_token in response'); + if (verbose) console.error('[!] Token refresh failed: No access_token in response'); return { accessToken: null, error: 'No access_token in response' }; } - if (verbose) console.log('[i] Token refresh: success'); + if (verbose) console.error('[i] Token refresh: success'); return { accessToken: data.access_token }; } catch (err) { clearTimeout(timeoutId); @@ -232,7 +232,7 @@ async function refreshAccessToken( : err instanceof Error ? err.message : 'Unknown error'; - if (verbose) console.log(`[!] Token refresh failed: ${errorMsg}`); + if (verbose) console.error(`[!] Token refresh failed: ${errorMsg}`); return { accessToken: null, error: errorMsg }; } } @@ -539,12 +539,12 @@ export async function fetchAccountQuota( accountId: string, verbose = false ): Promise { - if (verbose) console.log(`[i] Fetching quota for ${accountId}...`); + if (verbose) console.error(`[i] Fetching quota for ${accountId}...`); // Only Antigravity supports quota fetching if (provider !== 'agy') { const error = `Quota not supported for provider: ${provider}`; - if (verbose) console.log(`[!] Error: ${error}`); + if (verbose) console.error(`[!] Error: ${error}`); return { success: false, models: [], @@ -557,7 +557,7 @@ export async function fetchAccountQuota( const authData = readAuthData(provider, accountId); if (!authData) { const error = 'Auth file not found for account'; - if (verbose) console.log(`[!] Error: ${error}`); + if (verbose) console.error(`[!] Error: ${error}`); return { success: false, models: [], @@ -590,7 +590,7 @@ export async function fetchAccountQuota( } if (verbose && !tokenRefreshed) { - console.log('[i] Token refresh: skipped'); + console.error('[i] Token refresh: skipped'); } // Get project ID and tier - prefer stored project ID, but always call API for tier @@ -611,7 +611,7 @@ export async function fetchAccountQuota( } if (!lastProjectResult.projectId) { const error = lastProjectResult.error || 'Failed to retrieve project ID'; - if (verbose) console.log(`[!] Error: ${error}`); + if (verbose) console.error(`[!] Error: ${error}`); return { success: false, models: [], @@ -626,12 +626,12 @@ export async function fetchAccountQuota( projectId = lastProjectResult.projectId || projectId; apiTier = lastProjectResult.tier || 'unknown'; - if (verbose) console.log(`[i] Project ID: ${projectId || 'not found'}`); + if (verbose) console.error(`[i] Project ID: ${projectId || 'not found'}`); // Fetch models with quota const result = await fetchAvailableModels(accessToken, projectId as string); - if (verbose) console.log(`[i] Models found: ${result.models.length}`); + if (verbose) console.error(`[i] Models found: ${result.models.length}`); // If quota fetch fails with auth error and we haven't refreshed yet, try refresh if (!result.success && result.error?.includes('expired') && authData.refreshToken) { diff --git a/src/cliproxy/quota-manager.ts b/src/cliproxy/quota-manager.ts index 8b9eb30a..48e1bc12 100644 --- a/src/cliproxy/quota-manager.ts +++ b/src/cliproxy/quota-manager.ts @@ -85,7 +85,8 @@ export function clearQuotaCache(): void { */ async function fetchQuotaWithDedup( provider: CLIProxyProvider, - accountId: string + accountId: string, + verbose = false ): Promise { const key = getCacheKey(provider, accountId); @@ -96,7 +97,7 @@ async function fetchQuotaWithDedup( } // Start new fetch and track it - const fetchPromise = fetchAccountQuota(provider, accountId) + const fetchPromise = fetchAccountQuota(provider, accountId, verbose) .then((result) => { setCachedQuota(provider, accountId, result); return result;