UNPKG

kakojs

Version:

Lightweight nodejs base minimalist framework to make api easy.

1,120 lines (940 loc) 216 kB
require('source-map-support/register'); module.exports = /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = "./src/index.js"); /******/ }) /************************************************************************/ /******/ ({ /***/ "./package.json": /*!**********************!*\ !*** ./package.json ***! \**********************/ /*! exports provided: name, version, description, keywords, author, repository, contributors, private, license, main, type, directories, scripts, dependencies, devDependencies, peerDependencies, default */ /***/ (function(module) { module.exports = JSON.parse("{\"name\":\"kakojs\",\"version\":\"0.1.75\",\"description\":\"Lightweight nodejs base minimalist framework to make api easy.\",\"keywords\":[\"Koa\",\"Apollo\",\"Knex\",\"Objection\"],\"author\":{\"name\":\"Tony T. Sithu\",\"email\":\"tsithu@gmail.com\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/tsithu/kakojs.git\"},\"contributors\":[],\"private\":false,\"license\":\"MIT\",\"main\":\"index.js\",\"type\":\"commonjs\",\"directories\":{\"bin\":\"build\",\"lib\":\"src\",\"test\":\"test/\"},\"scripts\":{\"cc\":\"yarn cache clean\",\"i\":\"yarn install\",\"serve\":\"yarn dev\",\"prod\":\"yarn build && yarn start\",\"dev\":\"cross-env NODE_ENV=development backpack dev\",\"test\":\"yarn lint && yarn test:server --forceExit\",\"build\":\"backpack build\",\"start\":\"cross-env NODE_ENV=production node ./build/main.js\",\"lint\":\"eslint --ext .js,.vue --ignore-path .gitignore .\",\"lint:fix\":\"eslint --fix --ext .js,.vue --ignore-path .gitignore .\",\"test:server\":\"cross-env NODE_ENV=test jest --detectOpenHandles\"},\"dependencies\":{\"@babel/runtime\":\"^7.10.2\",\"@koa/cors\":\"^3.1.0\",\"@koa/router\":\"^9.0.1\",\"apollo-server-koa\":\"^2.14.4\",\"bcrypt\":\"^5.0.0\",\"chalk\":\"^4.1.0\",\"cross-env\":\"^7.0.2\",\"cryptr\":\"^6.0.2\",\"dataloader\":\"^2.0.0\",\"dotenv\":\"^8.2.0\",\"eslint-plugin-vue\":\"^6.1.2\",\"glob\":\"^7.1.6\",\"graphql\":\"^15.3.0\",\"graphql-depth-limit\":\"^1.1.0\",\"graphql-query-complexity\":\"^0.7.0\",\"graphql-tag\":\"^2.10.1\",\"graphql-validation-complexity\":\"^0.4.2\",\"ioredis\":\"^4.14.1\",\"jsonwebtoken\":\"^8.5.1\",\"jwt-decode\":\"^3.0.0-beta.2\",\"knex\":\"^0.21.1\",\"koa\":\"^2.12.0\",\"koa-body\":\"^4.2.0\",\"koa-compose\":\"^4.1.0\",\"koa-compress\":\"^5.0.1\",\"koa-convert\":\"^1.2.0\",\"koa-cookies\":\"^2.0.4\",\"koa-error\":\"^3.2.0\",\"koa-favicon\":\"^2.1.0\",\"koa-helmet\":\"^5.2.0\",\"koa-lusca\":\"^2.2.0\",\"koa-passport\":\"^4.1.3\",\"koa-pino-logger\":\"^3.0.0\",\"koa-ratelimit\":\"^4.2.1\",\"koa-requestid\":\"^2.1.0\",\"koa-respond\":\"^2.1.0\",\"koa-response-time\":\"^2.1.0\",\"koa-session\":\"^6.0.0\",\"koa-static\":\"^5.0.0\",\"koa-useragent\":\"^4.0.0\",\"lodash\":\"^4.17.15\",\"moment\":\"^2.24.0\",\"objection\":\"^2.0.10\",\"passport-facebook\":\"^3.0.0\",\"passport-github\":\"^1.1.0\",\"passport-google-oauth20\":\"^2.0.0\",\"passport-jwt\":\"^4.0.0\",\"passport-linkedin-oauth2\":\"^2.0.0\",\"passport-local\":\"^1.0.0\",\"passport-twitter\":\"^1.0.4\",\"password-generator\":\"^2.2.3\",\"pg\":\"^8.3.0\",\"pino\":\"^6.3.2\",\"pluralize\":\"^8.0.0\",\"uniqid\":\"^5.2.0\",\"uuid\":\"^8.1.0\"},\"devDependencies\":{\"@babel/core\":\"^7.7.7\",\"@babel/plugin-proposal-class-properties\":\"^7.7.4\",\"@babel/plugin-proposal-decorators\":\"^7.7.4\",\"@babel/plugin-proposal-do-expressions\":\"^7.7.4\",\"@babel/plugin-proposal-private-methods\":\"^7.10.1\",\"@babel/plugin-syntax-dynamic-import\":\"^7.7.4\",\"@babel/plugin-syntax-jsx\":\"^7.7.4\",\"@babel/plugin-transform-runtime\":\"^7.7.6\",\"@babel/preset-env\":\"^7.7.7\",\"@babel/register\":\"^7.7.7\",\"babel-core\":\"^6.26.3\",\"babel-eslint\":\"^10.0.3\",\"babel-jest\":\"^26.3.0\",\"babel-plugin-bulk-import\":\"^2.0.0\",\"babel-plugin-root-import\":\"^6.4.1\",\"backpack-core\":\"^0.8.4\",\"eslint\":\"^7.7.0\",\"eslint-config-airbnb-base\":\"^14.0.0\",\"eslint-import-resolver-babel-plugin-root-import\":\"^1.1.1\",\"eslint-loader\":\"^4.0.2\",\"eslint-plugin-html\":\"^6.0.0\",\"eslint-plugin-import\":\"^2.19.1\",\"eslint-plugin-jest\":\"^24.0.0\",\"eslint-plugin-node\":\"^11.0.0\",\"eslint-plugin-security\":\"^1.4.0\",\"jest\":\"^26.4.2\",\"node-fetch\":\"^2.6.0\",\"pino-pretty\":\"^4.0.0\",\"prettier\":\"^2.0.5\",\"regenerator-runtime\":\"^0.13.3\",\"supertest\":\"^4.0.2\"},\"peerDependencies\":{\"objection\":\"^2.0.10\",\"pg\":\"^8.3.0\",\"pino\":\"^6.3.2\",\"pluralize\":\"^8.0.0\",\"uniqid\":\"^5.2.0\",\"uuid\":\"^8.1.0\"}}"); /***/ }), /***/ "./src/app/index.js": /*!**************************!*\ !*** ./src/app/index.js ***! \**************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty"); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var koa__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! koa */ "koa"); /* harmony import */ var koa__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(koa__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _middlewares__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../middlewares */ "./src/middlewares/index.js"); /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config */ "./src/config/index.js"); /* harmony import */ var _database___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../database/ */ "./src/database/index.js"); /* harmony import */ var _shared_logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../shared/logger */ "./src/shared/logger.js"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /* harmony default export */ __webpack_exports__["default"] = (({ config, knexConfig, middlewares, modules }) => { const app = new koa__WEBPACK_IMPORTED_MODULE_2___default.a(); const $config = Object(_config__WEBPACK_IMPORTED_MODULE_4__["default"])(config); const database = Object(_database___WEBPACK_IMPORTED_MODULE_5__["default"])({ config: $config, knexConfig }); const { port, host, isTest, isProduction, api } = $config; if (lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isEmpty(global.$logger)) { global.$logger = Object(_shared_logger__WEBPACK_IMPORTED_MODULE_6__["default"])($config); } const { httpServer, apolloServer } = Object(_middlewares__WEBPACK_IMPORTED_MODULE_3__["default"])({ app, config: $config, database, middlewares, modules }); app.start = (isReady = true) => { if (!isTest && (isReady || isProduction)) { (httpServer || app).listen({ port, host }, () => { const info = _objectSpread({ processId: process.pid }, api.rest ? { rest: api.rest.baseUrl } : null); if (apolloServer) { const { graphqlPath, subscriptionsPath } = apolloServer; Object.assign(info, { graphqlPath, subscriptionsPath }); } $logger.info(`Kako server is running at http://${host}:${port}.`); $logger.info(info); }).on('error', err => { $logger.error(err); }); } return app; }; return app; }); /***/ }), /***/ "./src/config/index.js": /*!*****************************!*\ !*** ./src/config/index.js ***! \*****************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty"); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /* harmony default export */ __webpack_exports__["default"] = ($config => { const { env } = process; const $env = { get currentEnv() { return env.NODE_ENV; }, get dbHostName() { return env.DB_HOSTNAME; }, get dbPort() { return env.DB_PORT; }, get dbName() { return env.DB_NAME; }, get dbUser() { return env.DB_USER; }, get dbPassword() { return env.DB_PASSWORD; }, get appKey() { return env.APP_KEY; }, get appSecret() { return env.APP_SECRET; }, get appSecrets() { return (env.APP_SECRETS || 'KEteWS74wV^xgOr$PF%DySCt||a1rPU1B!9taf6A^!g^Nf||BP6CQTr1C@8yr*Igwfgq').split('||'); }, get host() { return env.HOST || 'localhost'; }, get port() { return env.PORT || 9090; } }; return _objectSpread(_objectSpread({}, $env), $config); }); /***/ }), /***/ "./src/database/index.js": /*!*******************************!*\ !*** ./src/database/index.js ***! \*******************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty"); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var knex__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! knex */ "knex"); /* harmony import */ var knex__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(knex__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var objection__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! objection */ "objection"); /* harmony import */ var objection__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(objection__WEBPACK_IMPORTED_MODULE_3__); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /* harmony default export */ __webpack_exports__["default"] = (({ config, knexConfig }) => { const knex = knex__WEBPACK_IMPORTED_MODULE_2___default()(_objectSpread(_objectSpread({}, lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isFunction(knexConfig) ? knexConfig(config) : knexConfig), Object(objection__WEBPACK_IMPORTED_MODULE_3__["knexSnakeCaseMappers"])())); objection__WEBPACK_IMPORTED_MODULE_3__["Model"].knex(knex); return knex; }); /***/ }), /***/ "./src/index.js": /*!**********************!*\ !*** ./src/index.js ***! \**********************/ /*! exports provided: default, kako, KakoModel, KakoController, KakoRoute, loadServices, initLogger */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "kako", function() { return kako; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KakoModel", function() { return KakoModel; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KakoController", function() { return KakoController; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KakoRoute", function() { return KakoRoute; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadServices", function() { return loadServices; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "initLogger", function() { return initLogger; }); /* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app */ "./src/app/index.js"); /* harmony import */ var _modules_core_base_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/core/base/model */ "./src/modules/core/base/model.js"); /* harmony import */ var _modules_core_base_controller__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/core/base/controller */ "./src/modules/core/base/controller.js"); /* harmony import */ var _modules_core_base_route__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/core/base/route */ "./src/modules/core/base/route.js"); /* harmony import */ var _services__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./services */ "./src/services/index.js"); /* harmony import */ var _shared_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./shared/logger */ "./src/shared/logger.js"); /* harmony default export */ __webpack_exports__["default"] = (_app__WEBPACK_IMPORTED_MODULE_0__["default"]); const kako = _app__WEBPACK_IMPORTED_MODULE_0__["default"]; const KakoModel = _modules_core_base_model__WEBPACK_IMPORTED_MODULE_1__["default"]; const KakoController = _modules_core_base_controller__WEBPACK_IMPORTED_MODULE_2__["default"]; const KakoRoute = _modules_core_base_route__WEBPACK_IMPORTED_MODULE_3__["default"]; const loadServices = _services__WEBPACK_IMPORTED_MODULE_4__["default"]; const initLogger = _shared_logger__WEBPACK_IMPORTED_MODULE_5__["default"]; /***/ }), /***/ "./src/middlewares/all-default-options.js": /*!************************************************!*\ !*** ./src/middlewares/all-default-options.js ***! \************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony default export */ __webpack_exports__["default"] = ({ 'koa-response-time': { hrtime: true }, 'koa-body': { multipart: true }, 'koa-compress': zlib => ({ filter: contentType => /text/i.test(contentType), threshold: 2048, flush: zlib.Z_SYNC_FLUSH }), '@koa/cors': config => ({ origin: ctx => { const requestOrigin = ctx.accept.headers.origin; const { whitelist } = config.cors; if (!whitelist.includes(requestOrigin)) { ctx.forbidden(JSON.stringify(`${requestOrigin} is not a valid origin.`)); } return requestOrigin; }, maxAge: 86400, credentials: true, exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'], allowMethods: ['GET', 'POST', 'OPTIONS', 'HEAD'], allowHeaders: ['Content-Type', 'Authorization', 'Accept'], keepHeadersOnError: true }), 'koa-error': { accepts: ['json', 'text'] }, // , 'html', 'text' 'koa-requestid': { expose: 'X-Request-Id', header: 'X-Req-Id', query: 'request-id' }, 'koa-ratelimit': Redis => ({ db: new Redis(), duration: 60000, errorMessage: 'Rate limit exceeded. You seem to be doing that a bit too much.', id: ctx => ctx.ip, headers: { remaining: 'Rate-Limit-Remaining', reset: 'Rate-Limit-Reset', total: 'Rate-Limit-Total' }, max: 100, disableHeader: false }), 'koa-session': { key: 'kako:sess', /** (string) cookie key (default is koa:sess) */ /** (number || 'session') maxAge in ms (default is 1 days) */ /** 'session' will result in a cookie that expires when session/browser is closed */ /** Warning: If a session cookie is stolen, this cookie will never expire */ maxAge: 86400000, // don't autoCommit because we need to control when headers are send autoCommit: false, /** (boolean) automatically commit headers (default true) */ overwrite: true, /** (boolean) can overwrite or not (default true) */ httpOnly: true, /** (boolean) httpOnly or not (default true) */ signed: true, /** (boolean) signed or not (default true) */ rolling: false, /** (boolean) Force a session identifier cookie to be set on every response. * The expiration is reset to the original maxAge, resetting the expiration countdown. * (default is false) */ renew: true /** (boolean) renew session when session is nearly expired, so we can always * keep user logged in. (default is false) */ }, 'koa-helmet': {}, 'koa-lusca': config => ({ csrf: { key: 'csrf', header: 'X-CSRF-Token' }, csp: { policy: { 'default-src': "'self'", 'script-src': "'self' maps.googleapis.com google-analytics.com", 'img-src': "'self'", 'font-src': "'self'", 'media-src': "'self'", 'frame-src': "'self'", 'frame-ancestors': "'self'", 'style-src': "'self' 'unsafe-inline'", 'object-src': "'self'" /** * 'connect-src': * 'script-nonce': * 'plugin-types': * 'sandbox': * 'form-action': * 'reflected-xss': */ }, reportOnly: config.isDevelopment, reportUri: `https://${config.host}:${config.port}/csp/report` }, referrerPolicy: 'same-origin', p3p: 'Work Suspended', hsts: { maxAge: 31536000, includeSubDomains: true }, xssProtection: true }), 'koa-respond': {}, 'koa-passport': {} }); /***/ }), /***/ "./src/middlewares/bodyparser.js": /*!***************************************!*\ !*** ./src/middlewares/bodyparser.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_body__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-body */ "koa-body"); /* harmony import */ var koa_body__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_body__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_body__WEBPACK_IMPORTED_MODULE_0___default()(this.options)); }); /***/ }), /***/ "./src/middlewares/compress.js": /*!*************************************!*\ !*** ./src/middlewares/compress.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_compress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-compress */ "koa-compress"); /* harmony import */ var koa_compress__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_compress__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zlib */ "zlib"); /* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(zlib__WEBPACK_IMPORTED_MODULE_1__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_compress__WEBPACK_IMPORTED_MODULE_0___default()(this.options(zlib__WEBPACK_IMPORTED_MODULE_1___default.a))); }); /***/ }), /***/ "./src/middlewares/cors.js": /*!*********************************!*\ !*** ./src/middlewares/cors.js ***! \*********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _koa_cors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @koa/cors */ "@koa/cors"); /* harmony import */ var _koa_cors__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_koa_cors__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app, config }) { app.use(_koa_cors__WEBPACK_IMPORTED_MODULE_0___default()(this.options(config))); }); /***/ }), /***/ "./src/middlewares/dev-logger.js": /*!***************************************!*\ !*** ./src/middlewares/dev-logger.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! chalk */ "chalk"); /* harmony import */ var chalk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(chalk__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { const colorName = ({ statusCode }) => { if (statusCode < 300) { return 'green'; } if (statusCode < 400) { return 'yellow'; } if (statusCode < 500) { return 'red'; } if (statusCode >= 500) { return 'bgRedBright'; } return 'blue'; }; app.use(async (ctx, next) => { try { const start = Date.now(); await next(); const ms = Date.now() - start; const statusCode = `[${ctx.res.statusCode}]`; $logger.info(`${chalk__WEBPACK_IMPORTED_MODULE_0___default.a[colorName(ctx.res)](statusCode)} ${chalk__WEBPACK_IMPORTED_MODULE_0___default.a.blue(ctx.method)} ${ctx.url} - ${ms}ms`); } catch (err) { $logger.error(err); throw err; } }); }); /***/ }), /***/ "./src/middlewares/error.js": /*!**********************************!*\ !*** ./src/middlewares/error.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-error */ "koa-error"); /* harmony import */ var koa_error__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_error__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_error__WEBPACK_IMPORTED_MODULE_0___default()(this.options)); }); /***/ }), /***/ "./src/middlewares/graphql-api.js": /*!****************************************!*\ !*** ./src/middlewares/graphql-api.js ***! \****************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty"); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /* eslint-disable global-require */ /* harmony default export */ __webpack_exports__["default"] = (function (payload) { const { ApolloServer, defaultPlaygroundOptions } = __webpack_require__(/*! apollo-server-koa */ "apollo-server-koa"); const { createServer } = __webpack_require__(/*! http */ "http"); const schemas = __webpack_require__(/*! ../modules/core/api/graphql */ "./src/modules/core/api/graphql/index.js").default; const contextFn = __webpack_require__(/*! ../modules/core/api/graphql/context.js */ "./src/modules/core/api/graphql/context.js").default; const { app, config } = payload; // , database const { api, isDevelopment } = config; const { graphql } = api; const { typeDefs, resolvers, subscriptions, resolverValidationOptions, schemaDirectives, validationRules, loaders } = schemas(payload); const playgroundOptions = { settings: _objectSpread(_objectSpread({}, defaultPlaygroundOptions.settings), {}, { 'request.credentials': 'same-origin' }) }; const apolloServer = new ApolloServer({ typeDefs, resolvers, subscriptions, schemaDirectives, resolverValidationOptions, validationRules, introspection: isDevelopment, playground: isDevelopment ? playgroundOptions : false, debug: isDevelopment, context: contextFn(config, loaders) }); apolloServer.applyMiddleware({ app, path: graphql.baseUrl, cors: false, bodyParserConfig: false /* , disableHealthCheck: true, onHealthCheck: ctx => { console.log(ctx) } */ }); const httpServer = createServer(app.callback()); apolloServer.installSubscriptionHandlers(httpServer); return { httpServer, apolloServer }; }); /***/ }), /***/ "./src/middlewares/helmet.js": /*!***********************************!*\ !*** ./src/middlewares/helmet.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_helmet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-helmet */ "koa-helmet"); /* harmony import */ var koa_helmet__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_helmet__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_helmet__WEBPACK_IMPORTED_MODULE_0___default()(this.options)); }); /***/ }), /***/ "./src/middlewares/index.js": /*!**********************************!*\ !*** ./src/middlewares/index.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty"); /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ "lodash"); /* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./session */ "./src/middlewares/session.js"); /* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./logger */ "./src/middlewares/logger.js"); /* harmony import */ var _dev_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dev-logger */ "./src/middlewares/dev-logger.js"); /* harmony import */ var _response_time__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./response-time */ "./src/middlewares/response-time.js"); /* harmony import */ var _cors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cors */ "./src/middlewares/cors.js"); /* harmony import */ var _helmet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./helmet */ "./src/middlewares/helmet.js"); /* harmony import */ var _lusca__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lusca */ "./src/middlewares/lusca.js"); /* harmony import */ var _ratelimit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ratelimit */ "./src/middlewares/ratelimit.js"); /* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./error */ "./src/middlewares/error.js"); /* harmony import */ var _response__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./response */ "./src/middlewares/response.js"); /* harmony import */ var _user_agent__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./user-agent */ "./src/middlewares/user-agent.js"); /* harmony import */ var _bodyparser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./bodyparser */ "./src/middlewares/bodyparser.js"); /* harmony import */ var _passport__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./passport */ "./src/middlewares/passport.js"); /* harmony import */ var _route_guard__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./route-guard */ "./src/middlewares/route-guard.js"); /* harmony import */ var _compress__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./compress */ "./src/middlewares/compress.js"); /* harmony import */ var _request_id__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./request-id */ "./src/middlewares/request-id.js"); /* harmony import */ var _rest_api__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./rest-api */ "./src/middlewares/rest-api.js"); /* harmony import */ var _graphql_api__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./graphql-api */ "./src/middlewares/graphql-api.js"); /* harmony import */ var _all_default_options__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./all-default-options */ "./src/middlewares/all-default-options.js"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /* eslint-disable object-curly-newline */ /* harmony default export */ __webpack_exports__["default"] = (payload => { const { app, config, database, middlewares } = payload; const { api, isDevelopment, isProduction } = config; const { rest, graphql } = api; const buildInMiddlewares = [{ name: 'koa-response-time', middleware: _response_time__WEBPACK_IMPORTED_MODULE_5__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-response-time'] }, { name: 'koa-error', middleware: _error__WEBPACK_IMPORTED_MODULE_10__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-error'] }, { name: 'koa-requestid', middleware: _request_id__WEBPACK_IMPORTED_MODULE_17__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-requestid'] }, { name: 'kako-dev-logger', middleware: _dev_logger__WEBPACK_IMPORTED_MODULE_4__["default"], disable: !isDevelopment }, { name: 'kako-prod-logger', middleware: _logger__WEBPACK_IMPORTED_MODULE_3__["default"], disable: !isProduction }, { name: 'koa-ratelimit', middleware: _ratelimit__WEBPACK_IMPORTED_MODULE_9__["default"], disable: false, options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-ratelimit'] }, { name: '@koa/cors', middleware: _cors__WEBPACK_IMPORTED_MODULE_6__["default"], disable: !isDevelopment, options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['@koa/cors'] }, { name: 'koa-session', middleware: _session__WEBPACK_IMPORTED_MODULE_2__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-session'] }, { name: 'koa-helmet', middleware: _helmet__WEBPACK_IMPORTED_MODULE_7__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-helmet'] }, { name: 'koa-lusca', middleware: _lusca__WEBPACK_IMPORTED_MODULE_8__["default"], disable: true, options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-lusca'] }, { name: 'koa-compress', middleware: _compress__WEBPACK_IMPORTED_MODULE_16__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-compress'] }, { name: 'koa-body', middleware: _bodyparser__WEBPACK_IMPORTED_MODULE_13__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-body'] }, { name: 'koa-respond', middleware: _response__WEBPACK_IMPORTED_MODULE_11__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-respond'] }, { name: 'koa-useragent', middleware: _user_agent__WEBPACK_IMPORTED_MODULE_12__["default"] }, { name: 'koa-passport', middleware: _passport__WEBPACK_IMPORTED_MODULE_14__["default"], options: _all_default_options__WEBPACK_IMPORTED_MODULE_20__["default"]['koa-passport'] }, { name: 'kako-route-guard', middleware: _route_guard__WEBPACK_IMPORTED_MODULE_15__["default"] }, { name: 'kako-rest', middleware: _rest_api__WEBPACK_IMPORTED_MODULE_18__["default"], disable: lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isEmpty(rest) || rest === false }, { name: 'kako-graphql', middleware: _graphql_api__WEBPACK_IMPORTED_MODULE_19__["default"], disable: lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isEmpty(graphql) || graphql === false }]; const isActive = mw => { if (!lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isEmpty(mw)) { return lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isFunction(mw.disable) ? !mw.disable(mw, config) : !(mw.disable || false); } return false; }; const $middlewares = lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isFunction(middlewares) ? middlewares({ middlewares: buildInMiddlewares, config, database }) : [...buildInMiddlewares, ...middlewares]; const returns = {}; $middlewares.map(mw => lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isFunction(mw) ? { name: mw.name || 'anonymous', middleware: mw } : mw).filter(mw => isActive(mw)).forEach(mw => { const mwFn = mw.middleware.bind(mw); if (lodash__WEBPACK_IMPORTED_MODULE_1___default.a.isFunction(mwFn)) { const rtn = mwFn(lodash__WEBPACK_IMPORTED_MODULE_1___default.a.omit(payload, ['middlewares'])); if (rtn) { const { httpServer, apolloServer } = rtn; if (httpServer) Object.assign(returns, { httpServer }); if (apolloServer) Object.assign(returns, { apolloServer }); } } else { $logger.error('Middleware should be function.', mwFn); } }); return _objectSpread({ app }, returns); }); /***/ }), /***/ "./src/middlewares/logger.js": /*!***********************************!*\ !*** ./src/middlewares/logger.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_pino_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-pino-logger */ "koa-pino-logger"); /* harmony import */ var koa_pino_logger__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_pino_logger__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (({ app }) => { app.silent = false; app.use(koa_pino_logger__WEBPACK_IMPORTED_MODULE_0___default()({ logger: global.$logger })); }); /***/ }), /***/ "./src/middlewares/lusca.js": /*!**********************************!*\ !*** ./src/middlewares/lusca.js ***! \**********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_lusca__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-lusca */ "koa-lusca"); /* harmony import */ var koa_lusca__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_lusca__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var koa_convert__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! koa-convert */ "koa-convert"); /* harmony import */ var koa_convert__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(koa_convert__WEBPACK_IMPORTED_MODULE_1__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app, config }) { app.use(koa_convert__WEBPACK_IMPORTED_MODULE_1___default()(koa_lusca__WEBPACK_IMPORTED_MODULE_0___default()(this.options(config)))); }); // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/img-src /***/ }), /***/ "./src/middlewares/passport.js": /*!*************************************!*\ !*** ./src/middlewares/passport.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_passport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-passport */ "koa-passport"); /* harmony import */ var koa_passport__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_passport__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app, config, database }) { const { authentication } = config; const { userTable, strategies } = authentication; koa_passport__WEBPACK_IMPORTED_MODULE_0___default.a.serializeUser((user, done) => { done(null, user.id); }); koa_passport__WEBPACK_IMPORTED_MODULE_0___default.a.deserializeUser(async (id, done) => { try { const user = await database(userTable || 'users').where({ id }).first(); done(null, user); } catch (err) { $logger.error(err); done(err); } }); strategies.forEach(strategy => { try { if (authentication[strategy.toString()]) { // eslint-disable-next-line const initStrategy = __webpack_require__("./src/modules/auth/passport/strategies sync recursive ^\\.\\/passport\\-.*$")(`./passport-${strategy}`).default; initStrategy({ passport: (koa_passport__WEBPACK_IMPORTED_MODULE_0___default()), config, database }); } else { $logger.error(`Passport strategy (${strategy}) is not implemented yet.`); } } catch (err) { $logger.error(err); } }); app.use(koa_passport__WEBPACK_IMPORTED_MODULE_0___default.a.initialize()); app.use(koa_passport__WEBPACK_IMPORTED_MODULE_0___default.a.session()); }); /***/ }), /***/ "./src/middlewares/ratelimit.js": /*!**************************************!*\ !*** ./src/middlewares/ratelimit.js ***! \**************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_ratelimit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-ratelimit */ "koa-ratelimit"); /* harmony import */ var koa_ratelimit__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_ratelimit__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ioredis */ "ioredis"); /* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(ioredis__WEBPACK_IMPORTED_MODULE_1__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_ratelimit__WEBPACK_IMPORTED_MODULE_0___default()(this.options(ioredis__WEBPACK_IMPORTED_MODULE_1___default.a))); }); /***/ }), /***/ "./src/middlewares/request-id.js": /*!***************************************!*\ !*** ./src/middlewares/request-id.js ***! \***************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_requestid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-requestid */ "koa-requestid"); /* harmony import */ var koa_requestid__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_requestid__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_requestid__WEBPACK_IMPORTED_MODULE_0___default()(this.options)); }); /***/ }), /***/ "./src/middlewares/response-time.js": /*!******************************************!*\ !*** ./src/middlewares/response-time.js ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_response_time__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! koa-response-time */ "koa-response-time"); /* harmony import */ var koa_response_time__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(koa_response_time__WEBPACK_IMPORTED_MODULE_0__); /* harmony default export */ __webpack_exports__["default"] = (function ({ app }) { app.use(koa_response_time__WEBPACK_IMPORTED_MODULE_0___default()(this.options)); }); /***/ }), /***/ "./src/middlewares/response.js": /*!*************************************!*\ !*** ./src/middlewares/response.js ***! \*************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var koa_respond__WEBPACK_IMPORTED_MODULE_0