miolo 0.9.8 → 0.9.10

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -2709,39 +2709,6 @@ function init_ssr_render_middleware(app, render, httpConfig, authConfig) {
2709
2709
  app.use(render_ssr_middleware);
2710
2710
  }
2711
2711
 
2712
- function init_404_render_middleware(app, render) {
2713
- function render_404_middleware(_x) {
2714
- return _render_404_middleware.apply(this, arguments);
2715
- }
2716
- function _render_404_middleware() {
2717
- _render_404_middleware = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(ctx) {
2718
- return _regeneratorRuntime().wrap(function _callee$(_context) {
2719
- while (1) switch (_context.prev = _context.next) {
2720
- case 0:
2721
- ctx.miolo.logger.debug("render_404_middleware() Not FOUND " + ctx.url + " ");
2722
- ctx.body = {};
2723
-
2724
- // This will show error logs on the catcher middleware
2725
- //return ctx.throw(
2726
- // 404,
2727
- // 'Resource Not Found',
2728
- //)
2729
-
2730
- ctx.response.status = 404;
2731
- ctx.response.body = 'Resource Not Found';
2732
- case 4:
2733
- case "end":
2734
- return _context.stop();
2735
- }
2736
- }, _callee);
2737
- }));
2738
- return _render_404_middleware.apply(this, arguments);
2739
- }
2740
- var json_render_router = new Router();
2741
- json_render_router.get('/', render_404_middleware);
2742
- app.use(json_render_router.routes());
2743
- }
2744
-
2745
2712
  function init_cron_job(miolo, config) {
2746
2713
  var _config$onTick;
2747
2714
  var logger = miolo.logger;
@@ -2964,12 +2931,12 @@ function miolo(sconfig, render) {
2964
2931
  // Middleware for final render
2965
2932
  if ((render == null ? void 0 : render.middleware) != undefined) {
2966
2933
  app.use(render.middleware);
2967
- } else if ((render == null ? void 0 : render.ssr) != undefined) {
2968
- init_ssr_render_middleware(app, render, config.http, config == null ? void 0 : config.auth);
2969
2934
  } else {
2970
- init_404_render_middleware(app);
2971
- // init_json_render_middleware(app, render)
2972
- }
2935
+ init_ssr_render_middleware(app, render, config.http, config == null ? void 0 : config.auth);
2936
+ } /* else {
2937
+ init_404_render_middleware(app, render)
2938
+ // init_json_render_middleware(app, render)
2939
+ }*/
2973
2940
 
2974
2941
  var _run = /*#__PURE__*/function () {
2975
2942
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
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 _}from"node:util";import E,{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 N}from"node:fs";import L from"jwt-simple";import U 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"koa-router";import D from"qs";import{renderToString as G}from"react-dom/server";import{CronJob as W}from"cron";import Y from"node:os";import K from"diskspace";import H from"redis";function X(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 Z(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?X(Object(t),!0).forEach((function(r){ee(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):X(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function Q(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 $(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){Q(i,o,n,a,l,"next",e)}function l(e){Q(i,o,n,a,l,"throw",e)}a(void 0)}))}}function ee(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 re=i(import.meta.url),te=n.dirname(re),oe={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:n.resolve(te,"../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:void 0},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 ne(e){var{options:r,defaults:t,silent:o}=e,n=l.createTransport(r,t);function i(){return(i=$((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:ie,timestamp:ae,_label:le,printf:ue,errors:ce}=k,se=(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=ue((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){E.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,E.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:ie(ce({stack:!0}),ae(),a),transports:l})},de=(e,r)=>{var t=ne(r.mail),o=se(r.log,t),n=Z(Z({},r.db.options),{},{log:o}),i={getConnection:()=>a(r.db.config,n),getModel:e=>a(r.db.config,n).getModel(e)},l={config:Z({},r),emailer:t,logger:o,db:i};function u(){return(u=$((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},fe=[401];var pe=i(import.meta.url),me=n.dirname(pe),ve=n.resolve(me,"./miolo.ico"),he=n.resolve(me,"../../../.."),ye={total:0};var ge=i(import.meta.url),be=n.dirname(ge),Se=N(n.resolve(be,"./robots.txt"),"utf8");var _e=(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=$((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=$((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))))},xe=new V;var we=(e,r,t)=>r(null,e.id),ke=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},Re=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Oe=(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||we,d=n||ke,f=i||Re,p=a||"/login",m=l||"/logout",v=new P.Strategy(((r,t,o)=>{f(r,t,o,e.context.miolo)}));function h(){return(h=$((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=Z({store:xe},r.options||{});e.use(F(t,e))}(e,t),U.serializeUser(((r,t)=>{process.nextTick((function(){s(r,t,e.context.miolo)}))})),U.deserializeUser(((r,t)=>{process.nextTick((function(){d(r,t,e.context.miolo)}))})),U.use(v),e.use(U.initialize()),e.use(U.session()),e.use((function(e,r){return h.apply(this,arguments)}));var y=function(){var e=$((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)=>U.authenticate("local",function(){var r=$((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())},qe=(e,r)=>{null!=r&&0!=r.length&&r.map((r=>{function t(){return(t=$((function*(e,t){yield r(e),yield t()}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}))},Ce=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Me=(e,r)=>{var t=e.context.miolo.logger;Ce(r,"cors",(r=>{if("simple"==r)t.debug("Setting CORS the simple way"),e.use(function(){var e=$((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))}})),Ce(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))}))},je=function(){var e=$((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),Je=function(){var e=$((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Te={require:!1,action:"redirect",redirect_url:"/",error_code:401},Ae={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},Ne=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)||je,l=(null==r?void 0:r.after)||(null==e?void 0:e.after)||Je,u=o(Te,(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(Ae,(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?D.parse(r):{}}function Ue(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=$((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=$((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=$((function*(e){yield l(e,"r",function(){var r=$((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=$((function*(e){yield l(e,"r",function(){var r=$((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=$((function*(e){yield l(e,"r",function(){var r=$((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=$((function*(e){yield l(e,"r",function(){var r=$((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=$((function*(e){yield l(e,"w",function(){var r=$((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=$((function*(e){yield l(e,"w",function(){var r=$((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=$((function*(e){yield l(e,"w",function(){var r=$((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)||je,a=(null==r?void 0:r.after)||(null==e?void 0:e.after)||Je,l=o(Te,(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 Fe(e,r,t){var o=e.context.miolo.logger,n=new z;try{var i=Ne(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&&Ue(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=$((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=$((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 Ve=i(import.meta.url),Be=n.dirname(Ve),Ie=N(n.resolve(Be,"fallback_index.html"),"utf8");function ze(e){return e?e/1e6:0}function De(e){return e?e/1e6:0}function Ge(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(ze(Y.freemem()),2),n=Math.round(ze(Y.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)," %)")),K.check("/",(function(e,r){var o=Math.round(De(r.used),2),n=Math.round(De(r.total),2),i=Math.round(De(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 We(e,r){var t=e.context.miolo,o=t.logger,n=[Ge(),...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 W((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 Ye(n,i){var a,l=new r,u=function(e){var r,t=o(oe,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);de(l,u),Me(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=$((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"),fe.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||ve;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(he,""))),e.use(J(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(he,""))),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=$((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=Z(Z({},e.request.fields),e.request.files),ye.total+=1,ye[n]=(ye[n]||0)+1,e.requestId=ye.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(ye[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),"]"),_=parseFloat((T.now()-i)/1e3).toFixed(2),E=_<1?h:_<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=$((function*(e){e.body=Se}))).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=$((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&&_e(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&Ee(l,u.auth.basic),"credentials"==u.auth_type&&Oe(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&&qe(l,c),null!=u&&u.routes){var p=l.context.miolo.db.getConnection();Fe(l,p,u.routes)}null!=(null==i?void 0:i.middleware)?l.use(i.middleware):null!=(null==i?void 0:i.ssr)?function(e,r,t,o){var n=(null==r?void 0:r.html)||Ie;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=$((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=G(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=$((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):function(e,r){function t(){return(t=$((function*(e){e.miolo.logger.debug("render_404_middleware() Not FOUND ".concat(e.url," ")),e.body={},e.response.status=404,e.response.body="Resource Not Found"}))).apply(this,arguments)}var o=new A;o.get("/",(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(l);var g=function(){var r=$((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=$((function*(){yield o.terminate(),l.context.miolo.logger.info("miolo has been shutdowned from ".concat(u.http.hostname,":").concat(u.http.port))})),We(l,null==u?void 0:u.cron),l}));return function(){return r.apply(this,arguments)}}();return l.run=g,l}function Ke(e){var r=H.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 H.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=_(r.get).bind(r),o=_(r.exists).bind(r),n=_(r.set).bind(r),i=_(r.del).bind(r);function a(){return(a=$((function*(e){return yield t(e)}))).apply(this,arguments)}function l(){return(l=$((function*(e){return 1==(yield o(e))}))).apply(this,arguments)}function u(){return u=$((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=$((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{Ye as miolo,Ke as miolo_cacher,ne as miolo_emailer,se 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 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"koa-router";import D from"qs";import{renderToString as G}from"react-dom/server";import{CronJob as W}from"cron";import Y from"node:os";import K from"diskspace";import H from"redis";function X(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 Z(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?X(Object(t),!0).forEach((function(r){ee(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):X(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function Q(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 $(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){Q(i,o,n,a,l,"next",e)}function l(e){Q(i,o,n,a,l,"throw",e)}a(void 0)}))}}function ee(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 re=i(import.meta.url),te=n.dirname(re),oe={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:n.resolve(te,"../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:void 0},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 ne(e){var{options:r,defaults:t,silent:o}=e,n=l.createTransport(r,t);function i(){return(i=$((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:ie,timestamp:ae,_label:le,printf:ue,errors:ce}=k,se=(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=ue((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:ie(ce({stack:!0}),ae(),a),transports:l})},de=(e,r)=>{var t=ne(r.mail),o=se(r.log,t),n=Z(Z({},r.db.options),{},{log:o}),i={getConnection:()=>a(r.db.config,n),getModel:e=>a(r.db.config,n).getModel(e)},l={config:Z({},r),emailer:t,logger:o,db:i};function u(){return(u=$((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},fe=[401];var pe=i(import.meta.url),me=n.dirname(pe),ve=n.resolve(me,"./miolo.ico"),he=n.resolve(me,"../../../.."),ye={total:0};var ge=i(import.meta.url),be=n.dirname(ge),Se=L(n.resolve(be,"./robots.txt"),"utf8");var Ee=(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=$((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)}))},_e=(e,r)=>{var{auth_user:t,realm:o,paths:n}=r;function i(e,r){return a.apply(this,arguments)}function a(){return(a=$((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))))},xe=new V;var we=(e,r,t)=>r(null,e.id),ke=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},Re=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Oe=(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||we,d=n||ke,f=i||Re,p=a||"/login",m=l||"/logout",v=new U.Strategy(((r,t,o)=>{f(r,t,o,e.context.miolo)}));function h(){return(h=$((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=Z({store:xe},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=$((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=$((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())},qe=(e,r)=>{null!=r&&0!=r.length&&r.map((r=>{function t(){return(t=$((function*(e,t){yield r(e),yield t()}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}))},Ce=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Me=(e,r)=>{var t=e.context.miolo.logger;Ce(r,"cors",(r=>{if("simple"==r)t.debug("Setting CORS the simple way"),e.use(function(){var e=$((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))}})),Ce(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))}))},je=function(){var e=$((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),Je=function(){var e=$((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Te={require:!1,action:"redirect",redirect_url:"/",error_code:401},Ae={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},Le=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)||je,l=(null==r?void 0:r.after)||(null==e?void 0:e.after)||Je,u=o(Te,(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(Ae,(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 Ne(e){var r=e.indexOf("?")>=0?e.substr(e.indexOf("?")+1):"";return r?D.parse(r):{}}function Pe(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=$((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=$((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=$((function*(e){yield l(e,"r",function(){var r=$((function*(r){var t=Ne(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=$((function*(e){yield l(e,"r",function(){var r=$((function*(r){var t=Ne(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=$((function*(e){yield l(e,"r",function(){var r=$((function*(r){var t=Ne(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=$((function*(e){yield l(e,"r",function(){var r=$((function*(r){var t=Ne(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=$((function*(e){yield l(e,"w",function(){var r=$((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=$((function*(e){yield l(e,"w",function(){var r=$((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=$((function*(e){yield l(e,"w",function(){var r=$((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 Ue=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)||je,a=(null==r?void 0:r.after)||(null==e?void 0:e.after)||Je,l=o(Te,(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 Fe(e,r,t){var o=e.context.miolo.logger,n=new z;try{var i=Le(t),a=Ue(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&&Pe(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=$((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=$((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=Ne(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 Ve=i(import.meta.url),Be=n.dirname(Ve),Ie=L(n.resolve(Be,"fallback_index.html"),"utf8");function ze(e){return e?e/1e6:0}function De(e){return e?e/1e6:0}function Ge(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(ze(Y.freemem()),2),n=Math.round(ze(Y.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)," %)")),K.check("/",(function(e,r){var o=Math.round(De(r.used),2),n=Math.round(De(r.total),2),i=Math.round(De(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 We(e,r){var t=e.context.miolo,o=t.logger,n=[Ge(),...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 W((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 Ye(n,i){var a,l=new r,u=function(e){var r,t=o(oe,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);de(l,u),Me(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=$((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"),fe.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||ve;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(he,""))),e.use(J(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(he,""))),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=$((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=Z(Z({},e.request.fields),e.request.files),ye.total+=1,ye[n]=(ye[n]||0)+1,e.requestId=ye.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(ye[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=$((function*(e){e.body=Se}))).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=$((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&&Ee(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&_e(l,u.auth.basic),"credentials"==u.auth_type&&Oe(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&&qe(l,c),null!=u&&u.routes){var p=l.context.miolo.db.getConnection();Fe(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)||Ie;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=$((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=G(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=$((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=$((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=$((function*(){yield o.terminate(),l.context.miolo.logger.info("miolo has been shutdowned from ".concat(u.http.hostname,":").concat(u.http.port))})),We(l,null==u?void 0:u.cron),l}));return function(){return r.apply(this,arguments)}}();return l.run=g,l}function Ke(e){var r=H.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 H.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=$((function*(e){return yield t(e)}))).apply(this,arguments)}function l(){return(l=$((function*(e){return 1==(yield o(e))}))).apply(this,arguments)}function u(){return u=$((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=$((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{Ye as miolo,Ke as miolo_cacher,ne as miolo_emailer,se as miolo_logger};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.9.8
2
+ * miolo v0.9.10
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1969,31 +1969,6 @@ function init_ssr_render_middleware(app, render, httpConfig, authConfig) {
1969
1969
  app.use(render_ssr_middleware);
1970
1970
  }
1971
1971
 
1972
- function init_404_render_middleware(app, render) {
1973
- function render_404_middleware(_x) {
1974
- return _render_404_middleware.apply(this, arguments);
1975
- }
1976
- function _render_404_middleware() {
1977
- _render_404_middleware = _asyncToGenerator(function* (ctx) {
1978
- ctx.miolo.logger.debug("render_404_middleware() Not FOUND ".concat(ctx.url, " "));
1979
- ctx.body = {};
1980
-
1981
- // This will show error logs on the catcher middleware
1982
- //return ctx.throw(
1983
- // 404,
1984
- // 'Resource Not Found',
1985
- //)
1986
-
1987
- ctx.response.status = 404;
1988
- ctx.response.body = 'Resource Not Found';
1989
- });
1990
- return _render_404_middleware.apply(this, arguments);
1991
- }
1992
- var json_render_router = new Router();
1993
- json_render_router.get('/', render_404_middleware);
1994
- app.use(json_render_router.routes());
1995
- }
1996
-
1997
1972
  function init_cron_job(miolo, config) {
1998
1973
  var _config$onTick;
1999
1974
  var logger = miolo.logger;
@@ -2214,12 +2189,12 @@ function miolo(sconfig, render) {
2214
2189
  // Middleware for final render
2215
2190
  if ((render === null || render === void 0 ? void 0 : render.middleware) != undefined) {
2216
2191
  app.use(render.middleware);
2217
- } else if ((render === null || render === void 0 ? void 0 : render.ssr) != undefined) {
2218
- init_ssr_render_middleware(app, render, config.http, config === null || config === void 0 ? void 0 : config.auth);
2219
2192
  } else {
2220
- init_404_render_middleware(app);
2221
- // init_json_render_middleware(app, render)
2222
- }
2193
+ init_ssr_render_middleware(app, render, config.http, config === null || config === void 0 ? void 0 : config.auth);
2194
+ } /* else {
2195
+ init_404_render_middleware(app, render)
2196
+ // init_json_render_middleware(app, render)
2197
+ }*/
2223
2198
 
2224
2199
  var _run = /*#__PURE__*/function () {
2225
2200
  var _ref = _asyncToGenerator(function* () {