@batolye/bdk-core
Version:
Module to provide core utilities for BulusAtolyesi applications and services
102 lines (68 loc) • 3.7 kB
JavaScript
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;
}
;