import bodyParser from "body-parser"; import dotenv from "dotenv"; import express, { Express } from "express"; import winston from "winston"; import path, { resolve } from "path"; import JobRequestValidator from "./jobs/jobRequestValidator"; import { JobsListMedia } from "./jobs/jobsListMedia"; import { JobsMoveMedia } from "./jobs/jobsMoveMedia"; import { JobMediaUploadMulter, jobsUploadMedia } from "./jobs/jobsUploadMedia"; import InitServer, { FolderPaths } from "./util/serverInit"; import DailyRotateFile from "winston-daily-rotate-file"; import morgan from "morgan"; dotenv.config({ path: resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`), }); export const logger = winston.createLogger({ format: winston.format.prettyPrint(), level: "http", levels: { ...winston.config.syslog.levels, http: 8 }, exceptionHandlers: [ new DailyRotateFile({ filename: path.join(FolderPaths.Root, "logs", "exceptions-%DATE%.log"), datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "14d", }), ], rejectionHandlers: [ new DailyRotateFile({ filename: path.join(FolderPaths.Root, "logs", "rejections-%DATE%.log"), datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "14d", }), ], transports: [ new DailyRotateFile({ filename: path.join(FolderPaths.Root, "logs", "errors-%DATE%.log"), datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "14d", level: "error", }), new DailyRotateFile({ filename: path.join(FolderPaths.Root, "logs", "debug-%DATE%.log"), datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "14d", level: "debug", }), new DailyRotateFile({ filename: path.join(FolderPaths.Root, "logs", "ALL-%DATE%.log"), datePattern: "YYYY-MM-DD-HH", zippedArchive: true, maxSize: "20m", maxFiles: "14d", }), ], }); if (process.env.NODE_ENV !== "production") { logger.add( new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.simple() ), }) ); } const app: Express = express(); const port = process.env.PORT; app.use(bodyParser.json({ limit: "50mb" })); app.use(bodyParser.urlencoded({ limit: "50mb", extended: true })); app.use(FolderPaths.StaticPath, express.static(FolderPaths.Root)); const morganMiddleware = morgan( "combined", //":method :url :status :res[content-length] - :response-time ms" { stream: { write: (message) => logger.http(message.trim()), }, } ); app.use(morganMiddleware); app.get("/jobs/list", JobRequestValidator, JobsListMedia); //Chaining together the upload. When upload is succesful, everything for the RO is returned. app.post( "/jobs/upload", //JobRequestValidator, JobMediaUploadMulter.array("file"), jobsUploadMedia ); app.post( "/jobs/move", //JobRequestValidator, JobsMoveMedia ); InitServer(); app.listen(port, () => { logger.info(`ImEX Media Server is running at http://localhost:${port}`); });