UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.

65 lines (64 loc) 2.48 kB
import { ensureDirExists, getDatabaseFolder, getMediaPath } from "./utils/fs.utils.js"; import { initializePassportStrategies } from "./middleware/passport.js"; import { LoggerService } from "./handlers/logger.js"; import { configureContainer } from "./container.js"; import { interceptDatabaseError } from "./middleware/database.js"; import { interceptRoles, validateWizardCompleted } from "./middleware/global.middleware.js"; import passport from "passport"; import { Counter } from "prom-client"; import express, { json, urlencoded } from "express"; import { scopePerRequest } from "awilix-express"; import cookieParser from "cookie-parser"; import cors from "cors"; import helmet from "helmet"; //#region src/server.core.ts const httpRequestsTotal = new Counter({ name: "http_requests_total", help: "HTTP requests executed" }); async function setupServer() { const logger = new LoggerService("FDM-ServerCore"); const httpServer = express(); const databasePath = getDatabaseFolder(); ensureDirExists(databasePath); logger.log(`Expecting database at path ${databasePath}`); const mediaPath = getMediaPath(); ensureDirExists(mediaPath); logger.log(`Expecting media at path ${mediaPath}`); const container = configureContainer(); initializePassportStrategies(passport, container); httpServer.use((req, res, next) => { if ((req.route?.path ?? req.path ?? "unknown").includes("/api")) { const start = process.hrtime(); res.on("finish", () => { httpRequestsTotal.inc(); const delta = process.hrtime(start); const duration = delta[0] + delta[1] / 1e9; new LoggerService("HttpRequest").newDebug({ message: `HTTP request ${req.method} ${req.originalUrl} ${res.statusCode}`, method: req.method, path: req.originalUrl, statusCode: res.statusCode, responseTimeMs: duration.toFixed(2), clientIp: req.ip, userAgent: req.get("User-Agent") }); }); } next(); }).use(cors({ origin: "*", methods: "GET,HEAD,PUT,PATCH,POST,DELETE" })).use(helmet({ contentSecurityPolicy: false })).use(json({ limit: "10mb" })).use(cookieParser()).use(urlencoded({ extended: false })).use(passport.initialize()).use(passport.authenticate([ "jwt", "api-key", "anonymous" ], { session: false })).use(scopePerRequest(container)).use(interceptDatabaseError).use(validateWizardCompleted).use(interceptRoles); return { httpServer, container }; } //#endregion export { setupServer }; //# sourceMappingURL=server.core.js.map