| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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;
|