// Import core modules const express = require("express"); const cors = require("cors"); const bodyParser = require("body-parser"); const path = require("path"); const compression = require("compression"); const cookieParser = require("cookie-parser"); const http = require("http"); const {Server} = require("socket.io"); // Load environment variables require("dotenv").config({ path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`) }); // Import custom utilities and handlers const logger = require("./server/utils/logger"); const countRoutes = (app) => { let routeCount = 0; app._router.stack.forEach(function(middleware){ if(middleware.route){ // if it's a route, count it routeCount++; } else if(middleware.name === 'router'){ // if it's a router, count its routes middleware.handle.stack.forEach(function(handler){ if(handler.route){ routeCount++; } }); } }); return routeCount; } // Express app and server setup const app = express(); const port = process.env.PORT || 5000; const server = http.createServer(app); const io = new Server(server, { path: "/ws", cors: { origin: [ "https://test.imex.online", "https://www.test.imex.online", "http://localhost:3000", "https://imex.online", "https://www.imex.online", "https://beta.test.imex.online", "https://www.beta.test.imex.online", "https://beta.imex.online", "https://www.beta.imex.online", ], methods: ["GET", "POST"], credentials: true, exposedHeaders: ["set-cookie"], }, }); exports.io = io; require("./server/web-sockets/web-socket"); // Import route handlers (assuming these files are structured accordingly) const accountingRoutes = require("./server/routes/accountingRoutes"); const mediaRoutes = require("./server/routes/mediaRoutes"); const smsRoutes = require("./server/routes/smsRoutes"); const jobRoutes = require("./server/routes/jobRoutes"); const schedulingRoutes = require("./server/routes/schedulingRoutes"); const utilRoutes = require("./server/routes/utilRoutes"); const dataRoutes = require("./server/routes/dataRoutes"); const adminRoutes = require("./server/routes/adminRoutes"); const techRoutes = require("./server/routes/techRoutes"); const intellipayRoutes = require("./server/routes/intellipayRoutes"); const osRoutes = require("./server/routes/osRoutes"); const cdkRoutes = require("./server/routes/cdkRoutes"); const miscellaneousRoutes = require("./server/routes/miscellaneousRoutes"); const mixdataRoutes = require("./server/routes/mixDataRoutes"); const renderRoutes = require("./server/routes/renderRoutes"); const notificationsRoutes = require("./server/routes/notificationsRoutes"); const qboRoutes = require("./server/routes/qboRoutes"); // Middleware app.use(compression()); app.use(cookieParser()); app.use(bodyParser.json({limit: "50mb"})); app.use(bodyParser.urlencoded({limit: "50mb", extended: true})); app.use(cors({credentials: true, exposedHeaders: ["set-cookie"]})); // Route groupings app.use('/', miscellaneousRoutes); app.use("/notifications", notificationsRoutes); app.use("/render", renderRoutes); app.use('/mixdata', mixdataRoutes); app.use('/accounting', accountingRoutes); app.use('/qbo', qboRoutes); app.use('/media', mediaRoutes); app.use('/sms', smsRoutes); app.use('/job', jobRoutes); app.use('/scheduling', schedulingRoutes); app.use('/utils', utilRoutes); app.use('/data', dataRoutes); app.use('/adm', adminRoutes); app.use('/tech', techRoutes); app.use('/intellipay', intellipayRoutes); app.use('/opensearch', osRoutes); app.use('/cdk', cdkRoutes); // Default route for forbidden access app.get("/", (req, res) => { res.status(200).send("Access Forbidden."); }); // Start server server.listen(port, (error) => { if (error) throw error; logger.log(`[${process.env.NODE_ENV || "DEVELOPMENT"}] Server with ${countRoutes(app)} routes running on port ${port}`, "INFO", "api"); });