mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
- 新增 accountBalanceService 与多 Provider 适配(Claude/Claude Console/OpenAI Responses/通用) - Redis 增加余额查询结果与本地统计缓存读写 - 管理端新增 /admin/accounts/balance 相关接口与汇总接口,并在应用启动时注册 Provider - 后台前端新增余额组件与 Dashboard 余额/配额汇总、低余额/高使用提示 - 补充 accountBalanceService 单元测试
55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
const BaseBalanceProvider = require('./baseBalanceProvider')
|
||
|
||
class OpenAIResponsesBalanceProvider extends BaseBalanceProvider {
|
||
constructor() {
|
||
super('openai-responses')
|
||
}
|
||
|
||
/**
|
||
* OpenAI-Responses:
|
||
* - 优先使用 dailyQuota 字段(如果配置了额度)
|
||
* - 可选:尝试调用兼容 API(不同服务商实现不一,失败自动降级)
|
||
*/
|
||
async queryBalance(account) {
|
||
this.logger.debug(`查询 OpenAI Responses 余额: ${account?.id}`)
|
||
|
||
// 配置了额度时直接返回(字段法)
|
||
if (account?.dailyQuota && Number(account.dailyQuota) > 0) {
|
||
return this.readQuotaFromFields(account)
|
||
}
|
||
|
||
// 尝试调用 usage 接口(兼容性不保证)
|
||
if (account?.apiKey && account?.baseApi) {
|
||
const baseApi = String(account.baseApi).replace(/\/$/, '')
|
||
const response = await this.makeRequest(
|
||
`${baseApi}/v1/usage`,
|
||
{
|
||
method: 'GET',
|
||
headers: {
|
||
Authorization: `Bearer ${account.apiKey}`,
|
||
'Content-Type': 'application/json'
|
||
}
|
||
},
|
||
account
|
||
)
|
||
|
||
if (response.success) {
|
||
return {
|
||
balance: null,
|
||
currency: this.parseCurrency(response.data),
|
||
queryMethod: 'api',
|
||
rawData: response.data
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
balance: null,
|
||
currency: 'USD',
|
||
queryMethod: 'local'
|
||
}
|
||
}
|
||
}
|
||
|
||
module.exports = OpenAIResponsesBalanceProvider
|