miolo 0.3.2 → 0.3.5

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.
Files changed (31) hide show
  1. package/dist/cli/miolo.cli.iife.bundle.js +1 -1
  2. package/dist/cli/miolo.cli.iife.bundle.min.js +1 -1
  3. package/dist/cli/miolo.cli.iife.js +1 -1
  4. package/dist/cli/miolo.cli.iife.min.js +1 -1
  5. package/dist/cli/miolo.cli.min.mjs +1 -1
  6. package/dist/cli/miolo.cli.mjs +1 -1
  7. package/dist/cli/miolo.cli.umd.bundle.js +1 -1
  8. package/dist/cli/miolo.cli.umd.bundle.min.js +1 -1
  9. package/dist/cli/miolo.cli.umd.js +1 -1
  10. package/dist/cli/miolo.cli.umd.min.js +1 -1
  11. package/dist/cli-react/miolo.cli-react.iife.bundle.js +1670 -1677
  12. package/dist/cli-react/miolo.cli-react.iife.bundle.js.map +1 -1
  13. package/dist/cli-react/miolo.cli-react.iife.bundle.min.js +42 -49
  14. package/dist/cli-react/miolo.cli-react.iife.js +22 -11
  15. package/dist/cli-react/miolo.cli-react.iife.js.map +1 -1
  16. package/dist/cli-react/miolo.cli-react.iife.min.js +2 -2
  17. package/dist/cli-react/miolo.cli-react.min.mjs +2 -2
  18. package/dist/cli-react/miolo.cli-react.mjs +23 -9
  19. package/dist/cli-react/miolo.cli-react.mjs.map +1 -1
  20. package/dist/cli-react/miolo.cli-react.umd.bundle.js +1669 -1676
  21. package/dist/cli-react/miolo.cli-react.umd.bundle.js.map +1 -1
  22. package/dist/cli-react/miolo.cli-react.umd.bundle.min.js +42 -49
  23. package/dist/cli-react/miolo.cli-react.umd.js +24 -13
  24. package/dist/cli-react/miolo.cli-react.umd.js.map +1 -1
  25. package/dist/cli-react/miolo.cli-react.umd.min.js +2 -2
  26. package/dist/server/miolo.server.cjs +216 -265
  27. package/dist/server/miolo.server.min.mjs +2 -2
  28. package/dist/server/miolo.server.mjs +169 -227
  29. package/dist/server/miolo.server.mjs.map +1 -1
  30. package/dist/server/miolo.server.node.mjs +217 -265
  31. package/package.json +8 -9
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.3.2
2
+ * miolo v0.3.5
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"koa";import{initCalustraRouter as t}from"calustra/router";import o from"assign-deep";import r from"node:path";import{fileURLToPath as n}from"node:url";import i from"node:os";import l from"diskspace";import{cyan as a,yellow as s,green as c,uncolor as u,gray as d,magenta as f,red_light as m,red as p,blue as h}from"tinguir";import{CronJob as v}from"cron";import{getConnection as g}from"calustra";export{getConnection}from"calustra";import y from"nodemailer";import b from"node:util";import _,{transports as x,createLogger as S,format as w}from"winston";import E from"@koa/cors";import k from"koa-proxies";import O from"koa-better-body";import R from"koa-convert";import M from"koa-compress";import{constants as j}from"node:zlib";import q from"koa-mount";import C from"koa-static";import L from"koa-favicon";import{performance as P}from"node:perf_hooks";import U from"koa-session";import A from"koa-redis";import T from"@koa/router";import{readFileSync as I}from"node:fs";import N,{useState as z,useEffect as B}from"react";import{StaticRouter as F}from"react-router-dom/server";import{renderToString as J}from"react-dom/server";import V from"jwt-simple";import D from"basic-auth";import G from"koa-passport";import Y from"passport-local";function K(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function H(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?K(Object(o),!0).forEach((function(t){Z(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):K(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function W(e,t,o,r,n,i,l){try{var a=e[i](l),s=a.value}catch(c){return void o(c)}a.done?t(s):Promise.resolve(s).then(r,n)}function X(e){return function(){var t=this,o=arguments;return new Promise((function(r,n){var i=e.apply(t,o);function l(e){W(i,r,n,l,a,"next",e)}function a(e){W(i,r,n,l,a,"throw",e)}l(void 0)}))}}function Z(e,t,o){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var r=o.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var Q=n(require("url").pathToFileURL(__filename).toString()),$=r.dirname(Q),ee={name:"miolo",http:{port:8001,hostname:"localhost",static:{favicon:r.resolve($,"../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,getUserId:e=>{try{var t=e.state.user.id;if(null!=t)return t}catch(i){}try{var o=e.user.id;if(null!=o)return o}catch(i){}try{if("guest"==e.user.name){var r=e.user.token;if(null!=r)return r}}catch(i){}var n=e.headers["user-id"];if(null!=n)return n},crud:{prefix:"",routes:[]},queries:void 0},catcher:"/sys/jserror",log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/afialapis/miolo.log"},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@afialapis.com",to:"devel@afialapis.com"}},mail:{silent:!0,options:{port:25,host:"mail.afialapis.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@afialapis.com",to:"devel@afialapis.com"}},auth:{},middlewares:[]};function te(e){var t=function(e){function t(e){return e?e/1e6:0}function o(e){return e?e/1e6:0}return function(){var r=Math.round(t(i.freemem()),2),n=Math.round(t(i.totalmem()),2),u=Math.round(100*r/n,2);u>80?e.error("[SERVER][".concat(a("SysCheck"),"] RAM ").concat(s(r)," MB used of ").concat(c(n)," MB (").concat(s(u)," %)")):e.info("[SERVER][".concat(a("SysCheck"),"] RAM ").concat(s(r)," MB used of ").concat(c(n)," MB (").concat(s(u)," %)")),l.check("/",(function(t,r){var n=Math.round(o(r.used),2),i=Math.round(o(r.total),2),l=Math.round(o(r.free),2);l<1?e.error("[SERVER][".concat(a("SysCheck"),"] DISK ").concat(s(n)," GB used of ").concat(c(i)," GB (").concat(s(l)," GB free)")):e.info("[SERVER][".concat(a("SysCheck"),"] DISK ").concat(s(n)," GB used of ").concat(c(i)," GB (").concat(s(l)," GB free)"))}))}}(e);new v("30 * * * *",t,null,!0,"Europe/Madrid")}var{combine:oe,timestamp:re,_label:ne,printf:ie,errors:le}=w,ae=(e,t)=>{var o,r,n={silly:d,debug:f,verbose:a,info:s,warn:m,error:p},i=ie((t=>{var o,r=n[t.level],i=new Date(t.timestamp).toLocaleString((null==e||null===(o=e.format)||void 0===o?void 0:o.locale)||"en"),l="[miolo] ".concat(r(i)," ").concat(r(t.level)," ").concat(t.message);return t.stack?"".concat(l,"\n").concat(t.stack):l})),l=[];e.console.enabled&&l.push(new x.Console({humanReadableUnhandledException:!0,level:(null==e||null===(o=e.console)||void 0===o?void 0:o.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===(r=e.file)||void 0===r?void 0:r.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var c=function(e,t){var o=function(o){_.Transport.call(this,o),o=o||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||t.defaults.name,this.to=e.to||t.defaults.to,this.from=e.from||t.defaults.from,this.humanReadableUnhandledException=o.humanReadableUnhandledException||!0,this.handleExceptions=o.handleExceptions||!0,this.json=o.json||!1,this.colorize=o.colorize||!1};return b.inherits(o,_.Transport),o.prototype.name="MailerLogger",o.prototype.log=function(o,r){var n=this,i="";try{i=o.message.split("\n")[0]}catch(s){i=o.message.toString()}i=u(i);var l=e.name+": ["+o.level.toUpperCase()+"] "+i,a={from:this.from,to:this.to,subject:l,text:u(o.message)};t.send(a,(function(){n.emit("logged"),r(null,!0)}))},o}(e.mail,t);x.MailerLogger=c,l.push(new x.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return S({level:(null==e?void 0:e.level)||"silly",format:oe(le({stack:!0}),re(),i),transports:l})},se=(e,t)=>{var o=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=y.createTransport(e,t);return{send:function(e,t){o?(console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************")):(t||(t=function(e,t){e&&(console.error("NodeMailer error:"),console.error(e)),t&&(console.log("NodeMailer sent mail:"),console.log(t))}),r.sendMail(e,t))},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),r.verify((function(e,t){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:e,defaults:t,silent:o}}(t.mail.options,t.mail.defaults),r=ae(t.log,o);t.db.options.log=r;var n={getConnection:()=>g(t.db.config,t.db.options),getModel:e=>g(t.db.config,t.db.options).getModel(e)},i={config:H({},t),emailer:o,logger:r,db:n};function l(){return(l=X((function*(e,t){e.miolo=i,yield t()}))).apply(this,arguments)}e.use((function(e,t){return l.apply(this,arguments)})),e.context.miolo=i},ce=(e,t,o)=>{try{var r=e[t];if(null!=r&&0!=r)return o(r)}catch(n){}},ue=(e,t)=>{var o=e.context.miolo.logger;ce(t,"cors",(t=>{if("simple"==t)o.debug("Setting CORS the simple way"),e.use(function(){var e=X((function*(e,t){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield t()}));return function(t,o){return e.apply(this,arguments)}}());else{var r=(e=>"object"==typeof e?e:{})(t);o.debug("Setting CORS headers for ".concat(JSON.stringify(r))),e.use(E(r))}})),ce(t,"proxy",(t=>{var[r,n]=(e=>{var t,o,r,n;return null==e&&(e={}),[(null===(t=e)||void 0===t?void 0:t.path)||"/",{target:(null===(o=e)||void 0===o?void 0:o.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(r=e)||void 0===r?void 0:r.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(t);o.debug("Setting Proxy for ".concat(r," to ").concat(n.target," ")),e.use(k(r,n))}))},de=e=>{e.use(M({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:j.Z_SYNC_FLUSH},deflate:{flush:j.Z_SYNC_FLUSH},br:!1})),e.use(R(O({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))},fe=[401];var me=n(require("url").pathToFileURL(__filename).toString()),pe=r.dirname(me),he=r.resolve(pe,"./miolo.ico"),ve=(e,t)=>{var{favicon:o,folders:r}=t;for(var[n,i]of(e.use(L(o||he)),Object.entries(r)))e.use(q(n,C(i,{index:!1})))},ge=(e,t)=>{null!=t&&0!=t.length&&t.map((t=>{function o(){return(o=X((function*(e,o){yield t(e),yield o()}))).apply(this,arguments)}e.use((function(e,t){return o.apply(this,arguments)}))}))},ye=1;var be=new A;var _e=n(require("url").pathToFileURL(__filename).toString()),xe=r.dirname(_e),Se=I(r.resolve(xe,"./robots.txt"),"utf8");var we=n(require("url").pathToFileURL(__filename).toString()),Ee=r.dirname(we),ke=I(r.resolve(Ee,"fallback_index.html"),"utf8");function Oe(e,t,o){return Re.apply(this,arguments)}function Re(){return Re=X((function*(r,n,i){var l,u,d,f,m=new e,v=function(e){return o(ee,e)}(r);se(m,v),de(m),function(e){var t=e.context.miolo.logger;function o(){return(o=X((function*(e){if(e){var o=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof o&&(o=500):(o=406,e.message="Unsupported type"),fe.indexOf(o)>=0?t.warn("".concat(this.method," ").concat(this.url," - ").concat(o,": ").concat(e.message)):t.error(e),this.headerSent||!this.writable)return t.debug("headers were already sent, returning early"),void(e.headerSent=!0);this.type="json",this.status=o,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 o.apply(this,arguments)}}(m),ve(m,null===(l=v.http)||void 0===l?void 0:l.static),function(e){function t(){return(t=X((function*(e,t){var o=e.miolo.logger;ye+=1,e.requestId=ye,e.request.body=H(H({},e.request.fields),e.request.files);var r=P.now(),n=e.headers["x-real-ip"]||"127.0.0.1";e.request.ip=n,o.info("req begin ".concat(e.requestId," - ip ").concat(n," - ").concat(a(e.request.method)," ").concat(a(e.request.url)," ").concat(null!=e.request.body?JSON.stringify(e.request.body):"")),yield t();var i=void 0;try{null!=e.state.user&&(i=e.state.user)}catch(g){}try{null!=e.user&&(i=e.user)}catch(g){}var l,u,d,f="";if(null!=i)if(null!==(l=i)&&void 0!==l&&l.id)f=" - uid ".concat(null===(d=i)||void 0===d?void 0:d.id);else if(null!==(u=i)&&void 0!==u&&u.token){var m;f=" - token ".concat(null===(m=i)||void 0===m?void 0:m.token)}var h=parseFloat((P.now()-r)/1e3).toFixed(2),v=h<1?c:h<2?s:p;o.info("req end ".concat(e.requestId).concat(f," => ").concat(v("DONE in ".concat(h," seconds"))))}))).apply(this,arguments)}e.use((function(e,o){return t.apply(this,arguments)}))}(m),function(e,t){e.keys=[t.secret||"*secret*"];var o=H({store:be},t.options||{});e.use(U(o,e))}(m,null==v?void 0:v.session),function(e){function t(){return(t=X((function*(e){e.body=Se}))).apply(this,arguments)}var o=new T;o.get("/robots.txt",(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(m);var g=null==v?void 0:v.catcher;if(g&&function(e,t){function o(){return o=X((function*(e){var{error:t,path:o,agent:r}=e.request.body,n=e.miolo.logger,i="".concat(p("[JS Error]")," on ").concat(h(o),": ").concat(t.msg,"\n")+"".concat(p("[JS Error]")," File => ").concat(t.file,"\n")+"".concat(p("[JS Error]")," Line => ").concat(t.line,"\n")+"".concat(p("[JS Error]")," Col => ").concat(t.col,"\n")+"".concat(p("[JS Error]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(p("[JS Error]")," Agent => ").concat(r);n.error(i),e.body={result:1}})),o.apply(this,arguments)}var r=new T;r.post(t,(function(e){return o.apply(this,arguments)})),e.use(r.routes())}(m,g),null!=v&&null!==(u=v.auth)&&void 0!==u&&u.guest){var{init_guest_auth_middleware:y}=yield Promise.resolve().then((function(){return Le}));y(m,v.auth.guest,null==v?void 0:v.session)}if(null!=v&&null!==(d=v.auth)&&void 0!==d&&d.basic){var{init_basic_auth_middleware:b}=yield Promise.resolve().then((function(){return Pe}));b(m,v.auth.basic)}if(null!=v&&null!==(f=v.auth)&&void 0!==f&&f.passport){var{init_passport_auth_middleware:_}=yield Promise.resolve().then((function(){return Ie}));_(m,v.auth.passport)}if(null!=v&&v.routes){var x=m.context.miolo.db.getConnection();t(m,x,v.routes)}var S=null==v?void 0:v.middlewares;return S&&ge(m,S),ue(m,v.http),null==n||null!=n.html?function(e,t){function o(){return(o=X((function*(e){var o=e.miolo.logger,r=e.requestId,n=e.headers["x-real-ip"]||"127.0.0.1",i=e.request.method,l=e.request.url,s=null!=t?"provided html":"fallback page";o.info("".concat(r," - ").concat(n," : ").concat(a(i)," ").concat(a(l)," => Rendering ").concat(s)),e.body=t||ke}))).apply(this,arguments)}var r=new T;r.get("/",(function(e){return o.apply(this,arguments)})),e.use(r.routes())}(m,null==n?void 0:n.html):null!=n.middleware&&m.use(n.middleware),m.listen(v.http.port,v.http.hostname,(function(){m.context.miolo.logger.info("miolo is listening on ".concat(v.http.hostname,":").concat(v.http.port)),te(m.context.miolo.logger),null!=i&&i()})),m})),Re.apply(this,arguments)}var Me=N.createContext(),je=e=>{var{context:t,children:o}=e,[r,n]=z(t);return B((()=>{n(t)}),[t]),N.createElement(Me.Provider,{value:{context:r,setContext:n}},o)},qe=e=>{var{url:t,context:o,children:r}=e;return N.createElement(F,{location:t},N.createElement(je,{context:o},r))};function Ce(e,t,o){var r='\n\t\t<!DOCTYPE html>\n\t\t<html lang="en">\n\t\t<head>\n\t\t\t<meta charset="utf-8">\n\t\t\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name="viewport" content="width=device-width, initial-scale=1">\n\t\t\t<meta name="description" content="miolo" />\n\t\t\t<meta name="keywords" content="miolo web" />\n\t\t\t<meta name="author" content="miolo.afialapis.com" />\n\n\t\t\t\x3c!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --\x3e \n\t\t\t\x3c!--<link rel="apple-touch-icon-precomposed" href="/favicon.ico"/>--\x3e\n\t\t\t\x3c!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. --\x3e\n\t\t\t<link rel="icon" href="/favicon.ico"/>\n\n\t\t\t{styles}\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t<\/script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id="root">{children}</div>\n\t\t\t{bundle}\n\t\t</body>\n\t\t</html>\n ';try{null!=(null==o?void 0:o.html)&&(r=o.html)}catch(c){}try{null!=(null==o?void 0:o.port)&&(isNaN(parseInt(o.port))||parseInt(o.port))}catch(c){}try{!1!==(null==o?void 0:o.css)}catch(c){}var n="",i="",l=e=>{try{return t(e)}catch(o){return e.miolo.logger.error("Missing renderer in the render middleware"),(e=>{var{ctx:t,error:o}=e;return N.createElement("div",null,"[MIOLO-SERVER_TOOLS] Missing SSR renderer: ".concat(o.toString()))})({ctx:e,error:o})}},a=function(){var t=X((function*(t){var o={};try{o=yield e(t)}catch(r){t.miolo.logger.error("Error produced by loader in the render middleware"),t.miolo.logger.error(r)}return o}));return function(e){return t.apply(this,arguments)}}();function s(){return(s=X((function*(e){var t=yield a(e),o=!1;try{o=!0===(null==e?void 0:e.isAuthenticated())}catch(m){}try{o||(o="guest"===e.user.name&&null!=e.user.token)}catch(m){}var s=void 0;try{null!=e.state.user&&(s=e.state.user)}catch(c){}try{null!=e.user&&(s=e.user)}catch(c){}var u={user:s,authenticated:o,ssr_data:t,extra:null==e?void 0:e.extra},d=J(N.createElement(qe,{url:e.url,context:u},(()=>l(e)))),f=r.replace("{context}",JSON.stringify(u,null,2)).replace(/{bundleURL}/g,n).replace("{children}",d).replace("{styles}",i).replace("{bundle}",n);e.body=f}))).apply(this,arguments)}return function(e){return s.apply(this,arguments)}}var Le=Object.freeze({__proto__:null,init_guest_auth_middleware:(e,t,o)=>{var r=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=t;if(null!=e)return e(o||{})}catch(n){}return function(e,t){var o=Math.random().toString(),r=null==e?void 0:e.secret;r||(r="miolo_unsafe_secret",t.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:o};return V.encode(n,r)}(o||{},r)};function i(){return i=X((function*(e,t){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),r.debug("Guest token conceeded"));var l=function(e){var t,o=null==e||null===(t=e.options)||void 0===t?void 0:t.maxAge;isNaN(o)&&(o=86400);var r=new Date;return r.setSeconds(r.getSeconds()+o),{expires:r,httpOnly:!1}}(o);e.cookies.set("token",i,l),e.user={name:"guest",token:i},yield t()})),i.apply(this,arguments)}e.use((function(e,t){return i.apply(this,arguments)}))}}),Pe=Object.freeze({__proto__:null,init_basic_auth_middleware:(e,t)=>{var{auth_user:o,realm:r,paths:n}=t;function i(e,t){return l.apply(this,arguments)}function l(){return(l=X((function*(e,t){e.user=null;var n=D(e),i=()=>e.throw(401,null,{headers:{"WWW-Authenticate":'Basic realm="'+r.replace(/"/g,'\\"')+'"'}});if(!n)return i();var l=yield o(n.name,n.pass);if(!1===l||null==l)return i();e.user=l,yield t()}))).apply(this,arguments)}r||(r="Secure Area"),null==n||0==n.length?e.use(i):n.map((t=>e.use(q(t,i))))}}),Ue=(e,t,o)=>t(null,e.id),Ae=(e,t,o)=>{t(Error("You need to define auth.passport.find_user_by_id"),null)},Te=(e,t,o,r)=>{o(Error("You need to define auth.passport.local_auth_user"),null)},Ie=Object.freeze({__proto__:null,init_passport_auth_middleware:(e,t)=>{var{get_user_id:o,find_user_by_id:r,local_auth_user:n,url_login:i,url_logout:l,url_login_redirect:a,url_logout_redirect:s}=t,c=o||Ue,u=r||Ae,d=n||Te,f=i||"/login",m=l||"/logout",p=new Y.Strategy(((t,o,r)=>{d(t,o,r,e.context.miolo)}));G.serializeUser(((t,o)=>{process.nextTick((function(){c(t,o,e.context.miolo)}))})),G.deserializeUser(((t,o)=>{process.nextTick((function(){u(t,o,e.context.miolo)}))})),G.use(p),e.use(G.initialize()),e.use(G.session());var h=function(){var e=X((function*(e,t){e.isAuthenticated()?(e.logout(),e.body={success:!0},null!=s&&e.redirect(s)):(e.body={success:!1},e.throw(401))}));return function(t,o){return e.apply(this,arguments)}}(),v=new T;v.post(f,((e,t)=>G.authenticate("local",(function(t,o,r,n){if(!1!==o)return e.body={success:!0,user:o,authenticated:!0},null!=a&&e.redirect(a),e.login(o);e.body={success:!1,user:void 0,authenticated:!1,info:r,error:t},e.throw(401)}))(e))),v.get(m,h),v.post(m,h),e.use(v.routes())}});export{qe as AppSsr,Ce as init_render_middleware,Oe as miolo};
11
+ import e from"koa";import t from"assign-deep";import o from"node:path";import{fileURLToPath as r}from"node:url";import{getConnection as n}from"calustra";export{getConnection}from"calustra";import i from"nodemailer";import{uncolor as l,gray as a,magenta as s,cyan as c,yellow as u,red_light as d,red as f,green as m,blue as p}from"tinguir";import h from"node:util";import v,{transports as g,createLogger as y,format as b}from"winston";import _ from"koa-better-body";import S from"koa-convert";import x from"koa-compress";import{constants as w}from"node:zlib";import E from"koa-mount";import k from"koa-static";import O from"koa-favicon";import{performance as R}from"node:perf_hooks";import M from"koa-session";import j from"koa-redis";import L from"@koa/router";import{readFileSync as q}from"node:fs";import{initCalustraRouter as P}from"calustra/router";import C from"@koa/cors";import T from"koa-proxies";import U from"node:os";import A from"diskspace";import{CronJob as B}from"cron";import I from"react";import{renderToString as N}from"react-dom/server";import z from"jwt-simple";import F from"basic-auth";import J from"koa-passport";import V from"passport-local";function D(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function G(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?D(Object(o),!0).forEach((function(t){H(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):D(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function Y(e,t,o,r,n,i,l){try{var a=e[i](l),s=a.value}catch(c){return void o(c)}a.done?t(s):Promise.resolve(s).then(r,n)}function K(e){return function(){var t=this,o=arguments;return new Promise((function(r,n){var i=e.apply(t,o);function l(e){Y(i,r,n,l,a,"next",e)}function a(e){Y(i,r,n,l,a,"throw",e)}l(void 0)}))}}function H(e,t,o){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var r=o.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}var W=r(require("url").pathToFileURL(__filename).toString()),X=o.dirname(W),Z={name:"miolo",http:{port:8001,hostname:"localhost",static:{favicon:o.resolve(X,"../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,getUserId:e=>{try{var t=e.state.user.id;if(null!=t)return t}catch(i){}try{var o=e.user.id;if(null!=o)return o}catch(i){}try{if("guest"==e.user.name){var r=e.user.token;if(null!=r)return r}}catch(i){}var n=e.headers["user-id"];if(null!=n)return n},crud:{prefix:"",routes:[]},queries:void 0},catcher:"/sys/jserror",log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/afialapis/miolo.log"},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@afialapis.com",to:"devel@afialapis.com"}},mail:{silent:!0,options:{port:25,host:"mail.afialapis.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@afialapis.com",to:"devel@afialapis.com"}},auth:{},middlewares:[]};var{combine:Q,timestamp:$,_label:ee,printf:te,errors:oe}=b,re=(e,t)=>{var o,r,n={silly:a,debug:s,verbose:c,info:u,warn:d,error:f},i=te((t=>{var o,r=n[t.level],i=new Date(t.timestamp).toLocaleString((null==e||null===(o=e.format)||void 0===o?void 0:o.locale)||"en"),l="[miolo] ".concat(r(i)," ").concat(r(t.level)," ").concat(t.message);return t.stack?"".concat(l,"\n").concat(t.stack):l})),m=[];e.console.enabled&&m.push(new g.Console({humanReadableUnhandledException:!0,level:(null==e||null===(o=e.console)||void 0===o?void 0:o.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));e.file.enabled&&m.push(new g.File({filename:e.file.filename,level:(null==e||null===(r=e.file)||void 0===r?void 0:r.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var p=function(e,t){var o=function(o){v.Transport.call(this,o),o=o||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||t.defaults.name,this.to=e.to||t.defaults.to,this.from=e.from||t.defaults.from,this.humanReadableUnhandledException=o.humanReadableUnhandledException||!0,this.handleExceptions=o.handleExceptions||!0,this.json=o.json||!1,this.colorize=o.colorize||!1};return h.inherits(o,v.Transport),o.prototype.name="MailerLogger",o.prototype.log=function(o,r){var n=this,i="";try{i=o.message.split("\n")[0]}catch(c){i=o.message.toString()}i=l(i);var a=e.name+": ["+o.level.toUpperCase()+"] "+i,s={from:this.from,to:this.to,subject:a,text:l(o.message)};t.send(s,(function(){n.emit("logged"),r(null,!0)}))},o}(e.mail,t);g.MailerLogger=p,m.push(new g.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return y({level:(null==e?void 0:e.level)||"silly",format:Q(oe({stack:!0}),$(),i),transports:m})},ne=(e,t)=>{var o=function(e,t){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=i.createTransport(e,t);return{send:function(e,t){o?(console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************")):(t||(t=function(e,t){e&&(console.error("NodeMailer error:"),console.error(e)),t&&(console.log("NodeMailer sent mail:"),console.log(t))}),r.sendMail(e,t))},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),r.verify((function(e,t){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:e,defaults:t,silent:o}}(t.mail.options,t.mail.defaults),r=re(t.log,o);t.db.options.log=r;var l={getConnection:()=>n(t.db.config,t.db.options),getModel:e=>n(t.db.config,t.db.options).getModel(e)},a={config:G({},t),emailer:o,logger:r,db:l};function s(){return(s=K((function*(e,t){e.miolo=a,yield t()}))).apply(this,arguments)}e.use((function(e,t){return s.apply(this,arguments)})),e.context.miolo=a},ie=e=>{e.use(x({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:w.Z_SYNC_FLUSH},deflate:{flush:w.Z_SYNC_FLUSH},br:!1})),e.use(S(_({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))},le=[401];var ae=r(require("url").pathToFileURL(__filename).toString()),se=o.dirname(ae),ce=o.resolve(se,"./miolo.ico"),ue=(e,t)=>{var{favicon:o,folders:r}=t;for(var[n,i]of(e.use(O(o||ce)),Object.entries(r)))e.use(E(n,k(i,{index:!1})))},de=1;var fe=new j;var me=r(require("url").pathToFileURL(__filename).toString()),pe=o.dirname(me),he=q(o.resolve(pe,"./robots.txt"),"utf8");var ve=(e,t)=>{null!=t&&0!=t.length&&t.map((t=>{function o(){return(o=K((function*(e,o){yield t(e),yield o()}))).apply(this,arguments)}e.use((function(e,t){return o.apply(this,arguments)}))}))},ge=(e,t,o)=>{try{var r=e[t];if(null!=r&&0!=r)return o(r)}catch(n){}},ye=(e,t)=>{var o=e.context.miolo.logger;ge(t,"cors",(t=>{if("simple"==t)o.debug("Setting CORS the simple way"),e.use(function(){var e=K((function*(e,t){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield t()}));return function(t,o){return e.apply(this,arguments)}}());else{var r=(e=>"object"==typeof e?e:{})(t);o.debug("Setting CORS headers for ".concat(JSON.stringify(r))),e.use(C(r))}})),ge(t,"proxy",(t=>{var[r,n]=(e=>{var t,o,r,n;return null==e&&(e={}),[(null===(t=e)||void 0===t?void 0:t.path)||"/",{target:(null===(o=e)||void 0===o?void 0:o.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(r=e)||void 0===r?void 0:r.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(t);o.debug("Setting Proxy for ".concat(r," to ").concat(n.target," ")),e.use(T(r,n))}))};function be(e){var t=function(e){function t(e){return e?e/1e6:0}function o(e){return e?e/1e6:0}return function(){var r=Math.round(t(U.freemem()),2),n=Math.round(t(U.totalmem()),2),i=Math.round(100*r/n,2);i>80?e.error("[SERVER][".concat(c("SysCheck"),"] RAM ").concat(u(r)," MB used of ").concat(m(n)," MB (").concat(u(i)," %)")):e.info("[SERVER][".concat(c("SysCheck"),"] RAM ").concat(u(r)," MB used of ").concat(m(n)," MB (").concat(u(i)," %)")),A.check("/",(function(t,r){var n=Math.round(o(r.used),2),i=Math.round(o(r.total),2),l=Math.round(o(r.free),2);l<1?e.error("[SERVER][".concat(c("SysCheck"),"] DISK ").concat(u(n)," GB used of ").concat(m(i)," GB (").concat(u(l)," GB free)")):e.info("[SERVER][".concat(c("SysCheck"),"] DISK ").concat(u(n)," GB used of ").concat(m(i)," GB (").concat(u(l)," GB free)"))}))}}(e);new B("30 * * * *",t,null,!0,"Europe/Madrid")}function _e(e,t,o){return Se.apply(this,arguments)}function Se(){return Se=K((function*(o,r,n){var i,l,a,s,d=new e,h=function(e){return t(Z,e)}(o);ne(d,h),ie(d),function(e){var t=e.context.miolo.logger;function o(){return(o=K((function*(e){if(e){var o=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof o&&(o=500):(o=406,e.message="Unsupported type"),le.indexOf(o)>=0?t.warn("".concat(this.method," ").concat(this.url," - ").concat(o,": ").concat(e.message)):t.error(e),this.headerSent||!this.writable)return t.debug("headers were already sent, returning early"),void(e.headerSent=!0);this.type="json",this.status=o,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 o.apply(this,arguments)}}(d),ue(d,null===(i=h.http)||void 0===i?void 0:i.static),function(e){function t(){return(t=K((function*(e,t){var o=e.miolo.logger;de+=1,e.requestId=de,e.request.body=G(G({},e.request.fields),e.request.files);var r=R.now(),n=e.headers["x-real-ip"]||"127.0.0.1";e.request.ip=n,o.info("req begin ".concat(e.requestId," - ip ").concat(n," - ").concat(c(e.request.method)," ").concat(c(e.request.url)," ").concat(null!=e.request.body?JSON.stringify(e.request.body):"")),yield t();var i=void 0;try{null!=e.state.user&&(i=e.state.user)}catch(g){}try{null!=e.user&&(i=e.user)}catch(g){}var l,a,s,d="";if(null!=i)if(null!==(l=i)&&void 0!==l&&l.id)d=" - uid ".concat(null===(s=i)||void 0===s?void 0:s.id);else if(null!==(a=i)&&void 0!==a&&a.token){var p;d=" - token ".concat(null===(p=i)||void 0===p?void 0:p.token)}var h=parseFloat((R.now()-r)/1e3).toFixed(2),v=h<1?m:h<2?u:f;o.info("req end ".concat(e.requestId).concat(d," => ").concat(v("DONE in ".concat(h," seconds"))))}))).apply(this,arguments)}e.use((function(e,o){return t.apply(this,arguments)}))}(d),function(e,t){e.keys=[t.secret||"*secret*"];var o=G({store:fe},t.options||{});e.use(M(o,e))}(d,null==h?void 0:h.session),function(e){function t(){return(t=K((function*(e){e.body=he}))).apply(this,arguments)}var o=new L;o.get("/robots.txt",(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(d);var v=null==h?void 0:h.catcher;if(v&&function(e,t){function o(){return o=K((function*(e){var{error:t,path:o,agent:r}=e.request.body,n=e.miolo.logger,i="".concat(f("[JS Error]")," on ").concat(p(o),": ").concat(t.msg,"\n")+"".concat(f("[JS Error]")," File => ").concat(t.file,"\n")+"".concat(f("[JS Error]")," Line => ").concat(t.line,"\n")+"".concat(f("[JS Error]")," Col => ").concat(t.col,"\n")+"".concat(f("[JS Error]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(f("[JS Error]")," Agent => ").concat(r);n.error(i),e.body={result:1}})),o.apply(this,arguments)}var r=new L;r.post(t,(function(e){return o.apply(this,arguments)})),e.use(r.routes())}(d,v),null!=h&&null!==(l=h.auth)&&void 0!==l&&l.guest){var{init_guest_auth_middleware:g}=yield Promise.resolve().then((function(){return Ee}));g(d,h.auth.guest,null==h?void 0:h.session)}if(null!=h&&null!==(a=h.auth)&&void 0!==a&&a.basic){var{init_basic_auth_middleware:y}=yield Promise.resolve().then((function(){return ke}));y(d,h.auth.basic)}if(null!=h&&null!==(s=h.auth)&&void 0!==s&&s.passport){var{init_passport_auth_middleware:b}=yield Promise.resolve().then((function(){return je}));b(d,h.auth.passport)}if(null!=h&&h.routes){var _=d.context.miolo.db.getConnection();P(d,_,h.routes)}var S=null==h?void 0:h.middlewares;if(S&&ve(d,S),ye(d,h.http),null==r||null!=r.html){var{init_route_html_render:x}=yield Promise.resolve().then((function(){return Ce}));x(d,null==r?void 0:r.html)}else null!=r.middleware&&d.use(r.middleware);return d.listen(h.http.port,h.http.hostname,(function(){d.context.miolo.logger.info("miolo is listening on ".concat(h.http.hostname,":").concat(h.http.port)),be(d.context.miolo.logger),null!=n&&n()})),d})),Se.apply(this,arguments)}var xe=e=>{var{ctx:t,error:o}=e;return I.createElement("div",null,"[MIOLO-SERVER_TOOLS] Missing SSR renderer: ".concat(o.toString()))};function we(e,t,o){var r='\n\t\t<!DOCTYPE html>\n\t\t<html lang="en">\n\t\t<head>\n\t\t\t<meta charset="utf-8">\n\t\t\t<meta http-equiv="X-UA-Compatible" content="IE=edge">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name="viewport" content="width=device-width, initial-scale=1">\n\t\t\t<meta name="description" content="miolo" />\n\t\t\t<meta name="keywords" content="miolo web" />\n\t\t\t<meta name="author" content="miolo.afialapis.com" />\n\n\t\t\t\x3c!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --\x3e \n\t\t\t\x3c!--<link rel="apple-touch-icon-precomposed" href="/favicon.ico"/>--\x3e\n\t\t\t\x3c!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. --\x3e\n\t\t\t<link rel="icon" href="/favicon.ico"/>\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t<\/script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id="root">{children}</div>\n\t\t</body>\n\t\t</html>\n ';try{null!=(null==o?void 0:o.html)&&(r=o.html)}catch(l){}var n=function(){var t=K((function*(t){var o={};try{o=yield e(t)}catch(r){t.miolo.logger.error("Error produced by loader in the render middleware"),t.miolo.logger.error(r)}return o}));return function(e){return t.apply(this,arguments)}}();function i(){return(i=K((function*(e){var o=yield n(e),i=!1;try{i=!0===(null==e?void 0:e.isAuthenticated())}catch(d){}try{i||(i="guest"===e.user.name&&null!=e.user.token)}catch(d){}var a=void 0;try{null!=e.state.user&&(a=e.state.user)}catch(l){}try{null!=e.user&&(a=e.user)}catch(l){}var s={user:a,authenticated:i,ssr_data:o,extra:null==e?void 0:e.extra},c="";try{c=N(t(e,s))}catch(f){e.miolo.logger.error("Missing renderer in the render middleware"),e.miolo.logger.error(f),c=N(I.createElement(xe,{ctx:e,error:f}))}var u=r.replace("{context}",JSON.stringify(s,null,2)).replace("{children}",c);e.miolo.logger.debug("render_middleware() rendered HTML (".concat(Buffer.byteLength(c,"utf8")," bytes of SSR content, ").concat(Buffer.byteLength(u,"utf8")," bytes total) ")),e.body=u}))).apply(this,arguments)}return function(e){return i.apply(this,arguments)}}var Ee=Object.freeze({__proto__:null,init_guest_auth_middleware:(e,t,o)=>{var r=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=t;if(null!=e)return e(o||{})}catch(n){}return function(e,t){var o=Math.random().toString(),r=null==e?void 0:e.secret;r||(r="miolo_unsafe_secret",t.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:o};return z.encode(n,r)}(o||{},r)};function i(){return i=K((function*(e,t){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),r.debug("Guest token conceeded"));var l=function(e){var t,o=null==e||null===(t=e.options)||void 0===t?void 0:t.maxAge;isNaN(o)&&(o=86400);var r=new Date;return r.setSeconds(r.getSeconds()+o),{expires:r,httpOnly:!1}}(o);e.cookies.set("token",i,l),e.user={name:"guest",token:i},yield t()})),i.apply(this,arguments)}e.use((function(e,t){return i.apply(this,arguments)}))}}),ke=Object.freeze({__proto__:null,init_basic_auth_middleware:(e,t)=>{var{auth_user:o,realm:r,paths:n}=t;function i(e,t){return l.apply(this,arguments)}function l(){return(l=K((function*(e,t){e.user=null;var n=F(e),i=()=>e.throw(401,null,{headers:{"WWW-Authenticate":'Basic realm="'+r.replace(/"/g,'\\"')+'"'}});if(!n)return i();var l=yield o(n.name,n.pass);if(!1===l||null==l)return i();e.user=l,yield t()}))).apply(this,arguments)}r||(r="Secure Area"),null==n||0==n.length?e.use(i):n.map((t=>e.use(E(t,i))))}}),Oe=(e,t,o)=>t(null,e.id),Re=(e,t,o)=>{t(Error("You need to define auth.passport.find_user_by_id"),null)},Me=(e,t,o,r)=>{o(Error("You need to define auth.passport.local_auth_user"),null)},je=Object.freeze({__proto__:null,init_passport_auth_middleware:(e,t)=>{var{get_user_id:o,find_user_by_id:r,local_auth_user:n,url_login:i,url_logout:l,url_login_redirect:a,url_logout_redirect:s}=t,c=o||Oe,u=r||Re,d=n||Me,f=i||"/login",m=l||"/logout",p=new V.Strategy(((t,o,r)=>{d(t,o,r,e.context.miolo)}));J.serializeUser(((t,o)=>{process.nextTick((function(){c(t,o,e.context.miolo)}))})),J.deserializeUser(((t,o)=>{process.nextTick((function(){u(t,o,e.context.miolo)}))})),J.use(p),e.use(J.initialize()),e.use(J.session());var h=function(){var e=K((function*(e,t){e.isAuthenticated()?(e.logout(),e.body={success:!0},null!=s&&e.redirect(s)):(e.body={success:!1},e.throw(401))}));return function(t,o){return e.apply(this,arguments)}}(),v=new L;v.post(f,((e,t)=>J.authenticate("local",(function(t,o,r,n){if(!1!==o)return e.body={success:!0,user:o,authenticated:!0},null!=a&&e.redirect(a),e.login(o);e.body={success:!1,user:void 0,authenticated:!1,info:r,error:t},e.throw(401)}))(e))),v.get(m,h),v.post(m,h),e.use(v.routes())}}),Le=r(require("url").pathToFileURL(__filename).toString()),qe=o.dirname(Le),Pe=q(o.resolve(qe,"fallback_index.html"),"utf8");var Ce=Object.freeze({__proto__:null,init_route_html_render:function(e,t){function o(){return(o=K((function*(e){var o=e.miolo.logger,r=e.requestId,n=e.headers["x-real-ip"]||"127.0.0.1",i=e.request.method,l=e.request.url,a=null!=t?"provided html":"fallback page";o.info("".concat(r," - ").concat(n," : ").concat(c(i)," ").concat(c(l)," => Rendering ").concat(a)),e.body=t||Pe}))).apply(this,arguments)}var r=new L;r.get("/",(function(e){return o.apply(this,arguments)})),e.use(r.routes())}});export{we as init_render_middleware,_e as miolo};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.3.2
2
+ * miolo v0.3.5
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -9,21 +9,15 @@
9
9
  * @license MIT
10
10
  */
11
11
  import Koa from 'koa';
12
- import { initCalustraRouter } from 'calustra/router';
13
12
  import merge from 'assign-deep';
14
13
  import path from 'node:path';
15
14
  import { fileURLToPath } from 'node:url';
16
- import os from 'node:os';
17
- import diskspace from 'diskspace';
18
- import { cyan, yellow, green, uncolor, gray, magenta, red_light, red, blue } from 'tinguir';
19
- import { CronJob } from 'cron';
20
15
  import { getConnection } from 'calustra';
21
16
  export { getConnection } from 'calustra';
22
17
  import nodemailer from 'nodemailer';
18
+ import { uncolor, gray, magenta, cyan, yellow, red_light, red, green, blue } from 'tinguir';
23
19
  import util from 'node:util';
24
20
  import winston, { transports, createLogger, format } from 'winston';
25
- import koa_cors from '@koa/cors';
26
- import koa_proxy from 'koa-proxies';
27
21
  import koa_body_parser from 'koa-better-body';
28
22
  import koa_convert from 'koa-convert';
29
23
  import koa_compress from 'koa-compress';
@@ -36,8 +30,13 @@ import koa_session from 'koa-session';
36
30
  import RedisStore from 'koa-redis';
37
31
  import Router from '@koa/router';
38
32
  import { readFileSync } from 'node:fs';
39
- import React, { useState, useEffect } from 'react';
40
- import { StaticRouter } from 'react-router-dom/server';
33
+ import { initCalustraRouter } from 'calustra/router';
34
+ import koa_cors from '@koa/cors';
35
+ import koa_proxy from 'koa-proxies';
36
+ import os from 'node:os';
37
+ import diskspace from 'diskspace';
38
+ import { CronJob } from 'cron';
39
+ import React from 'react';
41
40
  import { renderToString } from 'react-dom/server';
42
41
  import jwt from 'jwt-simple';
43
42
  import auth from 'basic-auth';
@@ -404,43 +403,6 @@ function init_config(config) {
404
403
  return merge(base_config, config);
405
404
  }
406
405
 
407
- function init_sys_check_and_log(logger) {
408
- function toMB(bytes) {
409
- if (!bytes) return 0;
410
- return bytes / 1000000;
411
- }
412
- function toGB(kbytes) {
413
- if (!kbytes) return 0;
414
- return kbytes / 1000000;
415
- }
416
- function sys_check_and_log() {
417
- var used = Math.round(toMB(os.freemem()), 2);
418
- var total = Math.round(toMB(os.totalmem()), 2);
419
- var perc = Math.round(used * 100 / total, 2);
420
- if (perc > 80) {
421
- logger.error("[SERVER][".concat(cyan('SysCheck'), "] RAM ").concat(yellow(used), " MB used of ").concat(green(total), " MB (").concat(yellow(perc), " %)"));
422
- } else {
423
- logger.info("[SERVER][".concat(cyan('SysCheck'), "] RAM ").concat(yellow(used), " MB used of ").concat(green(total), " MB (").concat(yellow(perc), " %)"));
424
- }
425
- diskspace.check('/', function (err, result) {
426
- var used = Math.round(toGB(result.used), 2);
427
- var total = Math.round(toGB(result.total), 2);
428
- var free = Math.round(toGB(result.free), 2);
429
- if (free < 1) {
430
- logger.error("[SERVER][".concat(cyan('SysCheck'), "] DISK ").concat(yellow(used), " GB used of ").concat(green(total), " GB (").concat(yellow(free), " GB free)"));
431
- } else {
432
- logger.info("[SERVER][".concat(cyan('SysCheck'), "] DISK ").concat(yellow(used), " GB used of ").concat(green(total), " GB (").concat(yellow(free), " GB free)"));
433
- }
434
- });
435
- }
436
- return sys_check_and_log;
437
- }
438
-
439
- function init_cron(logger) {
440
- var sys_check_and_log = init_sys_check_and_log(logger);
441
- new CronJob('30 * * * *', sys_check_and_log, null, true, 'Europe/Madrid');
442
- }
443
-
444
406
  function init_emailer(options, defaults) {
445
407
  var silent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
446
408
  var nmailer = nodemailer.createTransport(options, defaults);
@@ -653,64 +615,6 @@ var init_context_middleware = (app, config) => {
653
615
  app.context.miolo = mioloContext;
654
616
  };
655
617
 
656
- var _if_options = (http, field, callback) => {
657
- try {
658
- var val = http[field];
659
- if (val != undefined && val != false) {
660
- return callback(val);
661
- }
662
- } catch (_) {}
663
- };
664
- var _cors_options = options => {
665
- if (typeof options == 'object') {
666
- return options;
667
- }
668
- return {};
669
- };
670
- var _proxy_options = options => {
671
- var _options, _options2, _options3, _options4;
672
- if (options == undefined) {
673
- options = {};
674
- }
675
- var tpath = ((_options = options) === null || _options === void 0 ? void 0 : _options.path) || '/';
676
- var target = ((_options2 = options) === null || _options2 === void 0 ? void 0 : _options2.target) || "https://proxy.miolo.com";
677
- var changeOrigin = ((_options3 = options) === null || _options3 === void 0 ? void 0 : _options3.changeOrigin) != undefined ? options.changeOrigin : true;
678
- var logs = ((_options4 = options) === null || _options4 === void 0 ? void 0 : _options4.logs) != undefined ? options.logs : true;
679
- var toptions = {
680
- target,
681
- changeOrigin,
682
- logs
683
- };
684
- return [tpath, toptions];
685
- };
686
- var init_headers_middleware = (app, http) => {
687
- var logger = app.context.miolo.logger;
688
- _if_options(http, 'cors', options => {
689
- if (options == 'simple') {
690
- logger.debug("Setting CORS the simple way");
691
- app.use( /*#__PURE__*/function () {
692
- var _ref = _asyncToGenerator(function* (ctx, next) {
693
- ctx.set('Access-Control-Allow-Origin', '*');
694
- ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap');
695
- yield next();
696
- });
697
- return function (_x, _x2) {
698
- return _ref.apply(this, arguments);
699
- };
700
- }());
701
- } else {
702
- var coptions = _cors_options(options);
703
- logger.debug("Setting CORS headers for ".concat(JSON.stringify(coptions)));
704
- app.use(koa_cors(coptions));
705
- }
706
- });
707
- _if_options(http, 'proxy', options => {
708
- var [tpath, toptions] = _proxy_options(options);
709
- logger.debug("Setting Proxy for ".concat(tpath, " to ").concat(toptions.target, " "));
710
- app.use(koa_proxy(tpath, toptions));
711
- });
712
- };
713
-
714
618
  var init_body_middleware = app => {
715
619
  // Compress
716
620
 
@@ -822,25 +726,6 @@ var init_static_middleware = (app, config) => {
822
726
  }
823
727
  };
824
728
 
825
- var init_extra_middlewares = (app, middlewares) => {
826
- if (middlewares == undefined || middlewares.length == 0) {
827
- return;
828
- }
829
- middlewares.map(midw => {
830
- function extra_middleware(_x, _x2) {
831
- return _extra_middleware.apply(this, arguments);
832
- }
833
- function _extra_middleware() {
834
- _extra_middleware = _asyncToGenerator(function* (ctx, next) {
835
- yield midw(ctx);
836
- yield next();
837
- });
838
- return _extra_middleware.apply(this, arguments);
839
- }
840
- app.use(extra_middleware);
841
- });
842
- };
843
-
844
729
  var REQUEST_COUNTER = 1;
845
730
 
846
731
  /**
@@ -953,31 +838,118 @@ function init_route_catch_js_error(app, route) {
953
838
  app.use(catch_js_error_router.routes());
954
839
  }
955
840
 
956
- var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
957
- var __my_dirname = path.dirname(__my_filename);
958
- var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
959
- var indexHTML = readFileSync(indexHTMLPath, 'utf8');
960
- function init_route_html_render(app, html) {
961
- // Server-side render
962
- function html_render(_x) {
963
- return _html_render.apply(this, arguments);
841
+ var init_extra_middlewares = (app, middlewares) => {
842
+ if (middlewares == undefined || middlewares.length == 0) {
843
+ return;
964
844
  }
965
- function _html_render() {
966
- _html_render = _asyncToGenerator(function* (ctx) {
967
- var logger = ctx.miolo.logger;
968
- var reqid = ctx.requestId;
969
- var ip = ctx.headers["x-real-ip"] || '127.0.0.1';
970
- var method = ctx.request.method;
971
- var url = ctx.request.url;
972
- var what = html != undefined ? 'provided html' : 'fallback page';
973
- logger.info("".concat(reqid, " - ").concat(ip, " : ").concat(cyan(method), " ").concat(cyan(url), " => Rendering ").concat(what));
974
- ctx.body = html || indexHTML;
845
+ middlewares.map(midw => {
846
+ function extra_middleware(_x, _x2) {
847
+ return _extra_middleware.apply(this, arguments);
848
+ }
849
+ function _extra_middleware() {
850
+ _extra_middleware = _asyncToGenerator(function* (ctx, next) {
851
+ yield midw(ctx);
852
+ yield next();
853
+ });
854
+ return _extra_middleware.apply(this, arguments);
855
+ }
856
+ app.use(extra_middleware);
857
+ });
858
+ };
859
+
860
+ var _if_options = (http, field, callback) => {
861
+ try {
862
+ var val = http[field];
863
+ if (val != undefined && val != false) {
864
+ return callback(val);
865
+ }
866
+ } catch (_) {}
867
+ };
868
+ var _cors_options = options => {
869
+ if (typeof options == 'object') {
870
+ return options;
871
+ }
872
+ return {};
873
+ };
874
+ var _proxy_options = options => {
875
+ var _options, _options2, _options3, _options4;
876
+ if (options == undefined) {
877
+ options = {};
878
+ }
879
+ var tpath = ((_options = options) === null || _options === void 0 ? void 0 : _options.path) || '/';
880
+ var target = ((_options2 = options) === null || _options2 === void 0 ? void 0 : _options2.target) || "https://proxy.miolo.com";
881
+ var changeOrigin = ((_options3 = options) === null || _options3 === void 0 ? void 0 : _options3.changeOrigin) != undefined ? options.changeOrigin : true;
882
+ var logs = ((_options4 = options) === null || _options4 === void 0 ? void 0 : _options4.logs) != undefined ? options.logs : true;
883
+ var toptions = {
884
+ target,
885
+ changeOrigin,
886
+ logs
887
+ };
888
+ return [tpath, toptions];
889
+ };
890
+ var init_headers_middleware = (app, http) => {
891
+ var logger = app.context.miolo.logger;
892
+ _if_options(http, 'cors', options => {
893
+ if (options == 'simple') {
894
+ logger.debug("Setting CORS the simple way");
895
+ app.use( /*#__PURE__*/function () {
896
+ var _ref = _asyncToGenerator(function* (ctx, next) {
897
+ ctx.set('Access-Control-Allow-Origin', '*');
898
+ ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap');
899
+ yield next();
900
+ });
901
+ return function (_x, _x2) {
902
+ return _ref.apply(this, arguments);
903
+ };
904
+ }());
905
+ } else {
906
+ var coptions = _cors_options(options);
907
+ logger.debug("Setting CORS headers for ".concat(JSON.stringify(coptions)));
908
+ app.use(koa_cors(coptions));
909
+ }
910
+ });
911
+ _if_options(http, 'proxy', options => {
912
+ var [tpath, toptions] = _proxy_options(options);
913
+ logger.debug("Setting Proxy for ".concat(tpath, " to ").concat(toptions.target, " "));
914
+ app.use(koa_proxy(tpath, toptions));
915
+ });
916
+ };
917
+
918
+ function init_sys_check_and_log(logger) {
919
+ function toMB(bytes) {
920
+ if (!bytes) return 0;
921
+ return bytes / 1000000;
922
+ }
923
+ function toGB(kbytes) {
924
+ if (!kbytes) return 0;
925
+ return kbytes / 1000000;
926
+ }
927
+ function sys_check_and_log() {
928
+ var used = Math.round(toMB(os.freemem()), 2);
929
+ var total = Math.round(toMB(os.totalmem()), 2);
930
+ var perc = Math.round(used * 100 / total, 2);
931
+ if (perc > 80) {
932
+ logger.error("[SERVER][".concat(cyan('SysCheck'), "] RAM ").concat(yellow(used), " MB used of ").concat(green(total), " MB (").concat(yellow(perc), " %)"));
933
+ } else {
934
+ logger.info("[SERVER][".concat(cyan('SysCheck'), "] RAM ").concat(yellow(used), " MB used of ").concat(green(total), " MB (").concat(yellow(perc), " %)"));
935
+ }
936
+ diskspace.check('/', function (err, result) {
937
+ var used = Math.round(toGB(result.used), 2);
938
+ var total = Math.round(toGB(result.total), 2);
939
+ var free = Math.round(toGB(result.free), 2);
940
+ if (free < 1) {
941
+ logger.error("[SERVER][".concat(cyan('SysCheck'), "] DISK ").concat(yellow(used), " GB used of ").concat(green(total), " GB (").concat(yellow(free), " GB free)"));
942
+ } else {
943
+ logger.info("[SERVER][".concat(cyan('SysCheck'), "] DISK ").concat(yellow(used), " GB used of ").concat(green(total), " GB (").concat(yellow(free), " GB free)"));
944
+ }
975
945
  });
976
- return _html_render.apply(this, arguments);
977
946
  }
978
- var html_render_router = new Router();
979
- html_render_router.get('/', html_render);
980
- app.use(html_render_router.routes());
947
+ return sys_check_and_log;
948
+ }
949
+
950
+ function init_cron(logger) {
951
+ var sys_check_and_log = init_sys_check_and_log(logger);
952
+ new CronJob('30 * * * *', sys_check_and_log, null, true, 'Europe/Madrid');
981
953
  }
982
954
 
983
955
  function miolo(_x, _x2, _x3) {
@@ -990,21 +962,7 @@ function _miolo() {
990
962
 
991
963
  // Init some pieces
992
964
  var config = init_config(sconfig);
993
- //const emailer = init_emailer(config.mail.options, config.mail.defaults)
994
- //const logger = init_logger(config.log, emailer)
995
- //config.db.connection.options.log= logger
996
965
 
997
- // // attach to app calustra's db methods
998
- // initCalustraDbContext(app, config.db)
999
- //
1000
- // // attach to app some custom miolo methods
1001
- // app.context.miolo = {
1002
- // config: {...config},
1003
- // emailer,
1004
- // logger,
1005
- // db: app.context.db
1006
- // }
1007
- //
1008
966
  // attach to app some custom miolo methods
1009
967
  init_context_middleware(app, config);
1010
968
 
@@ -1072,6 +1030,9 @@ function _miolo() {
1072
1030
 
1073
1031
  // Middleware for html render
1074
1032
  if (render == undefined || render.html != undefined) {
1033
+ var {
1034
+ init_route_html_render
1035
+ } = yield Promise.resolve().then(function () { return html_render; });
1075
1036
  init_route_html_render(app, render === null || render === void 0 ? void 0 : render.html);
1076
1037
  } else if (render.middleware != undefined) {
1077
1038
  app.use(render.middleware);
@@ -1088,38 +1049,6 @@ function _miolo() {
1088
1049
  return _miolo.apply(this, arguments);
1089
1050
  }
1090
1051
 
1091
- var Context = /*#__PURE__*/React.createContext();
1092
-
1093
- var AppContext = _ref => {
1094
- var {
1095
- context,
1096
- children
1097
- } = _ref;
1098
- var [innerContext, setInnerContext] = useState(context);
1099
- useEffect(() => {
1100
- setInnerContext(context);
1101
- }, [context]);
1102
- return /*#__PURE__*/React.createElement(Context.Provider, {
1103
- value: {
1104
- context: innerContext,
1105
- setContext: setInnerContext
1106
- }
1107
- }, children);
1108
- };
1109
-
1110
- var AppSsr = _ref => {
1111
- var {
1112
- url,
1113
- context,
1114
- children
1115
- } = _ref;
1116
- return /*#__PURE__*/React.createElement(StaticRouter, {
1117
- location: url
1118
- }, /*#__PURE__*/React.createElement(AppContext, {
1119
- context: context
1120
- }, children));
1121
- };
1122
-
1123
1052
  var ErrMessage = _ref => {
1124
1053
  var {
1125
1054
  ctx,
@@ -1128,41 +1057,16 @@ var ErrMessage = _ref => {
1128
1057
  return /*#__PURE__*/React.createElement("div", null, "[MIOLO-SERVER_TOOLS] Missing SSR renderer: ".concat(error.toString()));
1129
1058
  };
1130
1059
 
1131
- var html = "\n\t\t<!DOCTYPE html>\n\t\t<html lang=\"en\">\n\t\t<head>\n\t\t\t<meta charset=\"utf-8\">\n\t\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t\t<meta name=\"description\" content=\"miolo\" />\n\t\t\t<meta name=\"keywords\" content=\"miolo web\" />\n\t\t\t<meta name=\"author\" content=\"miolo.afialapis.com\" />\n\n\t\t\t<!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --> \n\t\t\t<!--<link rel=\"apple-touch-icon-precomposed\" href=\"/favicon.ico\"/>-->\n\t\t\t<!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. -->\n\t\t\t<link rel=\"icon\" href=\"/favicon.ico\"/>\n\n\t\t\t{styles}\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t</script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id=\"root\">{children}</div>\n\t\t\t{bundle}\n\t\t</body>\n\t\t</html>\n ";
1060
+ var html = "\n\t\t<!DOCTYPE html>\n\t\t<html lang=\"en\">\n\t\t<head>\n\t\t\t<meta charset=\"utf-8\">\n\t\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\t\t\t<title>miolo</title>\n\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t\t<meta name=\"description\" content=\"miolo\" />\n\t\t\t<meta name=\"keywords\" content=\"miolo web\" />\n\t\t\t<meta name=\"author\" content=\"miolo.afialapis.com\" />\n\n\t\t\t<!-- Touch Icons - iOS and Android 2.1+ 180x180 pixels in size. --> \n\t\t\t<!--<link rel=\"apple-touch-icon-precomposed\" href=\"/favicon.ico\"/>-->\n\t\t\t<!-- Firefox, Chrome, Safari, IE 11+ and Opera. 196x196 pixels in size. -->\n\t\t\t<link rel=\"icon\" href=\"/favicon.ico\"/>\n\n\t\t\t<script>\n\t\t\t\twindow.__CONTEXT = {context}\n\t\t\t</script>\t\t\n\t\t</head>\n\n\t\t<body>\n\t\t\t<div id=\"root\">{children}</div>\n\t\t</body>\n\t\t</html>\n ";
1132
1061
 
1133
1062
  function init_render_middleware(loader, renderer, options) {
1134
1063
  // parse options
1135
- var html$1 = html,
1136
- port = 8000,
1137
- use_css = true;
1064
+ var html$1 = html;
1138
1065
  try {
1139
1066
  if ((options === null || options === void 0 ? void 0 : options.html) != undefined) {
1140
1067
  html$1 = options.html;
1141
1068
  }
1142
1069
  } catch (_) {}
1143
- try {
1144
- if ((options === null || options === void 0 ? void 0 : options.port) != undefined) {
1145
- if (!isNaN(parseInt(options.port))) {
1146
- port = parseInt(options.port);
1147
- }
1148
- }
1149
- } catch (_) {}
1150
- try {
1151
- use_css = (options === null || options === void 0 ? void 0 : options.css) !== false;
1152
- } catch (_) {}
1153
- var bundleURL = '';
1154
- var cssURL = use_css ? '' : '';
1155
- var def_renderer = ctx => {
1156
- try {
1157
- return renderer(ctx);
1158
- } catch (error) {
1159
- ctx.miolo.logger.error('Missing renderer in the render middleware');
1160
- return ErrMessage({
1161
- ctx,
1162
- error
1163
- });
1164
- }
1165
- };
1166
1070
  var def_loader = /*#__PURE__*/function () {
1167
1071
  var _ref = _asyncToGenerator(function* (ctx) {
1168
1072
  var res = {};
@@ -1187,8 +1091,6 @@ function init_render_middleware(loader, renderer, options) {
1187
1091
 
1188
1092
  */
1189
1093
  var ssr_data = yield def_loader(ctx);
1190
- //const ssr_comp = def_renderer(ctx)
1191
-
1192
1094
  var isAuthed = false;
1193
1095
  try {
1194
1096
  isAuthed = (ctx === null || ctx === void 0 ? void 0 : ctx.isAuthenticated()) === true;
@@ -1215,11 +1117,19 @@ function init_render_middleware(loader, renderer, options) {
1215
1117
  ssr_data: ssr_data,
1216
1118
  extra: ctx === null || ctx === void 0 ? void 0 : ctx.extra
1217
1119
  };
1218
- var ssr_html = renderToString( /*#__PURE__*/React.createElement(AppSsr, {
1219
- url: ctx.url,
1220
- context: context
1221
- }, () => def_renderer(ctx)));
1222
- var parsed_html = html$1.replace('{context}', JSON.stringify(context, null, 2)).replace(/{bundleURL}/g, bundleURL).replace('{children}', ssr_html).replace('{styles}', cssURL).replace('{bundle}', bundleURL);
1120
+ var ssr_html = '';
1121
+ try {
1122
+ ssr_html = renderToString(renderer(ctx, context));
1123
+ } catch (error) {
1124
+ ctx.miolo.logger.error('Missing renderer in the render middleware');
1125
+ ctx.miolo.logger.error(error);
1126
+ ssr_html = renderToString( /*#__PURE__*/React.createElement(ErrMessage, {
1127
+ ctx: ctx,
1128
+ error: error
1129
+ }));
1130
+ }
1131
+ var parsed_html = html$1.replace('{context}', JSON.stringify(context, null, 2)).replace('{children}', ssr_html);
1132
+ ctx.miolo.logger.debug("render_middleware() rendered HTML (".concat(Buffer.byteLength(ssr_html, 'utf8'), " bytes of SSR content, ").concat(Buffer.byteLength(parsed_html, 'utf8'), " bytes total) "));
1223
1133
  ctx.body = parsed_html;
1224
1134
  });
1225
1135
  return _render_middleware.apply(this, arguments);
@@ -1458,5 +1368,37 @@ var passport = /*#__PURE__*/Object.freeze({
1458
1368
  init_passport_auth_middleware: init_passport_auth_middleware
1459
1369
  });
1460
1370
 
1461
- export { AppSsr, init_render_middleware, miolo };
1371
+ var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1372
+ var __my_dirname = path.dirname(__my_filename);
1373
+ var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
1374
+ var indexHTML = readFileSync(indexHTMLPath, 'utf8');
1375
+ function init_route_html_render(app, html) {
1376
+ // Server-side render
1377
+ function html_render(_x) {
1378
+ return _html_render.apply(this, arguments);
1379
+ }
1380
+ function _html_render() {
1381
+ _html_render = _asyncToGenerator(function* (ctx) {
1382
+ var logger = ctx.miolo.logger;
1383
+ var reqid = ctx.requestId;
1384
+ var ip = ctx.headers["x-real-ip"] || '127.0.0.1';
1385
+ var method = ctx.request.method;
1386
+ var url = ctx.request.url;
1387
+ var what = html != undefined ? 'provided html' : 'fallback page';
1388
+ logger.info("".concat(reqid, " - ").concat(ip, " : ").concat(cyan(method), " ").concat(cyan(url), " => Rendering ").concat(what));
1389
+ ctx.body = html || indexHTML;
1390
+ });
1391
+ return _html_render.apply(this, arguments);
1392
+ }
1393
+ var html_render_router = new Router();
1394
+ html_render_router.get('/', html_render);
1395
+ app.use(html_render_router.routes());
1396
+ }
1397
+
1398
+ var html_render = /*#__PURE__*/Object.freeze({
1399
+ __proto__: null,
1400
+ init_route_html_render: init_route_html_render
1401
+ });
1402
+
1403
+ export { init_render_middleware, miolo };
1462
1404
  //# sourceMappingURL=miolo.server.mjs.map