156 lines
4.2 KiB
TypeScript
156 lines
4.2 KiB
TypeScript
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";
|
|
import { BillsListMedia } from "./bills/billsListMedia";
|
|
import BillRequestValidator from "./bills/billRequestValidator";
|
|
import cors from "cors";
|
|
import helmet from "helmet";
|
|
import {
|
|
BillsMediaUploadMulter,
|
|
BillsUploadMedia,
|
|
} from "./bills/billsUploadMedia";
|
|
import ValidateImsToken from "./util/validateToken";
|
|
|
|
dotenv.config({
|
|
path: resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`),
|
|
});
|
|
|
|
export const logger = winston.createLogger({
|
|
format: winston.format.combine(
|
|
winston.format.timestamp(),
|
|
winston.format.json(),
|
|
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",
|
|
}),
|
|
new winston.transports.Console({
|
|
format: winston.format.combine(
|
|
winston.format.colorize(),
|
|
winston.format.simple()
|
|
),
|
|
}),
|
|
],
|
|
rejectionHandlers: [
|
|
new DailyRotateFile({
|
|
filename: path.join(FolderPaths.Root, "logs", "rejections-%DATE%.log"),
|
|
datePattern: "YYYY-MM-DD-HH",
|
|
zippedArchive: true,
|
|
maxSize: "20m",
|
|
maxFiles: "14d",
|
|
}),
|
|
new winston.transports.Console({
|
|
format: winston.format.combine(
|
|
winston.format.colorize(),
|
|
winston.format.simple()
|
|
),
|
|
}),
|
|
],
|
|
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(cors());
|
|
const morganMiddleware = morgan(
|
|
"combined", //":method :url :status :res[content-length] - :response-time ms"
|
|
{
|
|
stream: {
|
|
write: (message) => logger.http(message.trim()),
|
|
},
|
|
}
|
|
);
|
|
|
|
app.use(morganMiddleware);
|
|
app.use(helmet());
|
|
app.post("/jobs/list", ValidateImsToken, JobRequestValidator, JobsListMedia);
|
|
app.post(
|
|
"/jobs/upload",
|
|
ValidateImsToken,
|
|
JobMediaUploadMulter.array("file"),
|
|
JobRequestValidator,
|
|
jobsUploadMedia
|
|
);
|
|
app.post(
|
|
"/jobs/move", //JobRequestValidator,
|
|
ValidateImsToken,
|
|
JobsMoveMedia
|
|
);
|
|
|
|
app.post("/bills/list", BillRequestValidator, BillsListMedia);
|
|
app.post(
|
|
"/bills/upload",
|
|
ValidateImsToken,
|
|
BillsMediaUploadMulter.array("file"),
|
|
BillRequestValidator,
|
|
BillsUploadMedia
|
|
);
|
|
app.get(
|
|
"/",
|
|
ValidateImsToken,
|
|
(req: express.Request, res: express.Response) => {
|
|
res.send("IMS running.");
|
|
}
|
|
);
|
|
|
|
InitServer();
|
|
app.use(FolderPaths.StaticPath, express.static(FolderPaths.Root, {}));
|
|
app.listen(port, () => {
|
|
logger.info(`ImEX Media Server is running at http://localhost:${port}`);
|
|
});
|