Files
jenna-mcp/src/index.tsx
bipproduction 8a3eaa2193 tambahan
2025-10-28 16:47:39 +08:00

66 lines
1.7 KiB
TypeScript

import Swagger from "@elysiajs/swagger";
import Elysia from "elysia";
import html from "./index.html";
import { apiAuth } from "./server/middlewares/apiAuth";
import ApiKeyRoute from "./server/routes/apikey_route";
import Auth from "./server/routes/auth_route";
import CredentialRoute from "./server/routes/credential_route";
import DarmasabaRoute from "./server/routes/darmasaba_route";
import { convertOpenApiToMcp } from "./server/lib/mcp-converter";
import UserRoute from "./server/routes/user_route";
import LayananRoute from "./server/routes/layanan_route";
import AduanRoute from "./server/routes/aduan_route";
import { MCPRoute } from "./server/routes/mcp_route";
import PengaduanRoute from "./server/routes/pengaduan_route";
const Docs = new Elysia({
tags: ["docs"],
}).use(
Swagger({
path: "/docs",
}),
);
const Api = new Elysia({
prefix: "/api",
tags: ["api"],
})
.use(PengaduanRoute)
.use(apiAuth)
.use(ApiKeyRoute)
.use(DarmasabaRoute)
.use(CredentialRoute)
.use(UserRoute)
.use(LayananRoute)
.use(AduanRoute);
const app = new Elysia()
.use(Api)
.use(Docs)
.use(Auth)
.get(
"/.well-known/mcp.json",
async () => {
const baseUrl = process.env.BUN_PUBLIC_BASE_URL!;
return await convertOpenApiToMcp(baseUrl);
},
{
detail: {
description: "MCP manifest",
tags: ["MCP"],
},
},
)
.use(MCPRoute)
.get("/*", html)
.onRequest(({ set }) => {
set.headers["Access-Control-Allow-Origin"] = "*";
set.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS";
set.headers["Access-Control-Allow-Headers"] = "Content-Type";
})
.listen(3000, () => {
console.log("Server running at http://localhost:3000");
});
export type ServerApp = typeof app;