import { Application } from "@oak/oak"; import "@std/dotenv/load"; import { getMongoClient } from "./db/mongo.ts"; import { corsMiddleware } from "./middleware/cors.ts"; import { authRouter } from "./routes/auth.ts"; import { tasksRouter } from "./routes/tasks.ts"; import { agentTasksRouter } from "./routes/agenttasks.ts"; import { secretsRouter, secretFoldersRouter } from "./routes/secrets.ts"; import { secretAuditLogsRouter } from "./routes/secretAuditLogs.ts"; import { workspaceRouter } from "./routes/workspace.ts"; import { labelsRouter } from "./routes/labels.ts"; import { cronJobsRouter } from "./routes/cronjobs.ts"; import { quickTextsRouter } from "./routes/quicktexts.ts"; import { transcribeRouter } from "./routes/transcribe.ts"; import { messagingRouter } from "./routes/messaging.ts"; import { tokensRouter } from "./routes/tokens.ts"; import { settingsRouter } from "./routes/settings.ts"; import { commentsRouter } from "./routes/comments.ts"; import { attachmentsRouter } from "./routes/attachments.ts"; import { agentsRouter } from "./routes/agents.ts"; import { logsRouter } from "./routes/logs.ts"; import { userSettingsRouter } from "./routes/usersettings.ts"; import gitlabRouter from "./routes/gitlab.ts"; import { giteaRouter } from "./routes/gitea.ts"; import { backupRouter } from "./routes/backup.ts"; import { versionRouter } from "./routes/version.ts"; import { dockerRouter } from "./routes/docker.ts"; import { exportRouter } from "./routes/export.ts"; import { appUpdateRouter } from "./routes/appUpdate.ts"; import { handleWebSocket } from "./ws/handler.ts"; const app = new Application(); const PORT = parseInt(Deno.env.get("PORT") || "8000"); // Connect to MongoDB await getMongoClient(); // Middleware app.use(corsMiddleware); // Routes app.use(authRouter.routes()); app.use(authRouter.allowedMethods()); app.use(tasksRouter.routes()); app.use(tasksRouter.allowedMethods()); app.use(agentTasksRouter.routes()); app.use(agentTasksRouter.allowedMethods()); app.use(secretsRouter.routes()); app.use(secretsRouter.allowedMethods()); app.use(secretFoldersRouter.routes()); app.use(secretFoldersRouter.allowedMethods()); app.use(secretAuditLogsRouter.routes()); app.use(secretAuditLogsRouter.allowedMethods()); app.use(workspaceRouter.routes()); app.use(workspaceRouter.allowedMethods()); app.use(labelsRouter.routes()); app.use(labelsRouter.allowedMethods()); app.use(cronJobsRouter.routes()); app.use(cronJobsRouter.allowedMethods()); app.use(quickTextsRouter.routes()); app.use(quickTextsRouter.allowedMethods()); app.use(transcribeRouter.routes()); app.use(transcribeRouter.allowedMethods()); app.use(messagingRouter.routes()); app.use(messagingRouter.allowedMethods()); app.use(tokensRouter.routes()); app.use(tokensRouter.allowedMethods()); app.use(settingsRouter.routes()); app.use(settingsRouter.allowedMethods()); app.use(commentsRouter.routes()); app.use(commentsRouter.allowedMethods()); app.use(attachmentsRouter.routes()); app.use(attachmentsRouter.allowedMethods()); app.use(agentsRouter.routes()); app.use(agentsRouter.allowedMethods()); app.use(logsRouter.routes()); app.use(logsRouter.allowedMethods()); app.use(userSettingsRouter.routes()); app.use(userSettingsRouter.allowedMethods()); app.use(gitlabRouter.routes()); app.use(giteaRouter.routes()); app.use(giteaRouter.allowedMethods()); app.use(backupRouter.routes()); app.use(backupRouter.allowedMethods()); app.use(versionRouter.routes()); app.use(versionRouter.allowedMethods()); app.use(gitlabRouter.allowedMethods()); app.use(dockerRouter.routes()); app.use(dockerRouter.allowedMethods()); app.use(exportRouter.routes()); app.use(exportRouter.allowedMethods()); app.use(appUpdateRouter.routes()); app.use(appUpdateRouter.allowedMethods()); console.log(`AMS Backend running on port ${PORT}`); // Use Deno.serve for WebSocket support Deno.serve({ port: PORT }, async (req: Request): Promise => { const url = new URL(req.url); // Handle WebSocket upgrades if (url.pathname === "/ws" && req.headers.get("upgrade")?.toLowerCase() === "websocket") { return handleWebSocket(req); } // Forward to Oak for regular HTTP const oakResponse = await app.handle(req); return oakResponse || new Response("Not Found", { status: 404 }); });