This commit is contained in:
Allan Carr
2025-07-13 00:17:08 -07:00
parent 231130267f
commit 7f782d5a64
19 changed files with 2564 additions and 1416 deletions

View File

@@ -26,6 +26,7 @@ dotenv.config({
path: resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
// Logger setup
const commonTransportConfig = {
maxSize: "20m",
maxFiles: 14,
@@ -42,10 +43,6 @@ const baseFormat = winston.format.combine(
winston.format.prettyPrint()
);
const consoleTransport = new winston.transports.Console({
format: winston.format.combine(winston.format.colorize(), winston.format.timestamp(), winston.format.simple())
});
export const logger = winston.createLogger({
format: baseFormat,
level: "http",
@@ -54,15 +51,13 @@ export const logger = winston.createLogger({
new DailyRotateFile({
filename: path.join(FolderPaths.Root, "logs", "exceptions-%DATE%.log"),
...commonTransportConfig
}),
consoleTransport
})
],
rejectionHandlers: [
new DailyRotateFile({
filename: path.join(FolderPaths.Root, "logs", "rejections-%DATE%.log"),
...commonTransportConfig
}),
consoleTransport
})
],
transports: [
new DailyRotateFile({
@@ -78,55 +73,48 @@ export const logger = winston.createLogger({
new DailyRotateFile({
filename: path.join(FolderPaths.Root, "logs", "ALL-%DATE%.log"),
...commonTransportConfig
}),
new winston.transports.Console({
format: winston.format.combine(winston.format.colorize(), winston.format.timestamp(), winston.format.simple())
})
]
});
logger.add(
new winston.transports.Console({
format: winston.format.combine(winston.format.colorize(), winston.format.timestamp(), winston.format.simple())
})
);
// App init
const app: Express = express();
const port = process.env.PORT;
app.disable("x-powered-by");
app.set("trust proxy", 1);
// Middleware order: security, logging, parsing, etc.
app.set("etag", false);
app.use(helmet({ crossOriginResourcePolicy: { policy: "cross-origin" } }));
app.use(nocache());
app.use(cors());
app.use(compression());
app.use(responseTime());
app.use(bodyParser.json({ limit: "1000mb" }));
app.use(bodyParser.urlencoded({ limit: "1000mb", extended: true }));
app.use((req, res, next) => {
res.setHeader("Connection", "keep-alive");
next();
});
app.use(nocache());
app.use(bodyParser.json({ limit: "1000mb" }));
app.use(bodyParser.urlencoded({ limit: "1000mb", extended: true }));
app.use(responseTime());
app.use(cors());
const morganMiddleware = morgan(
"combined", //":method :url :status :res[content-length] - :response-time ms"
{
stream: {
write: (message) => logger.http(message.trim())
}
}
);
const morganMiddleware = morgan("combined", {
stream: { write: (message) => logger.http(message.trim()) }
});
app.use(morganMiddleware);
app.use(helmet({ crossOriginResourcePolicy: { policy: "cross-origin" } }));
// Job endpoints
app.post("/jobs/list", ValidateImsToken, validateJobRequest, JobsListMedia);
app.post("/jobs/upload", ValidateImsToken, JobMediaUploadMulter.array("file"), validateJobRequest, jobsUploadMedia);
app.post("/jobs/download", ValidateImsToken, validateJobRequest, jobsDownloadMedia);
app.post(
"/jobs/move", //JobRequestValidator,
ValidateImsToken,
JobsMoveMedia
);
app.post(
"/jobs/delete", //JobRequestValidator,
ValidateImsToken,
JobsDeleteMedia
);
app.post("/jobs/move", ValidateImsToken, JobsMoveMedia);
app.post("/jobs/delete", ValidateImsToken, JobsDeleteMedia);
// Bill endpoints
app.post("/bills/list", BillRequestValidator, BillsListMedia);
app.post(
"/bills/upload",
@@ -136,16 +124,19 @@ app.post(
BillsUploadMedia
);
app.get("/", ValidateImsToken, (req: express.Request, res: express.Response) => {
// Health and root
app.get("/", ValidateImsToken, (req, res) => {
res.send("IMS running.");
});
app.get("/health", (req: express.Request, res: express.Response) => {
app.get("/health", (req, res) => {
res.status(200).send("OK");
});
// Static files
InitServer();
app.use(FolderPaths.StaticPath, express.static(FolderPaths.Root, { etag: false, maxAge: 30 * 1000 }));
app.use("/assets", express.static("./assets", { etag: false, maxAge: 30 * 1000 }));
app.listen(port, () => {
logger.info(`ImEX Media Server is running at http://localhost:${port}`);
});