| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import express from "express";
- import cors from "cors";
- import helmet from "helmet";
- import morgan from "morgan";
- import { config } from "./src/config/index.js";
- import { db } from "./src/db/knex.js";
- import { qdrant } from "./src/services/qdrantClient.js";
- import { authMiddleware } from "./src/middleware/auth.js";
- import { rateLimitMiddleware } from "./src/middleware/rateLimit.js";
- import { errorHandler } from "./src/middleware/errorHandler.js";
- import { apiRouter } from "./src/routes/index.js";
- export function createApp() {
- const app = express();
- app.disable("x-powered-by");
- app.use(helmet());
- app.use(
- cors({
- origin: config.corsOrigin,
- credentials: true
- })
- );
- app.use(express.json({ limit: "10mb" }));
- app.use(morgan("dev"));
- app.get("/health", async (_req, res) => {
- const checks = { api: true, db: false, qdrant: false, ollama: false };
- try {
- await db.raw("SELECT 1");
- checks.db = true;
- } catch {}
- try {
- await qdrant.getCollections();
- checks.qdrant = true;
- } catch {}
- try {
- const r = await fetch(`${config.ollama.url}/api/tags`, { signal: AbortSignal.timeout(3000) });
- checks.ollama = r.ok;
- } catch {}
- const ok = Object.values(checks).every(Boolean);
- res.status(ok ? 200 : 503).json({ ok, checks });
- });
- app.use("/api", rateLimitMiddleware, authMiddleware, apiRouter);
- app.use(errorHandler);
- return app;
- }
|