UNPKG

@batolye/bdk-core

Version:

Module to provide core utilities for BulusAtolyesi applications and services

102 lines (68 loc) 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.core_createApp = core_createApp; var _debug = _interopRequireDefault(require("debug")); var _compression = _interopRequireDefault(require("compression")); var _cors = _interopRequireDefault(require("cors")); var _helmet = _interopRequireDefault(require("helmet")); var _bodyParser = _interopRequireDefault(require("body-parser")); var _expressRateLimit = _interopRequireDefault(require("express-rate-limit")); var _feathers = _interopRequireDefault(require("@feathersjs/feathers")); var _configuration = _interopRequireDefault(require("@feathersjs/configuration")); var _express = _interopRequireDefault(require("@feathersjs/express")); var _rest = _interopRequireDefault(require("@feathersjs/express/rest")); var _socketio = _interopRequireDefault(require("@feathersjs/socketio")); var _mongodb = require("mongodb"); var _db = require("./db"); var _appHelper = require("./utils/app-helper"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const debug = (0, _debug.default)("batolye:bdk-core:application"); function core_createApp() { let app = (0, _express.default)((0, _feathers.default)()); // By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. // The value can be set to Infinity (or 0) to indicate an unlimited number of listeners. app.setMaxListeners(0); // Load app configuration first app.configure((0, _configuration.default)()); // Then setup logger app.core_logger = (0, _appHelper.setupLogger)(app.get("logs")); // This avoid managing the API path before each service name app.core_getService = function (path, zone) { // Zone is given as string ID if (zone && typeof zone === "string") { return app.service(app.get("apiPath") + "/" + zone + "/" + path); } else if (zone && typeof zone === "object") { // Could be Object ID or raw object if (_mongodb.ObjectID.isValid(zone)) return app.service(app.get("apiPath") + "/" + zone.toString() + "/" + path);else return app.service(app.get("apiPath") + "/" + zone._id.toString() + "/" + path); } else { return app.service(app.get("apiPath") + "/" + path); } }; // This is used to add hooks/filters to services app.core_configureService = function (name, service, servicesPath) { return (0, _appHelper.configureService)(name, service, servicesPath); }; // This is used to create standard services app.core_createService = function (name, options) { return (0, _appHelper.createService)(name, app, options); }; // Override Feathers configure that do not manage async operations, // here we also simply call the function given as parameter but await for it app.configure = async function (fn) { await fn.call(this, this); return this; }; const apiLimiter = app.get("apiLimiter"); if (apiLimiter && apiLimiter.http) { app.use(app.get("apiPath"), new _expressRateLimit.default(apiLimiter.http)); } // Enable CORS, security, compression, and body parsing app.use((0, _cors.default)(app.get("cors"))); app.use((0, _helmet.default)(app.get("helmet"))); app.use((0, _compression.default)(app.get("compression"))); app.use(_bodyParser.default.json()); app.use(_bodyParser.default.urlencoded({ extended: true })); // Set up plugins and providers app.configure((0, _rest.default)()); app.configure((0, _socketio.default)({ path: app.get("apiPath") + "ws" }, (0, _appHelper.setupSockets)(app))); app.configure(_appHelper.configureAuth); // Initialize DB app.db = _db.Database.create(app); return app; }