miolo 0.9.17 → 0.9.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/miolo.cli.iife.bundle.js +1 -1
- package/dist/cli/miolo.cli.iife.bundle.min.js +1 -1
- package/dist/cli/miolo.cli.iife.js +1 -1
- package/dist/cli/miolo.cli.iife.min.js +1 -1
- package/dist/cli/miolo.cli.min.mjs +1 -1
- package/dist/cli/miolo.cli.mjs +1 -1
- package/dist/cli/miolo.cli.umd.bundle.js +1 -1
- package/dist/cli/miolo.cli.umd.bundle.min.js +1 -1
- package/dist/cli/miolo.cli.umd.js +1 -1
- package/dist/cli/miolo.cli.umd.min.js +1 -1
- package/dist/cli-react/miolo.cli-react.iife.bundle.js +1 -1
- package/dist/cli-react/miolo.cli-react.iife.bundle.min.js +1 -1
- package/dist/cli-react/miolo.cli-react.iife.js +1 -1
- package/dist/cli-react/miolo.cli-react.iife.min.js +1 -1
- package/dist/cli-react/miolo.cli-react.min.mjs +1 -1
- package/dist/cli-react/miolo.cli-react.mjs +1 -1
- package/dist/cli-react/miolo.cli-react.umd.bundle.js +1 -1
- package/dist/cli-react/miolo.cli-react.umd.bundle.min.js +1 -1
- package/dist/cli-react/miolo.cli-react.umd.js +1 -1
- package/dist/cli-react/miolo.cli-react.umd.min.js +1 -1
- package/dist/server/miolo.server.cjs +59 -42
- package/dist/server/miolo.server.min.mjs +2 -2
- package/dist/server/miolo.server.mjs +62 -52
- package/dist/server/miolo.server.mjs.map +1 -1
- package/dist/server/miolo.server.node.mjs +59 -42
- package/package.json +1 -1
package/dist/cli/miolo.cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* miolo v0.9.
|
|
2
|
+
* miolo v0.9.18
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Donato Lorenzo <donato@afialapis.com>
|
|
5
5
|
*
|
|
@@ -1966,39 +1966,40 @@ function attachCrudRoutes(connection, router, crudConfigs, logger) {
|
|
|
1966
1966
|
}();
|
|
1967
1967
|
var _crud_callback = /*#__PURE__*/function () {
|
|
1968
1968
|
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(ctx, op, callback) {
|
|
1969
|
-
var _ctx$session2;
|
|
1970
|
-
var authenticated, goon, uid, fieldNames, uinfo, result;
|
|
1969
|
+
var result, _ctx$session2, authenticated, goon, uid, fieldNames, uinfo;
|
|
1971
1970
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
1972
1971
|
while (1) switch (_context2.prev = _context2.next) {
|
|
1973
1972
|
case 0:
|
|
1974
|
-
|
|
1973
|
+
result = {};
|
|
1974
|
+
_context2.prev = 1;
|
|
1975
|
+
_context2.next = 4;
|
|
1975
1976
|
return _crud_auth_callback(ctx, op);
|
|
1976
|
-
case
|
|
1977
|
+
case 4:
|
|
1977
1978
|
authenticated = _context2.sent;
|
|
1978
1979
|
if (authenticated) {
|
|
1979
|
-
_context2.next =
|
|
1980
|
+
_context2.next = 8;
|
|
1980
1981
|
break;
|
|
1981
1982
|
}
|
|
1982
1983
|
ctx.body = {};
|
|
1983
1984
|
return _context2.abrupt("return");
|
|
1984
|
-
case
|
|
1985
|
+
case 8:
|
|
1985
1986
|
goon = true;
|
|
1986
1987
|
if (!(route != null && route.before)) {
|
|
1987
|
-
_context2.next =
|
|
1988
|
+
_context2.next = 13;
|
|
1988
1989
|
break;
|
|
1989
1990
|
}
|
|
1990
|
-
_context2.next =
|
|
1991
|
+
_context2.next = 12;
|
|
1991
1992
|
return route.before(ctx);
|
|
1992
|
-
case
|
|
1993
|
+
case 12:
|
|
1993
1994
|
goon = _context2.sent;
|
|
1994
|
-
case
|
|
1995
|
+
case 13:
|
|
1995
1996
|
if (goon) {
|
|
1996
|
-
_context2.next =
|
|
1997
|
+
_context2.next = 16;
|
|
1997
1998
|
break;
|
|
1998
1999
|
}
|
|
1999
2000
|
ctx.body = {};
|
|
2000
2001
|
return _context2.abrupt("return");
|
|
2001
|
-
case
|
|
2002
|
+
case 16:
|
|
2002
2003
|
uid = ctx == null || (_ctx$session2 = ctx.session) == null || (_ctx$session2 = _ctx$session2.user) == null ? void 0 : _ctx$session2.id;
|
|
2003
2004
|
fieldNames = {};
|
|
2004
2005
|
if (route.useUserFields.use === true) {
|
|
@@ -2008,26 +2009,34 @@ function attachCrudRoutes(connection, router, crudConfigs, logger) {
|
|
|
2008
2009
|
uid: uid,
|
|
2009
2010
|
fieldNames: fieldNames
|
|
2010
2011
|
};
|
|
2011
|
-
_context2.next =
|
|
2012
|
+
_context2.next = 22;
|
|
2012
2013
|
return callback(uinfo);
|
|
2013
|
-
case
|
|
2014
|
+
case 22:
|
|
2014
2015
|
result = _context2.sent;
|
|
2015
2016
|
if (!(route != null && route.after)) {
|
|
2016
|
-
_context2.next =
|
|
2017
|
+
_context2.next = 27;
|
|
2017
2018
|
break;
|
|
2018
2019
|
}
|
|
2019
|
-
_context2.next =
|
|
2020
|
+
_context2.next = 26;
|
|
2020
2021
|
return route.after(ctx, result);
|
|
2021
|
-
case
|
|
2022
|
+
case 26:
|
|
2022
2023
|
result = _context2.sent;
|
|
2023
|
-
case
|
|
2024
|
+
case 27:
|
|
2025
|
+
_context2.next = 33;
|
|
2026
|
+
break;
|
|
2027
|
+
case 29:
|
|
2028
|
+
_context2.prev = 29;
|
|
2029
|
+
_context2.t0 = _context2["catch"](1);
|
|
2030
|
+
logger.error("[miolo-router] Unexpected error on CRUD " + route.name + "-" + op);
|
|
2031
|
+
logger.error(_context2.t0);
|
|
2032
|
+
case 33:
|
|
2024
2033
|
result = _pack_body_field(result);
|
|
2025
2034
|
ctx.body = result;
|
|
2026
|
-
case
|
|
2035
|
+
case 35:
|
|
2027
2036
|
case "end":
|
|
2028
2037
|
return _context2.stop();
|
|
2029
2038
|
}
|
|
2030
|
-
}, _callee2);
|
|
2039
|
+
}, _callee2, null, [[1, 29]]);
|
|
2031
2040
|
}));
|
|
2032
2041
|
return function _crud_callback(_x3, _x4, _x5) {
|
|
2033
2042
|
return _ref3.apply(this, arguments);
|
|
@@ -2496,10 +2505,12 @@ function attachQueriesRoutes(router, queriesConfigs, logger) {
|
|
|
2496
2505
|
}();
|
|
2497
2506
|
var _route_callback = /*#__PURE__*/function () {
|
|
2498
2507
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(ctx) {
|
|
2499
|
-
var _ctx$request, fields, authenticated, goon
|
|
2508
|
+
var result, _ctx$request, fields, authenticated, goon;
|
|
2500
2509
|
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
2501
2510
|
while (1) switch (_context2.prev = _context2.next) {
|
|
2502
2511
|
case 0:
|
|
2512
|
+
result = {};
|
|
2513
|
+
_context2.prev = 1;
|
|
2503
2514
|
try {
|
|
2504
2515
|
if (route.method == 'GET' && !((_ctx$request = ctx.request) != null && _ctx$request.fields)) {
|
|
2505
2516
|
if (ctx.request.url.indexOf('?') > 0) {
|
|
@@ -2512,51 +2523,59 @@ function attachQueriesRoutes(router, queriesConfigs, logger) {
|
|
|
2512
2523
|
} catch (e) {
|
|
2513
2524
|
logger.error("[miolo-router] Error while trying to qet query params for " + ctx.request.url);
|
|
2514
2525
|
}
|
|
2515
|
-
_context2.next =
|
|
2526
|
+
_context2.next = 5;
|
|
2516
2527
|
return _route_auth_callback(ctx);
|
|
2517
|
-
case
|
|
2528
|
+
case 5:
|
|
2518
2529
|
authenticated = _context2.sent;
|
|
2519
2530
|
if (authenticated) {
|
|
2520
|
-
_context2.next =
|
|
2531
|
+
_context2.next = 8;
|
|
2521
2532
|
break;
|
|
2522
2533
|
}
|
|
2523
2534
|
return _context2.abrupt("return");
|
|
2524
|
-
case
|
|
2535
|
+
case 8:
|
|
2525
2536
|
goon = true;
|
|
2526
2537
|
if (!(route != null && route.before)) {
|
|
2527
|
-
_context2.next =
|
|
2538
|
+
_context2.next = 13;
|
|
2528
2539
|
break;
|
|
2529
2540
|
}
|
|
2530
|
-
_context2.next =
|
|
2541
|
+
_context2.next = 12;
|
|
2531
2542
|
return route.before(ctx);
|
|
2532
|
-
case
|
|
2543
|
+
case 12:
|
|
2533
2544
|
goon = _context2.sent;
|
|
2534
|
-
case
|
|
2545
|
+
case 13:
|
|
2535
2546
|
if (goon) {
|
|
2536
|
-
_context2.next =
|
|
2547
|
+
_context2.next = 15;
|
|
2537
2548
|
break;
|
|
2538
2549
|
}
|
|
2539
2550
|
return _context2.abrupt("return");
|
|
2540
|
-
case 13:
|
|
2541
|
-
_context2.next = 15;
|
|
2542
|
-
return route.callback(ctx);
|
|
2543
2551
|
case 15:
|
|
2552
|
+
_context2.next = 17;
|
|
2553
|
+
return route.callback(ctx);
|
|
2554
|
+
case 17:
|
|
2544
2555
|
result = _context2.sent;
|
|
2545
2556
|
if (!(route != null && route.after)) {
|
|
2546
|
-
_context2.next =
|
|
2557
|
+
_context2.next = 22;
|
|
2547
2558
|
break;
|
|
2548
2559
|
}
|
|
2549
|
-
_context2.next =
|
|
2560
|
+
_context2.next = 21;
|
|
2550
2561
|
return route.after(ctx, result);
|
|
2551
|
-
case
|
|
2562
|
+
case 21:
|
|
2552
2563
|
result = _context2.sent;
|
|
2553
|
-
case
|
|
2564
|
+
case 22:
|
|
2565
|
+
_context2.next = 28;
|
|
2566
|
+
break;
|
|
2567
|
+
case 24:
|
|
2568
|
+
_context2.prev = 24;
|
|
2569
|
+
_context2.t0 = _context2["catch"](1);
|
|
2570
|
+
logger.error("[miolo-router] Unexpected error on Query " + route.name);
|
|
2571
|
+
logger.error(_context2.t0);
|
|
2572
|
+
case 28:
|
|
2554
2573
|
return _context2.abrupt("return", result);
|
|
2555
|
-
case
|
|
2574
|
+
case 29:
|
|
2556
2575
|
case "end":
|
|
2557
2576
|
return _context2.stop();
|
|
2558
2577
|
}
|
|
2559
|
-
}, _callee2);
|
|
2578
|
+
}, _callee2, null, [[1, 24]]);
|
|
2560
2579
|
}));
|
|
2561
2580
|
return function _route_callback(_x2) {
|
|
2562
2581
|
return _ref2.apply(this, arguments);
|
|
@@ -2741,7 +2760,6 @@ function init_cron_job(miolo, config) {
|
|
|
2741
2760
|
(config == null ? void 0 : config.cronTime) || '*/5 * * * *',
|
|
2742
2761
|
// onTick(miolo, onComplete)
|
|
2743
2762
|
function (onComplete) {
|
|
2744
|
-
console.log(name + ".onTick");
|
|
2745
2763
|
try {
|
|
2746
2764
|
logger.silly("[SERVER][Custom Job " + tinguir.cyan(name) + "] " + tinguir.green_bold('ticks!'));
|
|
2747
2765
|
config.onTick(miolo, onComplete);
|
|
@@ -2752,7 +2770,6 @@ function init_cron_job(miolo, config) {
|
|
|
2752
2770
|
},
|
|
2753
2771
|
// onComplete(miolo)
|
|
2754
2772
|
function () {
|
|
2755
|
-
console.log(name + ".onComplete");
|
|
2756
2773
|
logger.silly("[SERVER][Custom Job " + tinguir.cyan(name) + "] " + tinguir.green_bold('completed!'));
|
|
2757
2774
|
if (config != null && config.onComplete) {
|
|
2758
2775
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* miolo v0.9.
|
|
2
|
+
* miolo v0.9.18
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Donato Lorenzo <donato@afialapis.com>
|
|
5
5
|
*
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
import e from"node:http";import r from"koa";import{createHttpTerminator as t}from"http-terminator";import o from"deepmerge";import n from"node:path";import{fileURLToPath as i}from"node:url";import{getConnection as a}from"calustra";export{getConnection as miolo_db_connection}from"calustra";import l from"nodemailer";import{uncolor as u,gray as c,magenta as s,cyan as d,yellow as f,red_light as p,red as m,cyan_light as v,green as h,blue as y,green_bold as g,yellow_bold as b}from"tinguir";import S,{promisify as E}from"node:util";import _,{transports as x,createLogger as w,format as k}from"winston";import R from"koa-better-body";import O from"koa-convert";import q from"koa-compress";import{constants as C}from"node:zlib";import M from"koa-mount";import j from"koa-static";import J from"koa-favicon";import{performance as T}from"node:perf_hooks";import A from"@koa/router";import{readFileSync as L}from"node:fs";import N from"jwt-simple";import P from"koa-passport";import U from"passport-local";import F from"koa-session";import V from"koa-redis";import B from"@koa/cors";import I from"koa-proxies";import z from"qs";import{renderToString as D}from"react-dom/server";import{CronJob as G}from"cron";import W from"node:os";import Y from"diskspace";import K from"redis";function H(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function X(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?H(Object(t),!0).forEach((function(r){$(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):H(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function Z(e,r,t,o,n,i,a){try{var l=e[i](a),u=l.value}catch(c){return void t(c)}l.done?r(u):Promise.resolve(u).then(o,n)}function Q(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){Z(i,o,n,a,l,"next",e)}function l(e){Z(i,o,n,a,l,"throw",e)}a(void 0)}))}}function $(e,r,t){return(r=function(e){var r=function(e,r){if("object"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:String(r)}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var ee=i(import.meta.url),re=n.dirname(ee),te={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:n.resolve(re,"../static/img/miolo.ico"),folders:{}},cors:!1,proxy:!1},session:{salt:"SUPER_SALTY_YES?",secret:"SUPER_SECRET_KEY_KERE",options:{maxAge:864e5,secure:!0,sameSite:null}},db:{config:{dialect:"postgres",host:"localhost",port:5432,database:"miolo",user:"postgres",password:"postgres",max:5,min:0,idleTimeoutMillis:1e4},options:{log:"silly",tables:[]}},routes:{bodyField:void 0,crud:[{prefix:"",routes:[]}],queries:[]},log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/miolo.log"},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},mail:{silent:!0,options:{port:25,host:"mail.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},auth:{},render:{},middlewares:[],cron:[]};function oe(e){var{options:r,defaults:t,silent:o}=e,n=l.createTransport(r,t);function i(){return(i=Q((function*(e){if(!0===o)return console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************"),{ok:!0,silent:!0,error:void 0,messageId:void 0};try{var r=n.sendMail(e);return r.ok=!(null==r||!r.messageId),r}catch(t){return{error:t,ok:!1}}}))).apply(this,arguments)}var a={send:function(e){return i.apply(this,arguments)},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),n.verify((function(e,r){e?(console.error("[miolo][Verify][MAILER] Verifying ERROR"),console.error(e)):console.info("[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages")}))},options:r,defaults:t,silent:o};return a}var{combine:ne,timestamp:ie,_label:ae,printf:le,errors:ue}=k,ce=(e,r)=>{var t,o,n={silly:c,debug:s,verbose:d,info:f,warn:p,error:m},i={silly:"sly",debug:"dbg",verbose:"vbs",info:"inf",warn:"wrn",error:"err"},a=le((r=>{var t,o=n[r.level],a=new Date(r.timestamp).toLocaleString((null==e||null===(t=e.format)||void 0===t?void 0:t.locale)||"en"),l="[miolo] ".concat(o(a)," ").concat(o(i[r.level])," ").concat(r.message);return r.stack?"".concat(l,"\n").concat(r.stack):l})),l=[];e.console.enabled&&l.push(new x.Console({humanReadableUnhandledException:!0,level:(null==e||null===(t=e.console)||void 0===t?void 0:t.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));e.file.enabled&&l.push(new x.File({filename:e.file.filename,level:(null==e||null===(o=e.file)||void 0===o?void 0:o.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var v=function(e,r){var t=function(t){_.Transport.call(this,t),t=t||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||r.defaults.name,this.to=e.to||r.defaults.to,this.from=e.from||r.defaults.from,this.humanReadableUnhandledException=t.humanReadableUnhandledException||!0,this.handleExceptions=t.handleExceptions||!0,this.json=t.json||!1,this.colorize=t.colorize||!1};return S.inherits(t,_.Transport),t.prototype.name="MailerLogger",t.prototype.log=function(t,o){var n=this,i="";try{i=t.message.split("\n")[0]}catch(c){i=t.message.toString()}i=u(i);var a=e.name+": ["+t.level.toUpperCase()+"] "+i,l={from:this.from,to:this.to,subject:a,text:u(t.message)};r.send(l,(function(){n.emit("logged"),o(null,!0)}))},t}(e.mail,r);x.MailerLogger=v,l.push(new x.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return w({level:(null==e?void 0:e.level)||"silly",format:ne(ue({stack:!0}),ie(),a),transports:l})},se=(e,r)=>{var t=oe(r.mail),o=ce(r.log,t),n=X(X({},r.db.options),{},{log:o}),i={getConnection:()=>a(r.db.config,n),getModel:e=>a(r.db.config,n).getModel(e)},l={config:X({},r),emailer:t,logger:o,db:i};function u(){return(u=Q((function*(e,r){e.miolo=l,yield r()}))).apply(this,arguments)}e.use((function(e,r){return u.apply(this,arguments)})),e.context.miolo=l},de=[401];var fe=i(import.meta.url),pe=n.dirname(fe),me=n.resolve(pe,"./miolo.ico"),ve=n.resolve(pe,"../../../.."),he={total:0};var ye=i(import.meta.url),ge=n.dirname(ye),be=L(n.resolve(ge,"./robots.txt"),"utf8");var Se=(e,r,t)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=r;if(null!=e)return e(t||{})}catch(n){}return function(e,r){var t=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="miolo_unsafe_secret",r.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:t};return N.encode(n,o)}(t||{},o)};function i(){return i=Q((function*(e,r){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var a=function(e){var r,t=null==e||null===(r=e.options)||void 0===r?void 0:r.maxAge;isNaN(t)&&(t=86400);var o=new Date;return o.setSeconds(o.getSeconds()+t),{expires:o,httpOnly:!1}}(t);e.cookies.set("token",i,a),e.session={user:{name:"guest"},authenticated:!0,token:i},yield r()})),i.apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))},Ee=(e,r)=>{var{auth_user:t,realm:o,paths:n}=r;function i(e,r){return a.apply(this,arguments)}function a(){return(a=Q((function*(r,n){var i;try{i=(e=>{var r,t=null==e||null===(r=e.headers)||void 0===r?void 0:r.authorization;if(t)try{t=t.replace("Basic ","");try{t=Buffer.from(t,"base64").toString()}catch(i){t=atob(t)}var[o,n]=t.split(":");return{username:o,password:n}}catch(i){return}})(r.request)}catch(u){}var a=()=>{r.session={user:void 0,authenticated:!1},r.body={user:void 0,authenticated:!1},r.response.status=401,r.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return a();var l=yield t(i.username,i.password,e.context.miolo);if(!1===l||null==l)return a();r.session={user:l,authenticated:!0},yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((r=>e.use(M(r,i))))},_e=new V;var xe=(e,r,t)=>r(null,e.id),we=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},ke=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Re=(e,r,t)=>{var{get_user_id:o,find_user_by_id:n,local_auth_user:i,url_login:a,url_logout:l,url_login_redirect:u,url_logout_redirect:c}=r,s=o||xe,d=n||we,f=i||ke,p=a||"/login",m=l||"/logout",v=new U.Strategy(((r,t,o)=>{f(r,t,o,e.context.miolo)}));function h(){return(h=Q((function*(e,r){try{e.session.authenticated&&(e.session.user=e.state.user)}catch(t){}yield r()}))).apply(this,arguments)}!function(e,r){e.keys=[r.secret||"*secret*"];var t=X({store:_e},r.options||{});e.use(F(t,e))}(e,t),P.serializeUser(((r,t)=>{process.nextTick((function(){s(r,t,e.context.miolo)}))})),P.deserializeUser(((r,t)=>{process.nextTick((function(){d(r,t,e.context.miolo)}))})),P.use(v),e.use(P.initialize()),e.use(P.session()),e.use((function(e,r){return h.apply(this,arguments)}));var y=function(){var e=Q((function*(e,r){e.session.authenticated?(e.session.user=void 0,e.session.authenticated=!1,yield e.logout(),e.body={user:void 0,authenticated:!1},null!=c&&e.redirect(c)):(e.body={user:void 0,authenticated:!1},e.response.status=401)}));return function(r,t){return e.apply(this,arguments)}}(),g=new A;g.post(p,((e,r)=>P.authenticate("local",function(){var r=Q((function*(r,t,o,n){if(!1!==t)return e.session.user=e.state.user,e.session.authenticated=!0,e.body={user:t,authenticated:!0},null!=u&&e.redirect(u),yield e.login(t);e.session.user=void 0,e.session.authenticated=!1,e.body={user:void 0,authenticated:!1,info:o,error:r},e.response.status=401}));return function(e,t,o,n){return r.apply(this,arguments)}}())(e))),g.get(m,y),g.post(m,y),e.use(g.routes())},Oe=(e,r)=>{null!=r&&0!=r.length&&r.map((r=>{function t(){return(t=Q((function*(e,t){yield r(e),yield t()}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}))},qe=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Ce=(e,r)=>{var t=e.context.miolo.logger;qe(r,"cors",(r=>{if("simple"==r)t.debug("Setting CORS the simple way"),e.use(function(){var e=Q((function*(e,r){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield r()}));return function(r,t){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(r);t.debug("Setting CORS headers for ".concat(JSON.stringify(o))),e.use(B(o))}})),qe(r,"proxy",(r=>{var[o,n]=(e=>{var r,t,o,n;return null==e&&(e={}),[(null===(r=e)||void 0===r?void 0:r.path)||"/",{target:(null===(t=e)||void 0===t?void 0:t.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(r);t.debug("Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(I(o,n))}))},Me=function(){var e=Q((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),je=function(){var e=Q((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Je={require:!1,action:"redirect",redirect_url:"/",error_code:401},Te={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},Ae=e=>{var r=(null==e?void 0:e.crud)||[];if(!r)return[];if(!Array.isArray(r))return[];var t=[];return r.map((r=>{var n=null==r?void 0:r.routes;if(n&&Array.isArray(n)){var i=(null==r?void 0:r.bodyField)||(null==e?void 0:e.bodyField),a=(null==r?void 0:r.before)||(null==e?void 0:e.before)||Me,l=(null==r?void 0:r.after)||(null==e?void 0:e.after)||je,u=o(Je,(null==e?void 0:e.auth)||{},(null==r?void 0:r.auth)||{}),c=[];for(var s of n){var d="string"==typeof s?{name:s}:s;if(d.name){var f={name:d.name,url:(null==d?void 0:d.url)||d.name,mode:(null==d?void 0:d.mode)||"rw",bodyField:(null==d?void 0:d.bodyField)||i,useUserFields:o(Te,(null==d?void 0:d.useUserFields)||{}),auth:o(u,(null==d?void 0:d.auth)||{}),before:(null==d?void 0:d.before)||a,after:(null==d?void 0:d.after)||l};c.push(f)}}c.length>0&&t.push({prefix:(null==r?void 0:r.prefix)||"",routes:c})}})),t};function Le(e){var r=e.indexOf("?")>=0?e.substr(e.indexOf("?")+1):"";return r?z.parse(r):{}}function Ne(e,r,t,o){t.map((t=>{var n=t.prefix;t.routes.map((t=>{var i=e.getModel(t.name);if(i){for(var a=function(){var e=Q((function*(e,r){var n,i=!0===(null==e||null===(n=e.session)||void 0===n?void 0:n.authenticated),a=t.auth;return!(!0===a.require||"read-only"===a.require&&"w"===r)||(i||("error"==a.action?(o.error("[miolo-router] Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):"redirect"==a.action?(o.warn("[miolo-router] Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)):(o.error("[miolo-router] Crud path ".concat(t.url," specified auth but no action")),e.body={})),i)}));return function(r,t){return e.apply(this,arguments)}}(),l=function(){var e=Q((function*(e,r,o){var n;if(yield a(e,r)){var i=!0;if(null!=t&&t.before&&(i=yield t.before(e)),i){var l=null==e||null===(n=e.session)||void 0===n||null===(n=n.user)||void 0===n?void 0:n.id,u={};!0===t.useUserFields.use&&(u=t.useUserFields.fieldNames);var c,s={uid:l,fieldNames:u},d=yield o(s);null!=t&&t.after&&(d=yield t.after(e,d)),c=d,d=null==t.bodyField?c:{[t.bodyField]:c},e.body=d}else e.body={}}else e.body={}}));return function(r,t,o){return e.apply(this,arguments)}}(),u=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Le(e.request.url),o={transaction:void 0};return yield i.read(t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),c=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Le(e.request.url),o={transaction:void 0};return yield i.keyList(t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),s=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Le(e.request.url),o={transaction:void 0};return yield i.find(t.id,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),d=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Le(e.request.url),o={transaction:void 0};return yield i.distinct(t.distinct_field,t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),f=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t,o=e.request.fields;null!=r&&null!==(t=r.fieldNames)&&void 0!==t&&t.created_by&&(o[r.fieldNames.created_by]=r.uid);var n={transaction:void 0};return yield i.insert(o,n)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),p=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t,o=e.request.fields;null!=r&&null!==(t=r.fieldNames)&&void 0!==t&&t.last_update_by&&(o[r.fieldNames.last_update_by]=r.uid);var n={transaction:void 0};return yield i.update(o,{id:o.id},n)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),m=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t=e.request.fields,o={transaction:void 0};return yield i.delete({id:t.id},o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),v=n?"/".concat(n,"/").concat(t.url):"/".concat(t.url);v.indexOf("//")>=0;)v=v.replace(/\/\//g,"/");o.info("[miolo-router] Routing table ".concat(t.name," to ").concat(v));var h=t.mode.indexOf("r")>=0,y=t.mode.indexOf("w")>=0,g=t.mode.indexOf("u")>=0||y;h&&(r.get("".concat(v,"/find"),(e=>s(e))),r.get("".concat(v,"/read"),(e=>u(e))),r.get("".concat(v,"/distinct"),(e=>d(e))),r.get("".concat(v,"/key_list"),(e=>c(e)))),g&&(r.post("".concat(v,"/save"),(e=>f(e))),r.post("".concat(v,"/update"),(e=>p(e)))),y&&r.post("".concat(v,"/delete"),(e=>m(e)))}else o.error("[miolo-router] Could not get model for ".concat(t.name))}))}))}var Pe=e=>{var r=(null==e?void 0:e.queries)||[];if(!r)return[];if(!Array.isArray(r))return[];var t=[];return r.map((r=>{var n=null==r?void 0:r.routes;if(n&&Array.isArray(n)){var i=(null==r?void 0:r.before)||(null==e?void 0:e.before)||Me,a=(null==r?void 0:r.after)||(null==e?void 0:e.after)||je,l=o(Je,(null==r?void 0:r.auth)||{},(null==e?void 0:e.auth)||{}),u=[];for(var c of n)if(c.url&&c.callback){var s={url:c.url,method:(null==c?void 0:c.method)||"GET",callback:c.callback,auth:o(l,(null==c?void 0:c.auth)||{}),before:(null==c?void 0:c.before)||i,after:(null==c?void 0:c.after)||a};u.push(s)}t.push({prefix:(null==r?void 0:r.prefix)||"",routes:u})}})),t};function Ue(e,r,t){var o=e.context.miolo.logger,n=new A;try{var i=Ae(t),a=Pe(t),l=i.length>0,u=a.length>0;if(!l&&!u)throw"[miolo-router] Could not get any route from the passed <routes> param";l&&Ne(r,n,i,o),u&&function(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n,i=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");t.info("[miolo-router] Routing ".concat((null===(n=r.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(r.method," ").concat(i));var a=function(){var e=Q((function*(e){var o,n=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated),i=r.auth;return!(!0===i.require||"read-only"===i.require&&"POST"===r.method)||(n||("error"==i.action?(t.error("Unauthorized access. Throwing error ".concat(i.error_code)),e.throw(i.error_code,null,{})):"redirect"==i.action?(t.warn("Unauthorized access. Redirecting to ".concat(i.redirect_url)),e.redirect(i.redirect_url)):(t.error("Route path ".concat(r.url," specified auth but no action")),e.body={})),n)}));return function(r){return e.apply(this,arguments)}}(),l=function(){var e=Q((function*(e){try{var o;if("GET"==r.method&&(null===(o=e.request)||void 0===o||!o.fields)&&e.request.url.indexOf("?")>0){var n=Le(e.request.url);n&&(e.request.fields=n)}}catch(u){t.error("[miolo-router] Error while trying to qet query params for ".concat(e.request.url))}if(yield a(e)){var i=!0;if(null!=r&&r.before&&(i=yield r.before(e)),i){var l=yield r.callback(e);return null!=r&&r.after&&(l=yield r.after(e,l)),l}}}));return function(r){return e.apply(this,arguments)}}(),u=r.method.toLowerCase();e[u](i,(e=>l(e,r)))}))}))}(n,a,o)}catch(c){o.error(c),o.error("[miolo-router] Error initing the router. Probably config objects are not ok"),o.error("[miolo-router] connOrConfig:"),o.error(null==r?void 0:r.config),o.error("[miolo-router] routes:"),o.error(t)}e.use(n.routes())}var Fe=i(import.meta.url),Ve=n.dirname(Fe),Be=L(n.resolve(Ve,"fallback_index.html"),"utf8");function Ie(e){return e?e/1e6:0}function ze(e){return e?e/1e6:0}function De(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(Ie(W.freemem()),2),n=Math.round(Ie(W.totalmem()),2),(i=Math.round(100*o/n,2))>80?t.error("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(h(n)," MB (").concat(f(i)," %)")):t.info("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(h(n)," MB (").concat(f(i)," %)")),Y.check("/",(function(e,r){var o=Math.round(ze(r.used),2),n=Math.round(ze(r.total),2),i=Math.round(ze(r.free),2);i<1?t.error("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(o)," GB used of ").concat(h(n)," GB (").concat(f(i)," GB free)")):t.info("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(o)," GB used of ").concat(h(n)," GB (").concat(f(i)," GB free)"))}))},start:!0}}function Ge(e,r){var t=e.context.miolo,o=t.logger,n=[De(),...r||[]],i=[];n.map((e=>{var r=e.name,o=function(e,r){var t,o=e.logger,n=null!=r&&null!==(t=r.onTick)&&void 0!==t&&t.name&&"onTick"!=r.onTick.name?r.onTick.name:"custom",i=(null==r?void 0:r.name)||n;return new G((null==r?void 0:r.cronTime)||"*/5 * * * *",(t=>{console.log("".concat(i,".onTick"));try{o.silly("[SERVER][Custom Job ".concat(d(i),"] ").concat(g("ticks!"))),r.onTick(e,t)}catch(n){o.error("[SERVER][Custom Job ".concat(d(i),"] Error at onTick()")),o.error(n)}}),(()=>{if(console.log("".concat(i,".onComplete")),o.silly("[SERVER][Custom Job ".concat(d(i),"] ").concat(g("completed!"))),null!=r&&r.onComplete)try{r.onComplete(e)}catch(t){o.error("[SERVER][Custom Job ".concat(d(i),"] Error at onComplete()")),o.error(t)}}),!0===(null==r?void 0:r.start),(null==r?void 0:r.timezone)||"Europe/Madrid")}(t,e);i.push({name:r,job:o,running:!0===(null==e?void 0:e.start)})}));var a=e=>{var r;return(r="number"==typeof e?i[e]:i.filter((r=>r.name==e))[0])||o.error("[SERVER] Cannot stop job ".concat(d(e),": Not Found")),r},l=e=>{try{e.job.stop(),e.running=!1,o.debug("[SERVER][Job ".concat(d(e.name),"] ").concat(b("manually stopped!")))}catch(r){o.error("[SERVER][Job ".concat(d(e.name),"] Error manually stopping it")),o.error(r)}};e.cron={jobs:i,start:e=>{var r=a(e);r&&(e=>{try{e.job.stop(),e.running=!0,o.debug("[SERVER][Job ".concat(d(e.name),"] ").concat(g("manually started!")))}catch(r){o.error("[SERVER][Job ".concat(d(e.name),"] Error manually starting it")),o.error(r)}})(r)},stop:e=>{var r=a(e);r&&l(r)},stop_all:()=>{i.map((e=>{l(e)}))}}}function We(n,i){var a,l=new r,u=function(e){var r,t=o(te,e);return t.auth_type=function(e){var r,t,o;return null!=e&&null!==(r=e.auth)&&void 0!==r&&r.basic?"basic":null!=e&&null!==(t=e.auth)&&void 0!==t&&t.credentials?"credentials":null!=e&&null!==(o=e.auth)&&void 0!==o&&o.custom?"custom":"guest"}(e),t.use_catcher=!(null==t||null===(r=t.http)||void 0===r||!r.catcher_url),t}(n);se(l,u),Ce(l,u.http),(e=>{e.use(q({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:C.Z_SYNC_FLUSH},deflate:{flush:C.Z_SYNC_FLUSH},br:!1})),e.use(O(R({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))})(l),function(e){var r=e.context.miolo.logger;function t(){return(t=Q((function*(e){if(e){var t=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof t&&(t=500):(t=406,e.message="Unsupported type"),de.indexOf(t)>=0?r.warn("".concat(this.method," ").concat(this.url," - ").concat(t,": ").concat(e.message)):r.error(e),this.headerSent||!this.writable)return r.debug("headers were already sent, returning early"),void(e.headerSent=!0);this.type="json",this.status=t,this.body=JSON.stringify(this.body||"",null,2),this.length=Buffer.byteLength(this.body),this.res.end(this.body)}}))).apply(this,arguments)}e.context.onerror=function(e){return t.apply(this,arguments)}}(l),((e,r)=>{var{favicon:t,folders:o}=r,n=t||me;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(ve,""))),e.use(J(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(ve,""))),e.use(M(i,j(a,{index:!1})))})(l,null===(a=u.http)||void 0===a?void 0:a.static),function(e){function r(){return(r=Q((function*(e,r){var t,o=e.miolo.logger,n=e.headers["x-real-ip"]||"127.0.0.1",i=T.now();e.request.body=X(X({},e.request.fields),e.request.files),he.total+=1,he[n]=(he[n]||0)+1,e.requestId=he.total,e.request.ip=n;var a=e.request.url.indexOf("?")>=0?e.request.url.substr(0,e.request.url.indexOf("?")):e.request.url,l="".concat(s(n)," ").concat(d(e.request.method)," ").concat(d(a)," [").concat(v(he[n]),"/").concat(v(e.requestId),"]"),u=null!=e.request.body?JSON.stringify(e.request.body):"";o.info("".concat(l," - START")),o.debug("".concat(l," - Body: ").concat(u)),yield r();var c=null==e||null===(t=e.session)||void 0===t?void 0:t.user,p="";null!=c&&(null!=c&&c.id?p=" - uid ".concat(null==c?void 0:c.id):null!=c&&c.token&&(p=" - token ".concat(null==c?void 0:c.token)));var y,g=e.response.status,b=g;200==g?y=h:g>200&&g<=299?(y=f,e.response.redirected&&e.response.url&&(b+=" -> ".concat(e.response.url))):y=m;var S="[".concat(y(b),"]"),E=parseFloat((T.now()-i)/1e3).toFixed(2),_=E<1?h:E<2?f:m,x=null!=e.session?JSON.stringify(e.session):"";o.debug("".concat(l," - Session: ").concat(x));var w=null!=e.body?JSON.stringify(e.body):"";o.debug("".concat(l," - Response: ").concat(w)),o.info("".concat(l," - DONE ").concat(S).concat(p," (time ").concat(_(E),")"))}))).apply(this,arguments)}e.use((function(e,t){return r.apply(this,arguments)}))}(l),function(e){function r(){return(r=Q((function*(e){e.body=be}))).apply(this,arguments)}var t=new A;t.get("/robots.txt",(function(e){return r.apply(this,arguments)})),e.use(t.routes())}(l),u.use_catcher&&function(e,r){function t(){return t=Q((function*(e){var{error:r,warning:t,path:o,agent:n}=e.request.body,i=e.miolo.logger;if(t){var a="".concat(f("[JS Warning]")," on ").concat(y(o),": ").concat(t.msg,"\n")+"".concat(f("[JS Warning]")," File => ").concat(t.file,"\n")+"".concat(f("[JS Warning]")," Line => ").concat(t.line,"\n")+"".concat(f("[JS Warning]")," Col => ").concat(t.col,"\n")+"".concat(f("[JS Warning]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(f("[JS Warning]")," Agent => ").concat(n);i.warn(a)}else{var l="".concat(m("[JS Error]")," on ").concat(y(o),": ").concat(r.msg,"\n")+"".concat(m("[JS Error]")," File => ").concat(r.file,"\n")+"".concat(m("[JS Error]")," Line => ").concat(r.line,"\n")+"".concat(m("[JS Error]")," Col => ").concat(r.col,"\n")+"".concat(m("[JS Error]")," Error => ").concat(JSON.stringify(r.error),"\n")+"".concat(m("[JS Error]")," Agent => ").concat(n);i.error(l)}e.body={result:1}})),t.apply(this,arguments)}var o=new A;o.post(r,(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(l,u.http.catcher_url),"guest"==u.auth_type&&Se(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&Ee(l,u.auth.basic),"credentials"==u.auth_type&&Re(l,u.auth.credentials,null==u?void 0:u.session),"custom"==u.auth_type&&((e,r)=>{var t=e.context.miolo.logger;try{var o=r(e);if("function"==typeof o)e.use(o);else if(Array.isArray(o)){var n=new A;o.map((e=>{var r=e.method.toLowerCase();n[r](e.url,e.callback)})),e.use(n.routes())}}catch(i){t.error("Custom auth error: ".concat(i,"'"))}})(l,u.auth.custom);var c=null==u?void 0:u.middlewares;if(c&&Oe(l,c),null!=u&&u.routes){var p=l.context.miolo.db.getConnection();Ue(l,p,u.routes)}null!=(null==i?void 0:i.middleware)?l.use(i.middleware):function(e,r,t,o){var n=(null==r?void 0:r.html)||Be;n.indexOf("{context}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {context} template variable"),n.indexOf("{children}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {children} template variable");var i=function(){var e=Q((function*(e){var t={};try{var o;null!=r&&null!==(o=r.ssr)&&void 0!==o&&o.loader&&(t=yield r.ssr.loader(e))}catch(u){var n,i="URL: ".concat(e.request.url,"\nFields: ").concat(JSON.stringify((null===(n=e.request)||void 0===n?void 0:n.fields)||{})),a=null!=u&&u.stack?"".concat(u.toString(),"\n").concat(u.stack):u.toString(),l="".concat("Error produced by loader in render.ssr middleware","\n").concat(i,"\n").concat(a);e.miolo.logger.error(l)}return t}));return function(r){return e.apply(this,arguments)}}(),a=(e,r,t)=>{var o,n,i=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated);return{config:r,user:null==e||null===(n=e.session)||void 0===n?void 0:n.user,authenticated:i,ssr_data:t,extra:null==e?void 0:e.extra}},l=(e,t)=>{var o="";try{var i;null!=r&&null!==(i=r.ssr)&&void 0!==i&&i.renderer?o=D(r.ssr.renderer(e,t)):e.miolo.logger.warn("Missing renderer in render.ssr middleware")}catch(a){e.miolo.logger.error("Error in renderer (render.ssr middleware)"),e.miolo.logger.error(a),o="\n <div>\n MIOLO: Error SSR renderer: ".concat(a.toString(),"\n </div> \n ")}return n.replace("{context}",JSON.stringify(t,null,2)).replace("{children}",o)};function u(){return(u=Q((function*(e){var r,n,u={hostname:null==t?void 0:t.hostname,port:null==t?void 0:t.port,catcher_url:null==t?void 0:t.catcher_url,login_url:null==o||null===(r=o.credentials)||void 0===r?void 0:r.url_login,logout_url:null==o||null===(n=o.credentials)||void 0===n?void 0:n.url_logout},c=yield i(e),s=a(e,u,c),d=l(e,s);e.miolo.logger.debug("[render-ssr] Returned body is ".concat(Buffer.byteLength(d,"utf8")," bytes")),e.body=d}))).apply(this,arguments)}e.use((function(e){return u.apply(this,arguments)}))}(l,i,u.http,null==u?void 0:u.auth);var g=function(){var r=Q((function*(){var r=e.createServer(l.callback());yield((e,r,t)=>new Promise(((o,n)=>{e.listen(r,t,(e=>{e?n(e):o()}))})))(r,u.http.port,u.http.hostname),l.context.miolo.logger.info("miolo is listening on ".concat(u.http.hostname,":").concat(u.http.port)),l.server=r;var o=t({server:r});return l.stop_server=Q((function*(){yield o.terminate(),l.context.miolo.logger.info("miolo has been shutdowned from ".concat(u.http.hostname,":").concat(u.http.port))})),Ge(l,null==u?void 0:u.cron),l}));return function(){return r.apply(this,arguments)}}();return l.run=g,l}function Ye(e){var r=K.createClient(e.redis.port,e.redis.host).on("connect",(function(){console.info("".concat(s("REDIS")," Connection established!"))})).on("error",(function(e){var r;try{r=e instanceof K.ReplyError?"".concat(s("REDIS")," ").concat(m("Error "+e.code)," Command: ").concat(e.command," ").concat(e.toString()):"".concat(s("REDIS")," ").concat(m("Error "+e.code)," ").concat(e.toString())}catch(t){r="".concat(s("REDIS")," ").concat(m("Error ")," ").concat(t)}console.error(r)})),t=E(r.get).bind(r),o=E(r.exists).bind(r),n=E(r.set).bind(r),i=E(r.del).bind(r);function a(){return(a=Q((function*(e){return yield t(e)}))).apply(this,arguments)}function l(){return(l=Q((function*(e){return 1==(yield o(e))}))).apply(this,arguments)}function u(){return u=Q((function*(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:86400;return"OK"==(yield n(e,r,"EX",t))})),u.apply(this,arguments)}function c(){return(c=Q((function*(e){return(yield i(e))>=1}))).apply(this,arguments)}var d={get:function(e){return a.apply(this,arguments)},exists:function(e){return l.apply(this,arguments)},set:function(e,r){return u.apply(this,arguments)},del:function(e){return c.apply(this,arguments)}};return d}export{We as miolo,Ye as miolo_cacher,oe as miolo_emailer,ce as miolo_logger};
|
|
11
|
+
import e from"node:http";import r from"koa";import{createHttpTerminator as t}from"http-terminator";import o from"deepmerge";import n from"node:path";import{fileURLToPath as i}from"node:url";import{getConnection as a}from"calustra";export{getConnection as miolo_db_connection}from"calustra";import l from"nodemailer";import{uncolor as u,gray as c,magenta as s,cyan as d,yellow as f,red_light as p,red as m,cyan_light as v,green as h,blue as y,green_bold as g,yellow_bold as b}from"tinguir";import S,{promisify as E}from"node:util";import _,{transports as x,createLogger as w,format as k}from"winston";import R from"koa-better-body";import O from"koa-convert";import q from"koa-compress";import{constants as C}from"node:zlib";import M from"koa-mount";import j from"koa-static";import J from"koa-favicon";import{performance as T}from"node:perf_hooks";import A from"@koa/router";import{readFileSync as U}from"node:fs";import L from"jwt-simple";import N from"koa-passport";import P from"passport-local";import F from"koa-session";import V from"koa-redis";import B from"@koa/cors";import I from"koa-proxies";import z from"qs";import{renderToString as D}from"react-dom/server";import{CronJob as G}from"cron";import W from"node:os";import Y from"diskspace";import K from"redis";function H(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function X(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?H(Object(t),!0).forEach((function(r){$(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):H(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function Z(e,r,t,o,n,i,a){try{var l=e[i](a),u=l.value}catch(c){return void t(c)}l.done?r(u):Promise.resolve(u).then(o,n)}function Q(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){Z(i,o,n,a,l,"next",e)}function l(e){Z(i,o,n,a,l,"throw",e)}a(void 0)}))}}function $(e,r,t){return(r=function(e){var r=function(e,r){if("object"!=typeof e||null===e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:String(r)}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var ee=i(import.meta.url),re=n.dirname(ee),te={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:n.resolve(re,"../static/img/miolo.ico"),folders:{}},cors:!1,proxy:!1},session:{salt:"SUPER_SALTY_YES?",secret:"SUPER_SECRET_KEY_KERE",options:{maxAge:864e5,secure:!0,sameSite:null}},db:{config:{dialect:"postgres",host:"localhost",port:5432,database:"miolo",user:"postgres",password:"postgres",max:5,min:0,idleTimeoutMillis:1e4},options:{log:"silly",tables:[]}},routes:{bodyField:void 0,crud:[{prefix:"",routes:[]}],queries:[]},log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/miolo.log"},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},mail:{silent:!0,options:{port:25,host:"mail.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},auth:{},render:{},middlewares:[],cron:[]};function oe(e){var{options:r,defaults:t,silent:o}=e,n=l.createTransport(r,t);function i(){return(i=Q((function*(e){if(!0===o)return console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************"),{ok:!0,silent:!0,error:void 0,messageId:void 0};try{var r=n.sendMail(e);return r.ok=!(null==r||!r.messageId),r}catch(t){return{error:t,ok:!1}}}))).apply(this,arguments)}var a={send:function(e){return i.apply(this,arguments)},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),n.verify((function(e,r){e?(console.error("[miolo][Verify][MAILER] Verifying ERROR"),console.error(e)):console.info("[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages")}))},options:r,defaults:t,silent:o};return a}var{combine:ne,timestamp:ie,_label:ae,printf:le,errors:ue}=k,ce=(e,r)=>{var t,o,n={silly:c,debug:s,verbose:d,info:f,warn:p,error:m},i={silly:"sly",debug:"dbg",verbose:"vbs",info:"inf",warn:"wrn",error:"err"},a=le((r=>{var t,o=n[r.level],a=new Date(r.timestamp).toLocaleString((null==e||null===(t=e.format)||void 0===t?void 0:t.locale)||"en"),l="[miolo] ".concat(o(a)," ").concat(o(i[r.level])," ").concat(r.message);return r.stack?"".concat(l,"\n").concat(r.stack):l})),l=[];e.console.enabled&&l.push(new x.Console({humanReadableUnhandledException:!0,level:(null==e||null===(t=e.console)||void 0===t?void 0:t.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));e.file.enabled&&l.push(new x.File({filename:e.file.filename,level:(null==e||null===(o=e.file)||void 0===o?void 0:o.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var v=function(e,r){var t=function(t){_.Transport.call(this,t),t=t||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||r.defaults.name,this.to=e.to||r.defaults.to,this.from=e.from||r.defaults.from,this.humanReadableUnhandledException=t.humanReadableUnhandledException||!0,this.handleExceptions=t.handleExceptions||!0,this.json=t.json||!1,this.colorize=t.colorize||!1};return S.inherits(t,_.Transport),t.prototype.name="MailerLogger",t.prototype.log=function(t,o){var n=this,i="";try{i=t.message.split("\n")[0]}catch(c){i=t.message.toString()}i=u(i);var a=e.name+": ["+t.level.toUpperCase()+"] "+i,l={from:this.from,to:this.to,subject:a,text:u(t.message)};r.send(l,(function(){n.emit("logged"),o(null,!0)}))},t}(e.mail,r);x.MailerLogger=v,l.push(new x.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return w({level:(null==e?void 0:e.level)||"silly",format:ne(ue({stack:!0}),ie(),a),transports:l})},se=(e,r)=>{var t=oe(r.mail),o=ce(r.log,t),n=X(X({},r.db.options),{},{log:o}),i={getConnection:()=>a(r.db.config,n),getModel:e=>a(r.db.config,n).getModel(e)},l={config:X({},r),emailer:t,logger:o,db:i};function u(){return(u=Q((function*(e,r){e.miolo=l,yield r()}))).apply(this,arguments)}e.use((function(e,r){return u.apply(this,arguments)})),e.context.miolo=l},de=[401];var fe=i(import.meta.url),pe=n.dirname(fe),me=n.resolve(pe,"./miolo.ico"),ve=n.resolve(pe,"../../../.."),he={total:0};var ye=i(import.meta.url),ge=n.dirname(ye),be=U(n.resolve(ge,"./robots.txt"),"utf8");var Se=(e,r,t)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=r;if(null!=e)return e(t||{})}catch(n){}return function(e,r){var t=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="miolo_unsafe_secret",r.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:t};return L.encode(n,o)}(t||{},o)};function i(){return i=Q((function*(e,r){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var a=function(e){var r,t=null==e||null===(r=e.options)||void 0===r?void 0:r.maxAge;isNaN(t)&&(t=86400);var o=new Date;return o.setSeconds(o.getSeconds()+t),{expires:o,httpOnly:!1}}(t);e.cookies.set("token",i,a),e.session={user:{name:"guest"},authenticated:!0,token:i},yield r()})),i.apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))},Ee=(e,r)=>{var{auth_user:t,realm:o,paths:n}=r;function i(e,r){return a.apply(this,arguments)}function a(){return(a=Q((function*(r,n){var i;try{i=(e=>{var r,t=null==e||null===(r=e.headers)||void 0===r?void 0:r.authorization;if(t)try{t=t.replace("Basic ","");try{t=Buffer.from(t,"base64").toString()}catch(i){t=atob(t)}var[o,n]=t.split(":");return{username:o,password:n}}catch(i){return}})(r.request)}catch(u){}var a=()=>{r.session={user:void 0,authenticated:!1},r.body={user:void 0,authenticated:!1},r.response.status=401,r.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return a();var l=yield t(i.username,i.password,e.context.miolo);if(!1===l||null==l)return a();r.session={user:l,authenticated:!0},yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((r=>e.use(M(r,i))))},_e=new V;var xe=(e,r,t)=>r(null,e.id),we=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},ke=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Re=(e,r,t)=>{var{get_user_id:o,find_user_by_id:n,local_auth_user:i,url_login:a,url_logout:l,url_login_redirect:u,url_logout_redirect:c}=r,s=o||xe,d=n||we,f=i||ke,p=a||"/login",m=l||"/logout",v=new P.Strategy(((r,t,o)=>{f(r,t,o,e.context.miolo)}));function h(){return(h=Q((function*(e,r){try{e.session.authenticated&&(e.session.user=e.state.user)}catch(t){}yield r()}))).apply(this,arguments)}!function(e,r){e.keys=[r.secret||"*secret*"];var t=X({store:_e},r.options||{});e.use(F(t,e))}(e,t),N.serializeUser(((r,t)=>{process.nextTick((function(){s(r,t,e.context.miolo)}))})),N.deserializeUser(((r,t)=>{process.nextTick((function(){d(r,t,e.context.miolo)}))})),N.use(v),e.use(N.initialize()),e.use(N.session()),e.use((function(e,r){return h.apply(this,arguments)}));var y=function(){var e=Q((function*(e,r){e.session.authenticated?(e.session.user=void 0,e.session.authenticated=!1,yield e.logout(),e.body={user:void 0,authenticated:!1},null!=c&&e.redirect(c)):(e.body={user:void 0,authenticated:!1},e.response.status=401)}));return function(r,t){return e.apply(this,arguments)}}(),g=new A;g.post(p,((e,r)=>N.authenticate("local",function(){var r=Q((function*(r,t,o,n){if(!1!==t)return e.session.user=e.state.user,e.session.authenticated=!0,e.body={user:t,authenticated:!0},null!=u&&e.redirect(u),yield e.login(t);e.session.user=void 0,e.session.authenticated=!1,e.body={user:void 0,authenticated:!1,info:o,error:r},e.response.status=401}));return function(e,t,o,n){return r.apply(this,arguments)}}())(e))),g.get(m,y),g.post(m,y),e.use(g.routes())},Oe=(e,r)=>{null!=r&&0!=r.length&&r.map((r=>{function t(){return(t=Q((function*(e,t){yield r(e),yield t()}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}))},qe=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Ce=(e,r)=>{var t=e.context.miolo.logger;qe(r,"cors",(r=>{if("simple"==r)t.debug("Setting CORS the simple way"),e.use(function(){var e=Q((function*(e,r){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield r()}));return function(r,t){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(r);t.debug("Setting CORS headers for ".concat(JSON.stringify(o))),e.use(B(o))}})),qe(r,"proxy",(r=>{var[o,n]=(e=>{var r,t,o,n;return null==e&&(e={}),[(null===(r=e)||void 0===r?void 0:r.path)||"/",{target:(null===(t=e)||void 0===t?void 0:t.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(r);t.debug("Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(I(o,n))}))},Me=function(){var e=Q((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),je=function(){var e=Q((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Je={require:!1,action:"redirect",redirect_url:"/",error_code:401},Te={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},Ae=e=>{var r=(null==e?void 0:e.crud)||[];if(!r)return[];if(!Array.isArray(r))return[];var t=[];return r.map((r=>{var n=null==r?void 0:r.routes;if(n&&Array.isArray(n)){var i=(null==r?void 0:r.bodyField)||(null==e?void 0:e.bodyField),a=(null==r?void 0:r.before)||(null==e?void 0:e.before)||Me,l=(null==r?void 0:r.after)||(null==e?void 0:e.after)||je,u=o(Je,(null==e?void 0:e.auth)||{},(null==r?void 0:r.auth)||{}),c=[];for(var s of n){var d="string"==typeof s?{name:s}:s;if(d.name){var f={name:d.name,url:(null==d?void 0:d.url)||d.name,mode:(null==d?void 0:d.mode)||"rw",bodyField:(null==d?void 0:d.bodyField)||i,useUserFields:o(Te,(null==d?void 0:d.useUserFields)||{}),auth:o(u,(null==d?void 0:d.auth)||{}),before:(null==d?void 0:d.before)||a,after:(null==d?void 0:d.after)||l};c.push(f)}}c.length>0&&t.push({prefix:(null==r?void 0:r.prefix)||"",routes:c})}})),t};function Ue(e){var r=e.indexOf("?")>=0?e.substr(e.indexOf("?")+1):"";return r?z.parse(r):{}}function Le(e,r,t,o){t.map((t=>{var n=t.prefix;t.routes.map((t=>{var i=e.getModel(t.name);if(i){for(var a=function(){var e=Q((function*(e,r){var n,i=!0===(null==e||null===(n=e.session)||void 0===n?void 0:n.authenticated),a=t.auth;return!(!0===a.require||"read-only"===a.require&&"w"===r)||(i||("error"==a.action?(o.error("[miolo-router] Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):"redirect"==a.action?(o.warn("[miolo-router] Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)):(o.error("[miolo-router] Crud path ".concat(t.url," specified auth but no action")),e.body={})),i)}));return function(r,t){return e.apply(this,arguments)}}(),l=function(){var e=Q((function*(e,r,n){var i,l={};try{var u;if(!(yield a(e,r)))return void(e.body={});var c=!0;if(null!=t&&t.before&&(c=yield t.before(e)),!c)return void(e.body={});var s=null==e||null===(u=e.session)||void 0===u||null===(u=u.user)||void 0===u?void 0:u.id,d={};!0===t.useUserFields.use&&(d=t.useUserFields.fieldNames);var f={uid:s,fieldNames:d};l=yield n(f),null!=t&&t.after&&(l=yield t.after(e,l))}catch(p){o.error("[miolo-router] Unexpected error on CRUD ".concat(t.name,"-").concat(r)),o.error(p)}i=l,l=null==t.bodyField?i:{[t.bodyField]:i},e.body=l}));return function(r,t,o){return e.apply(this,arguments)}}(),u=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Ue(e.request.url),o={transaction:void 0};return yield i.read(t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),c=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Ue(e.request.url),o={transaction:void 0};return yield i.keyList(t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),s=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Ue(e.request.url),o={transaction:void 0};return yield i.find(t.id,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),d=function(){var e=Q((function*(e){yield l(e,"r",function(){var r=Q((function*(r){var t=Ue(e.request.url),o={transaction:void 0};return yield i.distinct(t.distinct_field,t,o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),f=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t,o=e.request.fields;null!=r&&null!==(t=r.fieldNames)&&void 0!==t&&t.created_by&&(o[r.fieldNames.created_by]=r.uid);var n={transaction:void 0};return yield i.insert(o,n)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),p=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t,o=e.request.fields;null!=r&&null!==(t=r.fieldNames)&&void 0!==t&&t.last_update_by&&(o[r.fieldNames.last_update_by]=r.uid);var n={transaction:void 0};return yield i.update(o,{id:o.id},n)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),m=function(){var e=Q((function*(e){yield l(e,"w",function(){var r=Q((function*(r){var t=e.request.fields,o={transaction:void 0};return yield i.delete({id:t.id},o)}));return function(e){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),v=n?"/".concat(n,"/").concat(t.url):"/".concat(t.url);v.indexOf("//")>=0;)v=v.replace(/\/\//g,"/");o.info("[miolo-router] Routing table ".concat(t.name," to ").concat(v));var h=t.mode.indexOf("r")>=0,y=t.mode.indexOf("w")>=0,g=t.mode.indexOf("u")>=0||y;h&&(r.get("".concat(v,"/find"),(e=>s(e))),r.get("".concat(v,"/read"),(e=>u(e))),r.get("".concat(v,"/distinct"),(e=>d(e))),r.get("".concat(v,"/key_list"),(e=>c(e)))),g&&(r.post("".concat(v,"/save"),(e=>f(e))),r.post("".concat(v,"/update"),(e=>p(e)))),y&&r.post("".concat(v,"/delete"),(e=>m(e)))}else o.error("[miolo-router] Could not get model for ".concat(t.name))}))}))}var Ne=e=>{var r=(null==e?void 0:e.queries)||[];if(!r)return[];if(!Array.isArray(r))return[];var t=[];return r.map((r=>{var n=null==r?void 0:r.routes;if(n&&Array.isArray(n)){var i=(null==r?void 0:r.before)||(null==e?void 0:e.before)||Me,a=(null==r?void 0:r.after)||(null==e?void 0:e.after)||je,l=o(Je,(null==r?void 0:r.auth)||{},(null==e?void 0:e.auth)||{}),u=[];for(var c of n)if(c.url&&c.callback){var s={url:c.url,method:(null==c?void 0:c.method)||"GET",callback:c.callback,auth:o(l,(null==c?void 0:c.auth)||{}),before:(null==c?void 0:c.before)||i,after:(null==c?void 0:c.after)||a};u.push(s)}t.push({prefix:(null==r?void 0:r.prefix)||"",routes:u})}})),t};function Pe(e,r,t){var o=e.context.miolo.logger,n=new A;try{var i=Ae(t),a=Ne(t),l=i.length>0,u=a.length>0;if(!l&&!u)throw"[miolo-router] Could not get any route from the passed <routes> param";l&&Le(r,n,i,o),u&&function(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n,i=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");t.info("[miolo-router] Routing ".concat((null===(n=r.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(r.method," ").concat(i));var a=function(){var e=Q((function*(e){var o,n=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated),i=r.auth;return!(!0===i.require||"read-only"===i.require&&"POST"===r.method)||(n||("error"==i.action?(t.error("Unauthorized access. Throwing error ".concat(i.error_code)),e.throw(i.error_code,null,{})):"redirect"==i.action?(t.warn("Unauthorized access. Redirecting to ".concat(i.redirect_url)),e.redirect(i.redirect_url)):(t.error("Route path ".concat(r.url," specified auth but no action")),e.body={})),n)}));return function(r){return e.apply(this,arguments)}}(),l=function(){var e=Q((function*(e){var o={};try{try{var n;if("GET"==r.method&&(null===(n=e.request)||void 0===n||!n.fields)&&e.request.url.indexOf("?")>0){var i=Ue(e.request.url);i&&(e.request.fields=i)}}catch(u){t.error("[miolo-router] Error while trying to qet query params for ".concat(e.request.url))}if(!(yield a(e)))return;var l=!0;if(null!=r&&r.before&&(l=yield r.before(e)),!l)return;o=yield r.callback(e),null!=r&&r.after&&(o=yield r.after(e,o))}catch(c){t.error("[miolo-router] Unexpected error on Query ".concat(r.name)),t.error(c)}return o}));return function(r){return e.apply(this,arguments)}}(),u=r.method.toLowerCase();e[u](i,(e=>l(e,r)))}))}))}(n,a,o)}catch(c){o.error(c),o.error("[miolo-router] Error initing the router. Probably config objects are not ok"),o.error("[miolo-router] connOrConfig:"),o.error(null==r?void 0:r.config),o.error("[miolo-router] routes:"),o.error(t)}e.use(n.routes())}var Fe=i(import.meta.url),Ve=n.dirname(Fe),Be=U(n.resolve(Ve,"fallback_index.html"),"utf8");function Ie(e){return e?e/1e6:0}function ze(e){return e?e/1e6:0}function De(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(Ie(W.freemem()),2),n=Math.round(Ie(W.totalmem()),2),(i=Math.round(100*o/n,2))>80?t.error("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(h(n)," MB (").concat(f(i)," %)")):t.info("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(h(n)," MB (").concat(f(i)," %)")),Y.check("/",(function(e,r){var o=Math.round(ze(r.used),2),n=Math.round(ze(r.total),2),i=Math.round(ze(r.free),2);i<1?t.error("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(o)," GB used of ").concat(h(n)," GB (").concat(f(i)," GB free)")):t.info("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(o)," GB used of ").concat(h(n)," GB (").concat(f(i)," GB free)"))}))},start:!0}}function Ge(e,r){var t=e.context.miolo,o=t.logger,n=[De(),...r||[]],i=[];n.map((e=>{var r=e.name,o=function(e,r){var t,o=e.logger,n=null!=r&&null!==(t=r.onTick)&&void 0!==t&&t.name&&"onTick"!=r.onTick.name?r.onTick.name:"custom",i=(null==r?void 0:r.name)||n;return new G((null==r?void 0:r.cronTime)||"*/5 * * * *",(t=>{try{o.silly("[SERVER][Custom Job ".concat(d(i),"] ").concat(g("ticks!"))),r.onTick(e,t)}catch(n){o.error("[SERVER][Custom Job ".concat(d(i),"] Error at onTick()")),o.error(n)}}),(()=>{if(o.silly("[SERVER][Custom Job ".concat(d(i),"] ").concat(g("completed!"))),null!=r&&r.onComplete)try{r.onComplete(e)}catch(t){o.error("[SERVER][Custom Job ".concat(d(i),"] Error at onComplete()")),o.error(t)}}),!0===(null==r?void 0:r.start),(null==r?void 0:r.timezone)||"Europe/Madrid")}(t,e);i.push({name:r,job:o,running:!0===(null==e?void 0:e.start)})}));var a=e=>{var r;return(r="number"==typeof e?i[e]:i.filter((r=>r.name==e))[0])||o.error("[SERVER] Cannot stop job ".concat(d(e),": Not Found")),r},l=e=>{try{e.job.stop(),e.running=!1,o.debug("[SERVER][Job ".concat(d(e.name),"] ").concat(b("manually stopped!")))}catch(r){o.error("[SERVER][Job ".concat(d(e.name),"] Error manually stopping it")),o.error(r)}};e.cron={jobs:i,start:e=>{var r=a(e);r&&(e=>{try{e.job.stop(),e.running=!0,o.debug("[SERVER][Job ".concat(d(e.name),"] ").concat(g("manually started!")))}catch(r){o.error("[SERVER][Job ".concat(d(e.name),"] Error manually starting it")),o.error(r)}})(r)},stop:e=>{var r=a(e);r&&l(r)},stop_all:()=>{i.map((e=>{l(e)}))}}}function We(n,i){var a,l=new r,u=function(e){var r,t=o(te,e);return t.auth_type=function(e){var r,t,o;return null!=e&&null!==(r=e.auth)&&void 0!==r&&r.basic?"basic":null!=e&&null!==(t=e.auth)&&void 0!==t&&t.credentials?"credentials":null!=e&&null!==(o=e.auth)&&void 0!==o&&o.custom?"custom":"guest"}(e),t.use_catcher=!(null==t||null===(r=t.http)||void 0===r||!r.catcher_url),t}(n);se(l,u),Ce(l,u.http),(e=>{e.use(q({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:C.Z_SYNC_FLUSH},deflate:{flush:C.Z_SYNC_FLUSH},br:!1})),e.use(O(R({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))})(l),function(e){var r=e.context.miolo.logger;function t(){return(t=Q((function*(e){if(e){var t=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof t&&(t=500):(t=406,e.message="Unsupported type"),de.indexOf(t)>=0?r.warn("".concat(this.method," ").concat(this.url," - ").concat(t,": ").concat(e.message)):r.error(e),this.headerSent||!this.writable)return r.debug("headers were already sent, returning early"),void(e.headerSent=!0);this.type="json",this.status=t,this.body=JSON.stringify(this.body||"",null,2),this.length=Buffer.byteLength(this.body),this.res.end(this.body)}}))).apply(this,arguments)}e.context.onerror=function(e){return t.apply(this,arguments)}}(l),((e,r)=>{var{favicon:t,folders:o}=r,n=t||me;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(ve,""))),e.use(J(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(ve,""))),e.use(M(i,j(a,{index:!1})))})(l,null===(a=u.http)||void 0===a?void 0:a.static),function(e){function r(){return(r=Q((function*(e,r){var t,o=e.miolo.logger,n=e.headers["x-real-ip"]||"127.0.0.1",i=T.now();e.request.body=X(X({},e.request.fields),e.request.files),he.total+=1,he[n]=(he[n]||0)+1,e.requestId=he.total,e.request.ip=n;var a=e.request.url.indexOf("?")>=0?e.request.url.substr(0,e.request.url.indexOf("?")):e.request.url,l="".concat(s(n)," ").concat(d(e.request.method)," ").concat(d(a)," [").concat(v(he[n]),"/").concat(v(e.requestId),"]"),u=null!=e.request.body?JSON.stringify(e.request.body):"";o.info("".concat(l," - START")),o.debug("".concat(l," - Body: ").concat(u)),yield r();var c=null==e||null===(t=e.session)||void 0===t?void 0:t.user,p="";null!=c&&(null!=c&&c.id?p=" - uid ".concat(null==c?void 0:c.id):null!=c&&c.token&&(p=" - token ".concat(null==c?void 0:c.token)));var y,g=e.response.status,b=g;200==g?y=h:g>200&&g<=299?(y=f,e.response.redirected&&e.response.url&&(b+=" -> ".concat(e.response.url))):y=m;var S="[".concat(y(b),"]"),E=parseFloat((T.now()-i)/1e3).toFixed(2),_=E<1?h:E<2?f:m,x=null!=e.session?JSON.stringify(e.session):"";o.debug("".concat(l," - Session: ").concat(x));var w=null!=e.body?JSON.stringify(e.body):"";o.debug("".concat(l," - Response: ").concat(w)),o.info("".concat(l," - DONE ").concat(S).concat(p," (time ").concat(_(E),")"))}))).apply(this,arguments)}e.use((function(e,t){return r.apply(this,arguments)}))}(l),function(e){function r(){return(r=Q((function*(e){e.body=be}))).apply(this,arguments)}var t=new A;t.get("/robots.txt",(function(e){return r.apply(this,arguments)})),e.use(t.routes())}(l),u.use_catcher&&function(e,r){function t(){return t=Q((function*(e){var{error:r,warning:t,path:o,agent:n}=e.request.body,i=e.miolo.logger;if(t){var a="".concat(f("[JS Warning]")," on ").concat(y(o),": ").concat(t.msg,"\n")+"".concat(f("[JS Warning]")," File => ").concat(t.file,"\n")+"".concat(f("[JS Warning]")," Line => ").concat(t.line,"\n")+"".concat(f("[JS Warning]")," Col => ").concat(t.col,"\n")+"".concat(f("[JS Warning]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(f("[JS Warning]")," Agent => ").concat(n);i.warn(a)}else{var l="".concat(m("[JS Error]")," on ").concat(y(o),": ").concat(r.msg,"\n")+"".concat(m("[JS Error]")," File => ").concat(r.file,"\n")+"".concat(m("[JS Error]")," Line => ").concat(r.line,"\n")+"".concat(m("[JS Error]")," Col => ").concat(r.col,"\n")+"".concat(m("[JS Error]")," Error => ").concat(JSON.stringify(r.error),"\n")+"".concat(m("[JS Error]")," Agent => ").concat(n);i.error(l)}e.body={result:1}})),t.apply(this,arguments)}var o=new A;o.post(r,(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(l,u.http.catcher_url),"guest"==u.auth_type&&Se(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&Ee(l,u.auth.basic),"credentials"==u.auth_type&&Re(l,u.auth.credentials,null==u?void 0:u.session),"custom"==u.auth_type&&((e,r)=>{var t=e.context.miolo.logger;try{var o=r(e);if("function"==typeof o)e.use(o);else if(Array.isArray(o)){var n=new A;o.map((e=>{var r=e.method.toLowerCase();n[r](e.url,e.callback)})),e.use(n.routes())}}catch(i){t.error("Custom auth error: ".concat(i,"'"))}})(l,u.auth.custom);var c=null==u?void 0:u.middlewares;if(c&&Oe(l,c),null!=u&&u.routes){var p=l.context.miolo.db.getConnection();Pe(l,p,u.routes)}null!=(null==i?void 0:i.middleware)?l.use(i.middleware):function(e,r,t,o){var n=(null==r?void 0:r.html)||Be;n.indexOf("{context}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {context} template variable"),n.indexOf("{children}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {children} template variable");var i=function(){var e=Q((function*(e){var t={};try{var o;null!=r&&null!==(o=r.ssr)&&void 0!==o&&o.loader&&(t=yield r.ssr.loader(e))}catch(u){var n,i="URL: ".concat(e.request.url,"\nFields: ").concat(JSON.stringify((null===(n=e.request)||void 0===n?void 0:n.fields)||{})),a=null!=u&&u.stack?"".concat(u.toString(),"\n").concat(u.stack):u.toString(),l="".concat("Error produced by loader in render.ssr middleware","\n").concat(i,"\n").concat(a);e.miolo.logger.error(l)}return t}));return function(r){return e.apply(this,arguments)}}(),a=(e,r,t)=>{var o,n,i=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated);return{config:r,user:null==e||null===(n=e.session)||void 0===n?void 0:n.user,authenticated:i,ssr_data:t,extra:null==e?void 0:e.extra}},l=(e,t)=>{var o="";try{var i;null!=r&&null!==(i=r.ssr)&&void 0!==i&&i.renderer?o=D(r.ssr.renderer(e,t)):e.miolo.logger.warn("Missing renderer in render.ssr middleware")}catch(a){e.miolo.logger.error("Error in renderer (render.ssr middleware)"),e.miolo.logger.error(a),o="\n <div>\n MIOLO: Error SSR renderer: ".concat(a.toString(),"\n </div> \n ")}return n.replace("{context}",JSON.stringify(t,null,2)).replace("{children}",o)};function u(){return(u=Q((function*(e){var r,n,u={hostname:null==t?void 0:t.hostname,port:null==t?void 0:t.port,catcher_url:null==t?void 0:t.catcher_url,login_url:null==o||null===(r=o.credentials)||void 0===r?void 0:r.url_login,logout_url:null==o||null===(n=o.credentials)||void 0===n?void 0:n.url_logout},c=yield i(e),s=a(e,u,c),d=l(e,s);e.miolo.logger.debug("[render-ssr] Returned body is ".concat(Buffer.byteLength(d,"utf8")," bytes")),e.body=d}))).apply(this,arguments)}e.use((function(e){return u.apply(this,arguments)}))}(l,i,u.http,null==u?void 0:u.auth);var g=function(){var r=Q((function*(){var r=e.createServer(l.callback());yield((e,r,t)=>new Promise(((o,n)=>{e.listen(r,t,(e=>{e?n(e):o()}))})))(r,u.http.port,u.http.hostname),l.context.miolo.logger.info("miolo is listening on ".concat(u.http.hostname,":").concat(u.http.port)),l.server=r;var o=t({server:r});return l.stop_server=Q((function*(){yield o.terminate(),l.context.miolo.logger.info("miolo has been shutdowned from ".concat(u.http.hostname,":").concat(u.http.port))})),Ge(l,null==u?void 0:u.cron),l}));return function(){return r.apply(this,arguments)}}();return l.run=g,l}function Ye(e){var r=K.createClient(e.redis.port,e.redis.host).on("connect",(function(){console.info("".concat(s("REDIS")," Connection established!"))})).on("error",(function(e){var r;try{r=e instanceof K.ReplyError?"".concat(s("REDIS")," ").concat(m("Error "+e.code)," Command: ").concat(e.command," ").concat(e.toString()):"".concat(s("REDIS")," ").concat(m("Error "+e.code)," ").concat(e.toString())}catch(t){r="".concat(s("REDIS")," ").concat(m("Error ")," ").concat(t)}console.error(r)})),t=E(r.get).bind(r),o=E(r.exists).bind(r),n=E(r.set).bind(r),i=E(r.del).bind(r);function a(){return(a=Q((function*(e){return yield t(e)}))).apply(this,arguments)}function l(){return(l=Q((function*(e){return 1==(yield o(e))}))).apply(this,arguments)}function u(){return u=Q((function*(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:86400;return"OK"==(yield n(e,r,"EX",t))})),u.apply(this,arguments)}function c(){return(c=Q((function*(e){return(yield i(e))>=1}))).apply(this,arguments)}var d={get:function(e){return a.apply(this,arguments)},exists:function(e){return l.apply(this,arguments)},set:function(e,r){return u.apply(this,arguments)},del:function(e){return c.apply(this,arguments)}};return d}export{We as miolo,Ye as miolo_cacher,oe as miolo_emailer,ce as miolo_logger};
|