/
Soraa
/
claude-code
Обзор
Документация
Войти
/
Soraa
/
claude-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
services/api/usage.ts
63 строки
2 KB
kuberwastaken
new initial commit (history rewritten)
01 апр 2026, 14:57
01 апр 2026, 14:57
c1996f2
Код
Авторство
О чём код?
import axios from 'axios' import { getOauthConfig } from '../../constants/oauth.js' import { getClaudeAIOAuthTokens, hasProfileScope, isClaudeAISubscriber, } from '../../utils/auth.js' import { getAuthHeaders } from '../../utils/http.js' import { getClaudeCodeUserAgent } from '../../utils/userAgent.js' import { isOAuthTokenExpired } from '../oauth/client.js' export type RateLimit = { utilization: number | null // a percentage from 0 to 100 resets_at: string | null // ISO 8601 timestamp } export type ExtraUsage = { is_enabled: boolean monthly_limit: number | null used_credits: number | null utilization: number | null } export type Utilization = { five_hour?: RateLimit | null seven_day?: RateLimit | null seven_day_oauth_apps?: RateLimit | null seven_day_opus?: RateLimit | null seven_day_sonnet?: RateLimit | null extra_usage?: ExtraUsage | null } export async function fetchUtilization(): Promise<Utilization | null> { if (!isClaudeAISubscriber() || !hasProfileScope()) { return {} } // Skip API call if OAuth token is expired to avoid 401 errors const tokens = getClaudeAIOAuthTokens() if (tokens && isOAuthTokenExpired(tokens.expiresAt)) { return null } const authResult = getAuthHeaders() if (authResult.error) { throw new Error(`Auth error: ${authResult.error}`) } const headers = { 'Content-Type': 'application/json', 'User-Agent': getClaudeCodeUserAgent(), ...authResult.headers, } const url = `${getOauthConfig().BASE_API_URL}/api/oauth/usage` const response = await axios.get<Utilization>(url, { headers, timeout: 5000, // 5 second timeout }) return response.data }