/** * Usage Fetcher - Get usage data from provider APIs */ import { getGitHubUsage } from "./usage/github.js"; import { getGeminiUsage, getAntigravityUsage } from "./usage/google.js"; import { getClaudeUsage } from "./usage/claude.js"; import { getCodexUsage, consumeCodexRateLimitResetCredit } from "./usage/codex.js"; export { consumeCodexRateLimitResetCredit }; import { getKiroUsage } from "./usage/kiro.js"; import { getMiniMaxUsage } from "./usage/minimax.js"; import { getQwenUsage, getIflowUsage, getOllamaUsage, getGlmUsage, getVercelAiGatewayUsage, getQoderUsage, } from "./usage/misc.js"; /** * Get usage data for a provider connection * @param {Object} connection - Provider connection with accessToken * @returns {Object} Usage data with quotas */ // provider → usage handler (ctx carries every arg each handler needs) const USAGE_HANDLERS = { github: (c) => getGitHubUsage(c.accessToken, c.providerSpecificData, c.proxyOptions), "gemini-cli": (c) => getGeminiUsage(c.accessToken, c.providerDataWithProjectId, c.proxyOptions), antigravity: (c) => getAntigravityUsage(c.accessToken, c.providerSpecificData, c.proxyOptions), claude: (c) => getClaudeUsage(c.accessToken, c.proxyOptions), codex: (c) => getCodexUsage(c.accessToken, c.proxyOptions), kiro: (c) => getKiroUsage(c.accessToken, c.providerSpecificData, c.proxyOptions), qoder: (c) => getQoderUsage(c.accessToken, c.proxyOptions), qwen: (c) => getQwenUsage(c.accessToken, c.providerSpecificData), iflow: (c) => getIflowUsage(c.accessToken), ollama: (c) => getOllamaUsage(c.accessToken), glm: (c) => getGlmUsage(c.apiKey, c.provider, c.proxyOptions), "glm-cn": (c) => getGlmUsage(c.apiKey, c.provider, c.proxyOptions), minimax: (c) => getMiniMaxUsage(c.apiKey, c.provider, c.proxyOptions), "minimax-cn": (c) => getMiniMaxUsage(c.apiKey, c.provider, c.proxyOptions), "vercel-ai-gateway": (c) => getVercelAiGatewayUsage(c.apiKey, c.proxyOptions), }; export async function getUsageForProvider(connection, proxyOptions = null) { const { provider, accessToken, apiKey, providerSpecificData, projectId } = connection; const providerDataWithProjectId = { ...(providerSpecificData || {}), ...(projectId ? { projectId } : {}), }; const handler = USAGE_HANDLERS[provider]; if (!handler) return { message: `Usage API not implemented for ${provider}` }; return await handler({ provider, accessToken, apiKey, providerSpecificData, providerDataWithProjectId, proxyOptions }); }