UNPKG

jsm-core

Version:
164 lines (163 loc) 6.85 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const express_middleware_1 = require("@useoptic/express-middleware"); const cors_1 = __importDefault(require("cors")); const express_1 = __importDefault(require("express")); const express_session_1 = __importDefault(require("express-session")); const cookie_parser_1 = __importDefault(require("cookie-parser")); const helmet_1 = __importDefault(require("helmet")); const jsm_logger_1 = __importStar(require("jsm-logger")); const method_override_1 = __importDefault(require("method-override")); const node_fs_1 = __importDefault(require("node:fs")); const node_path_1 = __importDefault(require("node:path")); const node_process_1 = require("node:process"); const typedi_1 = __importDefault(require("typedi")); const context_1 = require("../../context"); const jsm_request_handler_1 = require("../../libraries/jsm-request-handler"); const middlewares_1 = __importDefault(require("../middlewares")); const module_utilities_1 = require("../utilities/module.utilities"); const modules_loader_1 = __importDefault(require("./modules.loader")); exports.default = ({ app }) => { const logger = (0, jsm_logger_1.default)(jsm_logger_1.LoggerContext.LOADER, "express"); app.use((0, helmet_1.default)()); app.disable("x-powered-by"); /** * Expose the public folder as static */ app.use(express_1.default.static(node_path_1.default.join((0, node_process_1.cwd)(), "public"))); /** * Useful if you're behind a reverse proxy (Heroku, Bluemix, AWS ELB, Nginx, etc) * It shows the real origin IP in the heroku or Cloudwatch logs */ app.enable("trust proxy"); // The magic package that prevents frontend developers going nuts // Alternate description: // Enable Cross Origin Resource Sharing to all origins by default app.use((0, cors_1.default)({ origin: (origin, callback) => callback(null, origin), // Allow dynamic origin methods: "GET,POST,PUT,DELETE,PATCH,OPTIONS", // Allow all methods (you can add more if needed) allowedHeaders: "*", // Allow all custom headers credentials: true, // Allow cookies to be sent (optional) })); // Some sauce that always add since 2014 // "Lets you use HTTP verbs such as PUT or DELETE in places where the client doesn't support it." // Maybe not needed anymore ? app.use((0, method_override_1.default)()); // Transforms the raw string of req.body into json app.use(express_1.default.json({ limit: (0, context_1.getRegistry)().getConfig('http.bodySizeLimit') })); app.use(express_1.default.urlencoded({ extended: true, limit: (0, context_1.getRegistry)().getConfig('http.bodySizeLimit') })); app.use((0, express_session_1.default)({ secret: "keyboard cat", resave: false, // don't save session if unmodified saveUninitialized: false, // don't create session until something stored cookie: { secure: true, sameSite: 'none', // MUST be 'none' to allow third-party cookies }, })); // Parse cookies app.use((0, cookie_parser_1.default)()); /** * Handle JWT token */ app.use(middlewares_1.default.handleJWT); /** * Authenticate service */ app.use(middlewares_1.default.authenticateService); /** * Attach auth data to the request object */ const usersServicePath = (0, module_utilities_1.resolveModulePath)("modules/auth/modules/users/users.service"); const userModelPath = (0, module_utilities_1.resolveModulePath)("modules/auth/modules/users/user.model"); let usersService; if (usersServicePath && node_fs_1.default.existsSync(usersServicePath) && userModelPath && node_fs_1.default.existsSync(userModelPath)) { const User = require(userModelPath).User; if (User) { typedi_1.default.set("userModel", User); const UsersService = require(usersServicePath).UsersService; if (UsersService) usersService = typedi_1.default.get(UsersService); else logger.error("UsersService not found"); } else logger.error("User model not found"); } if (usersService) { app.use(middlewares_1.default.gateAttachAuthDataMiddleWare({ usersService: usersService, })); } else { app.use(middlewares_1.default.gateAttachAuthDataMiddleWare({})); } /** * Health Check endpoints * TODO Explain why they are here */ // app.use(sharedRoutes()); /** * Load Modules API routes */ app.get("/loader", (req, res) => { res.send("Hello World"); }); (0, modules_loader_1.default)(app, (0, context_1.getRegistry)().getConfig('http.api.prefix') || '/api/v1'); /** * API Documentation */ app.use((0, express_middleware_1.OpticMiddleware)({ enabled: (0, context_1.getRegistry)().getConfig('isDev'), })); app.use((0, jsm_request_handler_1.JsmRequestHandlerMiddleware)(middlewares_1.default.errorHandler())); /** * catch 404 and forward to error handler */ app.use(middlewares_1.default.endpointNotFoundHandler()); /** * Error handler */ app.use(middlewares_1.default.errorHandler()); };