| import { Router } from "express"; | |
| import { requireAdmin } from "../middlewares/auth.js"; | |
| import { generateKey, listKeys, revokeKey } from "../lib/apiKeys.js"; | |
| const router = Router(); | |
| router.post("/keys", requireAdmin, (req, res) => { | |
| const { name } = req.body as { name?: string }; | |
| if (!name || typeof name !== "string" || !name.trim()) { | |
| res.status(400).json({ error: "The 'name' field is required." }); | |
| return; | |
| } | |
| const key = generateKey(name.trim()); | |
| res.status(201).json({ | |
| message: "API key generated. Save it now — it won't be shown again.", | |
| key: key.key, | |
| name: key.name, | |
| createdAt: key.createdAt, | |
| }); | |
| }); | |
| router.get("/keys", requireAdmin, (_req, res) => { | |
| res.json({ keys: listKeys() }); | |
| }); | |
| router.delete("/keys/:name", requireAdmin, (req, res) => { | |
| const { name } = req.params; | |
| const ok = revokeKey(name!); | |
| if (!ok) { | |
| res.status(404).json({ error: "Key not found or already revoked." }); | |
| return; | |
| } | |
| res.json({ message: `Key '${name}' revoked.` }); | |
| }); | |
| export default router; | |