Spaces:
Runtime error
Runtime error
| import http from "http"; | |
| import express from "express"; | |
| import type { | |
| Request as ExpressRequest, | |
| Response as ExpressResponse, | |
| } from "express"; | |
| import path from "path"; | |
| import { ShortCreator } from "../short-creator/ShortCreator"; | |
| import { APIRouter } from "./routers/rest"; | |
| import { MCPRouter } from "./routers/mcp"; | |
| import { logger } from "../logger"; | |
| import { Config } from "../config"; | |
| export class Server { | |
| private app: express.Application; | |
| private config: Config; | |
| constructor(config: Config, shortCreator: ShortCreator) { | |
| this.config = config; | |
| this.app = express(); | |
| // add healthcheck endpoint | |
| this.app.get("/health", (req: ExpressRequest, res: ExpressResponse) => { | |
| res.status(200).json({ status: "ok" }); | |
| }); | |
| const apiRouter = new APIRouter(config, shortCreator); | |
| const mcpRouter = new MCPRouter(shortCreator); | |
| this.app.use("/api", apiRouter.router); | |
| this.app.use("/mcp", mcpRouter.router); | |
| // Serve static files from the UI build | |
| this.app.use(express.static(path.join(__dirname, "../../dist/ui"))); | |
| this.app.use( | |
| "/static", | |
| express.static(path.join(__dirname, "../../static")), | |
| ); | |
| // Serve the React app for all other routes (must be last) | |
| this.app.get("*", (req: ExpressRequest, res: ExpressResponse) => { | |
| res.sendFile(path.join(__dirname, "../../dist/ui/index.html")); | |
| }); | |
| } | |
| public start(): http.Server { | |
| const server = this.app.listen(this.config.port, () => { | |
| logger.info( | |
| { port: this.config.port, mcp: "/mcp", api: "/api" }, | |
| "MCP and API server is running", | |
| ); | |
| logger.info( | |
| `UI server is running on http://localhost:${this.config.port}`, | |
| ); | |
| }); | |
| server.on("error", (error: Error) => { | |
| logger.error(error, "Error starting server"); | |
| }); | |
| return server; | |
| } | |
| public getApp() { | |
| return this.app; | |
| } | |
| } | |