kakojs
Version:
Lightweight nodejs base minimalist framework to make api easy.
1,120 lines (940 loc) • 216 kB
JavaScript
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