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.
- package/dist/cli/miolo.cli.iife.bundle.js +1 -1
- package/dist/cli/miolo.cli.iife.bundle.min.js +1 -1
- package/dist/cli/miolo.cli.iife.js +1 -1
- package/dist/cli/miolo.cli.iife.min.js +1 -1
- package/dist/cli/miolo.cli.min.mjs +1 -1
- package/dist/cli/miolo.cli.mjs +1 -1
- package/dist/cli/miolo.cli.umd.bundle.js +1 -1
- package/dist/cli/miolo.cli.umd.bundle.min.js +1 -1
- package/dist/cli/miolo.cli.umd.js +1 -1
- package/dist/cli/miolo.cli.umd.min.js +1 -1
- package/dist/cli-react/miolo.cli-react.iife.bundle.js +1670 -1677
- package/dist/cli-react/miolo.cli-react.iife.bundle.js.map +1 -1
- package/dist/cli-react/miolo.cli-react.iife.bundle.min.js +42 -49
- package/dist/cli-react/miolo.cli-react.iife.js +22 -11
- package/dist/cli-react/miolo.cli-react.iife.js.map +1 -1
- package/dist/cli-react/miolo.cli-react.iife.min.js +2 -2
- package/dist/cli-react/miolo.cli-react.min.mjs +2 -2
- package/dist/cli-react/miolo.cli-react.mjs +23 -9
- package/dist/cli-react/miolo.cli-react.mjs.map +1 -1
- package/dist/cli-react/miolo.cli-react.umd.bundle.js +1669 -1676
- package/dist/cli-react/miolo.cli-react.umd.bundle.js.map +1 -1
- package/dist/cli-react/miolo.cli-react.umd.bundle.min.js +42 -49
- package/dist/cli-react/miolo.cli-react.umd.js +24 -13
- package/dist/cli-react/miolo.cli-react.umd.js.map +1 -1
- package/dist/cli-react/miolo.cli-react.umd.min.js +2 -2
- package/dist/server/miolo.server.cjs +216 -265
- package/dist/server/miolo.server.min.mjs +2 -2
- package/dist/server/miolo.server.mjs +169 -227
- package/dist/server/miolo.server.mjs.map +1 -1
- package/dist/server/miolo.server.node.mjs +217 -265
- package/package.json +8 -9
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* miolo v0.3.
|
|
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
|
+
* 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
|
|
40
|
-
import
|
|
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
|
|
957
|
-
|
|
958
|
-
|
|
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
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
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
|
-
|
|
979
|
-
|
|
980
|
-
|
|
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
|
|
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 =
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
}
|
|
1222
|
-
|
|
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
|
-
|
|
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
|