56 lines
1.6 KiB
TypeScript
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}`);
|
|
});
|