"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.expressApp = exports.defaultExpressAppConfig = void 0;
const morgan_1 = __importDefault(require("morgan"));
const express_1 = __importDefault(require("express"));
const path_1 = __importDefault(require("path"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const express_session_1 = __importDefault(require("express-session"));
const helmet_1 = __importDefault(require("helmet"));
const utils_1 = require("../utils");
const enums_1 = require("../enums");
/**
* Sets the default created express app config
* @readonly
**/
exports.defaultExpressAppConfig = {
appType: enums_1.ExpressAppType.EXPRESS_API_APP,
logging: true,
logLevel: 'dev',
cookiesSupport: true,
staticDirSupport: true,
staticDirName: 'uploads',
jsonSupport: true,
security: true,
};
/**
* Creates and setup a brand new express powered app
* @function expressApp
* @param {ExpressAppConfig} app configuration object
* @return {Express} ready to use express app
**/
function expressApp(config = exports.defaultExpressAppConfig) {
const app = (0, express_1.default)();
if (config.logging && config.logLevel) {
app.use((0, morgan_1.default)(config.logLevel));
}
app.use(express_1.default.urlencoded({ extended: false }));
if (config.cookiesSupport) {
app.use((0, cookie_parser_1.default)());
if (app.get('env') == 'development') {
// development session management
app.use((0, express_session_1.default)({
secret: (0, utils_1.stringGenerator)(16),
genid: () => (0, utils_1.stringGenerator)(32),
resave: true,
saveUninitialized: false,
cookie: {
secure: true,
httpOnly: true,
expires: new Date(Date.now() + (24 * 60 * 60 * 1000))
}
}));
}
else {
// production session management
}
}
if (config.staticDirSupport && config.staticDirName) {
app.use(express_1.default.static(path_1.default.join(__dirname, config.staticDirName)));
}
if (config.jsonSupport) {
app.use(express_1.default.json());
}
if (config.security) {
app.disable('x-powered-by');
app.use((0, helmet_1.default)());
}
return app;
}
exports.expressApp = expressApp;
//# sourceMappingURL=init.js.map