66 lines
1.7 KiB
TypeScript
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;
|