import { existsSync } from 'fs'; import { promises as fs } from 'fs'; import path from 'path'; // 用量缓存文件路径 const USAGE_CACHE_FILE = path.join(process.cwd(), 'configs', 'usage-cache.json'); /** * 读取用量缓存文件 * @returns {Promise} 缓存的用量数据,如果不存在或读取失败则返回 null */ export async function readUsageCache() { try { if (existsSync(USAGE_CACHE_FILE)) { const content = await fs.readFile(USAGE_CACHE_FILE, 'utf8'); return JSON.parse(content); } return null; } catch (error) { console.warn('[Usage Cache] Failed to read usage cache:', error.message); return null; } } /** * 写入用量缓存文件 * @param {Object} usageData - 用量数据 */ export async function writeUsageCache(usageData) { try { await fs.writeFile(USAGE_CACHE_FILE, JSON.stringify(usageData, null, 2), 'utf8'); console.log('[Usage Cache] Usage data cached to', USAGE_CACHE_FILE); } catch (error) { console.error('[Usage Cache] Failed to write usage cache:', error.message); } } /** * 读取特定提供商类型的用量缓存 * @param {string} providerType - 提供商类型 * @returns {Promise} 缓存的用量数据 */ export async function readProviderUsageCache(providerType) { const cache = await readUsageCache(); if (cache && cache.providers && cache.providers[providerType]) { return { ...cache.providers[providerType], cachedAt: cache.timestamp, fromCache: true }; } return null; } /** * 更新特定提供商类型的用量缓存 * @param {string} providerType - 提供商类型 * @param {Object} usageData - 用量数据 */ export async function updateProviderUsageCache(providerType, usageData) { let cache = await readUsageCache(); if (!cache) { cache = { timestamp: new Date().toISOString(), providers: {} }; } cache.providers[providerType] = usageData; cache.timestamp = new Date().toISOString(); await writeUsageCache(cache); }