import { readAuthFile } from '../../opencode/auth.js'; import { getAuthEntry, normalizeAuthEntry, buildResult, toUsageWindow, toNumber, toTimestamp } from '../utils/index.js'; export const providerId = 'claude'; export const providerName = 'Claude'; export const aliases = ['anthropic', 'claude']; export const isConfigured = () => { const auth = readAuthFile(); const entry = normalizeAuthEntry(getAuthEntry(auth, aliases)); return Boolean(entry?.access || entry?.token); }; export const fetchQuota = async () => { const auth = readAuthFile(); const entry = normalizeAuthEntry(getAuthEntry(auth, aliases)); const accessToken = entry?.access ?? entry?.token; if (!accessToken) { return buildResult({ providerId, providerName, ok: false, configured: false, error: 'Not configured' }); } try { const response = await fetch('https://api.anthropic.com/api/oauth/usage', { method: 'GET', headers: { Authorization: `Bearer ${accessToken}`, 'anthropic-beta': 'oauth-2025-04-20' } }); if (!response.ok) { return buildResult({ providerId, providerName, ok: false, configured: true, error: `API error: ${response.status}` }); } const payload = await response.json(); const windows = {}; const fiveHour = payload?.five_hour ?? null; const sevenDay = payload?.seven_day ?? null; const sevenDaySonnet = payload?.seven_day_sonnet ?? null; const sevenDayOpus = payload?.seven_day_opus ?? null; if (fiveHour) { windows['5h'] = toUsageWindow({ usedPercent: toNumber(fiveHour.utilization), windowSeconds: null, resetAt: toTimestamp(fiveHour.resets_at) }); } if (sevenDay) { windows['7d'] = toUsageWindow({ usedPercent: toNumber(sevenDay.utilization), windowSeconds: null, resetAt: toTimestamp(sevenDay.resets_at) }); } if (sevenDaySonnet) { windows['7d-sonnet'] = toUsageWindow({ usedPercent: toNumber(sevenDaySonnet.utilization), windowSeconds: null, resetAt: toTimestamp(sevenDaySonnet.resets_at) }); } if (sevenDayOpus) { windows['7d-opus'] = toUsageWindow({ usedPercent: toNumber(sevenDayOpus.utilization), windowSeconds: null, resetAt: toTimestamp(sevenDayOpus.resets_at) }); } return buildResult({ providerId, providerName, ok: true, configured: true, usage: { windows } }); } catch (error) { return buildResult({ providerId, providerName, ok: false, configured: true, error: error instanceof Error ? error.message : 'Request failed' }); } };