import express from 'npm:express'; import { getRelayBalanceStatus, queryRelayBalance } from '../../src/relay/relay-billing.ts'; import { getStoredRelayAuth, isUsableAuth, saveStoredRelayCredential, toAuthorization } from '../../src/relay/relay-credential-store.ts'; import { redactSecrets } from '../../src/relay/relay-errors.ts'; const router = express.Router(); router.get('/token', async (_req, res) => { try { const auth = await getStoredRelayAuth(); if (!isUsableAuth(auth)) { return res.status(409).json({ success: false, message: '尚未配置 API 密钥' }); } res.json({ success: true, data: { authorization: auth } }); } catch (error: any) { res.status(500).json({ success: false, message: redactSecrets(error?.message || '获取密钥失败') }); } }); router.get('/status', async (_req, res) => { try { const data = await getRelayBalanceStatus(); res.json({ success: true, data }); } catch (error: any) { res.status(500).json({ success: false, message: redactSecrets(error?.message || '状态查询失败') }); } }); router.post('/status/refresh', async (_req, res) => { try { const data = await getRelayBalanceStatus(); res.json({ success: true, data }); } catch (error: any) { res.status(500).json({ success: false, message: redactSecrets(error?.message || '状态查询失败') }); } }); router.post('/credential', async (req, res) => { try { const raw = String(req.body?.apiKey || req.body?.key || '').trim(); const auth = toAuthorization(raw); await queryRelayBalance(auth); const saved = await saveStoredRelayCredential(raw, req.currentUser?.get?.('username') || req.currentUser?.id || ''); const data = await getRelayBalanceStatus(); res.json({ success: true, data: { ...data, maskedKey: saved.maskedKey } }); } catch (error: any) { res.status(400).json({ success: false, message: redactSecrets(error?.message || '密钥保存失败') }); } }); router.get('/health', async (_req, res) => { const auth = await getStoredRelayAuth(); res.json({ service: 'relay-credential', configured: Boolean(auth), timestamp: new Date().toISOString() }); }); export default router;