import express from "npm:express"; import { getRelayBalanceStatus, getStoredRelayAuth, isUsableAuth, queryRelayBalance, redactSecrets, saveStoredRelayCredential, toAuthorization } from "../../src/relay/relay-runtime.js"; 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) { 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) { 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) { 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) { 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;