Files
Project_Astral/backend-agent/server.ts
2026-02-25 00:50:23 +05:30

56 lines
1.6 KiB
TypeScript

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<GenerateWithAuthInput>;
const requiredFields: Array<keyof GenerateWithAuthInput> = ["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}`);
});