// ════════════════════════════════════════════════════════════════ // SAP B1 UNIFIED PORTAL MULTI-LEVEL BOM APPROVAL SERVER // ════════════════════════════════════════════════════════════════ require('dotenv').config(); const express = require('express'); const cors = require('cors'); const path = require('path'); const jwt = require('jsonwebtoken'); const { body, validationResult } = require('express-validator'); const { resolve: resolveCompany, DEFAULT_COMPANY } = require('./services/companyConfig'); const { hasStepPerm, hasWorkflowPerm, requireApprovalStep, requireWorkflowPerm } = require('./middleware/auth'); const app = express(); const SECRET = process.env.JWT_SECRET || 'sap-portal-secret'; // ── MIDDLEWARE FIRST (body parser must come before routes) ─────── app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); // Audit trail — records every mutating /api request (must be after body parsers) app.use(require('./middleware/auditLogger')); app.use(cors({ origin: true, credentials: true })); // auth-guard.js is the first