import dotenv from "dotenv"; import express, { Request, Response } from "express"; import { generateWithAuth, GenerateWithAuthInput } from "./skills/astral-guard"; dotenv.config(); const app = express(); app.use(express.json({ limit: "5mb" })); app.get("/health", (_req: Request, res: Response) => { res.json({ status: "ok" }); }); app.post("/skills/astral-guard/generate", async (req: Request, res: Response) => { const body = req.body as Partial; const requiredFields: Array = ["userAddress", "actorLoraId", "prompt", "payload"]; const missing = requiredFields.filter((field) => body[field] === undefined || body[field] === null); if (missing.length > 0) { res.status(400).json({ status: "error", message: `Missing required fields: ${missing.join(", ")}` }); return; } try { const result = await generateWithAuth(body as GenerateWithAuthInput); res.json(result); } catch (error) { const message = error instanceof Error ? error.message : "Unknown error"; if (message === "Engine Offline.") { res.status(503).json({ status: "error", message }); return; } if (message.startsWith("⛔ Access Denied")) { res.status(403).json({ status: "error", message }); return; } if (message.startsWith("Audit Failed")) { res.status(502).json({ status: "error", message }); return; } res.status(500).json({ status: "error", message }); } }); const port = Number(process.env.PORT ?? "3001"); app.listen(port, () => { console.log(`AstralGuard server listening on port ${port}`); });