miolo 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -8,4 +8,4 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import e from"node:http";import t from"koa";import{createHttpTerminator as r}from"http-terminator";import o from"assign-deep";import n from"node:path";import{fileURLToPath as i}from"node:url";import{getConnection as l}from"calustra";export{getConnection}from"calustra";import a from"nodemailer";import{uncolor as u,gray as s,magenta as c,cyan as d,yellow as f,red_light as p,red as m,green as v,blue as h}from"tinguir";import y from"node:util";import g,{transports as b,createLogger as _,format as x}from"winston";import w from"koa-better-body";import S from"koa-convert";import k from"koa-compress";import{constants as O}from"node:zlib";import U from"koa-mount";import E from"koa-static";import R from"koa-favicon";import{performance as q}from"node:perf_hooks";import M from"koa-session";import j from"koa-redis";import F from"@koa/router";import{readFileSync as I}from"node:fs";import P from"koa-router";import A from"@koa/cors";import N from"koa-proxies";import C from"node:os";import L from"diskspace";import{CronJob as T}from"cron";import{renderToString as z}from"react-dom/server";import B from"jwt-simple";import J from"basic-auth";import D from"koa-passport";import G from"passport-local";function V(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function Y(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?V(Object(r),!0).forEach((function(t){W(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):V(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function K(e,t,r,o,n,i,l){try{var a=e[i](l),u=a.value}catch(s){return void r(s)}a.done?t(u):Promise.resolve(u).then(o,n)}function H(e){return function(){var t=this,r=arguments;return new Promise((function(o,n){var i=e.apply(t,r);function l(e){K(i,o,n,l,a,"next",e)}function a(e){K(i,o,n,l,a,"throw",e)}l(void 0)}))}}function W(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=typeof o)return o;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:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var X=i(require("url").pathToFileURL(__filename).toString()),Z=n.dirname(X),Q={name:"miolo",http:{port:8001,hostname:"localhost",static:{favicon:n.resolve(Z,"../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 r=e.user.id;if(null!=r)return r}catch(i){}try{if("guest"==e.user.name){var o=e.user.token;if(null!=o)return o}}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:$,timestamp:ee,_label:te,printf:re,errors:oe}=x,ne=(e,t)=>{var r,o,n={silly:s,debug:c,verbose:d,info:f,warn:p,error:m},i=re((t=>{var r,o=n[t.level],i=new Date(t.timestamp).toLocaleString((null==e||null===(r=e.format)||void 0===r?void 0:r.locale)||"en"),l="[miolo] ".concat(o(i)," ").concat(o(t.level)," ").concat(t.message);return t.stack?"".concat(l,"\n").concat(t.stack):l})),l=[];e.console.enabled&&l.push(new b.Console({humanReadableUnhandledException:!0,level:(null==e||null===(r=e.console)||void 0===r?void 0:r.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));e.file.enabled&&l.push(new b.File({filename:e.file.filename,level:(null==e||null===(o=e.file)||void 0===o?void 0:o.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var a=function(e,t){var r=function(r){g.Transport.call(this,r),r=r||{},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=r.humanReadableUnhandledException||!0,this.handleExceptions=r.handleExceptions||!0,this.json=r.json||!1,this.colorize=r.colorize||!1};return y.inherits(r,g.Transport),r.prototype.name="MailerLogger",r.prototype.log=function(r,o){var n=this,i="";try{i=r.message.split("\n")[0]}catch(s){i=r.message.toString()}i=u(i);var l=e.name+": ["+r.level.toUpperCase()+"] "+i,a={from:this.from,to:this.to,subject:l,text:u(r.message)};t.send(a,(function(){n.emit("logged"),o(null,!0)}))},r}(e.mail,t);b.MailerLogger=a,l.push(new b.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return _({level:(null==e?void 0:e.level)||"silly",format:$(oe({stack:!0}),ee(),i),transports:l})},ie=(e,t)=>{var r=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=a.createTransport(e,t);return{send:function(e,t){r?(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))}),o.sendMail(e,t))},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),o.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:r}}(t.mail.options,t.mail.defaults),o=ne(t.log,r);t.db.options.log=o;var n={getConnection:()=>l(t.db.config,t.db.options),getModel:e=>l(t.db.config,t.db.options).getModel(e)},i={config:Y({},t),emailer:r,logger:o,db:n};function u(){return(u=H((function*(e,t){e.miolo=i,yield t()}))).apply(this,arguments)}e.use((function(e,t){return u.apply(this,arguments)})),e.context.miolo=i},le=e=>{e.use(k({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:O.Z_SYNC_FLUSH},deflate:{flush:O.Z_SYNC_FLUSH},br:!1})),e.use(S(w({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))},ae=[401];var ue=i(require("url").pathToFileURL(__filename).toString()),se=n.dirname(ue),ce=n.resolve(se,"./miolo.ico"),de=(e,t)=>{var{favicon:r,folders:o}=t;for(var[n,i]of(e.use(R(r||ce)),Object.entries(o)))e.use(U(n,E(i,{index:!1})))},fe=1;var pe=new j;var me=i(require("url").pathToFileURL(__filename).toString()),ve=n.dirname(me),he=I(n.resolve(ve,"./robots.txt"),"utf8");var ye={require:!1,action:"redirect",redirect_url:"/",error_code:401},ge={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},be=e=>{var t=(null==e?void 0:e.crud)||[];if(!t)return[];if(!Array.isArray(t))return[];var r=[];return t.map((t=>{var o=null==t?void 0:t.routes;if(o&&Array.isArray(o)){var n=(null==t?void 0:t.bodyField)||(null==e?void 0:e.bodyField),i=Y(Y(Y({},ye),(null==t?void 0:t.authUser)||{}),(null==e?void 0:e.authUser)||{}),l=(null==t?void 0:t.getUserId)||(null==e?void 0:e.getUserId),a=[];for(var u of o){var s="string"==typeof u?{name:u}:u;if(s.name){var c={name:s.name,url:(null==s?void 0:s.url)||s.name,mode:(null==s?void 0:s.mode)||"rw",bodyField:(null==s?void 0:s.bodyField)||n,useUserFields:Y(Y({},ge),(null==s?void 0:s.useUserFields)||{}),authUser:Y(Y({},i),(null==s?void 0:s.authUser)||{}),getUserId:(null==s?void 0:s.getUserId)||l};a.push(c)}}a.length>0&&r.push({prefix:(null==t?void 0:t.prefix)||"",routes:a})}})),r};function _e(e){var t=e.indexOf("?")>=0?e.substr(e.indexOf("?")):"";if(t&&"?"!=t){var r=t.slice(1).split("&"),o={};return r.forEach((function(e){e=e.split("="),o[e[0]]=decodeURIComponent(e[1]||"")})),JSON.parse(JSON.stringify(o))}return{}}var xe=e=>{var t=(null==e?void 0:e.queries)||[];if(!t)return[];if(!Array.isArray(t))return[];var r=[];return t.map((t=>{var o,n,i=null==t?void 0:t.routes;if(i&&Array.isArray(i)){var l=(null==e||null===(o=e.crud)||void 0===o?void 0:o.bodyField)||(null==e?void 0:e.bodyField),a=Y(Y(Y({},ye),(null==t?void 0:t.authUser)||{}),(null==e?void 0:e.authUser)||{}),u=(null==e||null===(n=e.crud)||void 0===n?void 0:n.getUserId)||(null==e?void 0:e.getUserId),s=[];for(var c of i)if(c.url&&c.callback){var d={url:c.url,method:(null==c?void 0:c.method)||"GET",callback:c.callback,bodyField:(null==c?void 0:c.bodyField)||l,authUser:Y(Y({},a),(null==c?void 0:c.authUser)||{}),getUserId:(null==c?void 0:c.getUserId)||u};s.push(d)}r.push({prefix:(null==t?void 0:t.prefix)||"",routes:s})}})),r};function we(e,t,r){var o=new P;try{var n=be(r),i=xe(r),l=n.length>0,a=i.length>0;if(!l&&!a)throw"[miolo-router] Could not get any route from the passed <routes> param";l&&function(e,t,r,o){r.map((r=>{var n=r.prefix;r.routes.map((r=>{var i=e.getModel(r.name);if(i){for(var l=e=>null==r.bodyField?e:{[r.bodyField]:e},a=function(){var e=H((function*(e,t,n){var i=void 0;r.getUserId&&(i=r.getUserId(e));var l=!0,a=r.authUser;(!0===a.require||"read-only"===a.require&&"w"===t)&&void 0===i&&("error"==a.action?(o.error("[miolo-router] Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):(o.error("[miolo-router] Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)),l=!1);var u={};!0===r.useUserFields.use&&(u=r.useUserFields.fieldNames);var s={uid:i,fieldNames:u},c={};l&&(c=yield n(s)),e.body=c}));return function(t,r,o){return e.apply(this,arguments)}}(),u=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.read(r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),s=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.keyList(r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),c=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.find(r.id,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),d=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.distinct(r.distinct_field,r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),f=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r,o=e.request.fields;null!=t&&null!==(r=t.fieldNames)&&void 0!==r&&r.created_by&&(o[t.fieldNames.created_by]=t.uid);var n={transaction:void 0},a=yield i.insert(o,n);return l(a)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),p=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r,o=e.request.fields;null!=t&&null!==(r=t.fieldNames)&&void 0!==r&&r.last_update_by&&(o[t.fieldNames.last_update_by]=t.uid);var n={transaction:void 0},a=yield i.update(o,{id:o.id},n);return l(a)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),m=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r=e.request.fields,o={transaction:void 0},n=yield i.delete({id:r.id},o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),v=n?"/".concat(n,"/").concat(r.url):"/".concat(r.url);v.indexOf("//")>=0;)v=v.replace(/\/\//g,"/");o.info("[miolo-router] Routing table ".concat(r.name," to ").concat(v));var h=r.mode.indexOf("r")>=0,y=r.mode.indexOf("w")>=0,g=r.mode.indexOf("u")>=0||y;h&&(t.get("".concat(v,"/find"),(e=>c(e))),t.get("".concat(v,"/read"),(e=>u(e))),t.get("".concat(v,"/distinct"),(e=>d(e))),t.get("".concat(v,"/key_list"),(e=>s(e)))),g&&(t.post("".concat(v,"/save"),(e=>f(e))),t.post("".concat(v,"/update"),(e=>p(e)))),y&&t.post("".concat(v,"/delete"),(e=>m(e)))}else o.error("[miolo-router] Could not get model for ".concat(r.name))}))}))}(t,o,n,t.log),a&&function(e,t,r){t.map((t=>{var o=t.prefix;t.routes.map((t=>{for(var n,i=o?"/".concat(o,"/").concat(t.url):"/".concat(t.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");r.info("Routing ".concat((null===(n=t.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(i));var l=function(){var e=H((function*(e){var o=void 0;t.getUserId&&(o=t.getUserId(e));var n=t.authUser;return(!0===n.require||"read-only"===n.require&&"POST"===t.method)&&void 0===o?"error"==n.action?(r.error("Unauthorized access. Throwing error ".concat(n.error_code)),e.throw(n.error_code,null,{})):(r.error("Unauthorized access. Redirecting to ".concat(n.redirect_url)),e.redirect(n.redirect_url)):yield t.callback(e)}));return function(t){return e.apply(this,arguments)}}();"POST"==t.method?e.post(i,(e=>l(e,t))):e.get(i,(e=>l(e,t)))}))}))}(o,i,t.log)}catch(u){console.error(u),console.error("[miolo-router] Error initing the router. Probably config objects are not ok"),console.error("[miolo-router] connOrConfig:"),console.error(null==t?void 0:t.config),console.error("[miolo-router] routes:"),console.error(r)}e.use(o.routes())}var Se=(e,t)=>{null!=t&&0!=t.length&&t.map((t=>{function r(){return(r=H((function*(e,r){yield t(e),yield r()}))).apply(this,arguments)}e.use((function(e,t){return r.apply(this,arguments)}))}))},ke=(e,t,r)=>{try{var o=e[t];if(null!=o&&0!=o)return r(o)}catch(n){}},Oe=(e,t)=>{var r=e.context.miolo.logger;ke(t,"cors",(t=>{if("simple"==t)r.debug("Setting CORS the simple way"),e.use(function(){var e=H((function*(e,t){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield t()}));return function(t,r){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(t);r.debug("Setting CORS headers for ".concat(JSON.stringify(o))),e.use(A(o))}})),ke(t,"proxy",(t=>{var[o,n]=(e=>{var t,r,o,n;return null==e&&(e={}),[(null===(t=e)||void 0===t?void 0:t.path)||"/",{target:(null===(r=e)||void 0===r?void 0:r.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(t);r.debug("Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(N(o,n))}))};function Ue(e){var t=function(e){function t(e){return e?e/1e6:0}function r(e){return e?e/1e6:0}return function(){var o=Math.round(t(C.freemem()),2),n=Math.round(t(C.totalmem()),2),i=Math.round(100*o/n,2);i>80?e.error("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(v(n)," MB (").concat(f(i)," %)")):e.info("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(v(n)," MB (").concat(f(i)," %)")),L.check("/",(function(t,o){var n=Math.round(r(o.used),2),i=Math.round(r(o.total),2),l=Math.round(r(o.free),2);l<1?e.error("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(n)," GB used of ").concat(v(i)," GB (").concat(f(l)," GB free)")):e.info("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(n)," GB used of ").concat(v(i)," GB (").concat(f(l)," GB free)"))}))}}(e);new T("30 * * * *",t,null,!0,"Europe/Madrid")}function Ee(e,t,r){return Re.apply(this,arguments)}function Re(){return Re=H((function*(n,i,l){var a,u,s,c,p=new t,y=function(e){return o(Q,e)}(n);ie(p,y),le(p),function(e){var t=e.context.miolo.logger;function r(){return(r=H((function*(e){if(e){var r=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof r&&(r=500):(r=406,e.message="Unsupported type"),ae.indexOf(r)>=0?t.warn("".concat(this.method," ").concat(this.url," - ").concat(r,": ").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=r,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 r.apply(this,arguments)}}(p),de(p,null===(a=y.http)||void 0===a?void 0:a.static),function(e){function t(){return(t=H((function*(e,t){var r=e.miolo.logger;fe+=1,e.requestId=fe,e.request.body=Y(Y({},e.request.fields),e.request.files);var o=q.now(),n=e.headers["x-real-ip"]||"127.0.0.1";e.request.ip=n,r.info("req begin ".concat(e.requestId," - ip ").concat(n," - ").concat(d(e.request.method)," ").concat(d(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(y){}try{null!=e.user&&(i=e.user)}catch(y){}var l,a,u,s="";if(null!=i)if(null!==(l=i)&&void 0!==l&&l.id)s=" - uid ".concat(null===(u=i)||void 0===u?void 0:u.id);else if(null!==(a=i)&&void 0!==a&&a.token){var c;s=" - token ".concat(null===(c=i)||void 0===c?void 0:c.token)}var p=parseFloat((q.now()-o)/1e3).toFixed(2),h=p<1?v:p<2?f:m;r.info("req end ".concat(e.requestId).concat(s," => ").concat(h("DONE in ".concat(p," seconds"))))}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}(p),function(e,t){e.keys=[t.secret||"*secret*"];var r=Y({store:pe},t.options||{});e.use(M(r,e))}(p,null==y?void 0:y.session),function(e){function t(){return(t=H((function*(e){e.body=he}))).apply(this,arguments)}var r=new F;r.get("/robots.txt",(function(e){return t.apply(this,arguments)})),e.use(r.routes())}(p);var g=null==y?void 0:y.catcher;if(g&&function(e,t){function r(){return r=H((function*(e){var{error:t,path:r,agent:o}=e.request.body,n=e.miolo.logger,i="".concat(m("[JS Error]")," on ").concat(h(r),": ").concat(t.msg,"\n")+"".concat(m("[JS Error]")," File => ").concat(t.file,"\n")+"".concat(m("[JS Error]")," Line => ").concat(t.line,"\n")+"".concat(m("[JS Error]")," Col => ").concat(t.col,"\n")+"".concat(m("[JS Error]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(m("[JS Error]")," Agent => ").concat(o);n.error(i),e.body={result:1}})),r.apply(this,arguments)}var o=new F;o.post(t,(function(e){return r.apply(this,arguments)})),e.use(o.routes())}(p,g),null!=y&&null!==(u=y.auth)&&void 0!==u&&u.guest){var{init_guest_auth_middleware:b}=yield Promise.resolve().then((function(){return Me}));b(p,y.auth.guest,null==y?void 0:y.session)}if(null!=y&&null!==(s=y.auth)&&void 0!==s&&s.basic){var{init_basic_auth_middleware:_}=yield Promise.resolve().then((function(){return je}));_(p,y.auth.basic)}if(null!=y&&null!==(c=y.auth)&&void 0!==c&&c.passport){var{init_passport_auth_middleware:x}=yield Promise.resolve().then((function(){return Ae}));x(p,y.auth.passport)}var w=null==y?void 0:y.middlewares;if(w&&Se(p,w),Oe(p,y.http),null!=y&&y.routes){var S=p.context.miolo.db.getConnection();we(p,S,y.routes)}if(null!=(null==i?void 0:i.html)){var{init_route_html_render:k}=yield Promise.resolve().then((function(){return Te}));k(p,i.html)}else if(null!=(null==i?void 0:i.middleware))p.use(i.middleware);else{var{init_404_render_middleware:O}=yield Promise.resolve().then((function(){return ze}));O(p,i)}var U=e.createServer(p.callback());yield((e,t,r)=>new Promise(((o,n)=>{e.listen(t,r,(e=>{e?n(e):o()}))})))(U,y.http.port,y.http.hostname),p.context.miolo.logger.info("miolo is listening on ".concat(y.http.hostname,":").concat(y.http.port)),p.server=U;var E=r({server:U});return p.stop_server=H((function*(){yield E.terminate(),p.context.miolo.logger.info("miolo has been shutdowned from ".concat(y.http.hostname,":").concat(y.http.port))})),null!=l&&l(p),Ue(p.context.miolo.logger),p})),Re.apply(this,arguments)}function qe(e,t,r){var o='\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==r?void 0:r.html)&&(o=r.html)}catch(l){}var n=function(){var t=H((function*(t){var r={};try{r=yield e(t)}catch(o){t.miolo.logger.error("Error produced by loader in the render middleware"),t.miolo.logger.error(o)}return r}));return function(e){return t.apply(this,arguments)}}();function i(){return(i=H((function*(e){var r=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 u={user:a,authenticated:i,ssr_data:r,extra:null==e?void 0:e.extra},s="";try{s=z(t(e,u))}catch(f){e.miolo.logger.error("Missing renderer in the render middleware"),e.miolo.logger.error(f),s="\n <div>\n MIOLO: Missing SSR renderer: ".concat(f.toString(),"\n </div> \n ")}var c=o.replace("{context}",JSON.stringify(u,null,2)).replace("{children}",s);e.miolo.logger.debug("render_middleware() rendered HTML (".concat(Buffer.byteLength(s,"utf8")," bytes of SSR content, ").concat(Buffer.byteLength(c,"utf8")," bytes total) ")),e.body=c}))).apply(this,arguments)}return function(e){return i.apply(this,arguments)}}var Me=Object.freeze({__proto__:null,init_guest_auth_middleware:(e,t,r)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=t;if(null!=e)return e(r||{})}catch(n){}return function(e,t){var r=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="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:r};return B.encode(n,o)}(r||{},o)};function i(){return i=H((function*(e,t){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var l=function(e){var t,r=null==e||null===(t=e.options)||void 0===t?void 0:t.maxAge;isNaN(r)&&(r=86400);var o=new Date;return o.setSeconds(o.getSeconds()+r),{expires:o,httpOnly:!1}}(r);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)}))}}),je=Object.freeze({__proto__:null,init_basic_auth_middleware:(e,t)=>{var{auth_user:r,realm:o,paths:n}=t;function i(e,t){return l.apply(this,arguments)}function l(){return(l=H((function*(t,n){t.user=null;var i=J(t),l=()=>{t.body={},t.response.status=401,t.response.body="Unauthorized",t.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return l();var a=yield r(i.name,i.pass,e.context.miolo);if(!1===a||null==a)return l();t.user=a,yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((t=>e.use(U(t,i))))}}),Fe=(e,t,r)=>t(null,e.id),Ie=(e,t,r)=>{t(Error("You need to define auth.passport.find_user_by_id"),null)},Pe=(e,t,r,o)=>{r(Error("You need to define auth.passport.local_auth_user"),null)},Ae=Object.freeze({__proto__:null,init_passport_auth_middleware:(e,t)=>{var{get_user_id:r,find_user_by_id:o,local_auth_user:n,url_login:i,url_logout:l,url_login_redirect:a,url_logout_redirect:u}=t,s=r||Fe,c=o||Ie,d=n||Pe,f=i||"/login",p=l||"/logout",m=new G.Strategy(((t,r,o)=>{d(t,r,o,e.context.miolo)}));D.serializeUser(((t,r)=>{process.nextTick((function(){s(t,r,e.context.miolo)}))})),D.deserializeUser(((t,r)=>{process.nextTick((function(){c(t,r,e.context.miolo)}))})),D.use(m),e.use(D.initialize()),e.use(D.session());var v=function(){var e=H((function*(e,t){e.isAuthenticated()?(e.logout(),e.body={success:!0},null!=u&&e.redirect(u)):(e.body={success:!1},e.response.status=401,e.response.body="Unauthorized")}));return function(t,r){return e.apply(this,arguments)}}(),h=new F;h.post(f,((e,t)=>D.authenticate("local",(function(t,r,o,n){if(!1!==r)return e.body={success:!0,user:r,authenticated:!0},null!=a&&e.redirect(a),e.login(r);e.body={success:!1,user:void 0,authenticated:!1,info:o,error:t},e.response.status=401,e.response.body="Unauthorized"}))(e))),h.get(p,v),h.post(p,v),e.use(h.routes())}}),Ne=i(require("url").pathToFileURL(__filename).toString()),Ce=n.dirname(Ne),Le=I(n.resolve(Ce,"fallback_index.html"),"utf8");var Te=Object.freeze({__proto__:null,init_route_html_render:function(e,t){function r(){return(r=H((function*(e){var r=e.miolo.logger,o=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";r.info("".concat(o," - ").concat(n," : ").concat(d(i)," ").concat(d(l)," => Rendering ").concat(a)),e.body=t||Le}))).apply(this,arguments)}var o=new F;o.get("/",(function(e){return r.apply(this,arguments)})),e.use(o.routes())}});var ze=Object.freeze({__proto__:null,init_404_render_middleware:function(e,t){function r(){return(r=H((function*(e){e.miolo.logger.debug("render_404_middleware() Not FOUND ".concat(e.url," ")),e.body={},e.response.status=404,e.response.body="Resource Not Found"}))).apply(this,arguments)}var o=new F;o.get("/",(function(e){return r.apply(this,arguments)})),e.use(o.routes())}});export{qe as init_ssr_render_middleware,Ee as miolo};
11
+ import e from"node:http";import t from"koa";import{createHttpTerminator as r}from"http-terminator";import o from"assign-deep";import n from"node:path";import{fileURLToPath as i}from"node:url";import{getConnection as l}from"calustra";export{getConnection}from"calustra";import a from"nodemailer";import{uncolor as u,gray as s,magenta as c,cyan as d,yellow as f,red_light as p,red as m,green as v,blue as h}from"tinguir";import y from"node:util";import g,{transports as b,createLogger as _,format as x}from"winston";import w from"koa-better-body";import S from"koa-convert";import k from"koa-compress";import{constants as O}from"node:zlib";import E from"koa-mount";import U from"koa-static";import R from"koa-favicon";import{performance as M}from"node:perf_hooks";import j from"koa-session";import q from"koa-redis";import I from"@koa/router";import{readFileSync as P}from"node:fs";import A from"koa-router";import N from"@koa/cors";import C from"koa-proxies";import F from"node:os";import z from"diskspace";import{CronJob as L}from"cron";import{renderToString as T}from"react-dom/server";import B from"jwt-simple";import J from"basic-auth";import D from"koa-passport";import G from"passport-local";function V(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function Y(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?V(Object(r),!0).forEach((function(t){W(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):V(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function K(e,t,r,o,n,i,l){try{var a=e[i](l),u=a.value}catch(s){return void r(s)}a.done?t(u):Promise.resolve(u).then(o,n)}function H(e){return function(){var t=this,r=arguments;return new Promise((function(o,n){var i=e.apply(t,r);function l(e){K(i,o,n,l,a,"next",e)}function a(e){K(i,o,n,l,a,"throw",e)}l(void 0)}))}}function W(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||"default");if("object"!=typeof o)return o;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:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var X=i(import.meta.url),Z=n.dirname(X),Q={name:"miolo",http:{port:8001,hostname:"localhost",static:{favicon:n.resolve(Z,"../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 r=e.user.id;if(null!=r)return r}catch(i){}try{if("guest"==e.user.name){var o=e.user.token;if(null!=o)return o}}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:$,timestamp:ee,_label:te,printf:re,errors:oe}=x,ne=(e,t)=>{var r,o,n={silly:s,debug:c,verbose:d,info:f,warn:p,error:m},i=re((t=>{var r,o=n[t.level],i=new Date(t.timestamp).toLocaleString((null==e||null===(r=e.format)||void 0===r?void 0:r.locale)||"en"),l="[miolo] ".concat(o(i)," ").concat(o(t.level)," ").concat(t.message);return t.stack?"".concat(l,"\n").concat(t.stack):l})),l=[];e.console.enabled&&l.push(new b.Console({humanReadableUnhandledException:!0,level:(null==e||null===(r=e.console)||void 0===r?void 0:r.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));e.file.enabled&&l.push(new b.File({filename:e.file.filename,level:(null==e||null===(o=e.file)||void 0===o?void 0:o.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0}));if(e.mail.enabled){var a=function(e,t){var r=function(r){g.Transport.call(this,r),r=r||{},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=r.humanReadableUnhandledException||!0,this.handleExceptions=r.handleExceptions||!0,this.json=r.json||!1,this.colorize=r.colorize||!1};return y.inherits(r,g.Transport),r.prototype.name="MailerLogger",r.prototype.log=function(r,o){var n=this,i="";try{i=r.message.split("\n")[0]}catch(s){i=r.message.toString()}i=u(i);var l=e.name+": ["+r.level.toUpperCase()+"] "+i,a={from:this.from,to:this.to,subject:l,text:u(r.message)};t.send(a,(function(){n.emit("logged"),o(null,!0)}))},r}(e.mail,t);b.MailerLogger=a,l.push(new b.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}return _({level:(null==e?void 0:e.level)||"silly",format:$(oe({stack:!0}),ee(),i),transports:l})},ie=(e,t)=>{var r=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=a.createTransport(e,t);return{send:function(e,t){r?(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))}),o.sendMail(e,t))},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),o.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:r}}(t.mail.options,t.mail.defaults),o=ne(t.log,r);t.db.options.log=o;var n={getConnection:()=>l(t.db.config,t.db.options),getModel:e=>l(t.db.config,t.db.options).getModel(e)},i={config:Y({},t),emailer:r,logger:o,db:n};function u(){return(u=H((function*(e,t){e.miolo=i,yield t()}))).apply(this,arguments)}e.use((function(e,t){return u.apply(this,arguments)})),e.context.miolo=i},le=e=>{e.use(k({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:O.Z_SYNC_FLUSH},deflate:{flush:O.Z_SYNC_FLUSH},br:!1})),e.use(S(w({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))},ae=[401];var ue=i(import.meta.url),se=n.dirname(ue),ce=n.resolve(se,"./miolo.ico"),de=(e,t)=>{var{favicon:r,folders:o}=t;for(var[n,i]of(e.use(R(r||ce)),Object.entries(o)))e.use(E(n,U(i,{index:!1})))},fe=1;var pe=new q;var me=i(import.meta.url),ve=n.dirname(me),he=P(n.resolve(ve,"./robots.txt"),"utf8");var ye={require:!1,action:"redirect",redirect_url:"/",error_code:401},ge={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}},be=e=>{var t=(null==e?void 0:e.crud)||[];if(!t)return[];if(!Array.isArray(t))return[];var r=[];return t.map((t=>{var o=null==t?void 0:t.routes;if(o&&Array.isArray(o)){var n=(null==t?void 0:t.bodyField)||(null==e?void 0:e.bodyField),i=Y(Y(Y({},ye),(null==t?void 0:t.authUser)||{}),(null==e?void 0:e.authUser)||{}),l=(null==t?void 0:t.getUserId)||(null==e?void 0:e.getUserId),a=[];for(var u of o){var s="string"==typeof u?{name:u}:u;if(s.name){var c={name:s.name,url:(null==s?void 0:s.url)||s.name,mode:(null==s?void 0:s.mode)||"rw",bodyField:(null==s?void 0:s.bodyField)||n,useUserFields:Y(Y({},ge),(null==s?void 0:s.useUserFields)||{}),authUser:Y(Y({},i),(null==s?void 0:s.authUser)||{}),getUserId:(null==s?void 0:s.getUserId)||l};a.push(c)}}a.length>0&&r.push({prefix:(null==t?void 0:t.prefix)||"",routes:a})}})),r};function _e(e){var t=e.indexOf("?")>=0?e.substr(e.indexOf("?")):"";if(t&&"?"!=t){var r=t.slice(1).split("&"),o={};return r.forEach((function(e){e=e.split("="),o[e[0]]=decodeURIComponent(e[1]||"")})),JSON.parse(JSON.stringify(o))}return{}}var xe=e=>{var t=(null==e?void 0:e.queries)||[];if(!t)return[];if(!Array.isArray(t))return[];var r=[];return t.map((t=>{var o,n,i=null==t?void 0:t.routes;if(i&&Array.isArray(i)){var l=(null==e||null===(o=e.crud)||void 0===o?void 0:o.bodyField)||(null==e?void 0:e.bodyField),a=Y(Y(Y({},ye),(null==t?void 0:t.authUser)||{}),(null==e?void 0:e.authUser)||{}),u=(null==e||null===(n=e.crud)||void 0===n?void 0:n.getUserId)||(null==e?void 0:e.getUserId),s=[];for(var c of i)if(c.url&&c.callback){var d={url:c.url,method:(null==c?void 0:c.method)||"GET",callback:c.callback,bodyField:(null==c?void 0:c.bodyField)||l,authUser:Y(Y({},a),(null==c?void 0:c.authUser)||{}),getUserId:(null==c?void 0:c.getUserId)||u};s.push(d)}r.push({prefix:(null==t?void 0:t.prefix)||"",routes:s})}})),r};function we(e,t,r){var o=new A;try{var n=be(r),i=xe(r),l=n.length>0,a=i.length>0;if(!l&&!a)throw"[miolo-router] Could not get any route from the passed <routes> param";l&&function(e,t,r,o){r.map((r=>{var n=r.prefix;r.routes.map((r=>{var i=e.getModel(r.name);if(i){for(var l=e=>null==r.bodyField?e:{[r.bodyField]:e},a=function(){var e=H((function*(e,t,n){var i=void 0;r.getUserId&&(i=r.getUserId(e));var l=!0,a=r.authUser;(!0===a.require||"read-only"===a.require&&"w"===t)&&void 0===i&&("error"==a.action?(o.error("[miolo-router] Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):(o.error("[miolo-router] Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)),l=!1);var u={};!0===r.useUserFields.use&&(u=r.useUserFields.fieldNames);var s={uid:i,fieldNames:u},c={};l&&(c=yield n(s)),e.body=c}));return function(t,r,o){return e.apply(this,arguments)}}(),u=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.read(r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),s=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.keyList(r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),c=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.find(r.id,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),d=function(){var e=H((function*(e){yield a(e,"r",function(){var t=H((function*(t){var r=_e(e.request.url),o={transaction:void 0},n=yield i.distinct(r.distinct_field,r,o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),f=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r,o=e.request.fields;null!=t&&null!==(r=t.fieldNames)&&void 0!==r&&r.created_by&&(o[t.fieldNames.created_by]=t.uid);var n={transaction:void 0},a=yield i.insert(o,n);return l(a)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),p=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r,o=e.request.fields;null!=t&&null!==(r=t.fieldNames)&&void 0!==r&&r.last_update_by&&(o[t.fieldNames.last_update_by]=t.uid);var n={transaction:void 0},a=yield i.update(o,{id:o.id},n);return l(a)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),m=function(){var e=H((function*(e){yield a(e,"w",function(){var t=H((function*(t){var r=e.request.fields,o={transaction:void 0},n=yield i.delete({id:r.id},o);return l(n)}));return function(e){return t.apply(this,arguments)}}())}));return function(t){return e.apply(this,arguments)}}(),v=n?"/".concat(n,"/").concat(r.url):"/".concat(r.url);v.indexOf("//")>=0;)v=v.replace(/\/\//g,"/");o.info("[miolo-router] Routing table ".concat(r.name," to ").concat(v));var h=r.mode.indexOf("r")>=0,y=r.mode.indexOf("w")>=0,g=r.mode.indexOf("u")>=0||y;h&&(t.get("".concat(v,"/find"),(e=>c(e))),t.get("".concat(v,"/read"),(e=>u(e))),t.get("".concat(v,"/distinct"),(e=>d(e))),t.get("".concat(v,"/key_list"),(e=>s(e)))),g&&(t.post("".concat(v,"/save"),(e=>f(e))),t.post("".concat(v,"/update"),(e=>p(e)))),y&&t.post("".concat(v,"/delete"),(e=>m(e)))}else o.error("[miolo-router] Could not get model for ".concat(r.name))}))}))}(t,o,n,t.log),a&&function(e,t,r){t.map((t=>{var o=t.prefix;t.routes.map((t=>{for(var n,i=o?"/".concat(o,"/").concat(t.url):"/".concat(t.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");r.info("Routing ".concat((null===(n=t.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(i));var l=function(){var e=H((function*(e){var o=void 0;t.getUserId&&(o=t.getUserId(e));var n=t.authUser;return(!0===n.require||"read-only"===n.require&&"POST"===t.method)&&void 0===o?"error"==n.action?(r.error("Unauthorized access. Throwing error ".concat(n.error_code)),e.throw(n.error_code,null,{})):(r.error("Unauthorized access. Redirecting to ".concat(n.redirect_url)),e.redirect(n.redirect_url)):yield t.callback(e)}));return function(t){return e.apply(this,arguments)}}();"POST"==t.method?e.post(i,(e=>l(e,t))):e.get(i,(e=>l(e,t)))}))}))}(o,i,t.log)}catch(u){console.error(u),console.error("[miolo-router] Error initing the router. Probably config objects are not ok"),console.error("[miolo-router] connOrConfig:"),console.error(null==t?void 0:t.config),console.error("[miolo-router] routes:"),console.error(r)}e.use(o.routes())}var Se=(e,t)=>{null!=t&&0!=t.length&&t.map((t=>{function r(){return(r=H((function*(e,r){yield t(e),yield r()}))).apply(this,arguments)}e.use((function(e,t){return r.apply(this,arguments)}))}))},ke=(e,t,r)=>{try{var o=e[t];if(null!=o&&0!=o)return r(o)}catch(n){}},Oe=(e,t)=>{var r=e.context.miolo.logger;ke(t,"cors",(t=>{if("simple"==t)r.debug("Setting CORS the simple way"),e.use(function(){var e=H((function*(e,t){e.set("Access-Control-Allow-Origin","*"),e.set("Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield t()}));return function(t,r){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(t);r.debug("Setting CORS headers for ".concat(JSON.stringify(o))),e.use(N(o))}})),ke(t,"proxy",(t=>{var[o,n]=(e=>{var t,r,o,n;return null==e&&(e={}),[(null===(t=e)||void 0===t?void 0:t.path)||"/",{target:(null===(r=e)||void 0===r?void 0:r.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(t);r.debug("Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(C(o,n))}))};function Ee(e){var t=function(e){function t(e){return e?e/1e6:0}function r(e){return e?e/1e6:0}return function(){var o=Math.round(t(F.freemem()),2),n=Math.round(t(F.totalmem()),2),i=Math.round(100*o/n,2);i>80?e.error("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(v(n)," MB (").concat(f(i)," %)")):e.info("[SERVER][".concat(d("SysCheck"),"] RAM ").concat(f(o)," MB used of ").concat(v(n)," MB (").concat(f(i)," %)")),z.check("/",(function(t,o){var n=Math.round(r(o.used),2),i=Math.round(r(o.total),2),l=Math.round(r(o.free),2);l<1?e.error("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(n)," GB used of ").concat(v(i)," GB (").concat(f(l)," GB free)")):e.info("[SERVER][".concat(d("SysCheck"),"] DISK ").concat(f(n)," GB used of ").concat(v(i)," GB (").concat(f(l)," GB free)"))}))}}(e);new L("30 * * * *",t,null,!0,"Europe/Madrid")}function Ue(e,t,r){return Re.apply(this,arguments)}function Re(){return Re=H((function*(n,i,l){var a,u,s,c,p=new t,y=function(e){return o(Q,e)}(n);ie(p,y),le(p),function(e){var t=e.context.miolo.logger;function r(){return(r=H((function*(e){if(e){var r=e.status||400;if(this.accepts(["text","json","html"])?"number"!=typeof r&&(r=500):(r=406,e.message="Unsupported type"),ae.indexOf(r)>=0?t.warn("".concat(this.method," ").concat(this.url," - ").concat(r,": ").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=r,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 r.apply(this,arguments)}}(p),de(p,null===(a=y.http)||void 0===a?void 0:a.static),function(e){function t(){return(t=H((function*(e,t){var r=e.miolo.logger;fe+=1,e.requestId=fe,e.request.body=Y(Y({},e.request.fields),e.request.files);var o=M.now(),n=e.headers["x-real-ip"]||"127.0.0.1";e.request.ip=n,r.info("req begin ".concat(e.requestId," - ip ").concat(n," - ").concat(d(e.request.method)," ").concat(d(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(y){}try{null!=e.user&&(i=e.user)}catch(y){}var l,a,u,s="";if(null!=i)if(null!==(l=i)&&void 0!==l&&l.id)s=" - uid ".concat(null===(u=i)||void 0===u?void 0:u.id);else if(null!==(a=i)&&void 0!==a&&a.token){var c;s=" - token ".concat(null===(c=i)||void 0===c?void 0:c.token)}var p=parseFloat((M.now()-o)/1e3).toFixed(2),h=p<1?v:p<2?f:m;r.info("req end ".concat(e.requestId).concat(s," => ").concat(h("DONE in ".concat(p," seconds"))))}))).apply(this,arguments)}e.use((function(e,r){return t.apply(this,arguments)}))}(p),function(e,t){e.keys=[t.secret||"*secret*"];var r=Y({store:pe},t.options||{});e.use(j(r,e))}(p,null==y?void 0:y.session),function(e){function t(){return(t=H((function*(e){e.body=he}))).apply(this,arguments)}var r=new I;r.get("/robots.txt",(function(e){return t.apply(this,arguments)})),e.use(r.routes())}(p);var g=null==y?void 0:y.catcher;if(g&&function(e,t){function r(){return r=H((function*(e){var{error:t,path:r,agent:o}=e.request.body,n=e.miolo.logger,i="".concat(m("[JS Error]")," on ").concat(h(r),": ").concat(t.msg,"\n")+"".concat(m("[JS Error]")," File => ").concat(t.file,"\n")+"".concat(m("[JS Error]")," Line => ").concat(t.line,"\n")+"".concat(m("[JS Error]")," Col => ").concat(t.col,"\n")+"".concat(m("[JS Error]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(m("[JS Error]")," Agent => ").concat(o);n.error(i),e.body={result:1}})),r.apply(this,arguments)}var o=new I;o.post(t,(function(e){return r.apply(this,arguments)})),e.use(o.routes())}(p,g),null!=y&&null!==(u=y.auth)&&void 0!==u&&u.guest){var{init_guest_auth_middleware:b}=yield Promise.resolve().then((function(){return je}));b(p,y.auth.guest,null==y?void 0:y.session)}if(null!=y&&null!==(s=y.auth)&&void 0!==s&&s.basic){var{init_basic_auth_middleware:_}=yield Promise.resolve().then((function(){return qe}));_(p,y.auth.basic)}if(null!=y&&null!==(c=y.auth)&&void 0!==c&&c.passport){var{init_passport_auth_middleware:x}=yield Promise.resolve().then((function(){return Ne}));x(p,y.auth.passport)}var w=null==y?void 0:y.middlewares;if(w&&Se(p,w),Oe(p,y.http),null!=y&&y.routes){var S=p.context.miolo.db.getConnection();we(p,S,y.routes)}if(null!=(null==i?void 0:i.html)){var{init_route_html_render:k}=yield Promise.resolve().then((function(){return Le}));k(p,i.html)}else if(null!=(null==i?void 0:i.middleware))p.use(i.middleware);else{var{init_404_render_middleware:O}=yield Promise.resolve().then((function(){return Te}));O(p,i)}var E=e.createServer(p.callback());yield((e,t,r)=>new Promise(((o,n)=>{e.listen(t,r,(e=>{e?n(e):o()}))})))(E,y.http.port,y.http.hostname),p.context.miolo.logger.info("miolo is listening on ".concat(y.http.hostname,":").concat(y.http.port)),p.server=E;var U=r({server:E});return p.stop_server=H((function*(){yield U.terminate(),p.context.miolo.logger.info("miolo has been shutdowned from ".concat(y.http.hostname,":").concat(y.http.port))})),null!=l&&l(p),Ee(p.context.miolo.logger),p})),Re.apply(this,arguments)}function Me(e,t,r){var o='\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==r?void 0:r.html)&&(o=r.html)}catch(l){}var n=function(){var t=H((function*(t){var r={};try{r=yield e(t)}catch(o){t.miolo.logger.error("Error produced by loader in the render middleware"),t.miolo.logger.error(o)}return r}));return function(e){return t.apply(this,arguments)}}();function i(){return(i=H((function*(e){var r=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 u={user:a,authenticated:i,ssr_data:r,extra:null==e?void 0:e.extra},s="";try{s=T(t(e,u))}catch(f){e.miolo.logger.error("Missing renderer in the render middleware"),e.miolo.logger.error(f),s="\n <div>\n MIOLO: Missing SSR renderer: ".concat(f.toString(),"\n </div> \n ")}var c=o.replace("{context}",JSON.stringify(u,null,2)).replace("{children}",s);e.miolo.logger.debug("render_middleware() rendered HTML (".concat(Buffer.byteLength(s,"utf8")," bytes of SSR content, ").concat(Buffer.byteLength(c,"utf8")," bytes total) ")),e.body=c}))).apply(this,arguments)}return function(e){return i.apply(this,arguments)}}var je=Object.freeze({__proto__:null,init_guest_auth_middleware:(e,t,r)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=t;if(null!=e)return e(r||{})}catch(n){}return function(e,t){var r=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="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:r};return B.encode(n,o)}(r||{},o)};function i(){return i=H((function*(e,t){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var l=function(e){var t,r=null==e||null===(t=e.options)||void 0===t?void 0:t.maxAge;isNaN(r)&&(r=86400);var o=new Date;return o.setSeconds(o.getSeconds()+r),{expires:o,httpOnly:!1}}(r);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)}))}}),qe=Object.freeze({__proto__:null,init_basic_auth_middleware:(e,t)=>{var{auth_user:r,realm:o,paths:n}=t;function i(e,t){return l.apply(this,arguments)}function l(){return(l=H((function*(t,n){t.user=null;var i=J(t),l=()=>{t.body={},t.response.status=401,t.response.body="Unauthorized",t.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return l();var a=yield r(i.name,i.pass,e.context.miolo);if(!1===a||null==a)return l();t.user=a,yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((t=>e.use(E(t,i))))}}),Ie=(e,t,r)=>t(null,e.id),Pe=(e,t,r)=>{t(Error("You need to define auth.passport.find_user_by_id"),null)},Ae=(e,t,r,o)=>{r(Error("You need to define auth.passport.local_auth_user"),null)},Ne=Object.freeze({__proto__:null,init_passport_auth_middleware:(e,t)=>{var{get_user_id:r,find_user_by_id:o,local_auth_user:n,url_login:i,url_logout:l,url_login_redirect:a,url_logout_redirect:u}=t,s=r||Ie,c=o||Pe,d=n||Ae,f=i||"/login",p=l||"/logout",m=new G.Strategy(((t,r,o)=>{d(t,r,o,e.context.miolo)}));D.serializeUser(((t,r)=>{process.nextTick((function(){s(t,r,e.context.miolo)}))})),D.deserializeUser(((t,r)=>{process.nextTick((function(){c(t,r,e.context.miolo)}))})),D.use(m),e.use(D.initialize()),e.use(D.session());var v=function(){var e=H((function*(e,t){e.isAuthenticated()?(e.logout(),e.body={success:!0},null!=u&&e.redirect(u)):(e.body={success:!1},e.response.status=401,e.response.body="Unauthorized")}));return function(t,r){return e.apply(this,arguments)}}(),h=new I;h.post(f,((e,t)=>D.authenticate("local",(function(t,r,o,n){if(!1!==r)return e.body={success:!0,user:r,authenticated:!0},null!=a&&e.redirect(a),e.login(r);e.body={success:!1,user:void 0,authenticated:!1,info:o,error:t},e.response.status=401,e.response.body="Unauthorized"}))(e))),h.get(p,v),h.post(p,v),e.use(h.routes())}}),Ce=i(import.meta.url),Fe=n.dirname(Ce),ze=P(n.resolve(Fe,"fallback_index.html"),"utf8");var Le=Object.freeze({__proto__:null,init_route_html_render:function(e,t){function r(){return(r=H((function*(e){var r=e.miolo.logger,o=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";r.info("".concat(o," - ").concat(n," : ").concat(d(i)," ").concat(d(l)," => Rendering ").concat(a)),e.body=t||ze}))).apply(this,arguments)}var o=new I;o.get("/",(function(e){return r.apply(this,arguments)})),e.use(o.routes())}});var Te=Object.freeze({__proto__:null,init_404_render_middleware:function(e,t){function r(){return(r=H((function*(e){e.miolo.logger.debug("render_404_middleware() Not FOUND ".concat(e.url," ")),e.body={},e.response.status=404,e.response.body="Resource Not Found"}))).apply(this,arguments)}var o=new I;o.get("/",(function(e){return r.apply(this,arguments)})),e.use(o.routes())}});export{Me as init_ssr_render_middleware,Ue as miolo};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -124,7 +124,7 @@ function _toPropertyKey(arg) {
124
124
  return typeof key === "symbol" ? key : String(key);
125
125
  }
126
126
 
127
- var __my_filename$3 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
127
+ var __my_filename$3 = fileURLToPath(import.meta.url);
128
128
  var __my_dirname$3 = path.dirname(__my_filename$3);
129
129
  var favicon = path.resolve(__my_dirname$3, '../static/img/miolo.ico');
130
130
  var base_config = {
@@ -711,7 +711,7 @@ function init_catcher_middleware(app) {
711
711
  app.context.onerror = catcher_middleware;
712
712
  }
713
713
 
714
- var __my_filename$2 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
714
+ var __my_filename$2 = fileURLToPath(import.meta.url);
715
715
  var __my_dirname$2 = path.dirname(__my_filename$2);
716
716
  var fallback_favicon_path = path.resolve(__my_dirname$2, './miolo.ico');
717
717
  var init_static_middleware = (app, config) => {
@@ -796,7 +796,7 @@ function init_session_middleware(app, config) {
796
796
  app.use(koa_session(options, app));
797
797
  }
798
798
 
799
- var __my_filename$1 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
799
+ var __my_filename$1 = fileURLToPath(import.meta.url);
800
800
  var __my_dirname$1 = path.dirname(__my_filename$1);
801
801
  var robots_txt = readFileSync(path.resolve(__my_dirname$1, './robots.txt'), 'utf8');
802
802
  function init_route_robots(app) {
@@ -1932,7 +1932,7 @@ var passport = /*#__PURE__*/Object.freeze({
1932
1932
  init_passport_auth_middleware: init_passport_auth_middleware
1933
1933
  });
1934
1934
 
1935
- var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1935
+ var __my_filename = fileURLToPath(import.meta.url);
1936
1936
  var __my_dirname = path.dirname(__my_filename);
1937
1937
  var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
1938
1938
  var indexHTML = readFileSync(indexHTMLPath, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"miolo.server.mjs","sources":["../../src/server/config/defaults.mjs","../../src/server/config/index.mjs","../../src/server/engines/emailer/index.mjs","../../src/server/engines/logger/logger_mail.mjs","../../src/server/engines/logger/index.mjs","../../src/server/middleware/context/context.mjs","../../src/server/middleware/context/body.mjs","../../src/server/middleware/context/catcher.mjs","../../src/server/middleware/static/index.mjs","../../src/server/middleware/context/request.mjs","../../src/server/middleware/session/store.mjs","../../src/server/middleware/session/index.mjs","../../src/server/middleware/routes/robots/index.mjs","../../src/server/middleware/routes/catch_js_error.mjs","../../src/server/middleware/routes/router/defaults.mjs","../../src/server/middleware/routes/router/crud/getCrudConfig.mjs","../../src/server/middleware/routes/router/utils.mjs","../../src/server/middleware/routes/router/crud/attachCrudRoutes.mjs","../../src/server/middleware/routes/router/queries/getQueriesConfig.mjs","../../src/server/middleware/routes/router/queries/attachQueriesRoutes.mjs","../../src/server/middleware/routes/router/index.mjs","../../src/server/middleware/extra.mjs","../../src/server/middleware/context/headers.mjs","../../src/server/engines/cron/syscheck.mjs","../../src/server/engines/cron/index.mjs","../../src/server/server.mjs","../../src/server/middleware/render/ssr/fallbacks/index.html.mjs","../../src/server/middleware/render/ssr/render.mjs","../../src/server/middleware/auth/guest.mjs","../../src/server/middleware/auth/basic.mjs","../../src/server/middleware/auth/passport.mjs","../../src/server/middleware/render/html/render.mjs","../../src/server/middleware/render/404/render.mjs"],"sourcesContent":["import path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst favicon = path.resolve(__my_dirname, '../static/img/miolo.ico')\n\nexport default {\n name: 'miolo',\n http: {\n port: 8001,\n hostname: 'localhost',\n \n static: {\n favicon: favicon,\n folders: {}\n },\n \n // cors can be:\n // - false\n // - simple (just assign Access-Control-Allow-Origin='*' and Access-Control-Expose-Headers='SourceMap,X-SourceMap'\n // - true enable @koa/cors\n // - {options} enable @koa/cors and use the custom options\n //\n cors: false,\n\n // proxy can be:\n // - false\n // - true enable koa-proxies and use default options\n // - {options} enable koa-proxies and use the custom options\n proxy: false\n \n },\n session: {\n salt: 'SUPER_SALTY_YES?',\n secret: 'SUPER_SECRET_KEY_KERE',\n options: {\n /** (number || 'session') maxAge in ms (default is 1 days) */\n /** 'session' will result in a cookie that expires when session/browser is closed */\n /** Warning: If a session cookie is stolen, this cookie will never expire */\n maxAge: 86400000,\n \n /** (boolean) automatically commit headers (default true) */\n //autoCommit: true, \n \n /** (boolean) can overwrite or not (default true) */\n //overwrite: true, \n \n /** (boolean) httpOnly or not (default true) */\n //httpOnly: true, \n \n /** (boolean) signed or not (default true) */\n //signed: true, \n \n /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */\n //rolling: false, \n \n /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/\n //renew: false, \n\n /** (boolean) secure cookie*/\n secure: true, \n \n /** (string) session cookie sameSite options (default null, don't set it) */\n sameSite: null, // 'strict', \n }\n },\n db: {\n config: {\n dialect: 'postgres',\n host: 'localhost',\n port: 5432,\n database: 'miolo',\n user: 'postgres',\n password: 'postgres',\n max: 5, // Maximum number of connection in pool\n min: 0, // Minimum number of connection in pool\n idleTimeoutMillis: 10000, // The maximum time, in milliseconds, that a connection can be idle before being released. Use with combination of evict for proper working, for more details read https://github.com/coopernurse/node-pool/issues/178#issuecomment-327110870,\n },\n options: {\n log: 'silly', // will be updated on the fly with miolo logger\n tables: []\n }\n },\n routes: {\n bodyField: undefined,\n \n getUserId: (ctx) => {\n try {\n const from_pport= ctx.state.user.id\n if (from_pport!=undefined) {\n return from_pport\n }\n } catch(e) {}\n try {\n const from_basic_auth= ctx.user.id\n if (from_basic_auth!=undefined) {\n return from_basic_auth\n }\n } catch(e) {}\n try {\n if (ctx.user.name == 'guest') {\n const from_guest_auth= ctx.user.token\n if (from_guest_auth!=undefined) {\n return from_guest_auth\n }\n }\n } catch(e) {} \n let uid= ctx.headers['user-id']\n if (uid!=undefined) {\n return uid\n }\n return undefined\n },\n \n // authUser: {\n // require: false, // true / false / 'read-only'\n // action: 'redirect', // 'error'\n // redirect_url: '/',\n // error_code: 401\n // }, \n \n crud: [{\n prefix: '',\n routes: [], // miolo will not support '*' by now\n }],\n queries: undefined\n },\n catcher: '/sys/jserror',\n //cacher: {\n // redis: {\n // host: '127.0.0.1',\n // port: 6379\n // },\n //},\n log: {\n level: 'debug',\n format: {\n locale: 'en-GB'\n },\n console: {\n enabled: true,\n level: 'silly',\n },\n file: {\n enabled: true,\n level: 'silly',\n filename: '/var/log/afialapis/miolo.log'\n },\n mail: {\n enabled: false,\n level: 'warn',\n name: 'miolo',\n from: 'miolo@afialapis.com',\n to: 'devel@afialapis.com' \n }\n },\n mail: {\n silent: true,\n options: {\n //\n // General options\n //\n // port – is the port to connect to (defaults to 587 is secure is false or 465 if true)\n port: 25,\n // host – is the hostname or IP address to connect to (defaults to ‘localhost’)\n host: 'mail.afialapis.com',\n // auth – defines authentication data \n // If authentication data is not present, the connection is considered authenticated from the start. \n // Otherwise you would need to provide the authentication options object.\n // - type indicates the authetication type, defaults to ‘login’, other option is ‘oauth2’\n // - user is the username\n // - pass is the password for the user if normal login is used\n // authMethod – defines preferred authentication method, defaults to ‘PLAIN’\n authMethod: 'PLAIN',\n //\n // TLS options\n //\n // secure – if true the connection will use TLS when connecting to server.\n // If false (the default) then TLS is used if server supports the STARTTLS extension.\n // In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false\n // ** Setting secure to false does not mean that you would not use an encrypted connection. Most SMTP servers allow \n // connection upgrade via STARTTLS command but to use this you have to connect using plaintext first\n secure: false,\n // tls – defines additional node.js TLSSocket options to be passed to the socket constructor, eg. {rejectUnauthorized: true}.\n tls: {\n // do not fail on invalid certs\n rejectUnauthorized: false\n } ,\n // ignoreTLS – if this is true and secure is false then TLS is not used even if the server supports STARTTLS extension\n // ** ignoreTLS: false,\n // requireTLS – if this is true and secure is false then Nodemailer tries to use STARTTLS even \n // if the server does not advertise support for it. If the connection can not be encrypted then message is not sent\n // ** requireTLS: true,\n //\n // Connection options\n //\n // name – optional hostname of the client, used for identifying to the server, defaults to hostname of the machine\n // ** name: ,\n // localAddress – is the local interface to bind to for network connections\n // ** localAddress: ,\n // connectionTimeout – how many milliseconds to wait for the connection to establish\n // ** connectionTimeout: ,\n // greetingTimeout – how many milliseconds to wait for the greeting after connection is established\n // ** greetingTimeout: ,\n // socketTimeout – how many milliseconds of inactivity to allow\n // ** socketTimeout: ,\n //\n // Debug options\n //\n // logger – optional bunyan compatible logger instance. If set to true then logs to console. \n // If value is not set or is false then nothing is logged\n logger: false,\n // debug – if set to true, then logs SMTP traffic, otherwise logs only transaction events\n debug: false,\n //\n // Security options\n //\n // disableFileAccess – if true, then does not allow to use files as content. \n // Use it when you want to use JSON data from untrusted source as the email.\n // If an attachment or message node tries to fetch something from a file the sending returns an error\n ////disableFileAccess: ,\n // disableUrlAccess – if true, then does not allow to use Urls as content\n // ** disableUrlAccess: ,\n\n //\n // Pooling options\n //\n // pool – see Pooled SMTP for details about connection pooling : https://nodemailer.com/smtp/pooled/\n //\n // Proxy options\n //\n // proxy – all SMTP based transports allow to use proxies for making TCP connections to servers.\n // Read about proxy support in Nodemailer from here: https://nodemailer.com/smtp/proxies/\n\n /* TESTED */\n /*\n port: 465,\n host: 'mail.afialapis.com',\n auth: {\n user: 'devel@afialapis.com',\n pass: '***',\n type: 'login',\n }, \n secure: true,\n tls: {\n rejectUnauthorized: false\n } ,\n */\n\n },\n defaults: {\n name: 'miolo',\n from: 'miolo@afialapis.com',\n to: 'devel@afialapis.com'\n }\n },\n auth: {\n //basic: {\n // auth_user: async (username, password) => { return {id: 1} },\n // realm: '',\n // paths: [],\n //},\n //passport: {\n // get_user_id: (user, done, miolo) => done(null, user.id), // default\n // find_user_by_id: (id, done, miolo) => done(null, {id: 1}), // ok=> done(null, user) err=> done(error, null)\n // local_auth_user: (username, password, done, miolo) => done(null, {id: 1})\n // // auth=> done(null, user) noauth=> done(null, false, {message: ''}) err=> done(error, null)\n // url_login : '/login',\n // url_logout: '/logout',\n // url_login_redirect: undefined\n // url_logout_redirect: '/'\n //}\n //guest: {\n // make_guest_token: undefined // (session) => ''\n //}\n },\n middlewares: [\n // async (ctx) => {}\n ]\n};\n\n","import merge from 'assign-deep'\nimport base_config from './defaults.mjs'\n\n\nfunction init_config(config) {\n return merge(base_config, config)\n}\n\nexport {\n init_config\n}","import nodemailer from 'nodemailer'\n\nfunction init_emailer(options, defaults, silent= false) {\n\n const nmailer = nodemailer.createTransport(options, defaults)\n\n function send_email(mail, cb) {\n if (silent) {\n console.info('*********************************')\n console.info('This mail will not be send (emailing is disabled):')\n console.info(mail)\n console.info('*********************************')\n } else {\n \n if (! cb) {\n cb= function(err, info) {\n if (err) {\n console.error('NodeMailer error:')\n console.error(err)\n }\n if (info) {\n console.log('NodeMailer sent mail:')\n console.log(info)\n } \n } \n } \n\n nmailer.sendMail(mail, cb)\n }\n }\n\n\n function verify_emailer() {\n console.info('[miolo][Verify][MAILER] Verifying...')\n // verify connection configuration\n nmailer.verify(function(error, _success) {\n if (error) {\n console.error('[miolo][Verify][MAILER] Verifying ERROR')\n console.error(error)\n } else {\n console.info('[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages')\n //test_eail()\n }\n })\n }\n\n const emailer= {\n send: send_email, \n verify: verify_emailer,\n options, \n defaults, \n silent\n }\n return emailer\n}\n\n\n\n\nexport {init_emailer}","// \"use strict\";\nimport util from 'util'\nimport winston from 'winston'\nimport { uncolor } from 'tinguir'\n\nfunction init_logger_to_mail(config, emailer) {\n\n\n let MailerLogger = function (options) {\n winston.Transport.call(this, options);\n options = options || {};\n\n this.level = config.level || 'info'\n this.ename = config?.name || emailer.defaults.name\n this.to = config.to || emailer.defaults.to\n this.from = config.from || emailer.defaults.from\n this.humanReadableUnhandledException = options.humanReadableUnhandledException || true;\n this.handleExceptions = options.handleExceptions || true;\n this.json = options.json || false;\n this.colorize = options.colorize || false;\n\n\n\n \n };\n\n /** @extends winston.Transport */\n util.inherits(MailerLogger, winston.Transport);\n\n //\n // Expose the name of this Transport on the prototype\n //\n MailerLogger.prototype.name = 'MailerLogger';\n\n\n MailerLogger.prototype.log = function (info, callback) {\n let self = this;\n\n let tit= '';\n try {\n tit= info.message.split(\"\\n\")[0]\n } catch(e) {\n tit= info.message.toString();\n }\n\n tit= uncolor(tit)\n \n let subject = config.name + ': [' + info.level.toUpperCase() + '] ' + tit;\n\n let mail= {\n from : this.from,\n to : this.to,\n subject : subject, \n text : uncolor(info.message)\n }\n\n emailer.send(mail, function() {\n self.emit(\"logged\");\n callback(null, true); \n });\n \n };\n\n\n \n return MailerLogger\n}\n\nexport {init_logger_to_mail}","import { red, cyan, magenta, yellow, gray, red_light } from 'tinguir'\n/* https://github.com/winstonjs/winston/issues/925 */\n/* https://github.com/winstonjs/winston/issues/287 */\nimport {init_logger_to_mail} from './logger_mail.mjs'\nimport { createLogger, format, transports } from 'winston'\n\n\nconst { combine, timestamp, _label, printf, errors } = format\n\n\nconst init_logger = (config, emailer) => {\n const LEVEL_COLORS= {\n silly : gray,\n debug : magenta,\n verbose: cyan,\n info : yellow,\n warn : red_light,\n error : red\n }\n\n const myFormat = printf(info => {\n const lc = LEVEL_COLORS[info.level]\n const tm = new Date(info.timestamp)\n const ts= tm.toLocaleString(config?.format?.locale || 'en')\n //const ts= tm.toString().substr(4, 20)\n const log= `[miolo] ${lc(ts)} ${lc(info.level)} ${info.message}`\n return info.stack\n ? `${log}\\n${info.stack}`\n : log; \n })\n\n\n let _log_transports= []\n //\n // Console transport\n // If we're not in production then log to the `console` with the format:\n // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `\n // \n\n if (config.console.enabled) {\n _log_transports.push(\n new transports.Console({\n humanReadableUnhandledException: true,\n level : config?.console?.level || config?.level || 'silly',\n handleExceptions: true\n }))\n }\n\n //\n // File transport\n //\n if (config.file.enabled) {\n _log_transports.push(\n new transports.File({ \n filename : config.file.filename, \n level : config?.file?.level || config?.level || 'info' ,\n humanReadableUnhandledException: true,\n handleExceptions: true})\n )\n }\n\n //\n // Mail transport\n //\n if (config.mail.enabled) { \n const MailerLogger= init_logger_to_mail(config.mail, emailer)\n transports.MailerLogger = MailerLogger;\n\n _log_transports.push(\n new transports.MailerLogger({\n humanReadableUnhandledException: true,\n handleExceptions: true \n })\n )\n }\n\n //\n // Logger\n //\n const logger = createLogger({\n level: config?.level || 'silly',\n format: combine(\n errors({ stack: true }),\n timestamp(),\n myFormat\n ),\n transports: _log_transports\n })\n\n return logger\n}\n\n\nexport {init_logger}\n\n\n\n\n","import { getConnection } from 'calustra'\nimport { init_emailer } from '../../engines/emailer/index.mjs'\nimport { init_logger } from '../../engines/logger/index.mjs'\n\nconst init_context_middleware = ( app, config ) => {\n const emailer = init_emailer(config.mail.options, config.mail.defaults)\n const logger = init_logger(config.log, emailer)\n\n config.db.options.log= logger\n \n const getConnectionWrap = () => {\n return getConnection(config.db.config, config.db.options)\n }\n\n const getModelWrap = (name) => {\n const conn = getConnection(config.db.config, config.db.options)\n return conn.getModel(name)\n } \n\n const db= {\n getConnection: getConnectionWrap,\n getModel: getModelWrap\n }\n\n // Assign miolo stuff to ctx\n const mioloContext= {\n config: {...config},\n emailer,\n logger,\n db: db\n } \n\n\n async function context_middleware(ctx, next) {\n // Assign miolo stuff to ctx\n ctx.miolo= mioloContext \n await next()\n\n }\n\n app.use(context_middleware)\n app.context.miolo= mioloContext\n \n}\n\nexport { init_context_middleware }","import koa_body_parser from 'koa-better-body'\n//import koa_body_parser from 'koa-bodyparser'\nimport koa_convert from 'koa-convert'\nimport koa_compress from 'koa-compress'\nimport {constants} from 'node:zlib'\n\nconst init_body_middleware = ( app ) => {\n // Compress\n \n app.use(koa_compress({\n filter: function (content_type) {\n return content_type=='application/json' || content_type=='text/html'\n },\n //threshold: 2048,\n gzip: {\n flush: constants.Z_SYNC_FLUSH\n },\n deflate: {\n flush: constants.Z_SYNC_FLUSH,\n },\n br: false // disable brotli\n\n }))\n\n // body parser - koa-better-body\n\n // koa-better-body needs some customization in order to \n // work for koa-passport\n // By default it save POST params in request.fields. But koa-passport\n // expects that values in request.body.\n // We will copy request.fields and request.files in request.body.\n // 1.- It could be done through this option parameters;\n // https://github.com/rkusa/koa-passport/issues/33#issuecomment-122611613\n // https://github.com/tunnckoCore/opensource/tree/master/%40packages/koa-better-body#options\n // {fields: 'body', files: 'body',}\n // But this will cause errors on other parts (for example, init_router())\n // 2.- but still need to know how dangerous it is to touch request.body (as by default, \n // koa-better-body is saving some async function in request.body)\n // We patch the .body on the `request` middleware\n\n app.use(koa_convert(koa_body_parser({\n formLimit: '100mb',\n jsonLimit: '100mb',\n bufferLimit: '100mb',\n })))\n\n \n\n // body parser - koa-bodyparser\n //app.use(koa_body_parser())\n}\n\nexport { init_body_middleware }","/**\n * Middleware for catching errors thrown in routes\n * @param ctx\n */\n\nconst _ONLY_WARN= [401]\n\nfunction init_catcher_middleware(app) {\n const logger= app.context.miolo.logger\n \n async function catcher_middleware(err) {\n\n if (!err) return\n\n // Get HTML status code\n let status = err.status || 400\n const type = this.accepts(['text', 'json', 'html'])\n if (!type) {\n status = 406;\n err.message = 'Unsupported type'\n } else if (typeof status != 'number') {\n status = 500\n }\n\n // Log the error depending on the status\n\n if (_ONLY_WARN.indexOf(status)>=0) {\n logger.warn(`${this.method} ${this.url} - ${status}: ${err.message}`)\n } else {\n logger.error(err)\n }\n\n // Nothing we can do here other than delegate to the app-level handler and log.\n if (this.headerSent || !this.writable) {\n logger.debug('headers were already sent, returning early')\n err.headerSent = true\n return\n }\n\n // Prepare response a bit\n this.type = 'json'\n this.status = status\n this.body = JSON.stringify(this.body || '', null, 2)\n this.length = Buffer.byteLength(this.body)\n this.res.end(this.body)\n }\n\n app.context.onerror = catcher_middleware\n}\n\nexport {init_catcher_middleware}\n","import koa_mount from 'koa-mount'\nimport koa_serve from 'koa-static'\nimport koa_favicon from 'koa-favicon'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst fallback_favicon_path = path.resolve(__my_dirname, './miolo.ico')\n\nconst init_static_middleware = ( app, config ) => {\n\n const {favicon, folders} = config\n \n app.use(koa_favicon(favicon || fallback_favicon_path))\n \n for(const [k, v] of Object.entries(folders)) {\n app.use(koa_mount(k, koa_serve(v, {index: false})))\n }\n}\n\nexport {init_static_middleware}\n","import { performance } from 'perf_hooks'\nimport { cyan, green, yellow, red } from 'tinguir'\n\nlet REQUEST_COUNTER= 1\n\n/**\n * Middleware for feed and log the request\n */\n\nfunction init_request_middleware(app) {\n \n async function request_middleware(ctx, next) {\n\n const logger = ctx.miolo.logger\n\n REQUEST_COUNTER+= 1\n ctx.requestId= REQUEST_COUNTER \n\n // Patch for koa-better-body\n ctx.request.body = {...ctx.request.fields, ...ctx.request.files}\n\n const started = performance.now()\n const ip = ctx.headers[\"x-real-ip\"] || '127.0.0.1'\n\n ctx.request.ip = ip\n \n logger.info(`req begin ${ctx.requestId} - ip ${ip} - ${cyan(ctx.request.method)} ${cyan(ctx.request.url)} ${ctx.request.body!=undefined ? JSON.stringify(ctx.request.body) : ''}`)\n\n await next()\n \n\n let user = undefined\n try {\n if (ctx.state.user != undefined) {\n user= ctx.state.user\n }\n } catch(_) {}\n\n try {\n if (ctx.user != undefined) {\n user= ctx.user\n }\n } catch(_) {} \n\n let uid_desc= ''\n if (user != undefined) {\n if (user?.id) {\n uid_desc= ` - uid ${user?.id}`\n } else if (user?.token) {\n uid_desc= ` - token ${user?.token}`\n }\n }\n\n const elapsed = parseFloat( (performance.now() - started) / 1000.0 ).toFixed(2)\n\n const tcolor= elapsed < 1.0\n ? green\n : elapsed < 2.0\n ? yellow\n : red\n\n logger.info(`req end ${ctx.requestId}${uid_desc} => ${tcolor(`DONE in ${elapsed} seconds`)}`)\n }\n\n app.use(request_middleware)\n}\n\nexport {init_request_middleware}\n","import RedisStore from 'koa-redis'\n\nexport default new RedisStore()","import koa_session from 'koa-session'\nimport redis_store from './store.mjs'\n\n/**\n * Middleware for session\n * @param ctx\n * @param next\n */\nfunction init_session_middleware(app, config) {\n \n app.keys = [config.secret || '*secret*']\n\n const options= {\n store: redis_store,\n ...config.options || {}\n }\n\n app.use(koa_session(options, app))\n\n}\n\nexport {init_session_middleware}\n","import Router from '@koa/router'\nimport {readFileSync} from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\n\nconst robots_txt = readFileSync(path.resolve(__my_dirname, './robots.txt'), 'utf8')\n\nfunction init_route_robots(app) {\n\n async function robots(ctx) {\n ctx.body = robots_txt\n }\n\n const robots_router = new Router()\n robots_router.get('/robots.txt', robots)\n \n app.use(robots_router.routes())\n}\n\n\nexport {init_route_robots}","import { blue, red } from 'tinguir'\nimport Router from '@koa/router'\n\nfunction init_route_catch_js_error(app, route) {\n \n async function catch_js_error(ctx) {\n const { error, path, agent } = ctx.request.body\n const logger = ctx.miolo.logger\n\n const msg= \n `${red('[JS Error]')} on ${blue(path)}: ${error.msg}\\n` +\n `${red('[JS Error]')} File => ${error.file}\\n` +\n `${red('[JS Error]')} Line => ${error.line}\\n` + \n `${red('[JS Error]')} Col => ${error.col}\\n` + \n `${red('[JS Error]')} Error => ${JSON.stringify(error.error)}\\n` + \n `${red('[JS Error]')} Agent => ${agent}`\n\n logger.error(msg)\n\n ctx.body = {result: 1}\n }\n\n const catch_js_error_router = new Router()\n catch_js_error_router.post(route, catch_js_error)\n \n app.use(catch_js_error_router.routes())\n\n}\n\nexport {init_route_catch_js_error}","const DEFAULT_AUTH_USER = {\n require: false, // true / false / 'read-only'\n action: 'redirect', // 'error'\n redirect_url: '/',\n error_code: 401\n}\n\nconst DEFAULT_USE_USER_FIELDS = {\n use: false,\n fieldNames: {\n created_by: 'created_by', \n last_update_by: 'last_update_by'\n }\n}\n\nexport {\n DEFAULT_AUTH_USER,\n DEFAULT_USE_USER_FIELDS\n}","import {\n DEFAULT_AUTH_USER,\n DEFAULT_USE_USER_FIELDS\n} from \"../defaults.mjs\"\n\n/**\n [{\n prefix: '/crud,\n \n getUserId,\n authUser,\n bodyField,\n \n routes: Can be:\n '*' => autodetect and create routes for every table on the daabase\n or\n an array of tables config, where each config can be:\n - a simple string with the table name\n - an object like this:\n {\n name: \"table_name\",\n url: \"custom/url\",\n\n mode: 'r' / 'rw' / 'ru' (read+update but not delete) / 'w' / 'u'\n\n useUserFields: {\n use: false,\n fieldNames: {\n created_by: 'created_by', \n last_update_by: 'last_update_by'\n },\n },\n\n getUserId,\n authUser\n } \n }]\n*/\n\nconst getCrudConfig = (config) => {\n\n const cruds= config?.crud || []\n\n if (! cruds) {\n return []\n }\n\n\n if (! Array.isArray(cruds)) {\n return []\n }\n\n let output= []\n \n cruds.map((crud) => { \n const routes= crud?.routes\n\n if (! routes) {\n return\n }\n\n if (! Array.isArray(routes)) {\n return\n }\n \n const comm_bodyField = crud?.bodyField || config?.bodyField\n\n const comm_authUser= {\n ...DEFAULT_AUTH_USER,\n ...crud?.authUser || {},\n ...config?.authUser || {}\n }\n const comm_getUserId= crud?.getUserId || config?.getUserId\n \n let parsed_routes= []\n\n for (const troute of routes) {\n\n const route = (typeof troute === 'string')\n ? {name: troute}\n : troute\n\n if (! route.name) {\n continue\n }\n\n const parsed_route= {\n name: route.name,\n url: route?.url || route.name,\n mode: route?.mode || 'rw',\n\n bodyField: route?.bodyField || comm_bodyField,\n useUserFields: {\n ...DEFAULT_USE_USER_FIELDS,\n ...route?.useUserFields || {}\n },\n authUser: {\n ...comm_authUser,\n ...route?.authUser || {}\n },\n getUserId: route?.getUserId || comm_getUserId\n }\n\n parsed_routes.push(parsed_route)\n }\n \n if (parsed_routes.length>0) {\n output.push( {\n prefix: crud?.prefix || '',\n routes: parsed_routes\n } )\n }\n\n })\n\n return output\n\n}\n\n\nexport default getCrudConfig\n","/**\n * Transform a query string to a JSON object\n */\nexport function query_string_to_json(url) { \n let search= url.indexOf('?')>=0 ? url.substr(url.indexOf('?')) : '';\n if (search && search!='?') {\n let pairs = search.slice(1).split('&');\n \n let result = {};\n pairs.forEach(function(pair) {\n pair = pair.split('=');\n result[pair[0]] = decodeURIComponent(pair[1] || '');\n });\n return JSON.parse(JSON.stringify(result))\n }\n return {}\n}\n","import {query_string_to_json} from '../utils.mjs'\n\n\nfunction attachCrudRoutes(connection, router, crudConfigs, logger) {\n \n crudConfigs.map((crudConfig) => {\n\n const prefix= crudConfig.prefix\n\n crudConfig.routes.map(route => {\n\n const model= connection.getModel(route.name)\n\n if (! model) {\n logger.error(`[miolo-router] Could not get model for ${route.name}`)\n return\n }\n \n const _packBodyData = (data) => {\n if (route.bodyField == undefined) {\n return data\n }\n return {\n [route.bodyField]: data\n }\n }\n \n\n const _checkUserInfo = async (ctx, op, callback) => {\n let uid= undefined\n if (route.getUserId) {\n uid= route.getUserId(ctx)\n }\n\n let allowed= true\n\n const authUser = route.authUser\n\n const checkAuth= (authUser.require===true) || (authUser.require==='read-only' && op==='w')\n\n if (checkAuth) {\n\n if (uid===undefined) {\n\n if (authUser.action=='error') {\n \n logger.error(`[miolo-router] Unauthorized access. Throwing error ${authUser.error_code}`)\n ctx.throw(\n authUser.error_code,\n null,\n {}\n )\n } else {\n logger.error(`[miolo-router] Unauthorized access. Redirecting to ${authUser.redirect_url}`)\n ctx.redirect(authUser.redirect_url)\n }\n\n allowed= false\n }\n }\n\n let fieldNames= {}\n if (route.useUserFields.use===true) {\n fieldNames= route.useUserFields.fieldNames\n }\n\n const uinfo= {\n uid: uid,\n fieldNames,\n }\n \n let res= {}\n if (allowed) {\n res= await callback(uinfo)\n }\n ctx.body = res\n }\n\n const route_read = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.read(params, options)\n return _packBodyData(data)\n })\n }\n \n const route_key_list = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n // TODO : handle transactions\n const params = query_string_to_json(ctx.request.url)\n const options= {transaction: undefined}\n const data = await model.keyList(params, options) \n return _packBodyData(data)\n })\n }\n \n const route_find = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.find(params.id, options)\n return _packBodyData(data)\n })\n }\n\n const route_distinct = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.distinct(params.distinct_field, params, options)\n return _packBodyData(data)\n })\n }\n \n const route_save = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (uinfo) => {\n const params = ctx.request.fields\n if (uinfo?.fieldNames?.created_by) {\n params[uinfo.fieldNames.created_by] = uinfo.uid\n }\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.insert(params, options)\n return _packBodyData(data)\n })\n }\n \n const route_update = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (uinfo) => {\n const params = ctx.request.fields\n if (uinfo?.fieldNames?.last_update_by) {\n params[uinfo.fieldNames.last_update_by] = uinfo.uid\n }\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.update(params, {id: params.id}, options)\n return _packBodyData(data)\n })\n }\n \n const route_delete = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (_uinfo) => {\n const params = ctx.request.fields\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.delete({id: params.id}, options)\n return _packBodyData(data)\n })\n }\n\n let url = (!prefix)\n ? `/${route.url}`\n : `/${prefix}/${route.url}`\n \n while (url.indexOf('//')>=0) {\n url= url.replace(/\\/\\//g, \"/\")\n }\n\n logger.info(`[miolo-router] Routing table ${route.name} to ${url}`)\n\n const allowRead = route.mode.indexOf('r')>=0\n const allowDelete = route.mode.indexOf('w')>=0\n const allowUpsave = (route.mode.indexOf('u')>=0) || allowDelete\n \n if (allowRead) {\n router.get (`${url}/find` , (ctx) => route_find(ctx))\n router.get (`${url}/read` , (ctx) => route_read(ctx))\n router.get (`${url}/distinct` , (ctx) => route_distinct(ctx))\n router.get (`${url}/key_list` , (ctx) => route_key_list(ctx)) \n }\n\n if (allowUpsave) {\n router.post(`${url}/save` , (ctx) => route_save(ctx))\n router.post(`${url}/update` , (ctx) => route_update(ctx))\n }\n if (allowDelete) {\n router.post(`${url}/delete` , (ctx) => route_delete(ctx))\n }\n })\n })\n\n}\n\nexport default attachCrudRoutes","import {\n DEFAULT_AUTH_USER\n} from \"../defaults.mjs\"\n\n/**\n {\n prefix: '/queries',\n\n getUserId,\n authUser,\n bodyField,\n\n routes: [\n List of objects like\n {\n url: '/crud/todos/fake',\n method: 'GET', // 'POST'\n callback: (ctx) => {},\n authUser,\n getUserId \n }\n ]\n } \n*/\n\nconst getQueriesConfig = (config) => {\n\n\n const instances= config?.queries || []\n\n if (! instances) {\n return []\n }\n\n\n if (! Array.isArray(instances)) {\n return []\n }\n\n let output= []\n \n instances.map((instance) => { \n\n const routes= instance?.routes\n\n if (! routes) {\n return\n }\n\n if (! Array.isArray(routes)) {\n return\n }\n\n const comm_bodyField = config?.crud?.bodyField || config?.bodyField\n\n const comm_authUser= {\n ...DEFAULT_AUTH_USER,\n ...instance?.authUser || {},\n ...config?.authUser || {}\n }\n const comm_getUserId= config?.crud?.getUserId || config?.getUserId\n \n let parsed_routes= []\n\n for (const route of routes) {\n if (! route.url) {\n continue\n }\n\n if (! route.callback) {\n continue\n }\n\n const parsed_route= {\n url: route.url,\n method: route?.method || 'GET', \n callback: route.callback,\n\n bodyField: route?.bodyField || comm_bodyField,\n authUser: {\n ...comm_authUser,\n ...route?.authUser || {}\n },\n getUserId: route?.getUserId || comm_getUserId\n }\n\n parsed_routes.push(parsed_route)\n }\n\n output.push({\n prefix: instance?.prefix || '',\n routes: parsed_routes\n })\n })\n\n return output\n}\n\nexport default getQueriesConfig\n","function attachQueriesRoutes(router, queriesConfigs, logger) {\n\n queriesConfigs.map((queriesConfig) => {\n \n const prefix= queriesConfig.prefix\n\n queriesConfig.routes.map(route => {\n \n let url = (!prefix)\n ? `/${route.url}`\n : `/${prefix}/${route.url}`\n while (url.indexOf('//')>=0) {\n url= url.replace(/\\/\\//g, \"/\")\n }\n\n logger.info(`Routing ${route.callback?.name || 'callback'} to ${url}`)\n\n const _route_callback = async (ctx) => {\n let uid= undefined\n if (route.getUserId) {\n uid= route.getUserId(ctx)\n }\n \n const authUser = route.authUser\n const checkAuth= (authUser.require===true) || (authUser.require==='read-only' && route.method==='POST')\n \n if (checkAuth) {\n \n if (uid===undefined) {\n \n if (authUser.action=='error') {\n logger.error(`Unauthorized access. Throwing error ${authUser.error_code}`)\n return ctx.throw(\n authUser.error_code,\n null,\n {}\n )\n } else {\n logger.error(`Unauthorized access. Redirecting to ${authUser.redirect_url}`)\n return ctx.redirect(authUser.redirect_url)\n }\n }\n }\n \n const result= await route.callback(ctx)\n return result\n }\n\n if (route.method == 'POST') {\n router.post(url, (ctx) => _route_callback(ctx, route))\n } else {\n router.get(url, (ctx) => _route_callback(ctx, route))\n }\n })\n\n })\n}\n\nexport default attachQueriesRoutes","import Router from 'koa-router'\nimport getCrudConfig from './crud/getCrudConfig.mjs'\nimport attachCrudRoutes from './crud/attachCrudRoutes.mjs'\nimport getQueriesConfig from './queries/getQueriesConfig.mjs'\nimport attachQueriesRoutes from './queries/attachQueriesRoutes.mjs'\n\n\nfunction init_router(app, connection, routes) {\n\n // Init the Koa Router\n const router = new Router()\n \n try {\n // Parse routes\n const crudConfigs= getCrudConfig(routes)\n const queriesConfigs= getQueriesConfig(routes)\n \n // check routes\n const crudConfigsOk= crudConfigs.length > 0\n const queriesConfigsOk= queriesConfigs.length > 0\n\n if ( (!crudConfigsOk) && (!queriesConfigsOk)) {\n throw \"[miolo-router] Could not get any route from the passed <routes> param\"\n } \n\n // attach CRUD routes\n if (crudConfigsOk) {\n attachCrudRoutes(connection, router, crudConfigs, connection.log)\n }\n\n // create routes for queries\n if (queriesConfigsOk) {\n attachQueriesRoutes(router, queriesConfigs, connection.log)\n }\n } catch(e) {\n console.error(e)\n console.error('[miolo-router] Error initing the router. Probably config objects are not ok')\n console.error('[miolo-router] connOrConfig:')\n console.error(connection?.config)\n console.error('[miolo-router] routes:')\n console.error(routes)\n \n }\n\n app.use(router.routes())\n}\n\n\n\nexport {init_router}","\nconst init_extra_middlewares = ( app, middlewares ) => {\n if (middlewares==undefined || middlewares.length==0) {\n return\n }\n\n middlewares.map(midw => {\n\n async function extra_middleware(ctx, next) {\n await midw(ctx) \n await next()\n }\n \n app.use(extra_middleware)\n })\n}\n\nexport { init_extra_middlewares }","import koa_cors from '@koa/cors'\nimport koa_proxy from 'koa-proxies'\n\nconst _if_options = (http, field, callback) => {\n try {\n const val= http[field]\n if ((val!=undefined) && (val!=false)) {\n return callback(val)\n }\n } catch(_) {}\n}\n\nconst _cors_options = (options) => {\n if (typeof options == 'object') {\n return options\n }\n return {}\n}\n\n\nconst _proxy_options = (options) => {\n if (options==undefined) {\n options= {}\n }\n\n const tpath= options?.path || '/'\n\n const target = options?.target || \"https://proxy.miolo.com\"\n const changeOrigin = options?.changeOrigin!=undefined ? options.changeOrigin : true\n const logs = options?.logs!=undefined ? options.logs : true\n\n\n const toptions= {\n target, changeOrigin, logs\n }\n\n return [tpath, toptions]\n}\n\n\n\n\nconst init_headers_middleware = ( app, http) => {\n const logger= app.context.miolo.logger\n \n _if_options(http, 'cors', (options) => {\n if (options=='simple') {\n logger.debug(`Setting CORS the simple way`)\n app.use(async (ctx, next) => {\n ctx.set('Access-Control-Allow-Origin', '*')\n ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap')\n await next()\n })\n } else {\n const coptions= _cors_options(options)\n logger.debug(`Setting CORS headers for ${JSON.stringify(coptions)}`)\n app.use(koa_cors(coptions))\n }\n\n\n })\n\n _if_options(http, 'proxy', (options) => {\n const [tpath, toptions]= _proxy_options(options)\n logger.debug(`Setting Proxy for ${tpath} to ${toptions.target} `)\n\n app.use(\n koa_proxy(tpath, toptions)\n );\n }) \n\n}\n\nexport { init_headers_middleware }\n","import os from 'os'\nimport diskspace from 'diskspace'\nimport { cyan, green, yellow } from 'tinguir'\n\nfunction init_sys_check_and_log(logger) {\n function toMB(bytes) {\n if (!bytes) return 0\n return bytes/1000000\n }\n\n\n function toGB(kbytes) {\n if (!kbytes) return 0\n return kbytes/1000000\n }\n\n function sys_check_and_log() {\n \n\n const used= Math.round(toMB(os.freemem()), 2)\n const total= Math.round(toMB(os.totalmem()), 2)\n const perc= Math.round( (used*100)/total, 2)\n\n if (perc>80) {\n logger.error(`[SERVER][${cyan('SysCheck')}] RAM ${yellow(used)} MB used of ${green(total)} MB (${yellow(perc)} %)`)\n } else {\n logger.info(`[SERVER][${cyan('SysCheck')}] RAM ${yellow(used)} MB used of ${green(total)} MB (${yellow(perc)} %)`)\n }\n \n\n diskspace.check('/', function (err, result)\n {\n const used = Math.round(toGB(result.used), 2)\n const total= Math.round(toGB(result.total), 2)\n const free = Math.round(toGB(result.free), 2)\n\n if (free<1) {\n logger.error(`[SERVER][${cyan('SysCheck')}] DISK ${yellow(used)} GB used of ${green(total)} GB (${yellow(free)} GB free)`)\n } else {\n logger.info(`[SERVER][${cyan('SysCheck')}] DISK ${yellow(used)} GB used of ${green(total)} GB (${yellow(free)} GB free)`)\n }\n }); \n }\n\n return sys_check_and_log\n\n\n}\n\nexport {init_sys_check_and_log}","import {init_sys_check_and_log} from './syscheck.mjs'\nimport {CronJob} from 'cron'\n\nfunction init_cron(logger) {\n \n const sys_check_and_log= init_sys_check_and_log(logger)\n \n const _sCheck = new CronJob(\n '30 * * * *',\n sys_check_and_log,\n null,\n true,\n 'Europe/Madrid'\n );\n}\n\nexport {init_cron}","import http from 'http'\n//import util from 'util'\nimport Koa from 'koa'\nimport { createHttpTerminator } from 'http-terminator'\n\nimport { init_config } from './config/index.mjs'\n\nimport { init_context_middleware } from './middleware/context/context.mjs'\nimport { init_body_middleware } from './middleware/context/body.mjs'\nimport { init_catcher_middleware } from './middleware/context/catcher.mjs'\nimport { init_static_middleware } from './middleware/static/index.mjs'\nimport { init_request_middleware } from './middleware/context/request.mjs'\nimport { init_session_middleware } from './middleware/session/index.mjs'\nimport { init_route_robots } from './middleware/routes/robots/index.mjs'\nimport { init_route_catch_js_error} from './middleware/routes/catch_js_error.mjs'\nimport { init_router } from './middleware/routes/router/index.mjs'\nimport { init_extra_middlewares } from './middleware/extra.mjs'\nimport { init_headers_middleware } from './middleware/context/headers.mjs'\n\n// import {init_socket} from './engines/socket/index.mjs'\nimport { init_cron } from './engines/cron/index.mjs'\n\n\nasync function miolo(sconfig, render, callback) {\n\n const app = new Koa()\n\n // Init some pieces\n const config = init_config(sconfig)\n \n // attach to app some custom miolo methods\n init_context_middleware(app, config)\n\n // Compress and body parser\n init_body_middleware(app)\n\n // override koa's undocumented error handler\n init_catcher_middleware(app)\n\n // Serve static files\n init_static_middleware(app, config.http?.static)\n\n // Feed and log request\n init_request_middleware(app)\n\n // Create context/session\n init_session_middleware(app, config?.session)\n\n // attach the default robots.txt\n init_route_robots(app)\n\n // Middleware for catching and logging JS errors\n const catcher_url= config?.catcher\n if (catcher_url) {\n init_route_catch_js_error(app, catcher_url)\n }\n\n // auth middleware\n if (config?.auth?.guest) {\n const {init_guest_auth_middleware} = await import('./middleware/auth/guest.mjs')\n init_guest_auth_middleware(app, config.auth.guest, config?.session)\n } \n\n if (config?.auth?.basic) {\n const {init_basic_auth_middleware} = await import('./middleware/auth/basic.mjs')\n init_basic_auth_middleware(app, config.auth.basic)\n }\n\n if (config?.auth?.passport) {\n const {init_passport_auth_middleware} = await import('./middleware/auth/passport.mjs')\n init_passport_auth_middleware(app, config.auth.passport)\n }\n\n // Socket.io\n // const io= init_socket(logger)\n // io.attach(app)\n\n // extra middlewares\n const extra_middlewares= config?.middlewares\n if (extra_middlewares) {\n init_extra_middlewares(app, extra_middlewares)\n }\n\n // CORS and other headers\n init_headers_middleware(app, config.http) \n\n // Routes to /crud\n if (config?.routes) {\n const conn= app.context.miolo.db.getConnection()\n init_router(app, conn, config.routes)\n }\n\n // Middleware for final render\n if (render?.html!=undefined) {\n const { init_route_html_render} = await import('./middleware/render/html/render.mjs')\n init_route_html_render(app, render.html)\n } else if (render?.middleware != undefined) {\n app.use(render.middleware)\n } else {\n const { init_404_render_middleware} = await import('./middleware/render/404/render.mjs')\n init_404_render_middleware(app, render)\n\n // const { init_json_render_middleware} = await import('./middleware/render/json/render.mjs')\n // init_json_render_middleware(app, render) \n }\n \n // promisify the server.listen()\n\n // opt1\n // let server = http.createServer(app.callback())\n // const promise = util.promisify( server.listen.bind( server ) )\n // await promise( config.http.port, config.http.hostname)\n \n // opt2\n const listenAsync = (server, port, hostname) => {\n return new Promise((resolve, reject) => {\n server.listen(port, hostname, (error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n };\n const server = http.createServer(app.callback());\n await listenAsync(server, config.http.port, config.http.hostname);\n\n app.context.miolo.logger.info(`miolo is listening on ${config.http.hostname}:${config.http.port}`)\n\n // Make server accessible from app object\n app.server = server\n \n const httpTerminator = createHttpTerminator({\n server,\n })\n\n app.stop_server = async () => {\n await httpTerminator.terminate()\n app.context.miolo.logger.info(`miolo has been shutdowned from ${config.http.hostname}:${config.http.port}`)\n }\n\n // Although async, lets support callbacks too\n if (callback!=undefined) {\n callback(app)\n }\n \n // const server= app.listen(config.http.port, config.http.hostname, function () {\n // app.context.miolo.logger.info(`miolo is listening on ${config.http.hostname}:${config.http.port}`)\n // init_cron(app.context.miolo.logger)\n //\n // if (callback!=undefined) {\n // callback(app)\n // }\n // })\n \n // Init cron when everything is set up\n init_cron(app.context.miolo.logger)\n\n return app\n}\n\nexport {miolo}","const 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 `\n\nexport {html}","import { renderToString } from 'react-dom/server'\nimport {html as f_html} from './fallbacks/index.html.mjs'\n\nfunction init_ssr_render_middleware(loader, renderer, options) {\n\n // parse options\n let html = f_html\n try {\n if (options?.html != undefined) {\n html= options.html\n }\n } catch(_) {}\n \n const def_loader = async (ctx) => {\n let res= {}\n try {\n res= await loader(ctx)\n } catch(e) {\n ctx.miolo.logger.error('Error produced by loader in the render middleware')\n ctx.miolo.logger.error(e)\n }\n return res \n }\n\n async function render_ssr_middleware(ctx) {\n /*\n \n */\n const ssr_data = await def_loader(ctx)\n\n let isAuthed = false\n try {\n isAuthed = ctx?.isAuthenticated() === true\n } catch(e) {}\n try {\n if (! isAuthed) {\n isAuthed = (ctx.user.name==='guest') && (ctx.user.token != undefined)\n }\n } catch(e) {} \n\n let user = undefined\n try {\n if (ctx.state.user != undefined) {\n user= ctx.state.user\n }\n } catch(_) {}\n\n try {\n if (ctx.user != undefined) {\n user= ctx.user\n }\n } catch(_) {} \n\n const context= {\n user : user,\n authenticated: isAuthed,\n ssr_data: ssr_data,\n extra: ctx?.extra\n }\n\n let ssr_html=''\n\n try {\n ssr_html= renderToString(\n renderer(ctx, context)\n )\n } catch(error) {\n ctx.miolo.logger.error('Missing renderer in the render middleware')\n ctx.miolo.logger.error(error)\n\n ssr_html= `\n <div>\n MIOLO: Missing SSR renderer: ${error.toString()}\n </div> \n `\n }\n \n const parsed_html = html\n .replace('{context}', JSON.stringify(context, null, 2)) \n .replace('{children}', ssr_html)\n\n \n ctx.miolo.logger.debug(`render_middleware() rendered HTML (${Buffer.byteLength(ssr_html, 'utf8')} bytes of SSR content, ${Buffer.byteLength(parsed_html, 'utf8')} bytes total) `)\n\n ctx.body= parsed_html\n }\n\n return render_ssr_middleware\n}\n\nexport {init_ssr_render_middleware}","import jwt from 'jwt-simple'\n\nfunction _guest_token_make_with_jwt(session, logger) {\n const buid= Math.random().toString()\n let secret = session?.secret\n if (!secret) {\n secret= 'miolo_unsafe_secret'\n logger.error('Guest token made with an unsafe secret string. Please, configure your own through session.secret.')\n }\n \n const payload = {\n admin : false,\n buid : buid\n }\n return jwt.encode(payload, secret)\n}\n\nfunction _get_cookie_properties(session) {\n let maxAge = session?.options?.maxAge\n if (isNaN(maxAge)) {\n maxAge= 86400\n }\n let expires = new Date()\n expires.setSeconds(expires.getSeconds() + maxAge)\n\n return {\n expires,\n httpOnly: false\n }\n}\n\n\nconst init_guest_auth_middleware = ( app, options, session ) => {\n const logger= app.context.miolo.logger\n \n const _make_guest_token = () => {\n try {\n let {make_guest_token} = options\n if (make_guest_token!=undefined) {\n return make_guest_token(session || {})\n }\n } catch(_) {}\n\n return _guest_token_make_with_jwt(session || {}, logger)\n }\n\n async function guest_auth_middleware(ctx, next) {\n\n // Try to get our token from headers (server) or cookies (client)\n let token= ctx.cookies.get('token') || ctx.headers['token']\n\n if (token===undefined || token.length==0) {\n token = await _make_guest_token()\n logger.debug(`Guest token conceeded`)\n }\n\n const options= _get_cookie_properties(session)\n ctx.cookies.set('token', token, options)\n ctx.user = {\n name: 'guest',\n token\n } \n \n await next()\n }\n\n app.use(guest_auth_middleware)\n\n}\n\nexport {init_guest_auth_middleware}\n","import koa_mount from 'koa-mount'\nimport auth from 'basic-auth'\n\nconst init_basic_auth_middleware = ( app, options ) => {\n let {auth_user, realm, paths} = options\n if (! realm) {\n realm = 'Secure Area'\n }\n\n async function basic_auth_middleware(ctx, next) {\n ctx.user = null\n const au_user = auth(ctx)\n\n const unauth_err = () => {\n // This will show error logs on the catcher middleware\n //return ctx.throw(\n // 401,\n // null,\n // {\n // headers: {\n // 'WWW-Authenticate': 'Basic realm=\"' + realm.replace(/\"/g, '\\\\\"') + '\"'\n // }\n // }\n //)\n ctx.body= {}\n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n ctx.response.headers['WWW-Authenticate']= 'Basic realm=\"' + realm.replace(/\"/g, '\\\\\"') + '\"'\n }\n\n if (! au_user) {\n return unauth_err()\n }\n \n const user = await auth_user(au_user.name, au_user.pass, app.context.miolo)\n\n if (user === false || user == undefined) {\n return unauth_err()\n }\n\n ctx.user= user\n await next()\n }\n\n if (paths == undefined || paths.length == 0) {\n app.use(basic_auth_middleware)\n } else {\n paths.map(p => \n app.use(koa_mount(p, basic_auth_middleware))\n )\n }\n\n}\n\nexport {init_basic_auth_middleware}\n","/* eslint-disable no-unused-vars*/\nimport passport from 'koa-passport'\nimport LocalStrategy from 'passport-local'\nimport Router from '@koa/router'\n\n\n// passport: {\n// get_user_id: (user, done) => done(null, user.id), // default\n// find_user_by_id: (id, done) => done(null, {id: 1}), // ok=> done(null, user) err=> done(error, null)\n// local_auth_user: (username, password, done) => done(null, {id: 1})\n// // auth=> done(null, user) noauth=> done(null, false, {message: ''}) err=> done(error, null)\n// }\n\n\nconst def_get_user_id = (user, done, miolo) => done(null, user.id)\n\nconst def_find_user_by_id = (id, done, miolo) => {\n const err = Error('You need to define auth.passport.find_user_by_id')\n done(err, null)\n}\n\nconst def_local_auth_user = (username, password, done, miolo) => {\n const err = Error('You need to define auth.passport.local_auth_user')\n done(err, null)\n}\n\n\nconst init_passport_auth_middleware = ( app, options ) => {\n const {get_user_id, find_user_by_id, local_auth_user, \n url_login, url_logout, url_login_redirect, url_logout_redirect} = options\n\n //const local_options = {}\n\n // fallback funcs\n const get_user_id_f = get_user_id || def_get_user_id\n const find_user_by_id_f = find_user_by_id || def_find_user_by_id\n const local_auth_user_f = local_auth_user || def_local_auth_user\n const url_login_f = url_login || '/login'\n const url_logout_f = url_logout || '/logout'\n \n // init passport\n const serialize_user = (user, done) => {\n process.nextTick(function() {\n get_user_id_f(user, done, app.context.miolo)\n })\n }\n\n const deserialize_user = (id, done) => {\n process.nextTick(function() {\n find_user_by_id_f(id, done, app.context.miolo)\n })\n }\n\n const local_strategy= new LocalStrategy.Strategy (\n (username, password, done) => {\n local_auth_user_f(username, password, done, app.context.miolo)\n })\n \n passport.serializeUser(serialize_user)\n passport.deserializeUser(deserialize_user)\n passport.use(local_strategy)\n\n app.use(passport.initialize())\n app.use(passport.session())\n \n\n // handle auth routes\n const handleLogIn = (ctx, next) => {\n return passport.authenticate('local', function(err, user, info, _status) {\n if (user === false) {\n ctx.body = { \n success: false,\n user: undefined,\n authenticated: false,\n info: info,\n error: err\n }\n\n // This will show error logs on the catcher middleware\n // ctx.throw(401)\n \n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n\n } else {\n ctx.body = { \n success: true ,\n user : user,\n authenticated: true\n }\n if (url_login_redirect!=undefined) {\n ctx.redirect(url_login_redirect)\n }\n\n return ctx.login(user)\n }\n })(ctx)\n }\n\n const handleLogOut = async (ctx, next) => {\n if (ctx.isAuthenticated()) {\n ctx.logout()\n ctx.body = { \n success: true \n } \n if (url_logout_redirect!=undefined) {\n ctx.redirect(url_logout_redirect)\n }\n } else {\n ctx.body = { \n success: false \n }\n // This will show error logs on the catcher middleware\n // ctx.throw(401)\n \n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n }\n }\n \n // Init the router\n const login_router = new Router()\n login_router.post(url_login_f, handleLogIn)\n login_router.get (url_logout_f, handleLogOut)\n login_router.post(url_logout_f, handleLogOut)\n \n app.use(login_router.routes())\n}\n\nexport {init_passport_auth_middleware}\n","\nimport { cyan } from 'tinguir'\nimport Router from '@koa/router'\nimport {readFileSync} from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst indexHTMLPath= path.resolve(__my_dirname, 'fallback_index.html')\nconst indexHTML = readFileSync(indexHTMLPath, 'utf8')\n\nfunction init_route_html_render(app, html) {\n\n // Server-side render\n async function html_render(ctx) {\n const logger= ctx.miolo.logger\n\n const reqid= ctx.requestId\n const ip= ctx.headers[\"x-real-ip\"] || '127.0.0.1'\n const method= ctx.request.method\n const url= ctx.request.url\n const what = html!=undefined \n ? 'provided html'\n : 'fallback page'\n logger.info(`${reqid} - ${ip} : ${cyan(method)} ${cyan(url)} => Rendering ${what}`)\n\n ctx.body = html || indexHTML\n }\n\n const html_render_router = new Router()\n html_render_router.get('/', html_render)\n \n app.use(html_render_router.routes())\n}\n\n\nexport {init_route_html_render}","\nimport Router from '@koa/router'\n\nfunction init_404_render_middleware(app, options) {\n\n async function render_404_middleware(ctx) {\n ctx.miolo.logger.debug(`render_404_middleware() Not FOUND ${ctx.url} `)\n \n ctx.body= {}\n \n // This will show error logs on the catcher middleware\n //return ctx.throw(\n // 404,\n // 'Resource Not Found',\n //)\n\n ctx.response.status= 404\n ctx.response.body = 'Resource Not Found'\n }\n\n const json_render_router = new Router()\n json_render_router.get('/', render_404_middleware)\n \n app.use(json_render_router.routes())\n}\n\nexport {init_404_render_middleware}"],"names":["__my_filename","fileURLToPath","require","pathToFileURL","__filename","toString","__my_dirname","path","dirname","favicon","resolve","name","http","port","hostname","static","folders","cors","proxy","session","salt","secret","options","maxAge","secure","sameSite","db","config","dialect","host","database","user","password","max","min","idleTimeoutMillis","log","tables","routes","bodyField","undefined","getUserId","ctx","from_pport","state","id","e","from_basic_auth","from_guest_auth","token","uid","headers","crud","prefix","queries","catcher","level","format","locale","console","enabled","file","filename","mail","from","to","silent","authMethod","tls","rejectUnauthorized","logger","debug","defaults","auth","middlewares","init_config","merge","base_config","init_emailer","arguments","length","nmailer","nodemailer","createTransport","send_email","cb","info","err","error","sendMail","verify_emailer","verify","_success","emailer","send","init_logger_to_mail","MailerLogger","winston","Transport","call","ename","humanReadableUnhandledException","handleExceptions","json","colorize","util","inherits","prototype","callback","self","tit","message","split","uncolor","subject","toUpperCase","text","emit","combine","timestamp","_label","printf","errors","init_logger","LEVEL_COLORS","silly","gray","magenta","verbose","cyan","yellow","warn","red_light","red","myFormat","_config$format","lc","tm","Date","ts","toLocaleString","concat","stack","_log_transports","_config$console","push","transports","Console","_config$file","File","createLogger","init_context_middleware","app","getConnectionWrap","getConnection","getModelWrap","conn","getModel","mioloContext","_objectSpread","context_middleware","_x","_x2","_context_middleware","apply","_asyncToGenerator","next","miolo","use","context","init_body_middleware","koa_compress","filter","content_type","gzip","flush","constants","Z_SYNC_FLUSH","deflate","br","koa_convert","koa_body_parser","formLimit","jsonLimit","bufferLimit","_ONLY_WARN","init_catcher_middleware","catcher_middleware","_catcher_middleware","status","type","accepts","indexOf","method","url","headerSent","writable","body","JSON","stringify","Buffer","byteLength","res","end","onerror","fallback_favicon_path","init_static_middleware","koa_favicon","k","v","Object","entries","koa_mount","koa_serve","index","REQUEST_COUNTER","init_request_middleware","request_middleware","_request_middleware","requestId","request","fields","files","started","performance","now","ip","_","uid_desc","_user","_user3","_user2","_user4","elapsed","parseFloat","toFixed","tcolor","green","RedisStore","init_session_middleware","keys","store","redis_store","koa_session","robots_txt","readFileSync","init_route_robots","robots","_robots","robots_router","Router","get","init_route_catch_js_error","route","catch_js_error","_catch_js_error","agent","msg","blue","line","col","result","catch_js_error_router","post","DEFAULT_AUTH_USER","action","redirect_url","error_code","DEFAULT_USE_USER_FIELDS","fieldNames","created_by","last_update_by","getCrudConfig","cruds","Array","isArray","output","map","comm_bodyField","comm_authUser","authUser","comm_getUserId","parsed_routes","troute","parsed_route","mode","useUserFields","query_string_to_json","search","substr","pairs","slice","forEach","pair","decodeURIComponent","parse","attachCrudRoutes","connection","router","crudConfigs","crudConfig","model","_packBodyData","data","_checkUserInfo","_ref","op","allowed","checkAuth","throw","redirect","uinfo","_x3","route_read","_ref2","_ref3","_uinfo","params","transaction","read","_x5","_x4","route_key_list","_ref4","_ref5","keyList","_x7","_x6","route_find","_ref6","_ref7","find","_x9","_x8","route_distinct","_ref8","_ref9","distinct","distinct_field","_x11","_x10","route_save","_ref10","_ref11","_uinfo$fieldNames","insert","_x13","_x12","route_update","_ref12","_ref13","_uinfo$fieldNames2","update","_x15","_x14","route_delete","_ref14","_ref15","delete","_x17","_x16","replace","allowRead","allowDelete","allowUpsave","getQueriesConfig","instances","instance","_config$crud","_config$crud2","attachQueriesRoutes","queriesConfigs","queriesConfig","_route$callback","_route_callback","init_router","crudConfigsOk","queriesConfigsOk","init_extra_middlewares","midw","extra_middleware","_extra_middleware","_if_options","field","val","_cors_options","_proxy_options","_options","_options2","_options3","_options4","tpath","target","changeOrigin","logs","toptions","init_headers_middleware","set","coptions","koa_cors","koa_proxy","init_sys_check_and_log","toMB","bytes","toGB","kbytes","sys_check_and_log","used","Math","round","os","freemem","total","totalmem","perc","diskspace","check","free","init_cron","CronJob","_miolo","sconfig","render","_config$http","_config$auth","_config$auth2","_config$auth3","Koa","catcher_url","guest","init_guest_auth_middleware","basic","init_basic_auth_middleware","passport","init_passport_auth_middleware","extra_middlewares","html","init_route_html_render","middleware","init_404_render_middleware","listenAsync","server","Promise","reject","listen","createServer","httpTerminator","createHttpTerminator","stop_server","terminate","init_ssr_render_middleware","loader","renderer","f_html","def_loader","render_ssr_middleware","_render_ssr_middleware","ssr_data","isAuthed","isAuthenticated","authenticated","extra","ssr_html","renderToString","parsed_html","_guest_token_make_with_jwt","buid","random","payload","admin","jwt","encode","_get_cookie_properties","_session$options","isNaN","expires","setSeconds","getSeconds","httpOnly","_make_guest_token","make_guest_token","guest_auth_middleware","_guest_auth_middleware","cookies","auth_user","realm","paths","basic_auth_middleware","_basic_auth_middleware","au_user","unauth_err","response","pass","p","def_get_user_id","done","def_find_user_by_id","Error","def_local_auth_user","username","get_user_id","find_user_by_id","local_auth_user","url_login","url_logout","url_login_redirect","url_logout_redirect","get_user_id_f","find_user_by_id_f","local_auth_user_f","url_login_f","url_logout_f","serialize_user","process","nextTick","deserialize_user","local_strategy","LocalStrategy","Strategy","serializeUser","deserializeUser","initialize","handleLogIn","authenticate","_status","success","login","handleLogOut","logout","login_router","indexHTMLPath","indexHTML","html_render","_html_render","reqid","what","html_render_router","render_404_middleware","_render_404_middleware","json_render_router"],"mappings":"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"}
1
+ {"version":3,"file":"miolo.server.mjs","sources":["../../src/server/config/defaults.mjs","../../src/server/config/index.mjs","../../src/server/engines/emailer/index.mjs","../../src/server/engines/logger/logger_mail.mjs","../../src/server/engines/logger/index.mjs","../../src/server/middleware/context/context.mjs","../../src/server/middleware/context/body.mjs","../../src/server/middleware/context/catcher.mjs","../../src/server/middleware/static/index.mjs","../../src/server/middleware/context/request.mjs","../../src/server/middleware/session/store.mjs","../../src/server/middleware/session/index.mjs","../../src/server/middleware/routes/robots/index.mjs","../../src/server/middleware/routes/catch_js_error.mjs","../../src/server/middleware/routes/router/defaults.mjs","../../src/server/middleware/routes/router/crud/getCrudConfig.mjs","../../src/server/middleware/routes/router/utils.mjs","../../src/server/middleware/routes/router/crud/attachCrudRoutes.mjs","../../src/server/middleware/routes/router/queries/getQueriesConfig.mjs","../../src/server/middleware/routes/router/queries/attachQueriesRoutes.mjs","../../src/server/middleware/routes/router/index.mjs","../../src/server/middleware/extra.mjs","../../src/server/middleware/context/headers.mjs","../../src/server/engines/cron/syscheck.mjs","../../src/server/engines/cron/index.mjs","../../src/server/server.mjs","../../src/server/middleware/render/ssr/fallbacks/index.html.mjs","../../src/server/middleware/render/ssr/render.mjs","../../src/server/middleware/auth/guest.mjs","../../src/server/middleware/auth/basic.mjs","../../src/server/middleware/auth/passport.mjs","../../src/server/middleware/render/html/render.mjs","../../src/server/middleware/render/404/render.mjs"],"sourcesContent":["import path from 'path'\nimport { fileURLToPath } from 'url'\n\n\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst favicon = path.resolve(__my_dirname, '../static/img/miolo.ico')\n\nexport default {\n name: 'miolo',\n http: {\n port: 8001,\n hostname: 'localhost',\n \n static: {\n favicon: favicon,\n folders: {}\n },\n \n // cors can be:\n // - false\n // - simple (just assign Access-Control-Allow-Origin='*' and Access-Control-Expose-Headers='SourceMap,X-SourceMap'\n // - true enable @koa/cors\n // - {options} enable @koa/cors and use the custom options\n //\n cors: false,\n\n // proxy can be:\n // - false\n // - true enable koa-proxies and use default options\n // - {options} enable koa-proxies and use the custom options\n proxy: false\n \n },\n session: {\n salt: 'SUPER_SALTY_YES?',\n secret: 'SUPER_SECRET_KEY_KERE',\n options: {\n /** (number || 'session') maxAge in ms (default is 1 days) */\n /** 'session' will result in a cookie that expires when session/browser is closed */\n /** Warning: If a session cookie is stolen, this cookie will never expire */\n maxAge: 86400000,\n \n /** (boolean) automatically commit headers (default true) */\n //autoCommit: true, \n \n /** (boolean) can overwrite or not (default true) */\n //overwrite: true, \n \n /** (boolean) httpOnly or not (default true) */\n //httpOnly: true, \n \n /** (boolean) signed or not (default true) */\n //signed: true, \n \n /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */\n //rolling: false, \n \n /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/\n //renew: false, \n\n /** (boolean) secure cookie*/\n secure: true, \n \n /** (string) session cookie sameSite options (default null, don't set it) */\n sameSite: null, // 'strict', \n }\n },\n db: {\n config: {\n dialect: 'postgres',\n host: 'localhost',\n port: 5432,\n database: 'miolo',\n user: 'postgres',\n password: 'postgres',\n max: 5, // Maximum number of connection in pool\n min: 0, // Minimum number of connection in pool\n idleTimeoutMillis: 10000, // The maximum time, in milliseconds, that a connection can be idle before being released. Use with combination of evict for proper working, for more details read https://github.com/coopernurse/node-pool/issues/178#issuecomment-327110870,\n },\n options: {\n log: 'silly', // will be updated on the fly with miolo logger\n tables: []\n }\n },\n routes: {\n bodyField: undefined,\n \n getUserId: (ctx) => {\n try {\n const from_pport= ctx.state.user.id\n if (from_pport!=undefined) {\n return from_pport\n }\n } catch(e) {}\n try {\n const from_basic_auth= ctx.user.id\n if (from_basic_auth!=undefined) {\n return from_basic_auth\n }\n } catch(e) {}\n try {\n if (ctx.user.name == 'guest') {\n const from_guest_auth= ctx.user.token\n if (from_guest_auth!=undefined) {\n return from_guest_auth\n }\n }\n } catch(e) {} \n let uid= ctx.headers['user-id']\n if (uid!=undefined) {\n return uid\n }\n return undefined\n },\n \n // authUser: {\n // require: false, // true / false / 'read-only'\n // action: 'redirect', // 'error'\n // redirect_url: '/',\n // error_code: 401\n // }, \n \n crud: [{\n prefix: '',\n routes: [], // miolo will not support '*' by now\n }],\n queries: undefined\n },\n catcher: '/sys/jserror',\n //cacher: {\n // redis: {\n // host: '127.0.0.1',\n // port: 6379\n // },\n //},\n log: {\n level: 'debug',\n format: {\n locale: 'en-GB'\n },\n console: {\n enabled: true,\n level: 'silly',\n },\n file: {\n enabled: true,\n level: 'silly',\n filename: '/var/log/afialapis/miolo.log'\n },\n mail: {\n enabled: false,\n level: 'warn',\n name: 'miolo',\n from: 'miolo@afialapis.com',\n to: 'devel@afialapis.com' \n }\n },\n mail: {\n silent: true,\n options: {\n //\n // General options\n //\n // port – is the port to connect to (defaults to 587 is secure is false or 465 if true)\n port: 25,\n // host – is the hostname or IP address to connect to (defaults to ‘localhost’)\n host: 'mail.afialapis.com',\n // auth – defines authentication data \n // If authentication data is not present, the connection is considered authenticated from the start. \n // Otherwise you would need to provide the authentication options object.\n // - type indicates the authetication type, defaults to ‘login’, other option is ‘oauth2’\n // - user is the username\n // - pass is the password for the user if normal login is used\n // authMethod – defines preferred authentication method, defaults to ‘PLAIN’\n authMethod: 'PLAIN',\n //\n // TLS options\n //\n // secure – if true the connection will use TLS when connecting to server.\n // If false (the default) then TLS is used if server supports the STARTTLS extension.\n // In most cases set this value to true if you are connecting to port 465. For port 587 or 25 keep it false\n // ** Setting secure to false does not mean that you would not use an encrypted connection. Most SMTP servers allow \n // connection upgrade via STARTTLS command but to use this you have to connect using plaintext first\n secure: false,\n // tls – defines additional node.js TLSSocket options to be passed to the socket constructor, eg. {rejectUnauthorized: true}.\n tls: {\n // do not fail on invalid certs\n rejectUnauthorized: false\n } ,\n // ignoreTLS – if this is true and secure is false then TLS is not used even if the server supports STARTTLS extension\n // ** ignoreTLS: false,\n // requireTLS – if this is true and secure is false then Nodemailer tries to use STARTTLS even \n // if the server does not advertise support for it. If the connection can not be encrypted then message is not sent\n // ** requireTLS: true,\n //\n // Connection options\n //\n // name – optional hostname of the client, used for identifying to the server, defaults to hostname of the machine\n // ** name: ,\n // localAddress – is the local interface to bind to for network connections\n // ** localAddress: ,\n // connectionTimeout – how many milliseconds to wait for the connection to establish\n // ** connectionTimeout: ,\n // greetingTimeout – how many milliseconds to wait for the greeting after connection is established\n // ** greetingTimeout: ,\n // socketTimeout – how many milliseconds of inactivity to allow\n // ** socketTimeout: ,\n //\n // Debug options\n //\n // logger – optional bunyan compatible logger instance. If set to true then logs to console. \n // If value is not set or is false then nothing is logged\n logger: false,\n // debug – if set to true, then logs SMTP traffic, otherwise logs only transaction events\n debug: false,\n //\n // Security options\n //\n // disableFileAccess – if true, then does not allow to use files as content. \n // Use it when you want to use JSON data from untrusted source as the email.\n // If an attachment or message node tries to fetch something from a file the sending returns an error\n ////disableFileAccess: ,\n // disableUrlAccess – if true, then does not allow to use Urls as content\n // ** disableUrlAccess: ,\n\n //\n // Pooling options\n //\n // pool – see Pooled SMTP for details about connection pooling : https://nodemailer.com/smtp/pooled/\n //\n // Proxy options\n //\n // proxy – all SMTP based transports allow to use proxies for making TCP connections to servers.\n // Read about proxy support in Nodemailer from here: https://nodemailer.com/smtp/proxies/\n\n /* TESTED */\n /*\n port: 465,\n host: 'mail.afialapis.com',\n auth: {\n user: 'devel@afialapis.com',\n pass: '***',\n type: 'login',\n }, \n secure: true,\n tls: {\n rejectUnauthorized: false\n } ,\n */\n\n },\n defaults: {\n name: 'miolo',\n from: 'miolo@afialapis.com',\n to: 'devel@afialapis.com'\n }\n },\n auth: {\n //basic: {\n // auth_user: async (username, password) => { return {id: 1} },\n // realm: '',\n // paths: [],\n //},\n //passport: {\n // get_user_id: (user, done, miolo) => done(null, user.id), // default\n // find_user_by_id: (id, done, miolo) => done(null, {id: 1}), // ok=> done(null, user) err=> done(error, null)\n // local_auth_user: (username, password, done, miolo) => done(null, {id: 1})\n // // auth=> done(null, user) noauth=> done(null, false, {message: ''}) err=> done(error, null)\n // url_login : '/login',\n // url_logout: '/logout',\n // url_login_redirect: undefined\n // url_logout_redirect: '/'\n //}\n //guest: {\n // make_guest_token: undefined // (session) => ''\n //}\n },\n middlewares: [\n // async (ctx) => {}\n ]\n};\n\n","import merge from 'assign-deep'\nimport base_config from './defaults.mjs'\n\n\nfunction init_config(config) {\n return merge(base_config, config)\n}\n\nexport {\n init_config\n}","import nodemailer from 'nodemailer'\n\nfunction init_emailer(options, defaults, silent= false) {\n\n const nmailer = nodemailer.createTransport(options, defaults)\n\n function send_email(mail, cb) {\n if (silent) {\n console.info('*********************************')\n console.info('This mail will not be send (emailing is disabled):')\n console.info(mail)\n console.info('*********************************')\n } else {\n \n if (! cb) {\n cb= function(err, info) {\n if (err) {\n console.error('NodeMailer error:')\n console.error(err)\n }\n if (info) {\n console.log('NodeMailer sent mail:')\n console.log(info)\n } \n } \n } \n\n nmailer.sendMail(mail, cb)\n }\n }\n\n\n function verify_emailer() {\n console.info('[miolo][Verify][MAILER] Verifying...')\n // verify connection configuration\n nmailer.verify(function(error, _success) {\n if (error) {\n console.error('[miolo][Verify][MAILER] Verifying ERROR')\n console.error(error)\n } else {\n console.info('[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages')\n //test_eail()\n }\n })\n }\n\n const emailer= {\n send: send_email, \n verify: verify_emailer,\n options, \n defaults, \n silent\n }\n return emailer\n}\n\n\n\n\nexport {init_emailer}","// \"use strict\";\nimport util from 'util'\nimport winston from 'winston'\nimport { uncolor } from 'tinguir'\n\nfunction init_logger_to_mail(config, emailer) {\n\n\n let MailerLogger = function (options) {\n winston.Transport.call(this, options);\n options = options || {};\n\n this.level = config.level || 'info'\n this.ename = config?.name || emailer.defaults.name\n this.to = config.to || emailer.defaults.to\n this.from = config.from || emailer.defaults.from\n this.humanReadableUnhandledException = options.humanReadableUnhandledException || true;\n this.handleExceptions = options.handleExceptions || true;\n this.json = options.json || false;\n this.colorize = options.colorize || false;\n\n\n\n \n };\n\n /** @extends winston.Transport */\n util.inherits(MailerLogger, winston.Transport);\n\n //\n // Expose the name of this Transport on the prototype\n //\n MailerLogger.prototype.name = 'MailerLogger';\n\n\n MailerLogger.prototype.log = function (info, callback) {\n let self = this;\n\n let tit= '';\n try {\n tit= info.message.split(\"\\n\")[0]\n } catch(e) {\n tit= info.message.toString();\n }\n\n tit= uncolor(tit)\n \n let subject = config.name + ': [' + info.level.toUpperCase() + '] ' + tit;\n\n let mail= {\n from : this.from,\n to : this.to,\n subject : subject, \n text : uncolor(info.message)\n }\n\n emailer.send(mail, function() {\n self.emit(\"logged\");\n callback(null, true); \n });\n \n };\n\n\n \n return MailerLogger\n}\n\nexport {init_logger_to_mail}","import { red, cyan, magenta, yellow, gray, red_light } from 'tinguir'\n/* https://github.com/winstonjs/winston/issues/925 */\n/* https://github.com/winstonjs/winston/issues/287 */\nimport {init_logger_to_mail} from './logger_mail.mjs'\nimport { createLogger, format, transports } from 'winston'\n\n\nconst { combine, timestamp, _label, printf, errors } = format\n\n\nconst init_logger = (config, emailer) => {\n const LEVEL_COLORS= {\n silly : gray,\n debug : magenta,\n verbose: cyan,\n info : yellow,\n warn : red_light,\n error : red\n }\n\n const myFormat = printf(info => {\n const lc = LEVEL_COLORS[info.level]\n const tm = new Date(info.timestamp)\n const ts= tm.toLocaleString(config?.format?.locale || 'en')\n //const ts= tm.toString().substr(4, 20)\n const log= `[miolo] ${lc(ts)} ${lc(info.level)} ${info.message}`\n return info.stack\n ? `${log}\\n${info.stack}`\n : log; \n })\n\n\n let _log_transports= []\n //\n // Console transport\n // If we're not in production then log to the `console` with the format:\n // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `\n // \n\n if (config.console.enabled) {\n _log_transports.push(\n new transports.Console({\n humanReadableUnhandledException: true,\n level : config?.console?.level || config?.level || 'silly',\n handleExceptions: true\n }))\n }\n\n //\n // File transport\n //\n if (config.file.enabled) {\n _log_transports.push(\n new transports.File({ \n filename : config.file.filename, \n level : config?.file?.level || config?.level || 'info' ,\n humanReadableUnhandledException: true,\n handleExceptions: true})\n )\n }\n\n //\n // Mail transport\n //\n if (config.mail.enabled) { \n const MailerLogger= init_logger_to_mail(config.mail, emailer)\n transports.MailerLogger = MailerLogger;\n\n _log_transports.push(\n new transports.MailerLogger({\n humanReadableUnhandledException: true,\n handleExceptions: true \n })\n )\n }\n\n //\n // Logger\n //\n const logger = createLogger({\n level: config?.level || 'silly',\n format: combine(\n errors({ stack: true }),\n timestamp(),\n myFormat\n ),\n transports: _log_transports\n })\n\n return logger\n}\n\n\nexport {init_logger}\n\n\n\n\n","import { getConnection } from 'calustra'\nimport { init_emailer } from '../../engines/emailer/index.mjs'\nimport { init_logger } from '../../engines/logger/index.mjs'\n\nconst init_context_middleware = ( app, config ) => {\n const emailer = init_emailer(config.mail.options, config.mail.defaults)\n const logger = init_logger(config.log, emailer)\n\n config.db.options.log= logger\n \n const getConnectionWrap = () => {\n return getConnection(config.db.config, config.db.options)\n }\n\n const getModelWrap = (name) => {\n const conn = getConnection(config.db.config, config.db.options)\n return conn.getModel(name)\n } \n\n const db= {\n getConnection: getConnectionWrap,\n getModel: getModelWrap\n }\n\n // Assign miolo stuff to ctx\n const mioloContext= {\n config: {...config},\n emailer,\n logger,\n db: db\n } \n\n\n async function context_middleware(ctx, next) {\n // Assign miolo stuff to ctx\n ctx.miolo= mioloContext \n await next()\n\n }\n\n app.use(context_middleware)\n app.context.miolo= mioloContext\n \n}\n\nexport { init_context_middleware }","import koa_body_parser from 'koa-better-body'\n//import koa_body_parser from 'koa-bodyparser'\nimport koa_convert from 'koa-convert'\nimport koa_compress from 'koa-compress'\nimport {constants} from 'node:zlib'\n\nconst init_body_middleware = ( app ) => {\n // Compress\n \n app.use(koa_compress({\n filter: function (content_type) {\n return content_type=='application/json' || content_type=='text/html'\n },\n //threshold: 2048,\n gzip: {\n flush: constants.Z_SYNC_FLUSH\n },\n deflate: {\n flush: constants.Z_SYNC_FLUSH,\n },\n br: false // disable brotli\n\n }))\n\n // body parser - koa-better-body\n\n // koa-better-body needs some customization in order to \n // work for koa-passport\n // By default it save POST params in request.fields. But koa-passport\n // expects that values in request.body.\n // We will copy request.fields and request.files in request.body.\n // 1.- It could be done through this option parameters;\n // https://github.com/rkusa/koa-passport/issues/33#issuecomment-122611613\n // https://github.com/tunnckoCore/opensource/tree/master/%40packages/koa-better-body#options\n // {fields: 'body', files: 'body',}\n // But this will cause errors on other parts (for example, init_router())\n // 2.- but still need to know how dangerous it is to touch request.body (as by default, \n // koa-better-body is saving some async function in request.body)\n // We patch the .body on the `request` middleware\n\n app.use(koa_convert(koa_body_parser({\n formLimit: '100mb',\n jsonLimit: '100mb',\n bufferLimit: '100mb',\n })))\n\n \n\n // body parser - koa-bodyparser\n //app.use(koa_body_parser())\n}\n\nexport { init_body_middleware }","/**\n * Middleware for catching errors thrown in routes\n * @param ctx\n */\n\nconst _ONLY_WARN= [401]\n\nfunction init_catcher_middleware(app) {\n const logger= app.context.miolo.logger\n \n async function catcher_middleware(err) {\n\n if (!err) return\n\n // Get HTML status code\n let status = err.status || 400\n const type = this.accepts(['text', 'json', 'html'])\n if (!type) {\n status = 406;\n err.message = 'Unsupported type'\n } else if (typeof status != 'number') {\n status = 500\n }\n\n // Log the error depending on the status\n\n if (_ONLY_WARN.indexOf(status)>=0) {\n logger.warn(`${this.method} ${this.url} - ${status}: ${err.message}`)\n } else {\n logger.error(err)\n }\n\n // Nothing we can do here other than delegate to the app-level handler and log.\n if (this.headerSent || !this.writable) {\n logger.debug('headers were already sent, returning early')\n err.headerSent = true\n return\n }\n\n // Prepare response a bit\n this.type = 'json'\n this.status = status\n this.body = JSON.stringify(this.body || '', null, 2)\n this.length = Buffer.byteLength(this.body)\n this.res.end(this.body)\n }\n\n app.context.onerror = catcher_middleware\n}\n\nexport {init_catcher_middleware}\n","import koa_mount from 'koa-mount'\nimport koa_serve from 'koa-static'\nimport koa_favicon from 'koa-favicon'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst fallback_favicon_path = path.resolve(__my_dirname, './miolo.ico')\n\nconst init_static_middleware = ( app, config ) => {\n\n const {favicon, folders} = config\n \n app.use(koa_favicon(favicon || fallback_favicon_path))\n \n for(const [k, v] of Object.entries(folders)) {\n app.use(koa_mount(k, koa_serve(v, {index: false})))\n }\n}\n\nexport {init_static_middleware}\n","import { performance } from 'perf_hooks'\nimport { cyan, green, yellow, red } from 'tinguir'\n\nlet REQUEST_COUNTER= 1\n\n/**\n * Middleware for feed and log the request\n */\n\nfunction init_request_middleware(app) {\n \n async function request_middleware(ctx, next) {\n\n const logger = ctx.miolo.logger\n\n REQUEST_COUNTER+= 1\n ctx.requestId= REQUEST_COUNTER \n\n // Patch for koa-better-body\n ctx.request.body = {...ctx.request.fields, ...ctx.request.files}\n\n const started = performance.now()\n const ip = ctx.headers[\"x-real-ip\"] || '127.0.0.1'\n\n ctx.request.ip = ip\n \n logger.info(`req begin ${ctx.requestId} - ip ${ip} - ${cyan(ctx.request.method)} ${cyan(ctx.request.url)} ${ctx.request.body!=undefined ? JSON.stringify(ctx.request.body) : ''}`)\n\n await next()\n \n\n let user = undefined\n try {\n if (ctx.state.user != undefined) {\n user= ctx.state.user\n }\n } catch(_) {}\n\n try {\n if (ctx.user != undefined) {\n user= ctx.user\n }\n } catch(_) {} \n\n let uid_desc= ''\n if (user != undefined) {\n if (user?.id) {\n uid_desc= ` - uid ${user?.id}`\n } else if (user?.token) {\n uid_desc= ` - token ${user?.token}`\n }\n }\n\n const elapsed = parseFloat( (performance.now() - started) / 1000.0 ).toFixed(2)\n\n const tcolor= elapsed < 1.0\n ? green\n : elapsed < 2.0\n ? yellow\n : red\n\n logger.info(`req end ${ctx.requestId}${uid_desc} => ${tcolor(`DONE in ${elapsed} seconds`)}`)\n }\n\n app.use(request_middleware)\n}\n\nexport {init_request_middleware}\n","import RedisStore from 'koa-redis'\n\nexport default new RedisStore()","import koa_session from 'koa-session'\nimport redis_store from './store.mjs'\n\n/**\n * Middleware for session\n * @param ctx\n * @param next\n */\nfunction init_session_middleware(app, config) {\n \n app.keys = [config.secret || '*secret*']\n\n const options= {\n store: redis_store,\n ...config.options || {}\n }\n\n app.use(koa_session(options, app))\n\n}\n\nexport {init_session_middleware}\n","import Router from '@koa/router'\nimport {readFileSync} from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\n\nconst robots_txt = readFileSync(path.resolve(__my_dirname, './robots.txt'), 'utf8')\n\nfunction init_route_robots(app) {\n\n async function robots(ctx) {\n ctx.body = robots_txt\n }\n\n const robots_router = new Router()\n robots_router.get('/robots.txt', robots)\n \n app.use(robots_router.routes())\n}\n\n\nexport {init_route_robots}","import { blue, red } from 'tinguir'\nimport Router from '@koa/router'\n\nfunction init_route_catch_js_error(app, route) {\n \n async function catch_js_error(ctx) {\n const { error, path, agent } = ctx.request.body\n const logger = ctx.miolo.logger\n\n const msg= \n `${red('[JS Error]')} on ${blue(path)}: ${error.msg}\\n` +\n `${red('[JS Error]')} File => ${error.file}\\n` +\n `${red('[JS Error]')} Line => ${error.line}\\n` + \n `${red('[JS Error]')} Col => ${error.col}\\n` + \n `${red('[JS Error]')} Error => ${JSON.stringify(error.error)}\\n` + \n `${red('[JS Error]')} Agent => ${agent}`\n\n logger.error(msg)\n\n ctx.body = {result: 1}\n }\n\n const catch_js_error_router = new Router()\n catch_js_error_router.post(route, catch_js_error)\n \n app.use(catch_js_error_router.routes())\n\n}\n\nexport {init_route_catch_js_error}","const DEFAULT_AUTH_USER = {\n require: false, // true / false / 'read-only'\n action: 'redirect', // 'error'\n redirect_url: '/',\n error_code: 401\n}\n\nconst DEFAULT_USE_USER_FIELDS = {\n use: false,\n fieldNames: {\n created_by: 'created_by', \n last_update_by: 'last_update_by'\n }\n}\n\nexport {\n DEFAULT_AUTH_USER,\n DEFAULT_USE_USER_FIELDS\n}","import {\n DEFAULT_AUTH_USER,\n DEFAULT_USE_USER_FIELDS\n} from \"../defaults.mjs\"\n\n/**\n [{\n prefix: '/crud,\n \n getUserId,\n authUser,\n bodyField,\n \n routes: Can be:\n '*' => autodetect and create routes for every table on the daabase\n or\n an array of tables config, where each config can be:\n - a simple string with the table name\n - an object like this:\n {\n name: \"table_name\",\n url: \"custom/url\",\n\n mode: 'r' / 'rw' / 'ru' (read+update but not delete) / 'w' / 'u'\n\n useUserFields: {\n use: false,\n fieldNames: {\n created_by: 'created_by', \n last_update_by: 'last_update_by'\n },\n },\n\n getUserId,\n authUser\n } \n }]\n*/\n\nconst getCrudConfig = (config) => {\n\n const cruds= config?.crud || []\n\n if (! cruds) {\n return []\n }\n\n\n if (! Array.isArray(cruds)) {\n return []\n }\n\n let output= []\n \n cruds.map((crud) => { \n const routes= crud?.routes\n\n if (! routes) {\n return\n }\n\n if (! Array.isArray(routes)) {\n return\n }\n \n const comm_bodyField = crud?.bodyField || config?.bodyField\n\n const comm_authUser= {\n ...DEFAULT_AUTH_USER,\n ...crud?.authUser || {},\n ...config?.authUser || {}\n }\n const comm_getUserId= crud?.getUserId || config?.getUserId\n \n let parsed_routes= []\n\n for (const troute of routes) {\n\n const route = (typeof troute === 'string')\n ? {name: troute}\n : troute\n\n if (! route.name) {\n continue\n }\n\n const parsed_route= {\n name: route.name,\n url: route?.url || route.name,\n mode: route?.mode || 'rw',\n\n bodyField: route?.bodyField || comm_bodyField,\n useUserFields: {\n ...DEFAULT_USE_USER_FIELDS,\n ...route?.useUserFields || {}\n },\n authUser: {\n ...comm_authUser,\n ...route?.authUser || {}\n },\n getUserId: route?.getUserId || comm_getUserId\n }\n\n parsed_routes.push(parsed_route)\n }\n \n if (parsed_routes.length>0) {\n output.push( {\n prefix: crud?.prefix || '',\n routes: parsed_routes\n } )\n }\n\n })\n\n return output\n\n}\n\n\nexport default getCrudConfig\n","/**\n * Transform a query string to a JSON object\n */\nexport function query_string_to_json(url) { \n let search= url.indexOf('?')>=0 ? url.substr(url.indexOf('?')) : '';\n if (search && search!='?') {\n let pairs = search.slice(1).split('&');\n \n let result = {};\n pairs.forEach(function(pair) {\n pair = pair.split('=');\n result[pair[0]] = decodeURIComponent(pair[1] || '');\n });\n return JSON.parse(JSON.stringify(result))\n }\n return {}\n}\n","import {query_string_to_json} from '../utils.mjs'\n\n\nfunction attachCrudRoutes(connection, router, crudConfigs, logger) {\n \n crudConfigs.map((crudConfig) => {\n\n const prefix= crudConfig.prefix\n\n crudConfig.routes.map(route => {\n\n const model= connection.getModel(route.name)\n\n if (! model) {\n logger.error(`[miolo-router] Could not get model for ${route.name}`)\n return\n }\n \n const _packBodyData = (data) => {\n if (route.bodyField == undefined) {\n return data\n }\n return {\n [route.bodyField]: data\n }\n }\n \n\n const _checkUserInfo = async (ctx, op, callback) => {\n let uid= undefined\n if (route.getUserId) {\n uid= route.getUserId(ctx)\n }\n\n let allowed= true\n\n const authUser = route.authUser\n\n const checkAuth= (authUser.require===true) || (authUser.require==='read-only' && op==='w')\n\n if (checkAuth) {\n\n if (uid===undefined) {\n\n if (authUser.action=='error') {\n \n logger.error(`[miolo-router] Unauthorized access. Throwing error ${authUser.error_code}`)\n ctx.throw(\n authUser.error_code,\n null,\n {}\n )\n } else {\n logger.error(`[miolo-router] Unauthorized access. Redirecting to ${authUser.redirect_url}`)\n ctx.redirect(authUser.redirect_url)\n }\n\n allowed= false\n }\n }\n\n let fieldNames= {}\n if (route.useUserFields.use===true) {\n fieldNames= route.useUserFields.fieldNames\n }\n\n const uinfo= {\n uid: uid,\n fieldNames,\n }\n \n let res= {}\n if (allowed) {\n res= await callback(uinfo)\n }\n ctx.body = res\n }\n\n const route_read = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.read(params, options)\n return _packBodyData(data)\n })\n }\n \n const route_key_list = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n // TODO : handle transactions\n const params = query_string_to_json(ctx.request.url)\n const options= {transaction: undefined}\n const data = await model.keyList(params, options) \n return _packBodyData(data)\n })\n }\n \n const route_find = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.find(params.id, options)\n return _packBodyData(data)\n })\n }\n\n const route_distinct = async (ctx) => {\n await _checkUserInfo(ctx, 'r', async (_uinfo) => {\n const params = query_string_to_json(ctx.request.url)\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.distinct(params.distinct_field, params, options)\n return _packBodyData(data)\n })\n }\n \n const route_save = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (uinfo) => {\n const params = ctx.request.fields\n if (uinfo?.fieldNames?.created_by) {\n params[uinfo.fieldNames.created_by] = uinfo.uid\n }\n // TODO : handle transactions\n const options= {transaction: undefined}\n const data = await model.insert(params, options)\n return _packBodyData(data)\n })\n }\n \n const route_update = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (uinfo) => {\n const params = ctx.request.fields\n if (uinfo?.fieldNames?.last_update_by) {\n params[uinfo.fieldNames.last_update_by] = uinfo.uid\n }\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.update(params, {id: params.id}, options)\n return _packBodyData(data)\n })\n }\n \n const route_delete = async (ctx) => {\n await _checkUserInfo(ctx, 'w', async (_uinfo) => {\n const params = ctx.request.fields\n // TODO : handle transactions\n const options= {transaction: undefined} \n const data = await model.delete({id: params.id}, options)\n return _packBodyData(data)\n })\n }\n\n let url = (!prefix)\n ? `/${route.url}`\n : `/${prefix}/${route.url}`\n \n while (url.indexOf('//')>=0) {\n url= url.replace(/\\/\\//g, \"/\")\n }\n\n logger.info(`[miolo-router] Routing table ${route.name} to ${url}`)\n\n const allowRead = route.mode.indexOf('r')>=0\n const allowDelete = route.mode.indexOf('w')>=0\n const allowUpsave = (route.mode.indexOf('u')>=0) || allowDelete\n \n if (allowRead) {\n router.get (`${url}/find` , (ctx) => route_find(ctx))\n router.get (`${url}/read` , (ctx) => route_read(ctx))\n router.get (`${url}/distinct` , (ctx) => route_distinct(ctx))\n router.get (`${url}/key_list` , (ctx) => route_key_list(ctx)) \n }\n\n if (allowUpsave) {\n router.post(`${url}/save` , (ctx) => route_save(ctx))\n router.post(`${url}/update` , (ctx) => route_update(ctx))\n }\n if (allowDelete) {\n router.post(`${url}/delete` , (ctx) => route_delete(ctx))\n }\n })\n })\n\n}\n\nexport default attachCrudRoutes","import {\n DEFAULT_AUTH_USER\n} from \"../defaults.mjs\"\n\n/**\n {\n prefix: '/queries',\n\n getUserId,\n authUser,\n bodyField,\n\n routes: [\n List of objects like\n {\n url: '/crud/todos/fake',\n method: 'GET', // 'POST'\n callback: (ctx) => {},\n authUser,\n getUserId \n }\n ]\n } \n*/\n\nconst getQueriesConfig = (config) => {\n\n\n const instances= config?.queries || []\n\n if (! instances) {\n return []\n }\n\n\n if (! Array.isArray(instances)) {\n return []\n }\n\n let output= []\n \n instances.map((instance) => { \n\n const routes= instance?.routes\n\n if (! routes) {\n return\n }\n\n if (! Array.isArray(routes)) {\n return\n }\n\n const comm_bodyField = config?.crud?.bodyField || config?.bodyField\n\n const comm_authUser= {\n ...DEFAULT_AUTH_USER,\n ...instance?.authUser || {},\n ...config?.authUser || {}\n }\n const comm_getUserId= config?.crud?.getUserId || config?.getUserId\n \n let parsed_routes= []\n\n for (const route of routes) {\n if (! route.url) {\n continue\n }\n\n if (! route.callback) {\n continue\n }\n\n const parsed_route= {\n url: route.url,\n method: route?.method || 'GET', \n callback: route.callback,\n\n bodyField: route?.bodyField || comm_bodyField,\n authUser: {\n ...comm_authUser,\n ...route?.authUser || {}\n },\n getUserId: route?.getUserId || comm_getUserId\n }\n\n parsed_routes.push(parsed_route)\n }\n\n output.push({\n prefix: instance?.prefix || '',\n routes: parsed_routes\n })\n })\n\n return output\n}\n\nexport default getQueriesConfig\n","function attachQueriesRoutes(router, queriesConfigs, logger) {\n\n queriesConfigs.map((queriesConfig) => {\n \n const prefix= queriesConfig.prefix\n\n queriesConfig.routes.map(route => {\n \n let url = (!prefix)\n ? `/${route.url}`\n : `/${prefix}/${route.url}`\n while (url.indexOf('//')>=0) {\n url= url.replace(/\\/\\//g, \"/\")\n }\n\n logger.info(`Routing ${route.callback?.name || 'callback'} to ${url}`)\n\n const _route_callback = async (ctx) => {\n let uid= undefined\n if (route.getUserId) {\n uid= route.getUserId(ctx)\n }\n \n const authUser = route.authUser\n const checkAuth= (authUser.require===true) || (authUser.require==='read-only' && route.method==='POST')\n \n if (checkAuth) {\n \n if (uid===undefined) {\n \n if (authUser.action=='error') {\n logger.error(`Unauthorized access. Throwing error ${authUser.error_code}`)\n return ctx.throw(\n authUser.error_code,\n null,\n {}\n )\n } else {\n logger.error(`Unauthorized access. Redirecting to ${authUser.redirect_url}`)\n return ctx.redirect(authUser.redirect_url)\n }\n }\n }\n \n const result= await route.callback(ctx)\n return result\n }\n\n if (route.method == 'POST') {\n router.post(url, (ctx) => _route_callback(ctx, route))\n } else {\n router.get(url, (ctx) => _route_callback(ctx, route))\n }\n })\n\n })\n}\n\nexport default attachQueriesRoutes","import Router from 'koa-router'\nimport getCrudConfig from './crud/getCrudConfig.mjs'\nimport attachCrudRoutes from './crud/attachCrudRoutes.mjs'\nimport getQueriesConfig from './queries/getQueriesConfig.mjs'\nimport attachQueriesRoutes from './queries/attachQueriesRoutes.mjs'\n\n\nfunction init_router(app, connection, routes) {\n\n // Init the Koa Router\n const router = new Router()\n \n try {\n // Parse routes\n const crudConfigs= getCrudConfig(routes)\n const queriesConfigs= getQueriesConfig(routes)\n \n // check routes\n const crudConfigsOk= crudConfigs.length > 0\n const queriesConfigsOk= queriesConfigs.length > 0\n\n if ( (!crudConfigsOk) && (!queriesConfigsOk)) {\n throw \"[miolo-router] Could not get any route from the passed <routes> param\"\n } \n\n // attach CRUD routes\n if (crudConfigsOk) {\n attachCrudRoutes(connection, router, crudConfigs, connection.log)\n }\n\n // create routes for queries\n if (queriesConfigsOk) {\n attachQueriesRoutes(router, queriesConfigs, connection.log)\n }\n } catch(e) {\n console.error(e)\n console.error('[miolo-router] Error initing the router. Probably config objects are not ok')\n console.error('[miolo-router] connOrConfig:')\n console.error(connection?.config)\n console.error('[miolo-router] routes:')\n console.error(routes)\n \n }\n\n app.use(router.routes())\n}\n\n\n\nexport {init_router}","\nconst init_extra_middlewares = ( app, middlewares ) => {\n if (middlewares==undefined || middlewares.length==0) {\n return\n }\n\n middlewares.map(midw => {\n\n async function extra_middleware(ctx, next) {\n await midw(ctx) \n await next()\n }\n \n app.use(extra_middleware)\n })\n}\n\nexport { init_extra_middlewares }","import koa_cors from '@koa/cors'\nimport koa_proxy from 'koa-proxies'\n\nconst _if_options = (http, field, callback) => {\n try {\n const val= http[field]\n if ((val!=undefined) && (val!=false)) {\n return callback(val)\n }\n } catch(_) {}\n}\n\nconst _cors_options = (options) => {\n if (typeof options == 'object') {\n return options\n }\n return {}\n}\n\n\nconst _proxy_options = (options) => {\n if (options==undefined) {\n options= {}\n }\n\n const tpath= options?.path || '/'\n\n const target = options?.target || \"https://proxy.miolo.com\"\n const changeOrigin = options?.changeOrigin!=undefined ? options.changeOrigin : true\n const logs = options?.logs!=undefined ? options.logs : true\n\n\n const toptions= {\n target, changeOrigin, logs\n }\n\n return [tpath, toptions]\n}\n\n\n\n\nconst init_headers_middleware = ( app, http) => {\n const logger= app.context.miolo.logger\n \n _if_options(http, 'cors', (options) => {\n if (options=='simple') {\n logger.debug(`Setting CORS the simple way`)\n app.use(async (ctx, next) => {\n ctx.set('Access-Control-Allow-Origin', '*')\n ctx.set('Access-Control-Expose-Headers', 'SourceMap,X-SourceMap')\n await next()\n })\n } else {\n const coptions= _cors_options(options)\n logger.debug(`Setting CORS headers for ${JSON.stringify(coptions)}`)\n app.use(koa_cors(coptions))\n }\n\n\n })\n\n _if_options(http, 'proxy', (options) => {\n const [tpath, toptions]= _proxy_options(options)\n logger.debug(`Setting Proxy for ${tpath} to ${toptions.target} `)\n\n app.use(\n koa_proxy(tpath, toptions)\n );\n }) \n\n}\n\nexport { init_headers_middleware }\n","import os from 'os'\nimport diskspace from 'diskspace'\nimport { cyan, green, yellow } from 'tinguir'\n\nfunction init_sys_check_and_log(logger) {\n function toMB(bytes) {\n if (!bytes) return 0\n return bytes/1000000\n }\n\n\n function toGB(kbytes) {\n if (!kbytes) return 0\n return kbytes/1000000\n }\n\n function sys_check_and_log() {\n \n\n const used= Math.round(toMB(os.freemem()), 2)\n const total= Math.round(toMB(os.totalmem()), 2)\n const perc= Math.round( (used*100)/total, 2)\n\n if (perc>80) {\n logger.error(`[SERVER][${cyan('SysCheck')}] RAM ${yellow(used)} MB used of ${green(total)} MB (${yellow(perc)} %)`)\n } else {\n logger.info(`[SERVER][${cyan('SysCheck')}] RAM ${yellow(used)} MB used of ${green(total)} MB (${yellow(perc)} %)`)\n }\n \n\n diskspace.check('/', function (err, result)\n {\n const used = Math.round(toGB(result.used), 2)\n const total= Math.round(toGB(result.total), 2)\n const free = Math.round(toGB(result.free), 2)\n\n if (free<1) {\n logger.error(`[SERVER][${cyan('SysCheck')}] DISK ${yellow(used)} GB used of ${green(total)} GB (${yellow(free)} GB free)`)\n } else {\n logger.info(`[SERVER][${cyan('SysCheck')}] DISK ${yellow(used)} GB used of ${green(total)} GB (${yellow(free)} GB free)`)\n }\n }); \n }\n\n return sys_check_and_log\n\n\n}\n\nexport {init_sys_check_and_log}","import {init_sys_check_and_log} from './syscheck.mjs'\nimport {CronJob} from 'cron'\n\nfunction init_cron(logger) {\n \n const sys_check_and_log= init_sys_check_and_log(logger)\n \n const _sCheck = new CronJob(\n '30 * * * *',\n sys_check_and_log,\n null,\n true,\n 'Europe/Madrid'\n );\n}\n\nexport {init_cron}","import http from 'http'\n//import util from 'util'\nimport Koa from 'koa'\nimport { createHttpTerminator } from 'http-terminator'\n\nimport { init_config } from './config/index.mjs'\n\nimport { init_context_middleware } from './middleware/context/context.mjs'\nimport { init_body_middleware } from './middleware/context/body.mjs'\nimport { init_catcher_middleware } from './middleware/context/catcher.mjs'\nimport { init_static_middleware } from './middleware/static/index.mjs'\nimport { init_request_middleware } from './middleware/context/request.mjs'\nimport { init_session_middleware } from './middleware/session/index.mjs'\nimport { init_route_robots } from './middleware/routes/robots/index.mjs'\nimport { init_route_catch_js_error} from './middleware/routes/catch_js_error.mjs'\nimport { init_router } from './middleware/routes/router/index.mjs'\nimport { init_extra_middlewares } from './middleware/extra.mjs'\nimport { init_headers_middleware } from './middleware/context/headers.mjs'\n\n// import {init_socket} from './engines/socket/index.mjs'\nimport { init_cron } from './engines/cron/index.mjs'\n\n\nasync function miolo(sconfig, render, callback) {\n\n const app = new Koa()\n\n // Init some pieces\n const config = init_config(sconfig)\n \n // attach to app some custom miolo methods\n init_context_middleware(app, config)\n\n // Compress and body parser\n init_body_middleware(app)\n\n // override koa's undocumented error handler\n init_catcher_middleware(app)\n\n // Serve static files\n init_static_middleware(app, config.http?.static)\n\n // Feed and log request\n init_request_middleware(app)\n\n // Create context/session\n init_session_middleware(app, config?.session)\n\n // attach the default robots.txt\n init_route_robots(app)\n\n // Middleware for catching and logging JS errors\n const catcher_url= config?.catcher\n if (catcher_url) {\n init_route_catch_js_error(app, catcher_url)\n }\n\n // auth middleware\n if (config?.auth?.guest) {\n const {init_guest_auth_middleware} = await import('./middleware/auth/guest.mjs')\n init_guest_auth_middleware(app, config.auth.guest, config?.session)\n } \n\n if (config?.auth?.basic) {\n const {init_basic_auth_middleware} = await import('./middleware/auth/basic.mjs')\n init_basic_auth_middleware(app, config.auth.basic)\n }\n\n if (config?.auth?.passport) {\n const {init_passport_auth_middleware} = await import('./middleware/auth/passport.mjs')\n init_passport_auth_middleware(app, config.auth.passport)\n }\n\n // Socket.io\n // const io= init_socket(logger)\n // io.attach(app)\n\n // extra middlewares\n const extra_middlewares= config?.middlewares\n if (extra_middlewares) {\n init_extra_middlewares(app, extra_middlewares)\n }\n\n // CORS and other headers\n init_headers_middleware(app, config.http) \n\n // Routes to /crud\n if (config?.routes) {\n const conn= app.context.miolo.db.getConnection()\n init_router(app, conn, config.routes)\n }\n\n // Middleware for final render\n if (render?.html!=undefined) {\n const { init_route_html_render} = await import('./middleware/render/html/render.mjs')\n init_route_html_render(app, render.html)\n } else if (render?.middleware != undefined) {\n app.use(render.middleware)\n } else {\n const { init_404_render_middleware} = await import('./middleware/render/404/render.mjs')\n init_404_render_middleware(app, render)\n\n // const { init_json_render_middleware} = await import('./middleware/render/json/render.mjs')\n // init_json_render_middleware(app, render) \n }\n \n // promisify the server.listen()\n\n // opt1\n // let server = http.createServer(app.callback())\n // const promise = util.promisify( server.listen.bind( server ) )\n // await promise( config.http.port, config.http.hostname)\n \n // opt2\n const listenAsync = (server, port, hostname) => {\n return new Promise((resolve, reject) => {\n server.listen(port, hostname, (error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n });\n });\n };\n const server = http.createServer(app.callback());\n await listenAsync(server, config.http.port, config.http.hostname);\n\n app.context.miolo.logger.info(`miolo is listening on ${config.http.hostname}:${config.http.port}`)\n\n // Make server accessible from app object\n app.server = server\n \n const httpTerminator = createHttpTerminator({\n server,\n })\n\n app.stop_server = async () => {\n await httpTerminator.terminate()\n app.context.miolo.logger.info(`miolo has been shutdowned from ${config.http.hostname}:${config.http.port}`)\n }\n\n // Although async, lets support callbacks too\n if (callback!=undefined) {\n callback(app)\n }\n \n // const server= app.listen(config.http.port, config.http.hostname, function () {\n // app.context.miolo.logger.info(`miolo is listening on ${config.http.hostname}:${config.http.port}`)\n // init_cron(app.context.miolo.logger)\n //\n // if (callback!=undefined) {\n // callback(app)\n // }\n // })\n \n // Init cron when everything is set up\n init_cron(app.context.miolo.logger)\n\n return app\n}\n\nexport {miolo}","const 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 `\n\nexport {html}","import { renderToString } from 'react-dom/server'\nimport {html as f_html} from './fallbacks/index.html.mjs'\n\nfunction init_ssr_render_middleware(loader, renderer, options) {\n\n // parse options\n let html = f_html\n try {\n if (options?.html != undefined) {\n html= options.html\n }\n } catch(_) {}\n \n const def_loader = async (ctx) => {\n let res= {}\n try {\n res= await loader(ctx)\n } catch(e) {\n ctx.miolo.logger.error('Error produced by loader in the render middleware')\n ctx.miolo.logger.error(e)\n }\n return res \n }\n\n async function render_ssr_middleware(ctx) {\n /*\n \n */\n const ssr_data = await def_loader(ctx)\n\n let isAuthed = false\n try {\n isAuthed = ctx?.isAuthenticated() === true\n } catch(e) {}\n try {\n if (! isAuthed) {\n isAuthed = (ctx.user.name==='guest') && (ctx.user.token != undefined)\n }\n } catch(e) {} \n\n let user = undefined\n try {\n if (ctx.state.user != undefined) {\n user= ctx.state.user\n }\n } catch(_) {}\n\n try {\n if (ctx.user != undefined) {\n user= ctx.user\n }\n } catch(_) {} \n\n const context= {\n user : user,\n authenticated: isAuthed,\n ssr_data: ssr_data,\n extra: ctx?.extra\n }\n\n let ssr_html=''\n\n try {\n ssr_html= renderToString(\n renderer(ctx, context)\n )\n } catch(error) {\n ctx.miolo.logger.error('Missing renderer in the render middleware')\n ctx.miolo.logger.error(error)\n\n ssr_html= `\n <div>\n MIOLO: Missing SSR renderer: ${error.toString()}\n </div> \n `\n }\n \n const parsed_html = html\n .replace('{context}', JSON.stringify(context, null, 2)) \n .replace('{children}', ssr_html)\n\n \n ctx.miolo.logger.debug(`render_middleware() rendered HTML (${Buffer.byteLength(ssr_html, 'utf8')} bytes of SSR content, ${Buffer.byteLength(parsed_html, 'utf8')} bytes total) `)\n\n ctx.body= parsed_html\n }\n\n return render_ssr_middleware\n}\n\nexport {init_ssr_render_middleware}","import jwt from 'jwt-simple'\n\nfunction _guest_token_make_with_jwt(session, logger) {\n const buid= Math.random().toString()\n let secret = session?.secret\n if (!secret) {\n secret= 'miolo_unsafe_secret'\n logger.error('Guest token made with an unsafe secret string. Please, configure your own through session.secret.')\n }\n \n const payload = {\n admin : false,\n buid : buid\n }\n return jwt.encode(payload, secret)\n}\n\nfunction _get_cookie_properties(session) {\n let maxAge = session?.options?.maxAge\n if (isNaN(maxAge)) {\n maxAge= 86400\n }\n let expires = new Date()\n expires.setSeconds(expires.getSeconds() + maxAge)\n\n return {\n expires,\n httpOnly: false\n }\n}\n\n\nconst init_guest_auth_middleware = ( app, options, session ) => {\n const logger= app.context.miolo.logger\n \n const _make_guest_token = () => {\n try {\n let {make_guest_token} = options\n if (make_guest_token!=undefined) {\n return make_guest_token(session || {})\n }\n } catch(_) {}\n\n return _guest_token_make_with_jwt(session || {}, logger)\n }\n\n async function guest_auth_middleware(ctx, next) {\n\n // Try to get our token from headers (server) or cookies (client)\n let token= ctx.cookies.get('token') || ctx.headers['token']\n\n if (token===undefined || token.length==0) {\n token = await _make_guest_token()\n logger.debug(`Guest token conceeded`)\n }\n\n const options= _get_cookie_properties(session)\n ctx.cookies.set('token', token, options)\n ctx.user = {\n name: 'guest',\n token\n } \n \n await next()\n }\n\n app.use(guest_auth_middleware)\n\n}\n\nexport {init_guest_auth_middleware}\n","import koa_mount from 'koa-mount'\nimport auth from 'basic-auth'\n\nconst init_basic_auth_middleware = ( app, options ) => {\n let {auth_user, realm, paths} = options\n if (! realm) {\n realm = 'Secure Area'\n }\n\n async function basic_auth_middleware(ctx, next) {\n ctx.user = null\n const au_user = auth(ctx)\n\n const unauth_err = () => {\n // This will show error logs on the catcher middleware\n //return ctx.throw(\n // 401,\n // null,\n // {\n // headers: {\n // 'WWW-Authenticate': 'Basic realm=\"' + realm.replace(/\"/g, '\\\\\"') + '\"'\n // }\n // }\n //)\n ctx.body= {}\n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n ctx.response.headers['WWW-Authenticate']= 'Basic realm=\"' + realm.replace(/\"/g, '\\\\\"') + '\"'\n }\n\n if (! au_user) {\n return unauth_err()\n }\n \n const user = await auth_user(au_user.name, au_user.pass, app.context.miolo)\n\n if (user === false || user == undefined) {\n return unauth_err()\n }\n\n ctx.user= user\n await next()\n }\n\n if (paths == undefined || paths.length == 0) {\n app.use(basic_auth_middleware)\n } else {\n paths.map(p => \n app.use(koa_mount(p, basic_auth_middleware))\n )\n }\n\n}\n\nexport {init_basic_auth_middleware}\n","/* eslint-disable no-unused-vars*/\nimport passport from 'koa-passport'\nimport LocalStrategy from 'passport-local'\nimport Router from '@koa/router'\n\n\n// passport: {\n// get_user_id: (user, done) => done(null, user.id), // default\n// find_user_by_id: (id, done) => done(null, {id: 1}), // ok=> done(null, user) err=> done(error, null)\n// local_auth_user: (username, password, done) => done(null, {id: 1})\n// // auth=> done(null, user) noauth=> done(null, false, {message: ''}) err=> done(error, null)\n// }\n\n\nconst def_get_user_id = (user, done, miolo) => done(null, user.id)\n\nconst def_find_user_by_id = (id, done, miolo) => {\n const err = Error('You need to define auth.passport.find_user_by_id')\n done(err, null)\n}\n\nconst def_local_auth_user = (username, password, done, miolo) => {\n const err = Error('You need to define auth.passport.local_auth_user')\n done(err, null)\n}\n\n\nconst init_passport_auth_middleware = ( app, options ) => {\n const {get_user_id, find_user_by_id, local_auth_user, \n url_login, url_logout, url_login_redirect, url_logout_redirect} = options\n\n //const local_options = {}\n\n // fallback funcs\n const get_user_id_f = get_user_id || def_get_user_id\n const find_user_by_id_f = find_user_by_id || def_find_user_by_id\n const local_auth_user_f = local_auth_user || def_local_auth_user\n const url_login_f = url_login || '/login'\n const url_logout_f = url_logout || '/logout'\n \n // init passport\n const serialize_user = (user, done) => {\n process.nextTick(function() {\n get_user_id_f(user, done, app.context.miolo)\n })\n }\n\n const deserialize_user = (id, done) => {\n process.nextTick(function() {\n find_user_by_id_f(id, done, app.context.miolo)\n })\n }\n\n const local_strategy= new LocalStrategy.Strategy (\n (username, password, done) => {\n local_auth_user_f(username, password, done, app.context.miolo)\n })\n \n passport.serializeUser(serialize_user)\n passport.deserializeUser(deserialize_user)\n passport.use(local_strategy)\n\n app.use(passport.initialize())\n app.use(passport.session())\n \n\n // handle auth routes\n const handleLogIn = (ctx, next) => {\n return passport.authenticate('local', function(err, user, info, _status) {\n if (user === false) {\n ctx.body = { \n success: false,\n user: undefined,\n authenticated: false,\n info: info,\n error: err\n }\n\n // This will show error logs on the catcher middleware\n // ctx.throw(401)\n \n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n\n } else {\n ctx.body = { \n success: true ,\n user : user,\n authenticated: true\n }\n if (url_login_redirect!=undefined) {\n ctx.redirect(url_login_redirect)\n }\n\n return ctx.login(user)\n }\n })(ctx)\n }\n\n const handleLogOut = async (ctx, next) => {\n if (ctx.isAuthenticated()) {\n ctx.logout()\n ctx.body = { \n success: true \n } \n if (url_logout_redirect!=undefined) {\n ctx.redirect(url_logout_redirect)\n }\n } else {\n ctx.body = { \n success: false \n }\n // This will show error logs on the catcher middleware\n // ctx.throw(401)\n \n ctx.response.status= 401\n ctx.response.body = 'Unauthorized'\n }\n }\n \n // Init the router\n const login_router = new Router()\n login_router.post(url_login_f, handleLogIn)\n login_router.get (url_logout_f, handleLogOut)\n login_router.post(url_logout_f, handleLogOut)\n \n app.use(login_router.routes())\n}\n\nexport {init_passport_auth_middleware}\n","\nimport { cyan } from 'tinguir'\nimport Router from '@koa/router'\nimport {readFileSync} from 'fs'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nconst __my_filename = fileURLToPath(import.meta.url)\nconst __my_dirname = path.dirname(__my_filename)\n\nconst indexHTMLPath= path.resolve(__my_dirname, 'fallback_index.html')\nconst indexHTML = readFileSync(indexHTMLPath, 'utf8')\n\nfunction init_route_html_render(app, html) {\n\n // Server-side render\n async function html_render(ctx) {\n const logger= ctx.miolo.logger\n\n const reqid= ctx.requestId\n const ip= ctx.headers[\"x-real-ip\"] || '127.0.0.1'\n const method= ctx.request.method\n const url= ctx.request.url\n const what = html!=undefined \n ? 'provided html'\n : 'fallback page'\n logger.info(`${reqid} - ${ip} : ${cyan(method)} ${cyan(url)} => Rendering ${what}`)\n\n ctx.body = html || indexHTML\n }\n\n const html_render_router = new Router()\n html_render_router.get('/', html_render)\n \n app.use(html_render_router.routes())\n}\n\n\nexport {init_route_html_render}","\nimport Router from '@koa/router'\n\nfunction init_404_render_middleware(app, options) {\n\n async function render_404_middleware(ctx) {\n ctx.miolo.logger.debug(`render_404_middleware() Not FOUND ${ctx.url} `)\n \n ctx.body= {}\n \n // This will show error logs on the catcher middleware\n //return ctx.throw(\n // 404,\n // 'Resource Not Found',\n //)\n\n ctx.response.status= 404\n ctx.response.body = 'Resource Not Found'\n }\n\n const json_render_router = new Router()\n json_render_router.get('/', render_404_middleware)\n \n app.use(json_render_router.routes())\n}\n\nexport {init_404_render_middleware}"],"names":["__my_filename","fileURLToPath","import","meta","url","__my_dirname","path","dirname","favicon","resolve","name","http","port","hostname","static","folders","cors","proxy","session","salt","secret","options","maxAge","secure","sameSite","db","config","dialect","host","database","user","password","max","min","idleTimeoutMillis","log","tables","routes","bodyField","undefined","getUserId","ctx","from_pport","state","id","e","from_basic_auth","from_guest_auth","token","uid","headers","crud","prefix","queries","catcher","level","format","locale","console","enabled","file","filename","mail","from","to","silent","authMethod","tls","rejectUnauthorized","logger","debug","defaults","auth","middlewares","init_config","merge","base_config","init_emailer","arguments","length","nmailer","nodemailer","createTransport","send_email","cb","info","err","error","sendMail","verify_emailer","verify","_success","emailer","send","init_logger_to_mail","MailerLogger","winston","Transport","call","ename","humanReadableUnhandledException","handleExceptions","json","colorize","util","inherits","prototype","callback","self","tit","message","split","toString","uncolor","subject","toUpperCase","text","emit","combine","timestamp","_label","printf","errors","init_logger","LEVEL_COLORS","silly","gray","magenta","verbose","cyan","yellow","warn","red_light","red","myFormat","_config$format","lc","tm","Date","ts","toLocaleString","concat","stack","_log_transports","_config$console","push","transports","Console","_config$file","File","createLogger","init_context_middleware","app","getConnectionWrap","getConnection","getModelWrap","conn","getModel","mioloContext","_objectSpread","context_middleware","_x","_x2","_context_middleware","apply","_asyncToGenerator","next","miolo","use","context","init_body_middleware","koa_compress","filter","content_type","gzip","flush","constants","Z_SYNC_FLUSH","deflate","br","koa_convert","koa_body_parser","formLimit","jsonLimit","bufferLimit","_ONLY_WARN","init_catcher_middleware","catcher_middleware","_catcher_middleware","status","type","accepts","indexOf","method","headerSent","writable","body","JSON","stringify","Buffer","byteLength","res","end","onerror","fallback_favicon_path","init_static_middleware","koa_favicon","k","v","Object","entries","koa_mount","koa_serve","index","REQUEST_COUNTER","init_request_middleware","request_middleware","_request_middleware","requestId","request","fields","files","started","performance","now","ip","_","uid_desc","_user","_user3","_user2","_user4","elapsed","parseFloat","toFixed","tcolor","green","RedisStore","init_session_middleware","keys","store","redis_store","koa_session","robots_txt","readFileSync","init_route_robots","robots","_robots","robots_router","Router","get","init_route_catch_js_error","route","catch_js_error","_catch_js_error","agent","msg","blue","line","col","result","catch_js_error_router","post","DEFAULT_AUTH_USER","require","action","redirect_url","error_code","DEFAULT_USE_USER_FIELDS","fieldNames","created_by","last_update_by","getCrudConfig","cruds","Array","isArray","output","map","comm_bodyField","comm_authUser","authUser","comm_getUserId","parsed_routes","troute","parsed_route","mode","useUserFields","query_string_to_json","search","substr","pairs","slice","forEach","pair","decodeURIComponent","parse","attachCrudRoutes","connection","router","crudConfigs","crudConfig","model","_packBodyData","data","_checkUserInfo","_ref","op","allowed","checkAuth","throw","redirect","uinfo","_x3","route_read","_ref2","_ref3","_uinfo","params","transaction","read","_x5","_x4","route_key_list","_ref4","_ref5","keyList","_x7","_x6","route_find","_ref6","_ref7","find","_x9","_x8","route_distinct","_ref8","_ref9","distinct","distinct_field","_x11","_x10","route_save","_ref10","_ref11","_uinfo$fieldNames","insert","_x13","_x12","route_update","_ref12","_ref13","_uinfo$fieldNames2","update","_x15","_x14","route_delete","_ref14","_ref15","delete","_x17","_x16","replace","allowRead","allowDelete","allowUpsave","getQueriesConfig","instances","instance","_config$crud","_config$crud2","attachQueriesRoutes","queriesConfigs","queriesConfig","_route$callback","_route_callback","init_router","crudConfigsOk","queriesConfigsOk","init_extra_middlewares","midw","extra_middleware","_extra_middleware","_if_options","field","val","_cors_options","_proxy_options","_options","_options2","_options3","_options4","tpath","target","changeOrigin","logs","toptions","init_headers_middleware","set","coptions","koa_cors","koa_proxy","init_sys_check_and_log","toMB","bytes","toGB","kbytes","sys_check_and_log","used","Math","round","os","freemem","total","totalmem","perc","diskspace","check","free","init_cron","CronJob","_miolo","sconfig","render","_config$http","_config$auth","_config$auth2","_config$auth3","Koa","catcher_url","guest","init_guest_auth_middleware","basic","init_basic_auth_middleware","passport","init_passport_auth_middleware","extra_middlewares","html","init_route_html_render","middleware","init_404_render_middleware","listenAsync","server","Promise","reject","listen","createServer","httpTerminator","createHttpTerminator","stop_server","terminate","init_ssr_render_middleware","loader","renderer","f_html","def_loader","render_ssr_middleware","_render_ssr_middleware","ssr_data","isAuthed","isAuthenticated","authenticated","extra","ssr_html","renderToString","parsed_html","_guest_token_make_with_jwt","buid","random","payload","admin","jwt","encode","_get_cookie_properties","_session$options","isNaN","expires","setSeconds","getSeconds","httpOnly","_make_guest_token","make_guest_token","guest_auth_middleware","_guest_auth_middleware","cookies","auth_user","realm","paths","basic_auth_middleware","_basic_auth_middleware","au_user","unauth_err","response","pass","p","def_get_user_id","done","def_find_user_by_id","Error","def_local_auth_user","username","get_user_id","find_user_by_id","local_auth_user","url_login","url_logout","url_login_redirect","url_logout_redirect","get_user_id_f","find_user_by_id_f","local_auth_user_f","url_login_f","url_logout_f","serialize_user","process","nextTick","deserialize_user","local_strategy","LocalStrategy","Strategy","serializeUser","deserializeUser","initialize","handleLogIn","authenticate","_status","success","login","handleLogOut","logout","login_router","indexHTMLPath","indexHTML","html_render","_html_render","reqid","what","html_render_router","render_404_middleware","_render_404_middleware","json_render_router"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,eAAa,GAAGC,aAAa,CAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;AACpD,IAAMC,cAAY,GAAGC,IAAI,CAACC,OAAO,CAACP,eAAa,CAAC,CAAA;AAEhD,IAAMQ,OAAO,GAAGF,IAAI,CAACG,OAAO,CAACJ,cAAY,EAAE,yBAAyB,CAAC,CAAA;AAErE,kBAAe;AACbK,EAAAA,IAAI,EAAE,OAAO;AACbC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,QAAQ,EAAE,WAAW;AAErBC,IAAAA,MAAM,EAAE;AACNN,MAAAA,OAAO,EAAEA,OAAO;AAChBO,MAAAA,OAAO,EAAE,EAAC;KACX;AAED;AACA;AACA;AACA;AACA;AACA;AACAC,IAAAA,IAAI,EAAE,KAAK;AAEX;AACA;AACA;AACA;AACAC,IAAAA,KAAK,EAAE,KAAA;GAER;AACDC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE,kBAAkB;AACxBC,IAAAA,MAAM,EAAE,uBAAuB;AAC/BC,IAAAA,OAAO,EAAE;AACP;AACA;AACA;AACAC,MAAAA,MAAM,EAAE,QAAQ;AAEhB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACAC,MAAAA,MAAM,EAAE,IAAI;AAEZ;MACAC,QAAQ,EAAE,IAAI;AAChB,KAAA;GACD;;AACDC,EAAAA,EAAE,EAAE;AACFC,IAAAA,MAAM,EAAE;AACJC,MAAAA,OAAO,EAAG,UAAU;AACpBC,MAAAA,IAAI,EAAM,WAAW;AACrBhB,MAAAA,IAAI,EAAM,IAAI;AACdiB,MAAAA,QAAQ,EAAE,OAAO;AACjBC,MAAAA,IAAI,EAAM,UAAU;AACpBC,MAAAA,QAAQ,EAAE,UAAU;AACpBC,MAAAA,GAAG,EAAO,CAAC;AAAW;AACtBC,MAAAA,GAAG,EAAO,CAAC;AAAW;MACtBC,iBAAiB,EAAE,KAAK;KAC3B;;AACDb,IAAAA,OAAO,EAAE;AACPc,MAAAA,GAAG,EAAE,OAAO;AAAE;AACdC,MAAAA,MAAM,EAAE,EAAA;AACV,KAAA;GACD;AACDC,EAAAA,MAAM,EAAE;AACNC,IAAAA,SAAS,EAAEC,SAAS;IAEpBC,SAAS,EAAGC,GAAG,IAAK;MAClB,IAAI;QACF,IAAMC,UAAU,GAAED,GAAG,CAACE,KAAK,CAACb,IAAI,CAACc,EAAE,CAAA;QACnC,IAAIF,UAAU,IAAEH,SAAS,EAAE;AACzB,UAAA,OAAOG,UAAU,CAAA;AACnB,SAAA;AACF,OAAC,CAAC,OAAMG,CAAC,EAAE,EAAC;MACZ,IAAI;AACF,QAAA,IAAMC,eAAe,GAAEL,GAAG,CAACX,IAAI,CAACc,EAAE,CAAA;QAClC,IAAIE,eAAe,IAAEP,SAAS,EAAE;AAC9B,UAAA,OAAOO,eAAe,CAAA;AACxB,SAAA;AACF,OAAC,CAAC,OAAMD,CAAC,EAAE,EAAC;MACZ,IAAI;AACF,QAAA,IAAIJ,GAAG,CAACX,IAAI,CAACpB,IAAI,IAAI,OAAO,EAAE;AAC5B,UAAA,IAAMqC,eAAe,GAAEN,GAAG,CAACX,IAAI,CAACkB,KAAK,CAAA;UACrC,IAAID,eAAe,IAAER,SAAS,EAAE;AAC9B,YAAA,OAAOQ,eAAe,CAAA;AACxB,WAAA;AACF,SAAA;AACF,OAAC,CAAC,OAAMF,CAAC,EAAE,EAAC;AACZ,MAAA,IAAII,GAAG,GAAER,GAAG,CAACS,OAAO,CAAC,SAAS,CAAC,CAAA;MAC/B,IAAID,GAAG,IAAEV,SAAS,EAAE;AAClB,QAAA,OAAOU,GAAG,CAAA;AACZ,OAAA;AACA,MAAA,OAAOV,SAAS,CAAA;KACjB;AAED;AACA;AACA;AACA;AACA;AACA;;AAEAY,IAAAA,IAAI,EAAE,CAAC;AACLC,MAAAA,MAAM,EAAE,EAAE;MACVf,MAAM,EAAE,EAAE;AACZ,KAAC,CAAC;;AACFgB,IAAAA,OAAO,EAAEd,SAAAA;GACV;AACDe,EAAAA,OAAO,EAAE,cAAc;AACvB;AACA;AACA;AACA;AACA;AACA;AACAnB,EAAAA,GAAG,EAAE;AACHoB,IAAAA,KAAK,EAAE,OAAO;AACdC,IAAAA,MAAM,EAAE;AACNC,MAAAA,MAAM,EAAE,OAAA;KACT;AACDC,IAAAA,OAAO,EAAE;AACPC,MAAAA,OAAO,EAAE,IAAI;AACbJ,MAAAA,KAAK,EAAE,OAAA;KACR;AACDK,IAAAA,IAAI,EAAE;AACJD,MAAAA,OAAO,EAAE,IAAI;AACbJ,MAAAA,KAAK,EAAE,OAAO;AACdM,MAAAA,QAAQ,EAAE,8BAAA;KACX;AACDC,IAAAA,IAAI,EAAE;AACJH,MAAAA,OAAO,EAAE,KAAK;AACdJ,MAAAA,KAAK,EAAE,MAAM;AACb7C,MAAAA,IAAI,EAAE,OAAO;AACbqD,MAAAA,IAAI,EAAE,qBAAqB;AAC3BC,MAAAA,EAAE,EAAE,qBAAA;AACN,KAAA;GACD;AACDF,EAAAA,IAAI,EAAE;AACJG,IAAAA,MAAM,EAAE,IAAI;AACZ5C,IAAAA,OAAO,EAAE;AACP;AACA;AACA;AACA;AACAT,MAAAA,IAAI,EAAE,EAAE;AACR;AACAgB,MAAAA,IAAI,EAAE,oBAAoB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACAsC,MAAAA,UAAU,EAAE,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA3C,MAAAA,MAAM,EAAE,KAAK;AACb;AACA4C,MAAAA,GAAG,EAAE;AACD;AACAC,QAAAA,kBAAkB,EAAE,KAAA;OACvB;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAC,MAAAA,MAAM,EAAE,KAAK;AACb;AACAC,MAAAA,KAAK,EAAE,KAAA;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;KAEK;;AACDC,IAAAA,QAAQ,EAAE;AACR7D,MAAAA,IAAI,EAAE,OAAO;AACbqD,MAAAA,IAAI,EAAE,qBAAqB;AAC3BC,MAAAA,EAAE,EAAE,qBAAA;AACN,KAAA;GACD;AACDQ,EAAAA,IAAI,EAAE;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;GACD;AACDC,EAAAA,WAAW,EAAE;AACX;AAAA,GAAA;AAEJ,CAAC;;ACtRD,SAASC,WAAWA,CAAChD,MAAM,EAAE;AAC3B,EAAA,OAAOiD,KAAK,CAACC,WAAW,EAAElD,MAAM,CAAC,CAAA;AACnC;;ACJA,SAASmD,YAAYA,CAACxD,OAAO,EAAEkD,QAAQ,EAAiB;AAAA,EAAA,IAAfN,MAAM,GAAAa,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAvC,SAAA,GAAAuC,SAAA,CAAA,CAAA,CAAA,GAAE,KAAK,CAAA;EAEpD,IAAME,OAAO,GAAGC,UAAU,CAACC,eAAe,CAAC7D,OAAO,EAAEkD,QAAQ,CAAC,CAAA;AAE7D,EAAA,SAASY,UAAUA,CAACrB,IAAI,EAAEsB,EAAE,EAAE;AAC5B,IAAA,IAAInB,MAAM,EAAE;AACVP,MAAAA,OAAO,CAAC2B,IAAI,CAAC,mCAAmC,CAAC,CAAA;AACjD3B,MAAAA,OAAO,CAAC2B,IAAI,CAAC,oDAAoD,CAAC,CAAA;AAClE3B,MAAAA,OAAO,CAAC2B,IAAI,CAACvB,IAAI,CAAC,CAAA;AAClBJ,MAAAA,OAAO,CAAC2B,IAAI,CAAC,mCAAmC,CAAC,CAAA;AACnD,KAAC,MAAM;MAEL,IAAI,CAAED,EAAE,EAAE;AACRA,QAAAA,EAAE,GAAE,SAAAA,EAAAA,CAASE,GAAG,EAAED,IAAI,EAAE;AACtB,UAAA,IAAIC,GAAG,EAAE;AACP5B,YAAAA,OAAO,CAAC6B,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAClC7B,YAAAA,OAAO,CAAC6B,KAAK,CAACD,GAAG,CAAC,CAAA;AACpB,WAAA;AACA,UAAA,IAAID,IAAI,EAAE;AACR3B,YAAAA,OAAO,CAACvB,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACpCuB,YAAAA,OAAO,CAACvB,GAAG,CAACkD,IAAI,CAAC,CAAA;AACnB,WAAA;SACD,CAAA;AACH,OAAA;AAEAL,MAAAA,OAAO,CAACQ,QAAQ,CAAC1B,IAAI,EAAEsB,EAAE,CAAC,CAAA;AAC5B,KAAA;AACF,GAAA;EAGA,SAASK,cAAcA,GAAG;AACxB/B,IAAAA,OAAO,CAAC2B,IAAI,CAAC,sCAAsC,CAAC,CAAA;AACpD;AACAL,IAAAA,OAAO,CAACU,MAAM,CAAC,UAASH,KAAK,EAAEI,QAAQ,EAAE;AACvC,MAAA,IAAIJ,KAAK,EAAE;AACP7B,QAAAA,OAAO,CAAC6B,KAAK,CAAC,yCAAyC,CAAC,CAAA;AACxD7B,QAAAA,OAAO,CAAC6B,KAAK,CAACA,KAAK,CAAC,CAAA;AACxB,OAAC,MAAM;AACH7B,QAAAA,OAAO,CAAC2B,IAAI,CAAC,2EAA2E,CAAC,CAAA;AACzF;AACJ,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;;AAEA,EAAA,IAAMO,OAAO,GAAE;AACbC,IAAAA,IAAI,EAAEV,UAAU;AAChBO,IAAAA,MAAM,EAAED,cAAc;IACtBpE,OAAO;IACPkD,QAAQ;AACRN,IAAAA,MAAAA;GACD,CAAA;AACD,EAAA,OAAO2B,OAAO,CAAA;AAChB;;ACtDA;AAKA,SAASE,mBAAmBA,CAACpE,MAAM,EAAEkE,OAAO,EAAE;AAG5C,EAAA,IAAIG,YAAY,GAAG,SAAfA,YAAYA,CAAa1E,OAAO,EAAE;IAClC2E,OAAO,CAACC,SAAS,CAACC,IAAI,CAAC,IAAI,EAAE7E,OAAO,CAAC,CAAA;AACrCA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAAE,CAAA;AAEvB,IAAA,IAAI,CAACkC,KAAK,GAAG7B,MAAM,CAAC6B,KAAK,IAAK,MAAM,CAAA;AACpC,IAAA,IAAI,CAAC4C,KAAK,GAAG,CAAAzE,MAAM,aAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEhB,IAAI,KAAKkF,OAAO,CAACrB,QAAQ,CAAC7D,IAAI,CAAA;IACnD,IAAI,CAACsD,EAAE,GAAMtC,MAAM,CAACsC,EAAE,IAAQ4B,OAAO,CAACrB,QAAQ,CAACP,EAAE,CAAA;IACjD,IAAI,CAACD,IAAI,GAAIrC,MAAM,CAACqC,IAAI,IAAM6B,OAAO,CAACrB,QAAQ,CAACR,IAAI,CAAA;AACnD,IAAA,IAAI,CAACqC,+BAA+B,GAAG/E,OAAO,CAAC+E,+BAA+B,IAAI,IAAI,CAAA;AACtF,IAAA,IAAI,CAACC,gBAAgB,GAAkBhF,OAAO,CAACgF,gBAAgB,IAAI,IAAI,CAAA;AACvE,IAAA,IAAI,CAACC,IAAI,GAA8BjF,OAAO,CAACiF,IAAI,IAAI,KAAK,CAAA;AAC5D,IAAA,IAAI,CAACC,QAAQ,GAA0BlF,OAAO,CAACkF,QAAQ,IAAI,KAAK,CAAA;GAKnE,CAAA;;AAED;EACAC,IAAI,CAACC,QAAQ,CAACV,YAAY,EAAEC,OAAO,CAACC,SAAS,CAAC,CAAA;;AAE9C;AACA;AACA;AACAF,EAAAA,YAAY,CAACW,SAAS,CAAChG,IAAI,GAAG,cAAc,CAAA;EAG5CqF,YAAY,CAACW,SAAS,CAACvE,GAAG,GAAG,UAAUkD,IAAI,EAAEsB,QAAQ,EAAE;IACnD,IAAIC,IAAI,GAAG,IAAI,CAAA;IAEf,IAAIC,GAAG,GAAE,EAAE,CAAA;IACX,IAAI;MACFA,GAAG,GAAExB,IAAI,CAACyB,OAAO,CAACC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;KACjC,CAAC,OAAMlE,CAAC,EAAE;AACTgE,MAAAA,GAAG,GAAExB,IAAI,CAACyB,OAAO,CAACE,QAAQ,EAAE,CAAA;AAC9B,KAAA;AAEAH,IAAAA,GAAG,GAAEI,OAAO,CAACJ,GAAG,CAAC,CAAA;AAEjB,IAAA,IAAIK,OAAO,GAAGxF,MAAM,CAAChB,IAAI,GAAG,KAAK,GAAG2E,IAAI,CAAC9B,KAAK,CAAC4D,WAAW,EAAE,GAAG,IAAI,GAAGN,GAAG,CAAA;AAEzE,IAAA,IAAI/C,IAAI,GAAE;MACRC,IAAI,EAAM,IAAI,CAACA,IAAI;MACnBC,EAAE,EAAQ,IAAI,CAACA,EAAE;AACjBkD,MAAAA,OAAO,EAAGA,OAAO;AACjBE,MAAAA,IAAI,EAAMH,OAAO,CAAC5B,IAAI,CAACyB,OAAO,CAAA;KAC/B,CAAA;AAEDlB,IAAAA,OAAO,CAACC,IAAI,CAAC/B,IAAI,EAAE,YAAW;AAC5B8C,MAAAA,IAAI,CAACS,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnBV,MAAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACtB,KAAC,CAAC,CAAA;GAEL,CAAA;AAID,EAAA,OAAOZ,YAAY,CAAA;AACrB;;AC3DA,IAAM;EAAEuB,OAAO;EAAEC,SAAS;EAAEC,MAAM;EAAEC,MAAM;AAAEC,EAAAA,MAAAA;AAAO,CAAC,GAAGlE,MAAM,CAAA;AAG7D,IAAMmE,WAAW,GAAGA,CAACjG,MAAM,EAAEkE,OAAO,KAAK;AACvC,EAAA,IAAMgC,YAAY,GAAE;AAClBC,IAAAA,KAAK,EAAIC,IAAI;AACbxD,IAAAA,KAAK,EAAIyD,OAAO;AAChBC,IAAAA,OAAO,EAAEC,IAAI;AACb5C,IAAAA,IAAI,EAAK6C,MAAM;AACfC,IAAAA,IAAI,EAAKC,SAAS;AAClB7C,IAAAA,KAAK,EAAI8C,GAAAA;GACV,CAAA;AAED,EAAA,IAAMC,QAAQ,GAAGb,MAAM,CAACpC,IAAI,IAAI;AAAA,IAAA,IAAAkD,cAAA,CAAA;AAC9B,IAAA,IAAMC,EAAE,GAAGZ,YAAY,CAACvC,IAAI,CAAC9B,KAAK,CAAC,CAAA;IACnC,IAAMkF,EAAE,GAAG,IAAIC,IAAI,CAACrD,IAAI,CAACkC,SAAS,CAAC,CAAA;IACnC,IAAMoB,EAAE,GAAEF,EAAE,CAACG,cAAc,CAAC,CAAAlH,MAAM,KAANA,IAAAA,IAAAA,MAAM,KAAA6G,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,cAAA,GAAN7G,MAAM,CAAE8B,MAAM,MAAA,IAAA,IAAA+E,cAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAdA,cAAA,CAAgB9E,MAAM,KAAI,IAAI,CAAC,CAAA;AAC3D;IACA,IAAMtB,GAAG,cAAA0G,MAAA,CAAaL,EAAE,CAACG,EAAE,CAAC,EAAA,GAAA,CAAA,CAAAE,MAAA,CAAIL,EAAE,CAACnD,IAAI,CAAC9B,KAAK,CAAC,EAAA,GAAA,CAAA,CAAAsF,MAAA,CAAIxD,IAAI,CAACyB,OAAO,CAAE,CAAA;AAChE,IAAA,OAAOzB,IAAI,CAACyD,KAAK,GAAA,EAAA,CAAAD,MAAA,CACV1G,GAAG,EAAA0G,IAAAA,CAAAA,CAAAA,MAAA,CAAKxD,IAAI,CAACyD,KAAK,IACrB3G,GAAG,CAAA;AACT,GAAC,CAAC,CAAA;EAGF,IAAI4G,eAAe,GAAE,EAAE,CAAA;AACvB;AACA;AACA;AACA;AACA;;AAEA,EAAA,IAAIrH,MAAM,CAACgC,OAAO,CAACC,OAAO,EAAE;AAAA,IAAA,IAAAqF,eAAA,CAAA;AAC1BD,IAAAA,eAAe,CAACE,IAAI,CAChB,IAAIC,UAAU,CAACC,OAAO,CAAC;AACrB/C,MAAAA,+BAA+B,EAAE,IAAI;MACrC7C,KAAK,EAAM,CAAA7B,MAAM,KAANA,IAAAA,IAAAA,MAAM,KAAAsH,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,eAAA,GAANtH,MAAM,CAAEgC,OAAO,MAAAsF,IAAAA,IAAAA,eAAA,uBAAfA,eAAA,CAAiBzF,KAAK,MAAI7B,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAE6B,KAAK,CAAA,IAAI,OAAO;AAC7D8C,MAAAA,gBAAgB,EAAE,IAAA;AACxB,KAAC,CAAC,CAAC,CAAA;AACL,GAAA;;AAEA;AACA;AACA;AACA,EAAA,IAAI3E,MAAM,CAACkC,IAAI,CAACD,OAAO,EAAE;AAAA,IAAA,IAAAyF,YAAA,CAAA;AACvBL,IAAAA,eAAe,CAACE,IAAI,CAClB,IAAIC,UAAU,CAACG,IAAI,CAAC;AAClBxF,MAAAA,QAAQ,EAAGnC,MAAM,CAACkC,IAAI,CAACC,QAAQ;MAC/BN,KAAK,EAAM,CAAA7B,MAAM,KAANA,IAAAA,IAAAA,MAAM,KAAA0H,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,YAAA,GAAN1H,MAAM,CAAEkC,IAAI,MAAAwF,IAAAA,IAAAA,YAAA,uBAAZA,YAAA,CAAc7F,KAAK,MAAI7B,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAE6B,KAAK,CAAA,IAAI,MAAM;AACzD6C,MAAAA,+BAA+B,EAAE,IAAI;AACrCC,MAAAA,gBAAgB,EAAE,IAAA;AAAI,KAAC,CAC3B,CAAC,CAAA;AACH,GAAA;;AAEA;AACA;AACA;AACA,EAAA,IAAI3E,MAAM,CAACoC,IAAI,CAACH,OAAO,EAAE;IACvB,IAAMoC,YAAY,GAAED,mBAAmB,CAACpE,MAAM,CAACoC,IAAI,EAAE8B,OAAO,CAAC,CAAA;IAC7DsD,UAAU,CAACnD,YAAY,GAAGA,YAAY,CAAA;AAEtCgD,IAAAA,eAAe,CAACE,IAAI,CAClB,IAAIC,UAAU,CAACnD,YAAY,CAAC;AAC1BK,MAAAA,+BAA+B,EAAE,IAAI;AACrCC,MAAAA,gBAAgB,EAAE,IAAA;AACpB,KAAC,CACH,CAAC,CAAA;AACH,GAAA;;AAEA;AACA;AACA;EACA,IAAMhC,MAAM,GAAGiF,YAAY,CAAC;IAC1B/F,KAAK,EAAE,CAAA7B,MAAM,KAANA,IAAAA,IAAAA,MAAM,uBAANA,MAAM,CAAE6B,KAAK,KAAI,OAAO;AAC/BC,IAAAA,MAAM,EAAE8D,OAAO,CACbI,MAAM,CAAC;AAAEoB,MAAAA,KAAK,EAAE,IAAA;AAAK,KAAC,CAAC,EACvBvB,SAAS,EAAE,EACXe,QACF,CAAC;AACDY,IAAAA,UAAU,EAAEH,eAAAA;AACd,GAAC,CAAC,CAAA;AAEF,EAAA,OAAO1E,MAAM,CAAA;AACf,CAAC;;ACtFD,IAAMkF,uBAAuB,GAAGA,CAAEC,GAAG,EAAE9H,MAAM,KAAM;AACjD,EAAA,IAAMkE,OAAO,GAAGf,YAAY,CAACnD,MAAM,CAACoC,IAAI,CAACzC,OAAO,EAAEK,MAAM,CAACoC,IAAI,CAACS,QAAQ,CAAC,CAAA;EACvE,IAAMF,MAAM,GAAGsD,WAAW,CAACjG,MAAM,CAACS,GAAG,EAAEyD,OAAO,CAAC,CAAA;AAE/ClE,EAAAA,MAAM,CAACD,EAAE,CAACJ,OAAO,CAACc,GAAG,GAAEkC,MAAM,CAAA;EAE7B,IAAMoF,iBAAiB,GAAGA,MAAM;AAC9B,IAAA,OAAOC,aAAa,CAAChI,MAAM,CAACD,EAAE,CAACC,MAAM,EAAEA,MAAM,CAACD,EAAE,CAACJ,OAAO,CAAC,CAAA;GAC1D,CAAA;EAED,IAAMsI,YAAY,GAAIjJ,IAAI,IAAK;AAC7B,IAAA,IAAMkJ,IAAI,GAAGF,aAAa,CAAChI,MAAM,CAACD,EAAE,CAACC,MAAM,EAAEA,MAAM,CAACD,EAAE,CAACJ,OAAO,CAAC,CAAA;AAC/D,IAAA,OAAOuI,IAAI,CAACC,QAAQ,CAACnJ,IAAI,CAAC,CAAA;GAC3B,CAAA;AAED,EAAA,IAAMe,EAAE,GAAE;AACRiI,IAAAA,aAAa,EAAED,iBAAiB;AAChCI,IAAAA,QAAQ,EAAEF,YAAAA;GACX,CAAA;;AAED;AACA,EAAA,IAAMG,YAAY,GAAE;AAClBpI,IAAAA,MAAM,EAAAqI,cAAA,CAAMrI,EAAAA,EAAAA,MAAM,CAAC;IACnBkE,OAAO;IACPvB,MAAM;AACN5C,IAAAA,EAAE,EAAEA,EAAAA;GACL,CAAA;AAAA,EAAA,SAGcuI,kBAAkBA,CAAAC,EAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAC,mBAAA,CAAAC,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAAqF,mBAAA,GAAA;AAAAA,IAAAA,mBAAA,GAAAE,iBAAA,CAAjC,WAAkC5H,GAAG,EAAE6H,IAAI,EAAE;AAC3C;MACA7H,GAAG,CAAC8H,KAAK,GAAET,YAAY,CAAA;MACvB,MAAMQ,IAAI,EAAE,CAAA;KAEb,CAAA,CAAA;AAAA,IAAA,OAAAH,mBAAA,CAAAC,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED0E,EAAAA,GAAG,CAACgB,GAAG,CAACR,kBAAkB,CAAC,CAAA;AAC3BR,EAAAA,GAAG,CAACiB,OAAO,CAACF,KAAK,GAAET,YAAY,CAAA;AAEjC,CAAC;;ACrCD,IAAMY,oBAAoB,GAAKlB,GAAG,IAAM;AACtC;;AAEAA,EAAAA,GAAG,CAACgB,GAAG,CAACG,YAAY,CAAC;AACnBC,IAAAA,MAAM,EAAE,SAAAA,MAAUC,CAAAA,YAAY,EAAE;AAC9B,MAAA,OAAOA,YAAY,IAAE,kBAAkB,IAAIA,YAAY,IAAE,WAAW,CAAA;KACrE;AACD;AACAC,IAAAA,IAAI,EAAE;MACJC,KAAK,EAAEC,SAAS,CAACC,YAAAA;KAClB;AACDC,IAAAA,OAAO,EAAE;MACPH,KAAK,EAAEC,SAAS,CAACC,YAAAA;KAClB;IACDE,EAAE,EAAE,KAAK;AAEX,GAAC,CAAC,CAAC,CAAA;;AAEH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA3B,EAAAA,GAAG,CAACgB,GAAG,CAACY,WAAW,CAACC,eAAe,CAAC;AAClCC,IAAAA,SAAS,EAAE,OAAO;AAClBC,IAAAA,SAAS,EAAE,OAAO;AAClBC,IAAAA,WAAW,EAAE,OAAA;GACd,CAAC,CAAC,CAAC,CAAA;;AAIJ;AACA;AACF,CAAC;;AClDD;AACA;AACA;AACA;;AAEA,IAAMC,UAAU,GAAE,CAAC,GAAG,CAAC,CAAA;AAEvB,SAASC,uBAAuBA,CAAClC,GAAG,EAAE;EACpC,IAAMnF,MAAM,GAAEmF,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAAA;EAAA,SAEvBsH,kBAAkBA,CAAA1B,EAAA,EAAA;AAAA,IAAA,OAAA2B,mBAAA,CAAAxB,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAA8G,mBAAA,GAAA;AAAAA,IAAAA,mBAAA,GAAAvB,iBAAA,CAAjC,WAAkC/E,GAAG,EAAE;MAErC,IAAI,CAACA,GAAG,EAAE,OAAA;;AAEV;AACA,MAAA,IAAIuG,MAAM,GAAGvG,GAAG,CAACuG,MAAM,IAAI,GAAG,CAAA;AAC9B,MAAA,IAAMC,IAAI,GAAG,IAAI,CAACC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;MACnD,IAAI,CAACD,IAAI,EAAE;AACTD,QAAAA,MAAM,GAAG,GAAG,CAAA;QACZvG,GAAG,CAACwB,OAAO,GAAG,kBAAkB,CAAA;AAClC,OAAC,MAAO,IAAI,OAAO+E,MAAM,IAAI,QAAQ,EAAE;AACrCA,QAAAA,MAAM,GAAG,GAAG,CAAA;AACd,OAAA;;AAEA;;MAEA,IAAIJ,UAAU,CAACO,OAAO,CAACH,MAAM,CAAC,IAAE,CAAC,EAAE;QACjCxH,MAAM,CAAC8D,IAAI,CAAA,EAAA,CAAAU,MAAA,CAAI,IAAI,CAACoD,MAAM,EAAApD,GAAAA,CAAAA,CAAAA,MAAA,CAAI,IAAI,CAACzI,GAAG,EAAA,KAAA,CAAA,CAAAyI,MAAA,CAAMgD,MAAM,EAAA,IAAA,CAAA,CAAAhD,MAAA,CAAKvD,GAAG,CAACwB,OAAO,CAAE,CAAC,CAAA;AACvE,OAAC,MAAM;AACLzC,QAAAA,MAAM,CAACkB,KAAK,CAACD,GAAG,CAAC,CAAA;AACnB,OAAA;;AAEA;MACA,IAAI,IAAI,CAAC4G,UAAU,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;AACrC9H,QAAAA,MAAM,CAACC,KAAK,CAAC,4CAA4C,CAAC,CAAA;QAC1DgB,GAAG,CAAC4G,UAAU,GAAG,IAAI,CAAA;AACrB,QAAA,OAAA;AACF,OAAA;;AAEA;MACA,IAAI,CAACJ,IAAI,GAAG,MAAM,CAAA;MAClB,IAAI,CAACD,MAAM,GAAGA,MAAM,CAAA;AACpB,MAAA,IAAI,CAACO,IAAI,GAAGC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACF,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;MACpD,IAAI,CAACrH,MAAM,GAAGwH,MAAM,CAACC,UAAU,CAAC,IAAI,CAACJ,IAAI,CAAC,CAAA;MAC1C,IAAI,CAACK,GAAG,CAACC,GAAG,CAAC,IAAI,CAACN,IAAI,CAAC,CAAA;KACxB,CAAA,CAAA;AAAA,IAAA,OAAAR,mBAAA,CAAAxB,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED0E,EAAAA,GAAG,CAACiB,OAAO,CAACkC,OAAO,GAAGhB,kBAAkB,CAAA;AAC1C;;AC3CA,IAAM3L,eAAa,GAAGC,aAAa,CAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;AACpD,IAAMC,cAAY,GAAGC,IAAI,CAACC,OAAO,CAACP,eAAa,CAAC,CAAA;AAEhD,IAAM4M,qBAAqB,GAAGtM,IAAI,CAACG,OAAO,CAACJ,cAAY,EAAE,aAAa,CAAC,CAAA;AAEvE,IAAMwM,sBAAsB,GAAGA,CAAErD,GAAG,EAAE9H,MAAM,KAAM;EAEhD,IAAM;IAAClB,OAAO;AAAEO,IAAAA,OAAAA;AAAO,GAAC,GAAGW,MAAM,CAAA;EAEjC8H,GAAG,CAACgB,GAAG,CAACsC,WAAW,CAACtM,OAAO,IAAIoM,qBAAqB,CAAC,CAAC,CAAA;AAEtD,EAAA,KAAI,IAAM,CAACG,CAAC,EAAEC,CAAC,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACnM,OAAO,CAAC,EAAE;IAC3CyI,GAAG,CAACgB,GAAG,CAAC2C,SAAS,CAACJ,CAAC,EAAEK,SAAS,CAACJ,CAAC,EAAE;AAACK,MAAAA,KAAK,EAAE,KAAA;KAAM,CAAC,CAAC,CAAC,CAAA;AACrD,GAAA;AACF,CAAC;;AChBD,IAAIC,eAAe,GAAE,CAAC,CAAA;;AAEtB;AACA;AACA;;AAEA,SAASC,uBAAuBA,CAAC/D,GAAG,EAAE;AAAA,EAAA,SAErBgE,kBAAkBA,CAAAvD,EAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAuD,mBAAA,CAAArD,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAA2I,mBAAA,GAAA;AAAAA,IAAAA,mBAAA,GAAApD,iBAAA,CAAjC,WAAkC5H,GAAG,EAAE6H,IAAI,EAAE;AAE3C,MAAA,IAAMjG,MAAM,GAAG5B,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAAA;AAE/BiJ,MAAAA,eAAe,IAAG,CAAC,CAAA;MACnB7K,GAAG,CAACiL,SAAS,GAAEJ,eAAe,CAAA;;AAE9B;MACA7K,GAAG,CAACkL,OAAO,CAACvB,IAAI,GAAArC,cAAA,CAAAA,cAAA,CAAOtH,EAAAA,EAAAA,GAAG,CAACkL,OAAO,CAACC,MAAM,CAAKnL,EAAAA,GAAG,CAACkL,OAAO,CAACE,KAAK,CAAC,CAAA;AAEhE,MAAA,IAAMC,OAAO,GAAGC,WAAW,CAACC,GAAG,EAAE,CAAA;MACjC,IAAMC,EAAE,GAAGxL,GAAG,CAACS,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAA;AAElDT,MAAAA,GAAG,CAACkL,OAAO,CAACM,EAAE,GAAGA,EAAE,CAAA;MAEnB5J,MAAM,CAACgB,IAAI,CAAA,YAAA,CAAAwD,MAAA,CAAcpG,GAAG,CAACiL,SAAS,EAAA,QAAA,CAAA,CAAA7E,MAAA,CAASoF,EAAE,EAAA,KAAA,CAAA,CAAApF,MAAA,CAAMZ,IAAI,CAACxF,GAAG,CAACkL,OAAO,CAAC1B,MAAM,CAAC,EAAApD,GAAAA,CAAAA,CAAAA,MAAA,CAAIZ,IAAI,CAACxF,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAC,EAAAyI,GAAAA,CAAAA,CAAAA,MAAA,CAAIpG,GAAG,CAACkL,OAAO,CAACvB,IAAI,IAAE7J,SAAS,GAAG8J,IAAI,CAACC,SAAS,CAAC7J,GAAG,CAACkL,OAAO,CAACvB,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC,CAAA;MAElL,MAAM9B,IAAI,EAAE,CAAA;MAGZ,IAAIxI,IAAI,GAAGS,SAAS,CAAA;MACpB,IAAI;AACF,QAAA,IAAIE,GAAG,CAACE,KAAK,CAACb,IAAI,IAAIS,SAAS,EAAE;AAC/BT,UAAAA,IAAI,GAAEW,GAAG,CAACE,KAAK,CAACb,IAAI,CAAA;AACtB,SAAA;AACF,OAAC,CAAC,OAAMoM,CAAC,EAAE,EAAC;MAEZ,IAAI;AACF,QAAA,IAAIzL,GAAG,CAACX,IAAI,IAAIS,SAAS,EAAE;UACzBT,IAAI,GAAEW,GAAG,CAACX,IAAI,CAAA;AAChB,SAAA;AACF,OAAC,CAAC,OAAMoM,CAAC,EAAE,EAAC;MAEZ,IAAIC,QAAQ,GAAE,EAAE,CAAA;MAChB,IAAIrM,IAAI,IAAIS,SAAS,EAAE;QAAA,IAAA6L,KAAA,EAAAC,MAAA,CAAA;QACrB,IAAAD,CAAAA,KAAA,GAAItM,IAAI,MAAA,IAAA,IAAAsM,KAAA,KAAJA,KAAAA,CAAAA,IAAAA,KAAA,CAAMxL,EAAE,EAAE;AAAA,UAAA,IAAA0L,MAAA,CAAA;AACZH,UAAAA,QAAQ,GAAAtF,SAAAA,CAAAA,MAAA,CAAAyF,CAAAA,MAAA,GAAYxM,IAAI,MAAAwM,IAAAA,IAAAA,MAAA,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAA,CAAM1L,EAAE,CAAE,CAAA;SAC/B,MAAM,IAAAyL,CAAAA,MAAA,GAAIvM,IAAI,MAAAuM,IAAAA,IAAAA,MAAA,KAAJA,KAAAA,CAAAA,IAAAA,MAAA,CAAMrL,KAAK,EAAE;AAAA,UAAA,IAAAuL,MAAA,CAAA;AACtBJ,UAAAA,QAAQ,GAAAtF,WAAAA,CAAAA,MAAA,CAAA0F,CAAAA,MAAA,GAAczM,IAAI,MAAAyM,IAAAA,IAAAA,MAAA,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAA,CAAMvL,KAAK,CAAE,CAAA;AACrC,SAAA;AACF,OAAA;AAEA,MAAA,IAAMwL,OAAO,GAAGC,UAAU,CAAE,CAACV,WAAW,CAACC,GAAG,EAAE,GAAGF,OAAO,IAAI,MAAO,CAAC,CAACY,OAAO,CAAC,CAAC,CAAC,CAAA;AAE/E,MAAA,IAAMC,MAAM,GAAEH,OAAO,GAAG,GAAG,GACXI,KAAK,GACLJ,OAAO,GAAG,GAAG,GACXtG,MAAM,GACNG,GAAG,CAAA;MAErBhE,MAAM,CAACgB,IAAI,CAAAwD,UAAAA,CAAAA,MAAA,CAAYpG,GAAG,CAACiL,SAAS,CAAA,CAAA7E,MAAA,CAAGsF,QAAQ,EAAAtF,MAAAA,CAAAA,CAAAA,MAAA,CAAO8F,MAAM,CAAA9F,UAAAA,CAAAA,MAAA,CAAY2F,OAAO,EAAA,UAAA,CAAU,CAAC,CAAE,CAAC,CAAA;KAC9F,CAAA,CAAA;AAAA,IAAA,OAAAf,mBAAA,CAAArD,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED0E,EAAAA,GAAG,CAACgB,GAAG,CAACgD,kBAAkB,CAAC,CAAA;AAC7B;;AC/DA,kBAAe,IAAIqB,UAAU,EAAE;;ACC/B;AACA;AACA;AACA;AACA;AACA,SAASC,uBAAuBA,CAACtF,GAAG,EAAE9H,MAAM,EAAE;EAE5C8H,GAAG,CAACuF,IAAI,GAAG,CAACrN,MAAM,CAACN,MAAM,IAAI,UAAU,CAAC,CAAA;EAExC,IAAMC,OAAO,GAAA0I,cAAA,CAAA;AACXiF,IAAAA,KAAK,EAAEC,WAAAA;AAAW,GAAA,EACfvN,MAAM,CAACL,OAAO,IAAI,EAAE,CACxB,CAAA;EAEDmI,GAAG,CAACgB,GAAG,CAAC0E,WAAW,CAAC7N,OAAO,EAAEmI,GAAG,CAAC,CAAC,CAAA;AAEpC;;ACfA,IAAMxJ,eAAa,GAAGC,aAAa,CAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;AACpD,IAAMC,cAAY,GAAGC,IAAI,CAACC,OAAO,CAACP,eAAa,CAAC,CAAA;AAGhD,IAAMmP,UAAU,GAAGC,YAAY,CAAC9O,IAAI,CAACG,OAAO,CAACJ,cAAY,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;AAEnF,SAASgP,iBAAiBA,CAAC7F,GAAG,EAAE;EAAA,SAEf8F,MAAMA,CAAArF,EAAA,EAAA;AAAA,IAAA,OAAAsF,OAAA,CAAAnF,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAAyK,OAAA,GAAA;AAAAA,IAAAA,OAAA,GAAAlF,iBAAA,CAArB,WAAsB5H,GAAG,EAAE;MACzBA,GAAG,CAAC2J,IAAI,GAAG+C,UAAU,CAAA;KACtB,CAAA,CAAA;AAAA,IAAA,OAAAI,OAAA,CAAAnF,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED,EAAA,IAAM0K,aAAa,GAAG,IAAIC,MAAM,EAAE,CAAA;AAClCD,EAAAA,aAAa,CAACE,GAAG,CAAC,aAAa,EAAEJ,MAAM,CAAC,CAAA;EAExC9F,GAAG,CAACgB,GAAG,CAACgF,aAAa,CAACnN,MAAM,EAAE,CAAC,CAAA;AACjC;;ACjBA,SAASsN,yBAAyBA,CAACnG,GAAG,EAAEoG,KAAK,EAAE;EAAA,SAE9BC,cAAcA,CAAA5F,EAAA,EAAA;AAAA,IAAA,OAAA6F,eAAA,CAAA1F,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAAgL,eAAA,GAAA;AAAAA,IAAAA,eAAA,GAAAzF,iBAAA,CAA7B,WAA8B5H,GAAG,EAAE;MACjC,IAAM;QAAE8C,KAAK;QAAEjF,IAAI;AAAEyP,QAAAA,KAAAA;AAAM,OAAC,GAAGtN,GAAG,CAACkL,OAAO,CAACvB,IAAI,CAAA;AAC/C,MAAA,IAAM/H,MAAM,GAAG5B,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAAA;MAE/B,IAAM2L,GAAG,GACP,EAAAnH,CAAAA,MAAA,CAAGR,GAAG,CAAC,YAAY,CAAC,EAAA,MAAA,CAAA,CAAAQ,MAAA,CAAOoH,IAAI,CAAC3P,IAAI,CAAC,QAAAuI,MAAA,CAAKtD,KAAK,CAACyK,GAAG,aAAAnH,MAAA,CAChDR,GAAG,CAAC,YAAY,CAAC,EAAAQ,YAAAA,CAAAA,CAAAA,MAAA,CAAatD,KAAK,CAAC3B,IAAI,EAAI,IAAA,CAAA,GAAA,EAAA,CAAAiF,MAAA,CAC5CR,GAAG,CAAC,YAAY,CAAC,EAAAQ,YAAAA,CAAAA,CAAAA,MAAA,CAAatD,KAAK,CAAC2K,IAAI,EAAA,IAAA,CAAI,MAAArH,MAAA,CAC5CR,GAAG,CAAC,YAAY,CAAC,EAAAQ,YAAAA,CAAAA,CAAAA,MAAA,CAAatD,KAAK,CAAC4K,GAAG,EAAI,IAAA,CAAA,GAAA,EAAA,CAAAtH,MAAA,CAC3CR,GAAG,CAAC,YAAY,CAAC,gBAAAQ,MAAA,CAAawD,IAAI,CAACC,SAAS,CAAC/G,KAAK,CAACA,KAAK,CAAC,EAAA,IAAA,CAAI,MAAAsD,MAAA,CAC7DR,GAAG,CAAC,YAAY,CAAC,EAAAQ,YAAAA,CAAAA,CAAAA,MAAA,CAAakH,KAAK,CAAE,CAAA;AAE1C1L,MAAAA,MAAM,CAACkB,KAAK,CAACyK,GAAG,CAAC,CAAA;MAEjBvN,GAAG,CAAC2J,IAAI,GAAG;AAACgE,QAAAA,MAAM,EAAE,CAAA;OAAE,CAAA;KACvB,CAAA,CAAA;AAAA,IAAA,OAAAN,eAAA,CAAA1F,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED,EAAA,IAAMuL,qBAAqB,GAAG,IAAIZ,MAAM,EAAE,CAAA;AAC1CY,EAAAA,qBAAqB,CAACC,IAAI,CAACV,KAAK,EAAEC,cAAc,CAAC,CAAA;EAEjDrG,GAAG,CAACgB,GAAG,CAAC6F,qBAAqB,CAAChO,MAAM,EAAE,CAAC,CAAA;AAEzC;;AC3BA,IAAMkO,iBAAiB,GAAG;AACxBC,EAAAA,OAAO,EAAE,KAAK;AAAM;AACpBC,EAAAA,MAAM,EAAE,UAAU;AAAE;AACpBC,EAAAA,YAAY,EAAE,GAAG;AACjBC,EAAAA,UAAU,EAAE,GAAA;AACd,CAAC,CAAA;AAED,IAAMC,uBAAuB,GAAG;AAC9BpG,EAAAA,GAAG,EAAE,KAAK;AACVqG,EAAAA,UAAU,EAAE;AACVC,IAAAA,UAAU,EAAE,YAAY;AACxBC,IAAAA,cAAc,EAAE,gBAAA;AAClB,GAAA;AACF,CAAC;;ACRD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,aAAa,GAAItP,MAAM,IAAK;EAEhC,IAAMuP,KAAK,GAAE,CAAAvP,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEyB,IAAI,KAAI,EAAE,CAAA;EAE/B,IAAI,CAAE8N,KAAK,EAAE;AACX,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AAGA,EAAA,IAAI,CAAEC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;AAC1B,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;EAEA,IAAIG,MAAM,GAAE,EAAE,CAAA;AAEdH,EAAAA,KAAK,CAACI,GAAG,CAAElO,IAAI,IAAK;IAClB,IAAMd,MAAM,GAAEc,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEd,MAAM,CAAA;IAE1B,IAAI,CAAEA,MAAM,EAAE;AACZ,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAE6O,KAAK,CAACC,OAAO,CAAC9O,MAAM,CAAC,EAAE;AAC3B,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAMiP,cAAc,GAAG,CAAAnO,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEb,SAAS,MAAIZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAM,CAAEY,SAAS,CAAA,CAAA;AAE3D,IAAA,IAAMiP,aAAa,GAAAxH,cAAA,CAAAA,cAAA,CAAAA,cAAA,CACdwG,EAAAA,EAAAA,iBAAiB,CACjB,EAAA,CAAApN,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEqO,QAAQ,KAAI,EAAE,CAAA,EACpB,CAAA9P,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAE8P,QAAQ,KAAI,EAAE,CAC1B,CAAA;AACD,IAAA,IAAMC,cAAc,GAAE,CAAAtO,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAJA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAI,CAAEX,SAAS,MAAId,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAM,CAAEc,SAAS,CAAA,CAAA;IAE1D,IAAIkP,aAAa,GAAE,EAAE,CAAA;AAErB,IAAA,KAAK,IAAMC,MAAM,IAAItP,MAAM,EAAE;AAE3B,MAAA,IAAMuN,KAAK,GAAI,OAAO+B,MAAM,KAAK,QAAQ,GACrC;AAACjR,QAAAA,IAAI,EAAEiR,MAAAA;AAAM,OAAC,GACdA,MAAM,CAAA;AAEV,MAAA,IAAI,CAAE/B,KAAK,CAAClP,IAAI,EAAE;AAChB,QAAA,SAAA;AACF,OAAA;AAEA,MAAA,IAAMkR,YAAY,GAAE;QAClBlR,IAAI,EAAEkP,KAAK,CAAClP,IAAI;AAChBN,QAAAA,GAAG,EAAE,CAAAwP,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAALA,KAAK,CAAExP,GAAG,KAAIwP,KAAK,CAAClP,IAAI;QAC7BmR,IAAI,EAAE,CAAAjC,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEiC,IAAI,KAAI,IAAI;QAEzBvP,SAAS,EAAE,CAAAsN,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEtN,SAAS,KAAIgP,cAAc;AAC7CQ,QAAAA,aAAa,EAAA/H,cAAA,CAAAA,cAAA,CACR6G,EAAAA,EAAAA,uBAAuB,GACvB,CAAAhB,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEkC,aAAa,KAAI,EAAE,CAC9B;AACDN,QAAAA,QAAQ,EAAAzH,cAAA,CAAAA,cAAA,CACHwH,EAAAA,EAAAA,aAAa,GACb,CAAA3B,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAE4B,QAAQ,KAAK,EAAE,CAC1B;QACDhP,SAAS,EAAE,CAAAoN,KAAK,KAAA,IAAA,IAALA,KAAK,KAALA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAK,CAAEpN,SAAS,KAAKiP,cAAAA;OACjC,CAAA;AAEDC,MAAAA,aAAa,CAACzI,IAAI,CAAC2I,YAAY,CAAC,CAAA;AAClC,KAAA;AAEA,IAAA,IAAIF,aAAa,CAAC3M,MAAM,GAAC,CAAC,EAAE;MAC1BqM,MAAM,CAACnI,IAAI,CAAE;QACX7F,MAAM,EAAE,CAAAD,IAAI,KAAJA,IAAAA,IAAAA,IAAI,uBAAJA,IAAI,CAAEC,MAAM,KAAI,EAAE;AAC1Bf,QAAAA,MAAM,EAAEqP,aAAAA;AACV,OAAE,CAAC,CAAA;AACL,KAAA;AAEF,GAAC,CAAC,CAAA;AAEF,EAAA,OAAON,MAAM,CAAA;AAEf,CAAC;;ACrHD;AACA;AACA;AACO,SAASW,oBAAoBA,CAAC3R,GAAG,EAAE;EACxC,IAAI4R,MAAM,GAAE5R,GAAG,CAAC4L,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,GAAG5L,GAAG,CAAC6R,MAAM,CAAC7R,GAAG,CAAC4L,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;AACnE,EAAA,IAAIgG,MAAM,IAAIA,MAAM,IAAE,GAAG,EAAE;AACzB,IAAA,IAAIE,KAAK,GAAGF,MAAM,CAACG,KAAK,CAAC,CAAC,CAAC,CAACpL,KAAK,CAAC,GAAG,CAAC,CAAA;IAEtC,IAAIqJ,MAAM,GAAG,EAAE,CAAA;AACf8B,IAAAA,KAAK,CAACE,OAAO,CAAC,UAASC,IAAI,EAAE;AACzBA,MAAAA,IAAI,GAAGA,IAAI,CAACtL,KAAK,CAAC,GAAG,CAAC,CAAA;AACtBqJ,MAAAA,MAAM,CAACiC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAGC,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AACvD,KAAC,CAAC,CAAA;IACF,OAAOhG,IAAI,CAACkG,KAAK,CAAClG,IAAI,CAACC,SAAS,CAAC8D,MAAM,CAAC,CAAC,CAAA;AAC3C,GAAA;AACA,EAAA,OAAO,EAAE,CAAA;AACX;;ACbA,SAASoC,gBAAgBA,CAACC,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAEtO,MAAM,EAAE;AAEjEsO,EAAAA,WAAW,CAACtB,GAAG,CAAEuB,UAAU,IAAK;AAE9B,IAAA,IAAMxP,MAAM,GAAEwP,UAAU,CAACxP,MAAM,CAAA;AAE/BwP,IAAAA,UAAU,CAACvQ,MAAM,CAACgP,GAAG,CAACzB,KAAK,IAAI;MAE7B,IAAMiD,KAAK,GAAEJ,UAAU,CAAC5I,QAAQ,CAAC+F,KAAK,CAAClP,IAAI,CAAC,CAAA;MAE5C,IAAI,CAAEmS,KAAK,EAAE;QACXxO,MAAM,CAACkB,KAAK,CAAAsD,yCAAAA,CAAAA,MAAA,CAA2C+G,KAAK,CAAClP,IAAI,CAAE,CAAC,CAAA;AACpE,QAAA,OAAA;AACF,OAAA;MAEA,IAAMoS,aAAa,GAAIC,IAAI,IAAK;AAC9B,QAAA,IAAInD,KAAK,CAACtN,SAAS,IAAIC,SAAS,EAAE;AAChC,UAAA,OAAOwQ,IAAI,CAAA;AACb,SAAA;QACA,OAAO;UACL,CAACnD,KAAK,CAACtN,SAAS,GAAGyQ,IAAAA;SACpB,CAAA;OACF,CAAA;AAGD,MAAA,IAAMC,cAAc,gBAAA,YAAA;QAAA,IAAAC,IAAA,GAAA5I,iBAAA,CAAG,WAAO5H,GAAG,EAAEyQ,EAAE,EAAEvM,QAAQ,EAAK;UAClD,IAAI1D,GAAG,GAAEV,SAAS,CAAA;UAClB,IAAIqN,KAAK,CAACpN,SAAS,EAAE;AACnBS,YAAAA,GAAG,GAAE2M,KAAK,CAACpN,SAAS,CAACC,GAAG,CAAC,CAAA;AAC3B,WAAA;UAEA,IAAI0Q,OAAO,GAAE,IAAI,CAAA;AAEjB,UAAA,IAAM3B,QAAQ,GAAG5B,KAAK,CAAC4B,QAAQ,CAAA;AAE/B,UAAA,IAAM4B,SAAS,GAAG5B,QAAQ,CAAChB,OAAO,KAAG,IAAI,IAAMgB,QAAQ,CAAChB,OAAO,KAAG,WAAW,IAAI0C,EAAE,KAAG,GAAI,CAAA;AAE1F,UAAA,IAAIE,SAAS,EAAE;YAEb,IAAInQ,GAAG,KAAGV,SAAS,EAAE;AAEnB,cAAA,IAAIiP,QAAQ,CAACf,MAAM,IAAE,OAAO,EAAE;gBAE5BpM,MAAM,CAACkB,KAAK,CAAAsD,qDAAAA,CAAAA,MAAA,CAAuD2I,QAAQ,CAACb,UAAU,CAAE,CAAC,CAAA;gBACzFlO,GAAG,CAAC4Q,KAAK,CACP7B,QAAQ,CAACb,UAAU,EACnB,IAAI,EACJ,EACF,CAAC,CAAA;AACH,eAAC,MAAM;gBACLtM,MAAM,CAACkB,KAAK,CAAAsD,qDAAAA,CAAAA,MAAA,CAAuD2I,QAAQ,CAACd,YAAY,CAAE,CAAC,CAAA;AAC3FjO,gBAAAA,GAAG,CAAC6Q,QAAQ,CAAC9B,QAAQ,CAACd,YAAY,CAAC,CAAA;AACrC,eAAA;AAEAyC,cAAAA,OAAO,GAAE,KAAK,CAAA;AAChB,aAAA;AACF,WAAA;UAEA,IAAItC,UAAU,GAAE,EAAE,CAAA;AAClB,UAAA,IAAIjB,KAAK,CAACkC,aAAa,CAACtH,GAAG,KAAG,IAAI,EAAE;AAClCqG,YAAAA,UAAU,GAAEjB,KAAK,CAACkC,aAAa,CAACjB,UAAU,CAAA;AAC5C,WAAA;AAEA,UAAA,IAAM0C,KAAK,GAAE;AACXtQ,YAAAA,GAAG,EAAEA,GAAG;AACR4N,YAAAA,UAAAA;WACD,CAAA;UAED,IAAIpE,GAAG,GAAE,EAAE,CAAA;AACX,UAAA,IAAI0G,OAAO,EAAE;AACX1G,YAAAA,GAAG,GAAQ9F,MAAAA,QAAQ,CAAC4M,KAAK,CAAC,CAAA;AAC5B,WAAA;UACA9Q,GAAG,CAAC2J,IAAI,GAAGK,GAAG,CAAA;SACf,CAAA,CAAA;AAAA,QAAA,OAAA,SAhDKuG,cAAcA,CAAA/I,EAAA,EAAAC,GAAA,EAAAsJ,GAAA,EAAA;AAAA,UAAA,OAAAP,IAAA,CAAA7I,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAgDnB,EAAA,CAAA;AAED,MAAA,IAAM2O,UAAU,gBAAA,YAAA;AAAA,QAAA,IAAAC,KAAA,GAAArJ,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AAChC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAAkR,KAAA,GAAAtJ,iBAAA,CAAE,WAAOuJ,MAAM,EAAK;cAC/C,IAAMC,MAAM,GAAG9B,oBAAoB,CAACtP,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAC,CAAA;AACpD;AACA,cAAA,IAAMiB,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;cACvC,IAAMwQ,IAAI,SAASF,KAAK,CAACkB,IAAI,CAACF,MAAM,EAAExS,OAAO,CAAC,CAAA;cAC9C,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAiB,GAAA,EAAA;AAAA,cAAA,OAAAL,KAAA,CAAAvJ,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OARK2O,SAAAA,UAAUA,CAAAQ,GAAA,EAAA;AAAA,UAAA,OAAAP,KAAA,CAAAtJ,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAQf,EAAA,CAAA;AAED,MAAA,IAAMoP,cAAc,gBAAA,YAAA;AAAA,QAAA,IAAAC,KAAA,GAAA9J,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AACpC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAA2R,KAAA,GAAA/J,iBAAA,CAAE,WAAOuJ,MAAM,EAAK;AAC/C;cACA,IAAMC,MAAM,GAAG9B,oBAAoB,CAACtP,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAC,CAAA;AACpD,cAAA,IAAMiB,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;cACvC,IAAMwQ,IAAI,SAASF,KAAK,CAACwB,OAAO,CAACR,MAAM,EAAExS,OAAO,CAAC,CAAA;cACjD,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAuB,GAAA,EAAA;AAAA,cAAA,OAAAF,KAAA,CAAAhK,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OARKoP,SAAAA,cAAcA,CAAAK,GAAA,EAAA;AAAA,UAAA,OAAAJ,KAAA,CAAA/J,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAQnB,EAAA,CAAA;AAED,MAAA,IAAM0P,UAAU,gBAAA,YAAA;AAAA,QAAA,IAAAC,KAAA,GAAApK,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AAChC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAAiS,KAAA,GAAArK,iBAAA,CAAE,WAAOuJ,MAAM,EAAK;cAC/C,IAAMC,MAAM,GAAG9B,oBAAoB,CAACtP,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAC,CAAA;AACpD;AACA,cAAA,IAAMiB,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;cACvC,IAAMwQ,IAAI,GAASF,MAAAA,KAAK,CAAC8B,IAAI,CAACd,MAAM,CAACjR,EAAE,EAAEvB,OAAO,CAAC,CAAA;cACjD,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAA6B,GAAA,EAAA;AAAA,cAAA,OAAAF,KAAA,CAAAtK,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OARK0P,SAAAA,UAAUA,CAAAK,GAAA,EAAA;AAAA,UAAA,OAAAJ,KAAA,CAAArK,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAQf,EAAA,CAAA;AAED,MAAA,IAAMgQ,cAAc,gBAAA,YAAA;AAAA,QAAA,IAAAC,KAAA,GAAA1K,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AACpC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAAuS,KAAA,GAAA3K,iBAAA,CAAE,WAAOuJ,MAAM,EAAK;cAC/C,IAAMC,MAAM,GAAG9B,oBAAoB,CAACtP,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAC,CAAA;AACpD;AACA,cAAA,IAAMiB,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;AACvC,cAAA,IAAMwQ,IAAI,GAAA,MAASF,KAAK,CAACoC,QAAQ,CAACpB,MAAM,CAACqB,cAAc,EAAErB,MAAM,EAAExS,OAAO,CAAC,CAAA;cACzE,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAoC,IAAA,EAAA;AAAA,cAAA,OAAAH,KAAA,CAAA5K,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OARKgQ,SAAAA,cAAcA,CAAAM,IAAA,EAAA;AAAA,UAAA,OAAAL,KAAA,CAAA3K,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAQnB,EAAA,CAAA;AAED,MAAA,IAAMuQ,UAAU,gBAAA,YAAA;AAAA,QAAA,IAAAC,MAAA,GAAAjL,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AAChC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAA8S,MAAA,GAAAlL,iBAAA,CAAE,WAAOkJ,KAAK,EAAK;AAAA,cAAA,IAAAiC,iBAAA,CAAA;AAC9C,cAAA,IAAM3B,MAAM,GAAGpR,GAAG,CAACkL,OAAO,CAACC,MAAM,CAAA;AACjC,cAAA,IAAI2F,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,KAAA,CAAA,IAAA,CAAAiC,iBAAA,GAALjC,KAAK,CAAE1C,UAAU,cAAA2E,iBAAA,KAAA,KAAA,CAAA,IAAjBA,iBAAA,CAAmB1E,UAAU,EAAE;gBACjC+C,MAAM,CAACN,KAAK,CAAC1C,UAAU,CAACC,UAAU,CAAC,GAAGyC,KAAK,CAACtQ,GAAG,CAAA;AACjD,eAAA;AACA;AACA,cAAA,IAAM5B,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;cACvC,IAAMwQ,IAAI,SAASF,KAAK,CAAC4C,MAAM,CAAC5B,MAAM,EAAExS,OAAO,CAAC,CAAA;cAChD,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAA2C,IAAA,EAAA;AAAA,cAAA,OAAAH,MAAA,CAAAnL,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OAXKuQ,SAAAA,UAAUA,CAAAM,IAAA,EAAA;AAAA,UAAA,OAAAL,MAAA,CAAAlL,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAWf,EAAA,CAAA;AAED,MAAA,IAAM8Q,YAAY,gBAAA,YAAA;AAAA,QAAA,IAAAC,MAAA,GAAAxL,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AAClC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAAqT,MAAA,GAAAzL,iBAAA,CAAE,WAAOkJ,KAAK,EAAK;AAAA,cAAA,IAAAwC,kBAAA,CAAA;AAC9C,cAAA,IAAMlC,MAAM,GAAGpR,GAAG,CAACkL,OAAO,CAACC,MAAM,CAAA;AACjC,cAAA,IAAI2F,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,KAAA,CAAA,IAAA,CAAAwC,kBAAA,GAALxC,KAAK,CAAE1C,UAAU,cAAAkF,kBAAA,KAAA,KAAA,CAAA,IAAjBA,kBAAA,CAAmBhF,cAAc,EAAE;gBACrC8C,MAAM,CAACN,KAAK,CAAC1C,UAAU,CAACE,cAAc,CAAC,GAAGwC,KAAK,CAACtQ,GAAG,CAAA;AACrD,eAAA;AACA;AACA,cAAA,IAAM5B,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;AACvC,cAAA,IAAMwQ,IAAI,GAASF,MAAAA,KAAK,CAACmD,MAAM,CAACnC,MAAM,EAAE;gBAACjR,EAAE,EAAEiR,MAAM,CAACjR,EAAAA;eAAG,EAAEvB,OAAO,CAAC,CAAA;cACjE,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAkD,IAAA,EAAA;AAAA,cAAA,OAAAH,MAAA,CAAA1L,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OAXK8Q,SAAAA,YAAYA,CAAAM,IAAA,EAAA;AAAA,UAAA,OAAAL,MAAA,CAAAzL,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAWjB,EAAA,CAAA;AAED,MAAA,IAAMqR,YAAY,gBAAA,YAAA;AAAA,QAAA,IAAAC,MAAA,GAAA/L,iBAAA,CAAG,WAAO5H,GAAG,EAAK;AAClC,UAAA,MAAMuQ,cAAc,CAACvQ,GAAG,EAAE,GAAG,eAAA,YAAA;AAAA,YAAA,IAAA4T,MAAA,GAAAhM,iBAAA,CAAE,WAAOuJ,MAAM,EAAK;AAC/C,cAAA,IAAMC,MAAM,GAAGpR,GAAG,CAACkL,OAAO,CAACC,MAAM,CAAA;AACjC;AACA,cAAA,IAAMvM,OAAO,GAAE;AAACyS,gBAAAA,WAAW,EAAEvR,SAAAA;eAAU,CAAA;AACvC,cAAA,IAAMwQ,IAAI,GAAA,MAASF,KAAK,CAACyD,MAAM,CAAC;gBAAC1T,EAAE,EAAEiR,MAAM,CAACjR,EAAAA;eAAG,EAAEvB,OAAO,CAAC,CAAA;cACzD,OAAOyR,aAAa,CAACC,IAAI,CAAC,CAAA;aAC3B,CAAA,CAAA;AAAA,YAAA,OAAA,UAAAwD,IAAA,EAAA;AAAA,cAAA,OAAAF,MAAA,CAAAjM,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,aAAA,CAAA;WAAC,EAAA,CAAA,CAAA;SACH,CAAA,CAAA;QAAA,OARKqR,SAAAA,YAAYA,CAAAK,IAAA,EAAA;AAAA,UAAA,OAAAJ,MAAA,CAAAhM,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAQjB,EAAA,CAAA;MAED,IAAI1E,GAAG,GAAI,CAACgD,MAAM,OAAAyF,MAAA,CACV+G,KAAK,CAACxP,GAAG,QAAAyI,MAAA,CACTzF,MAAM,EAAAyF,GAAAA,CAAAA,CAAAA,MAAA,CAAI+G,KAAK,CAACxP,GAAG,CAAE,CAAA;MAE7B,OAAOA,GAAG,CAAC4L,OAAO,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE;QAC3B5L,GAAG,GAAEA,GAAG,CAACqW,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAChC,OAAA;AAEApS,MAAAA,MAAM,CAACgB,IAAI,CAAAwD,+BAAAA,CAAAA,MAAA,CAAiC+G,KAAK,CAAClP,IAAI,EAAAmI,MAAAA,CAAAA,CAAAA,MAAA,CAAOzI,GAAG,CAAE,CAAC,CAAA;MAEnE,IAAMsW,SAAS,GAAG9G,KAAK,CAACiC,IAAI,CAAC7F,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,CAAA;MAC5C,IAAM2K,WAAW,GAAG/G,KAAK,CAACiC,IAAI,CAAC7F,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,CAAA;AAC9C,MAAA,IAAM4K,WAAW,GAAIhH,KAAK,CAACiC,IAAI,CAAC7F,OAAO,CAAC,GAAG,CAAC,IAAE,CAAC,IAAK2K,WAAW,CAAA;AAE/D,MAAA,IAAID,SAAS,EAAE;AACbhE,QAAAA,MAAM,CAAChD,GAAG,CAAA7G,EAAAA,CAAAA,MAAA,CAAKzI,GAAG,EAAeqC,OAAAA,CAAAA,EAAAA,GAAG,IAAK+R,UAAU,CAAC/R,GAAG,CAAC,CAAC,CAAA;AACzDiQ,QAAAA,MAAM,CAAChD,GAAG,CAAA7G,EAAAA,CAAAA,MAAA,CAAKzI,GAAG,EAAeqC,OAAAA,CAAAA,EAAAA,GAAG,IAAKgR,UAAU,CAAChR,GAAG,CAAC,CAAC,CAAA;AACzDiQ,QAAAA,MAAM,CAAChD,GAAG,CAAA7G,EAAAA,CAAAA,MAAA,CAAKzI,GAAG,EAAeqC,WAAAA,CAAAA,EAAAA,GAAG,IAAKqS,cAAc,CAACrS,GAAG,CAAC,CAAC,CAAA;AAC7DiQ,QAAAA,MAAM,CAAChD,GAAG,CAAA7G,EAAAA,CAAAA,MAAA,CAAKzI,GAAG,EAAeqC,WAAAA,CAAAA,EAAAA,GAAG,IAAKyR,cAAc,CAACzR,GAAG,CAAC,CAAC,CAAA;AAC/D,OAAA;AAEA,MAAA,IAAImU,WAAW,EAAE;AACflE,QAAAA,MAAM,CAACpC,IAAI,CAAAzH,EAAAA,CAAAA,MAAA,CAAIzI,GAAG,EAAeqC,OAAAA,CAAAA,EAAAA,GAAG,IAAK4S,UAAU,CAAC5S,GAAG,CAAC,CAAC,CAAA;AACzDiQ,QAAAA,MAAM,CAACpC,IAAI,CAAAzH,EAAAA,CAAAA,MAAA,CAAIzI,GAAG,EAAeqC,SAAAA,CAAAA,EAAAA,GAAG,IAAKmT,YAAY,CAACnT,GAAG,CAAC,CAAC,CAAA;AAC7D,OAAA;AACA,MAAA,IAAIkU,WAAW,EAAE;AACfjE,QAAAA,MAAM,CAACpC,IAAI,CAAAzH,EAAAA,CAAAA,MAAA,CAAIzI,GAAG,EAAeqC,SAAAA,CAAAA,EAAAA,GAAG,IAAK0T,YAAY,CAAC1T,GAAG,CAAC,CAAC,CAAA;AAC7D,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAC,CAAC,CAAA;AAEJ;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMoU,gBAAgB,GAAInV,MAAM,IAAK;EAGnC,IAAMoV,SAAS,GAAE,CAAApV,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAE2B,OAAO,KAAI,EAAE,CAAA;EAEtC,IAAI,CAAEyT,SAAS,EAAE;AACf,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AAGA,EAAA,IAAI,CAAE5F,KAAK,CAACC,OAAO,CAAC2F,SAAS,CAAC,EAAE;AAC9B,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;EAEA,IAAI1F,MAAM,GAAE,EAAE,CAAA;AAEd0F,EAAAA,SAAS,CAACzF,GAAG,CAAE0F,QAAQ,IAAK;IAAA,IAAAC,YAAA,EAAAC,aAAA,CAAA;IAE1B,IAAM5U,MAAM,GAAE0U,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAE1U,MAAM,CAAA;IAE9B,IAAI,CAAEA,MAAM,EAAE;AACZ,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAAE6O,KAAK,CAACC,OAAO,CAAC9O,MAAM,CAAC,EAAE;AAC3B,MAAA,OAAA;AACF,KAAA;IAEA,IAAMiP,cAAc,GAAG,CAAA5P,MAAM,KAAA,IAAA,IAANA,MAAM,KAAAsV,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,YAAA,GAANtV,MAAM,CAAEyB,IAAI,cAAA6T,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZA,YAAA,CAAc1U,SAAS,MAAIZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEY,SAAS,CAAA,CAAA;AAEnE,IAAA,IAAMiP,aAAa,GAAAxH,cAAA,CAAAA,cAAA,CAAAA,cAAA,CACdwG,EAAAA,EAAAA,iBAAiB,CACjB,EAAA,CAAAwG,QAAQ,KAAA,IAAA,IAARA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAEvF,QAAQ,KAAI,EAAE,CAAA,EACxB,CAAA9P,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAE8P,QAAQ,KAAI,EAAE,CAC1B,CAAA;IACD,IAAMC,cAAc,GAAE,CAAA/P,MAAM,KAAA,IAAA,IAANA,MAAM,KAAAuV,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,aAAA,GAANvV,MAAM,CAAEyB,IAAI,cAAA8T,aAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZA,aAAA,CAAczU,SAAS,MAAId,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAEc,SAAS,CAAA,CAAA;IAElE,IAAIkP,aAAa,GAAE,EAAE,CAAA;AAErB,IAAA,KAAK,IAAM9B,KAAK,IAAIvN,MAAM,EAAE;AAC1B,MAAA,IAAI,CAAEuN,KAAK,CAACxP,GAAG,EAAE;AACf,QAAA,SAAA;AACF,OAAA;AAEA,MAAA,IAAI,CAAEwP,KAAK,CAACjJ,QAAQ,EAAE;AACpB,QAAA,SAAA;AACF,OAAA;AAEA,MAAA,IAAMiL,YAAY,GAAE;QAClBxR,GAAG,EAAEwP,KAAK,CAACxP,GAAG;QACd6L,MAAM,EAAE,CAAA2D,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAE3D,MAAM,KAAI,KAAK;QAC9BtF,QAAQ,EAAEiJ,KAAK,CAACjJ,QAAQ;QAExBrE,SAAS,EAAE,CAAAsN,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAEtN,SAAS,KAAIgP,cAAc;AAC7CE,QAAAA,QAAQ,EAAAzH,cAAA,CAAAA,cAAA,CACHwH,EAAAA,EAAAA,aAAa,GACb,CAAA3B,KAAK,KAALA,IAAAA,IAAAA,KAAK,uBAALA,KAAK,CAAE4B,QAAQ,KAAK,EAAE,CAC1B;QACDhP,SAAS,EAAE,CAAAoN,KAAK,KAAA,IAAA,IAALA,KAAK,KAALA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,KAAK,CAAEpN,SAAS,KAAKiP,cAAAA;OACjC,CAAA;AAEDC,MAAAA,aAAa,CAACzI,IAAI,CAAC2I,YAAY,CAAC,CAAA;AAClC,KAAA;IAEAR,MAAM,CAACnI,IAAI,CAAC;MACV7F,MAAM,EAAE,CAAA2T,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,uBAARA,QAAQ,CAAE3T,MAAM,KAAI,EAAE;AAC9Bf,MAAAA,MAAM,EAAEqP,aAAAA;AACV,KAAC,CAAC,CAAA;AACJ,GAAC,CAAC,CAAA;AAEF,EAAA,OAAON,MAAM,CAAA;AACf,CAAC;;AChGD,SAAS8F,mBAAmBA,CAACxE,MAAM,EAAEyE,cAAc,EAAE9S,MAAM,EAAE;AAE3D8S,EAAAA,cAAc,CAAC9F,GAAG,CAAE+F,aAAa,IAAK;AAEpC,IAAA,IAAMhU,MAAM,GAAEgU,aAAa,CAAChU,MAAM,CAAA;AAElCgU,IAAAA,aAAa,CAAC/U,MAAM,CAACgP,GAAG,CAACzB,KAAK,IAAI;AAAA,MAAA,IAAAyH,eAAA,CAAA;MAEhC,IAAIjX,GAAG,GAAI,CAACgD,MAAM,OAAAyF,MAAA,CACV+G,KAAK,CAACxP,GAAG,QAAAyI,MAAA,CACTzF,MAAM,EAAAyF,GAAAA,CAAAA,CAAAA,MAAA,CAAI+G,KAAK,CAACxP,GAAG,CAAE,CAAA;MAC7B,OAAOA,GAAG,CAAC4L,OAAO,CAAC,IAAI,CAAC,IAAE,CAAC,EAAE;QAC3B5L,GAAG,GAAEA,GAAG,CAACqW,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAChC,OAAA;MAEApS,MAAM,CAACgB,IAAI,CAAA,UAAA,CAAAwD,MAAA,CAAY,EAAAwO,eAAA,GAAAzH,KAAK,CAACjJ,QAAQ,MAAA,IAAA,IAAA0Q,eAAA,KAAdA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB3W,IAAI,KAAI,UAAU,UAAAmI,MAAA,CAAOzI,GAAG,CAAE,CAAC,CAAA;AAEtE,MAAA,IAAMkX,eAAe,gBAAA,YAAA;AAAA,QAAA,IAAArE,IAAA,GAAA5I,iBAAA,CAAG,WAAO5H,GAAG,EAAK;UACrC,IAAIQ,GAAG,GAAEV,SAAS,CAAA;UAClB,IAAIqN,KAAK,CAACpN,SAAS,EAAE;AACnBS,YAAAA,GAAG,GAAE2M,KAAK,CAACpN,SAAS,CAACC,GAAG,CAAC,CAAA;AAC3B,WAAA;AAEA,UAAA,IAAM+O,QAAQ,GAAG5B,KAAK,CAAC4B,QAAQ,CAAA;AAC/B,UAAA,IAAM4B,SAAS,GAAG5B,QAAQ,CAAChB,OAAO,KAAG,IAAI,IAAMgB,QAAQ,CAAChB,OAAO,KAAG,WAAW,IAAIZ,KAAK,CAAC3D,MAAM,KAAG,MAAO,CAAA;AAEvG,UAAA,IAAImH,SAAS,EAAE;YAEb,IAAInQ,GAAG,KAAGV,SAAS,EAAE;AAEnB,cAAA,IAAIiP,QAAQ,CAACf,MAAM,IAAE,OAAO,EAAE;gBAC5BpM,MAAM,CAACkB,KAAK,CAAAsD,sCAAAA,CAAAA,MAAA,CAAwC2I,QAAQ,CAACb,UAAU,CAAE,CAAC,CAAA;AAC1E,gBAAA,OAAOlO,GAAG,CAAC4Q,KAAK,CACd7B,QAAQ,CAACb,UAAU,EACnB,IAAI,EACJ,EACF,CAAC,CAAA;AACH,eAAC,MAAM;gBACLtM,MAAM,CAACkB,KAAK,CAAAsD,sCAAAA,CAAAA,MAAA,CAAwC2I,QAAQ,CAACd,YAAY,CAAE,CAAC,CAAA;AAC5E,gBAAA,OAAOjO,GAAG,CAAC6Q,QAAQ,CAAC9B,QAAQ,CAACd,YAAY,CAAC,CAAA;AAC5C,eAAA;AACF,aAAA;AACF,WAAA;AAEA,UAAA,IAAMN,MAAM,GAAQR,MAAAA,KAAK,CAACjJ,QAAQ,CAAClE,GAAG,CAAC,CAAA;AACvC,UAAA,OAAO2N,MAAM,CAAA;SACd,CAAA,CAAA;QAAA,OA7BKkH,SAAAA,eAAeA,CAAArN,EAAA,EAAA;AAAA,UAAA,OAAAgJ,IAAA,CAAA7I,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OA6BpB,EAAA,CAAA;AAED,MAAA,IAAI8K,KAAK,CAAC3D,MAAM,IAAI,MAAM,EAAE;AAC1ByG,QAAAA,MAAM,CAACpC,IAAI,CAAClQ,GAAG,EAAGqC,GAAG,IAAK6U,eAAe,CAAC7U,GAAG,EAAEmN,KAAK,CAAC,CAAC,CAAA;AACxD,OAAC,MAAM;AACL8C,QAAAA,MAAM,CAAChD,GAAG,CAACtP,GAAG,EAAGqC,GAAG,IAAK6U,eAAe,CAAC7U,GAAG,EAAEmN,KAAK,CAAC,CAAC,CAAA;AACvD,OAAA;AACF,KAAC,CAAC,CAAA;AAEJ,GAAC,CAAC,CAAA;AACJ;;ACjDA,SAAS2H,WAAWA,CAAC/N,GAAG,EAAEiJ,UAAU,EAAEpQ,MAAM,EAAE;AAE5C;AACA,EAAA,IAAMqQ,MAAM,GAAG,IAAIjD,QAAM,EAAE,CAAA;EAE3B,IAAI;AACF;AACA,IAAA,IAAMkD,WAAW,GAAE3B,aAAa,CAAC3O,MAAM,CAAC,CAAA;AACxC,IAAA,IAAM8U,cAAc,GAAEN,gBAAgB,CAACxU,MAAM,CAAC,CAAA;;AAE9C;AACA,IAAA,IAAMmV,aAAa,GAAE7E,WAAW,CAAC5N,MAAM,GAAG,CAAC,CAAA;AAC3C,IAAA,IAAM0S,gBAAgB,GAAEN,cAAc,CAACpS,MAAM,GAAG,CAAC,CAAA;AAEjD,IAAA,IAAM,CAACyS,aAAa,IAAM,CAACC,gBAAiB,EAAE;AAC5C,MAAA,MAAM,uEAAuE,CAAA;AAC/E,KAAA;;AAEA;AACA,IAAA,IAAID,aAAa,EAAE;MACjBhF,gBAAgB,CAACC,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAEF,UAAU,CAACtQ,GAAG,CAAC,CAAA;AACnE,KAAA;;AAEA;AACA,IAAA,IAAIsV,gBAAgB,EAAE;MACpBP,mBAAmB,CAACxE,MAAM,EAAEyE,cAAc,EAAE1E,UAAU,CAACtQ,GAAG,CAAC,CAAA;AAC7D,KAAA;GACD,CAAC,OAAMU,CAAC,EAAE;AACTa,IAAAA,OAAO,CAAC6B,KAAK,CAAC1C,CAAC,CAAC,CAAA;AAChBa,IAAAA,OAAO,CAAC6B,KAAK,CAAC,6EAA6E,CAAC,CAAA;AAC5F7B,IAAAA,OAAO,CAAC6B,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAC7C7B,OAAO,CAAC6B,KAAK,CAACkN,UAAU,KAAA,IAAA,IAAVA,UAAU,KAAVA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,UAAU,CAAE/Q,MAAM,CAAC,CAAA;AACjCgC,IAAAA,OAAO,CAAC6B,KAAK,CAAC,wBAAwB,CAAC,CAAA;AACvC7B,IAAAA,OAAO,CAAC6B,KAAK,CAAClD,MAAM,CAAC,CAAA;AAEvB,GAAA;EAEAmH,GAAG,CAACgB,GAAG,CAACkI,MAAM,CAACrQ,MAAM,EAAE,CAAC,CAAA;AAC1B;;AC5CA,IAAMqV,sBAAsB,GAAGA,CAAElO,GAAG,EAAE/E,WAAW,KAAO;EACtD,IAAIA,WAAW,IAAElC,SAAS,IAAIkC,WAAW,CAACM,MAAM,IAAE,CAAC,EAAE;AACnD,IAAA,OAAA;AACF,GAAA;AAEAN,EAAAA,WAAW,CAAC4M,GAAG,CAACsG,IAAI,IAAI;AAAA,IAAA,SAEPC,gBAAgBA,CAAA3N,EAAA,EAAAC,GAAA,EAAA;AAAA,MAAA,OAAA2N,iBAAA,CAAAzN,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAAA,SAAA+S,iBAAA,GAAA;AAAAA,MAAAA,iBAAA,GAAAxN,iBAAA,CAA/B,WAAgC5H,GAAG,EAAE6H,IAAI,EAAE;QACzC,MAAMqN,IAAI,CAAClV,GAAG,CAAC,CAAA;QACf,MAAM6H,IAAI,EAAE,CAAA;OACb,CAAA,CAAA;AAAA,MAAA,OAAAuN,iBAAA,CAAAzN,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,KAAA;AAED0E,IAAAA,GAAG,CAACgB,GAAG,CAACoN,gBAAgB,CAAC,CAAA;AAC3B,GAAC,CAAC,CAAA;AACJ,CAAC;;ACZD,IAAME,WAAW,GAAGA,CAACnX,IAAI,EAAEoX,KAAK,EAAEpR,QAAQ,KAAK;EAC7C,IAAI;AACF,IAAA,IAAMqR,GAAG,GAAErX,IAAI,CAACoX,KAAK,CAAC,CAAA;AACtB,IAAA,IAAKC,GAAG,IAAEzV,SAAS,IAAMyV,GAAG,IAAE,KAAM,EAAE;MACpC,OAAOrR,QAAQ,CAACqR,GAAG,CAAC,CAAA;AACtB,KAAA;AACF,GAAC,CAAC,OAAM9J,CAAC,EAAE,EAAC;AACd,CAAC,CAAA;AAED,IAAM+J,aAAa,GAAI5W,OAAO,IAAK;AACjC,EAAA,IAAI,OAAOA,OAAO,IAAI,QAAQ,EAAE;AAC9B,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;AACA,EAAA,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAGD,IAAM6W,cAAc,GAAI7W,OAAO,IAAK;AAAA,EAAA,IAAA8W,QAAA,EAAAC,SAAA,EAAAC,SAAA,EAAAC,SAAA,CAAA;EAClC,IAAIjX,OAAO,IAAEkB,SAAS,EAAE;IACtBlB,OAAO,GAAE,EAAE,CAAA;AACb,GAAA;AAEA,EAAA,IAAMkX,KAAK,GAAE,CAAAJ,CAAAA,QAAA,GAAA9W,OAAO,MAAA8W,IAAAA,IAAAA,QAAA,KAAPA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAA,CAAS7X,IAAI,KAAI,GAAG,CAAA;AAEjC,EAAA,IAAMkY,MAAM,GAAG,CAAAJ,CAAAA,SAAA,GAAA/W,OAAO,MAAA+W,IAAAA,IAAAA,SAAA,KAAPA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAA,CAASI,MAAM,KAAI,yBAAyB,CAAA;AAC3D,EAAA,IAAMC,YAAY,GAAG,CAAA,CAAAJ,SAAA,GAAAhX,OAAO,cAAAgX,SAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,SAAA,CAASI,YAAY,KAAElW,SAAS,GAAGlB,OAAO,CAACoX,YAAY,GAAG,IAAI,CAAA;AACnF,EAAA,IAAMC,IAAI,GAAG,CAAA,CAAAJ,SAAA,GAAAjX,OAAO,cAAAiX,SAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,SAAA,CAASI,IAAI,KAAEnW,SAAS,GAAGlB,OAAO,CAACqX,IAAI,GAAG,IAAI,CAAA;AAG3D,EAAA,IAAMC,QAAQ,GAAE;IACdH,MAAM;IAAEC,YAAY;AAAEC,IAAAA,IAAAA;GACvB,CAAA;AAED,EAAA,OAAO,CAACH,KAAK,EAAEI,QAAQ,CAAC,CAAA;AAC1B,CAAC,CAAA;AAKD,IAAMC,uBAAuB,GAAGA,CAAEpP,GAAG,EAAE7I,IAAI,KAAK;EAC9C,IAAM0D,MAAM,GAAEmF,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAAA;AAEtCyT,EAAAA,WAAW,CAACnX,IAAI,EAAE,MAAM,EAAGU,OAAO,IAAK;IACrC,IAAIA,OAAO,IAAE,QAAQ,EAAE;MACrBgD,MAAM,CAACC,KAAK,CAAA,6BAA8B,CAAC,CAAA;AAC3CkF,MAAAA,GAAG,CAACgB,GAAG,eAAA,YAAA;QAAA,IAAAyI,IAAA,GAAA5I,iBAAA,CAAC,WAAO5H,GAAG,EAAE6H,IAAI,EAAK;AAC3B7H,UAAAA,GAAG,CAACoW,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAA;AAC3CpW,UAAAA,GAAG,CAACoW,GAAG,CAAC,+BAA+B,EAAE,uBAAuB,CAAC,CAAA;UACjE,MAAMvO,IAAI,EAAE,CAAA;SACb,CAAA,CAAA;QAAA,OAAAL,UAAAA,EAAA,EAAAC,GAAA,EAAA;AAAA,UAAA,OAAA+I,IAAA,CAAA7I,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,SAAA,CAAA;OAAC,EAAA,CAAA,CAAA;AACJ,KAAC,MAAM;AACL,MAAA,IAAMgU,QAAQ,GAAEb,aAAa,CAAC5W,OAAO,CAAC,CAAA;AACtCgD,MAAAA,MAAM,CAACC,KAAK,CAAAuE,2BAAAA,CAAAA,MAAA,CAA6BwD,IAAI,CAACC,SAAS,CAACwM,QAAQ,CAAC,CAAE,CAAC,CAAA;AACpEtP,MAAAA,GAAG,CAACgB,GAAG,CAACuO,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAA;AAC7B,KAAA;AAGF,GAAC,CAAC,CAAA;AAEFhB,EAAAA,WAAW,CAACnX,IAAI,EAAE,OAAO,EAAGU,OAAO,IAAK;IACtC,IAAM,CAACkX,KAAK,EAAEI,QAAQ,CAAC,GAAET,cAAc,CAAC7W,OAAO,CAAC,CAAA;AAChDgD,IAAAA,MAAM,CAACC,KAAK,CAAAuE,oBAAAA,CAAAA,MAAA,CAAsB0P,KAAK,EAAA1P,MAAAA,CAAAA,CAAAA,MAAA,CAAO8P,QAAQ,CAACH,MAAM,MAAG,CAAC,CAAA;IAEjEhP,GAAG,CAACgB,GAAG,CACLwO,SAAS,CAACT,KAAK,EAAEI,QAAQ,CAC3B,CAAC,CAAA;AACH,GAAC,CAAC,CAAA;AAEJ,CAAC;;ACnED,SAASM,sBAAsBA,CAAC5U,MAAM,EAAE;EACtC,SAAS6U,IAAIA,CAACC,KAAK,EAAE;AACnB,IAAA,IAAI,CAACA,KAAK,EAAE,OAAO,CAAC,CAAA;IACpB,OAAOA,KAAK,GAAC,OAAO,CAAA;AACtB,GAAA;EAGA,SAASC,IAAIA,CAACC,MAAM,EAAE;AACpB,IAAA,IAAI,CAACA,MAAM,EAAE,OAAO,CAAC,CAAA;IACrB,OAAOA,MAAM,GAAC,OAAO,CAAA;AACvB,GAAA;EAEA,SAASC,iBAAiBA,GAAG;AAG3B,IAAA,IAAMC,IAAI,GAAEC,IAAI,CAACC,KAAK,CAACP,IAAI,CAACQ,EAAE,CAACC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAMC,KAAK,GAAEJ,IAAI,CAACC,KAAK,CAACP,IAAI,CAACQ,EAAE,CAACG,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAC/C,IAAA,IAAMC,IAAI,GAAEN,IAAI,CAACC,KAAK,CAAGF,IAAI,GAAC,GAAG,GAAEK,KAAK,EAAE,CAAC,CAAC,CAAA;IAE5C,IAAIE,IAAI,GAAC,EAAE,EAAE;AACXzV,MAAAA,MAAM,CAACkB,KAAK,CAAAsD,WAAAA,CAAAA,MAAA,CAAaZ,IAAI,CAAC,UAAU,CAAC,EAAA,QAAA,CAAA,CAAAY,MAAA,CAASX,MAAM,CAACqR,IAAI,CAAC,EAAA,cAAA,CAAA,CAAA1Q,MAAA,CAAe+F,KAAK,CAACgL,KAAK,CAAC,EAAA,OAAA,CAAA,CAAA/Q,MAAA,CAAQX,MAAM,CAAC4R,IAAI,CAAC,QAAK,CAAC,CAAA;AACrH,KAAC,MAAM;AACLzV,MAAAA,MAAM,CAACgB,IAAI,CAAAwD,WAAAA,CAAAA,MAAA,CAAaZ,IAAI,CAAC,UAAU,CAAC,EAAA,QAAA,CAAA,CAAAY,MAAA,CAASX,MAAM,CAACqR,IAAI,CAAC,EAAA,cAAA,CAAA,CAAA1Q,MAAA,CAAe+F,KAAK,CAACgL,KAAK,CAAC,EAAA,OAAA,CAAA,CAAA/Q,MAAA,CAAQX,MAAM,CAAC4R,IAAI,CAAC,QAAK,CAAC,CAAA;AACpH,KAAA;IAGAC,SAAS,CAACC,KAAK,CAAC,GAAG,EAAE,UAAU1U,GAAG,EAAE8K,MAAM,EAC1C;AACE,MAAA,IAAMmJ,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACL,IAAI,CAAChJ,MAAM,CAACmJ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAC7C,MAAA,IAAMK,KAAK,GAAEJ,IAAI,CAACC,KAAK,CAACL,IAAI,CAAChJ,MAAM,CAACwJ,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AAC9C,MAAA,IAAMK,IAAI,GAAGT,IAAI,CAACC,KAAK,CAACL,IAAI,CAAChJ,MAAM,CAAC6J,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;MAE7C,IAAIA,IAAI,GAAC,CAAC,EAAE;AACV5V,QAAAA,MAAM,CAACkB,KAAK,CAAAsD,WAAAA,CAAAA,MAAA,CAAaZ,IAAI,CAAC,UAAU,CAAC,EAAA,SAAA,CAAA,CAAAY,MAAA,CAAUX,MAAM,CAACqR,IAAI,CAAC,EAAA,cAAA,CAAA,CAAA1Q,MAAA,CAAe+F,KAAK,CAACgL,KAAK,CAAC,EAAA,OAAA,CAAA,CAAA/Q,MAAA,CAAQX,MAAM,CAAC+R,IAAI,CAAC,cAAW,CAAC,CAAA;AAC5H,OAAC,MAAM;AACL5V,QAAAA,MAAM,CAACgB,IAAI,CAAAwD,WAAAA,CAAAA,MAAA,CAAaZ,IAAI,CAAC,UAAU,CAAC,EAAA,SAAA,CAAA,CAAAY,MAAA,CAAUX,MAAM,CAACqR,IAAI,CAAC,EAAA,cAAA,CAAA,CAAA1Q,MAAA,CAAe+F,KAAK,CAACgL,KAAK,CAAC,EAAA,OAAA,CAAA,CAAA/Q,MAAA,CAAQX,MAAM,CAAC+R,IAAI,CAAC,cAAW,CAAC,CAAA;AAC3H,OAAA;AACF,KAAC,CAAC,CAAA;AACJ,GAAA;AAEA,EAAA,OAAOX,iBAAiB,CAAA;AAG1B;;AC5CA,SAASY,SAASA,CAAC7V,MAAM,EAAE;AAEzB,EAAA,IAAMiV,iBAAiB,GAAEL,sBAAsB,CAAC5U,MAAM,CAAC,CAAA;AAEvD,EAAgB,IAAI8V,OAAO,CACzB,YAAY,EACZb,iBAAiB,EACjB,IAAI,EACJ,IAAI,EACJ,eACF,EAAC;AACH;;ACMmE,SAGpD/O,KAAKA,CAAAN,EAAA,EAAAC,GAAA,EAAAsJ,GAAA,EAAA;AAAA,EAAA,OAAA4G,MAAA,CAAAhQ,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,CAAA;AAAA,SAAAsV,MAAA,GAAA;EAAAA,MAAA,GAAA/P,iBAAA,CAApB,WAAqBgQ,OAAO,EAAEC,QAAM,EAAE3T,QAAQ,EAAE;AAAA,IAAA,IAAA4T,YAAA,EAAAC,YAAA,EAAAC,aAAA,EAAAC,aAAA,CAAA;AAE9C,IAAA,IAAMlR,GAAG,GAAG,IAAImR,GAAG,EAAE,CAAA;;AAErB;AACA,IAAA,IAAMjZ,MAAM,GAAGgD,WAAW,CAAC2V,OAAO,CAAC,CAAA;;AAEnC;AACA9Q,IAAAA,uBAAuB,CAACC,GAAG,EAAE9H,MAAM,CAAC,CAAA;;AAEpC;IACAgJ,oBAAoB,CAAClB,GAAG,CAAC,CAAA;;AAEzB;IACAkC,uBAAuB,CAAClC,GAAG,CAAC,CAAA;;AAE5B;AACAqD,IAAAA,sBAAsB,CAACrD,GAAG,EAAA+Q,CAAAA,YAAA,GAAE7Y,MAAM,CAACf,IAAI,MAAA,IAAA,IAAA4Z,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAXA,YAAA,CAAazZ,MAAM,CAAC,CAAA;;AAEhD;IACAyM,uBAAuB,CAAC/D,GAAG,CAAC,CAAA;;AAE5B;IACAsF,uBAAuB,CAACtF,GAAG,EAAE9H,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAM,CAAER,OAAO,CAAC,CAAA;;AAE7C;IACAmO,iBAAiB,CAAC7F,GAAG,CAAC,CAAA;;AAEtB;IACA,IAAMoR,WAAW,GAAElZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAM,CAAE4B,OAAO,CAAA;AAClC,IAAA,IAAIsX,WAAW,EAAE;AACfjL,MAAAA,yBAAyB,CAACnG,GAAG,EAAEoR,WAAW,CAAC,CAAA;AAC7C,KAAA;;AAEA;AACA,IAAA,IAAIlZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,IAAA,CAAA8Y,YAAA,GAAN9Y,MAAM,CAAE8C,IAAI,cAAAgW,YAAA,KAAA,KAAA,CAAA,IAAZA,YAAA,CAAcK,KAAK,EAAE;MACvB,IAAM;AAACC,QAAAA,0BAAAA;AAA0B,OAAC,GAAS,MAAA,qDAAqC,CAAA;AAChFA,MAAAA,0BAA0B,CAACtR,GAAG,EAAE9H,MAAM,CAAC8C,IAAI,CAACqW,KAAK,EAAEnZ,MAAM,aAANA,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,MAAM,CAAER,OAAO,CAAC,CAAA;AACrE,KAAA;AAEA,IAAA,IAAIQ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,IAAA,CAAA+Y,aAAA,GAAN/Y,MAAM,CAAE8C,IAAI,cAAAiW,aAAA,KAAA,KAAA,CAAA,IAAZA,aAAA,CAAcM,KAAK,EAAE;MACvB,IAAM;AAACC,QAAAA,0BAAAA;AAA0B,OAAC,GAAS,MAAA,qDAAqC,CAAA;MAChFA,0BAA0B,CAACxR,GAAG,EAAE9H,MAAM,CAAC8C,IAAI,CAACuW,KAAK,CAAC,CAAA;AACpD,KAAA;AAEA,IAAA,IAAIrZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,KAAA,CAAA,IAAA,CAAAgZ,aAAA,GAANhZ,MAAM,CAAE8C,IAAI,cAAAkW,aAAA,KAAA,KAAA,CAAA,IAAZA,aAAA,CAAcO,QAAQ,EAAE;MAC1B,IAAM;AAACC,QAAAA,6BAAAA;AAA6B,OAAC,GAAS,MAAA,wDAAwC,CAAA;MACtFA,6BAA6B,CAAC1R,GAAG,EAAE9H,MAAM,CAAC8C,IAAI,CAACyW,QAAQ,CAAC,CAAA;AAC1D,KAAA;;AAEA;AACA;AACA;;AAEA;IACA,IAAME,iBAAiB,GAAEzZ,MAAM,KAAA,IAAA,IAANA,MAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAM,CAAE+C,WAAW,CAAA;AAC5C,IAAA,IAAI0W,iBAAiB,EAAE;AACrBzD,MAAAA,sBAAsB,CAAClO,GAAG,EAAE2R,iBAAiB,CAAC,CAAA;AAChD,KAAA;;AAEA;AACAvC,IAAAA,uBAAuB,CAACpP,GAAG,EAAE9H,MAAM,CAACf,IAAI,CAAC,CAAA;;AAEzC;AACA,IAAA,IAAIe,MAAM,KAANA,IAAAA,IAAAA,MAAM,eAANA,MAAM,CAAEW,MAAM,EAAE;AAClB,MAAA,IAAMuH,IAAI,GAAEJ,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAC9I,EAAE,CAACiI,aAAa,EAAE,CAAA;MAChD6N,WAAW,CAAC/N,GAAG,EAAEI,IAAI,EAAElI,MAAM,CAACW,MAAM,CAAC,CAAA;AACvC,KAAA;;AAEA;IACA,IAAI,CAAAiY,QAAM,KAAA,IAAA,IAANA,QAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAANA,QAAM,CAAEc,IAAI,KAAE7Y,SAAS,EAAE;MAC3B,IAAM;AAAE8Y,QAAAA,sBAAAA;AAAsB,OAAC,GAAS,MAAA,wDAA6C,CAAA;AACrFA,MAAAA,sBAAsB,CAAC7R,GAAG,EAAE8Q,QAAM,CAACc,IAAI,CAAC,CAAA;AAC1C,KAAC,MAAM,IAAI,CAAAd,QAAM,KAANA,IAAAA,IAAAA,QAAM,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAM,CAAEgB,UAAU,KAAI/Y,SAAS,EAAE;AAC1CiH,MAAAA,GAAG,CAACgB,GAAG,CAAC8P,QAAM,CAACgB,UAAU,CAAC,CAAA;AAC5B,KAAC,MAAM;MACL,IAAM;AAAEC,QAAAA,0BAAAA;AAA0B,OAAC,GAAS,MAAA,sDAA4C,CAAA;AACxFA,MAAAA,0BAA0B,CAAC/R,GAAG,EAAE8Q,QAAM,CAAC,CAAA;;AAEvC;AACA;AACF,KAAA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;IACA,IAAMkB,WAAW,GAAGA,CAACC,MAAM,EAAE7a,IAAI,EAAEC,QAAQ,KAAK;AAC9C,MAAA,OAAO,IAAI6a,OAAO,CAAC,CAACjb,OAAO,EAAEkb,MAAM,KAAK;QACtCF,MAAM,CAACG,MAAM,CAAChb,IAAI,EAAEC,QAAQ,EAAG0E,KAAK,IAAK;AACvC,UAAA,IAAIA,KAAK,EAAE;YACToW,MAAM,CAACpW,KAAK,CAAC,CAAA;AACf,WAAC,MAAM;AACL9E,YAAAA,OAAO,EAAE,CAAA;AACX,WAAA;AACF,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;KACH,CAAA;IACD,IAAMgb,MAAM,GAAG9a,IAAI,CAACkb,YAAY,CAACrS,GAAG,CAAC7C,QAAQ,EAAE,CAAC,CAAA;AAChD,IAAA,MAAM6U,WAAW,CAACC,MAAM,EAAE/Z,MAAM,CAACf,IAAI,CAACC,IAAI,EAAEc,MAAM,CAACf,IAAI,CAACE,QAAQ,CAAC,CAAA;IAEjE2I,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAACgB,IAAI,CAAAwD,wBAAAA,CAAAA,MAAA,CAA0BnH,MAAM,CAACf,IAAI,CAACE,QAAQ,EAAA,GAAA,CAAA,CAAAgI,MAAA,CAAInH,MAAM,CAACf,IAAI,CAACC,IAAI,CAAE,CAAC,CAAA;;AAElG;IACA4I,GAAG,CAACiS,MAAM,GAAGA,MAAM,CAAA;IAEnB,IAAMK,cAAc,GAAGC,oBAAoB,CAAC;AAC1CN,MAAAA,MAAAA;AACF,KAAC,CAAC,CAAA;AAEFjS,IAAAA,GAAG,CAACwS,WAAW,gBAAA3R,iBAAA,CAAG,aAAY;AAC5B,MAAA,MAAMyR,cAAc,CAACG,SAAS,EAAE,CAAA;MAChCzS,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAACgB,IAAI,CAAAwD,iCAAAA,CAAAA,MAAA,CAAmCnH,MAAM,CAACf,IAAI,CAACE,QAAQ,EAAA,GAAA,CAAA,CAAAgI,MAAA,CAAInH,MAAM,CAACf,IAAI,CAACC,IAAI,CAAE,CAAC,CAAA;KAC5G,CAAA,CAAA;;AAED;IACA,IAAI+F,QAAQ,IAAEpE,SAAS,EAAE;MACvBoE,QAAQ,CAAC6C,GAAG,CAAC,CAAA;AACf,KAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;IACA0Q,SAAS,CAAC1Q,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAAC,CAAA;AAEnC,IAAA,OAAOmF,GAAG,CAAA;GACX,CAAA,CAAA;AAAA,EAAA,OAAA4Q,MAAA,CAAAhQ,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA;;AChKD,IAAMsW,IAAI,GA0BP,04BAAA;;ACvBH,SAASc,0BAA0BA,CAACC,MAAM,EAAEC,QAAQ,EAAE/a,OAAO,EAAE;AAE7D;EACA,IAAI+Z,MAAI,GAAGiB,IAAM,CAAA;EACjB,IAAI;IACF,IAAI,CAAAhb,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,OAAO,CAAE+Z,IAAI,KAAI7Y,SAAS,EAAE;MAC9B6Y,MAAI,GAAE/Z,OAAO,CAAC+Z,IAAI,CAAA;AACpB,KAAA;AACF,GAAC,CAAC,OAAMlN,CAAC,EAAE,EAAC;AAEZ,EAAA,IAAMoO,UAAU,gBAAA,YAAA;AAAA,IAAA,IAAArJ,IAAA,GAAA5I,iBAAA,CAAG,WAAO5H,GAAG,EAAK;MAChC,IAAIgK,GAAG,GAAE,EAAE,CAAA;MACX,IAAI;AACFA,QAAAA,GAAG,GAAQ0P,MAAAA,MAAM,CAAC1Z,GAAG,CAAC,CAAA;OACvB,CAAC,OAAMI,CAAC,EAAE;QACTJ,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACkB,KAAK,CAAC,mDAAmD,CAAC,CAAA;QAC3E9C,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACkB,KAAK,CAAC1C,CAAC,CAAC,CAAA;AAC3B,OAAA;AACA,MAAA,OAAO4J,GAAG,CAAA;KACX,CAAA,CAAA;IAAA,OATK6P,SAAAA,UAAUA,CAAArS,EAAA,EAAA;AAAA,MAAA,OAAAgJ,IAAA,CAAA7I,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,KAAA,CAAA;GASf,EAAA,CAAA;EAAA,SAEcyX,qBAAqBA,CAAArS,GAAA,EAAA;AAAA,IAAA,OAAAsS,sBAAA,CAAApS,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAA0X,sBAAA,GAAA;AAAAA,IAAAA,sBAAA,GAAAnS,iBAAA,CAApC,WAAqC5H,GAAG,EAAE;AACxC;AACJ;AACA;AACI,MAAA,IAAMga,QAAQ,GAAA,MAASH,UAAU,CAAC7Z,GAAG,CAAC,CAAA;MAEtC,IAAIia,QAAQ,GAAG,KAAK,CAAA;MACpB,IAAI;AACFA,QAAAA,QAAQ,GAAG,CAAAja,GAAG,KAAA,IAAA,IAAHA,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAHA,GAAG,CAAEka,eAAe,EAAE,MAAK,IAAI,CAAA;AAC5C,OAAC,CAAC,OAAM9Z,CAAC,EAAE,EAAC;MACZ,IAAI;QACF,IAAI,CAAE6Z,QAAQ,EAAE;AACdA,UAAAA,QAAQ,GAAIja,GAAG,CAACX,IAAI,CAACpB,IAAI,KAAG,OAAO,IAAM+B,GAAG,CAACX,IAAI,CAACkB,KAAK,IAAIT,SAAU,CAAA;AACvE,SAAA;AACF,OAAC,CAAC,OAAMM,CAAC,EAAE,EAAC;MAEZ,IAAIf,IAAI,GAAGS,SAAS,CAAA;MACpB,IAAI;AACF,QAAA,IAAIE,GAAG,CAACE,KAAK,CAACb,IAAI,IAAIS,SAAS,EAAE;AAC/BT,UAAAA,IAAI,GAAEW,GAAG,CAACE,KAAK,CAACb,IAAI,CAAA;AACtB,SAAA;AACF,OAAC,CAAC,OAAMoM,CAAC,EAAE,EAAC;MAEZ,IAAI;AACF,QAAA,IAAIzL,GAAG,CAACX,IAAI,IAAIS,SAAS,EAAE;UACzBT,IAAI,GAAEW,GAAG,CAACX,IAAI,CAAA;AAChB,SAAA;AACF,OAAC,CAAC,OAAMoM,CAAC,EAAE,EAAC;AAEZ,MAAA,IAAMzD,OAAO,GAAE;AACb3I,QAAAA,IAAI,EAAGA,IAAI;AACX8a,QAAAA,aAAa,EAAEF,QAAQ;AACvBD,QAAAA,QAAQ,EAAEA,QAAQ;AAClBI,QAAAA,KAAK,EAAEpa,GAAG,KAAA,IAAA,IAAHA,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAHA,GAAG,CAAEoa,KAAAA;OACb,CAAA;MAED,IAAIC,QAAQ,GAAC,EAAE,CAAA;MAEf,IAAI;QACFA,QAAQ,GAAEC,cAAc,CACtBX,QAAQ,CAAC3Z,GAAG,EAAEgI,OAAO,CACvB,CAAC,CAAA;OACF,CAAC,OAAMlF,KAAK,EAAE;QACb9C,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACkB,KAAK,CAAC,2CAA2C,CAAC,CAAA;QACnE9C,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACkB,KAAK,CAACA,KAAK,CAAC,CAAA;QAE7BuX,QAAQ,GAAA,sDAAA,CAAAjU,MAAA,CAEyBtD,KAAK,CAACyB,QAAQ,EAAE,EAEhD,8BAAA,CAAA,CAAA;AACH,OAAA;MAEA,IAAMgW,WAAW,GAAG5B,MAAI,CACrB3E,OAAO,CAAC,WAAW,EAAEpK,IAAI,CAACC,SAAS,CAAC7B,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CACtDgM,OAAO,CAAC,YAAY,EAAEqG,QAAQ,CAAC,CAAA;AAGlCra,MAAAA,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACC,KAAK,CAAAuE,qCAAAA,CAAAA,MAAA,CAAuC0D,MAAM,CAACC,UAAU,CAACsQ,QAAQ,EAAE,MAAM,CAAC,EAAA,yBAAA,CAAA,CAAAjU,MAAA,CAA0B0D,MAAM,CAACC,UAAU,CAACwQ,WAAW,EAAE,MAAM,CAAC,mBAAgB,CAAC,CAAA;MAEjLva,GAAG,CAAC2J,IAAI,GAAE4Q,WAAW,CAAA;KACtB,CAAA,CAAA;AAAA,IAAA,OAAAR,sBAAA,CAAApS,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED,EAAA,OAAOyX,qBAAqB,CAAA;AAC9B;;ACtFA,SAASU,0BAA0BA,CAAC/b,OAAO,EAAEmD,MAAM,EAAE;EACnD,IAAM6Y,IAAI,GAAE1D,IAAI,CAAC2D,MAAM,EAAE,CAACnW,QAAQ,EAAE,CAAA;EACpC,IAAI5F,MAAM,GAAGF,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAPA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAEE,MAAM,CAAA;EAC5B,IAAI,CAACA,MAAM,EAAE;AACXA,IAAAA,MAAM,GAAE,qBAAqB,CAAA;AAC7BiD,IAAAA,MAAM,CAACkB,KAAK,CAAC,mGAAmG,CAAC,CAAA;AACnH,GAAA;AAEA,EAAA,IAAM6X,OAAO,GAAG;AACdC,IAAAA,KAAK,EAAI,KAAK;AACdH,IAAAA,IAAI,EAAKA,IAAAA;GACV,CAAA;AACD,EAAA,OAAOI,GAAG,CAACC,MAAM,CAACH,OAAO,EAAEhc,MAAM,CAAC,CAAA;AACpC,CAAA;AAEA,SAASoc,sBAAsBA,CAACtc,OAAO,EAAE;AAAA,EAAA,IAAAuc,gBAAA,CAAA;AACvC,EAAA,IAAInc,MAAM,GAAGJ,OAAO,KAAPA,IAAAA,IAAAA,OAAO,wBAAAuc,gBAAA,GAAPvc,OAAO,CAAEG,OAAO,MAAAoc,IAAAA,IAAAA,gBAAA,KAAhBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAA,CAAkBnc,MAAM,CAAA;AACrC,EAAA,IAAIoc,KAAK,CAACpc,MAAM,CAAC,EAAE;AACjBA,IAAAA,MAAM,GAAE,KAAK,CAAA;AACf,GAAA;AACA,EAAA,IAAIqc,OAAO,GAAG,IAAIjV,IAAI,EAAE,CAAA;EACxBiV,OAAO,CAACC,UAAU,CAACD,OAAO,CAACE,UAAU,EAAE,GAAGvc,MAAM,CAAC,CAAA;EAEjD,OAAO;IACLqc,OAAO;AACPG,IAAAA,QAAQ,EAAE,KAAA;GACX,CAAA;AACH,CAAA;AAGA,IAAMhD,0BAA0B,GAAGA,CAAEtR,GAAG,EAAEnI,OAAO,EAAEH,OAAO,KAAM;EAC9D,IAAMmD,MAAM,GAAEmF,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAClG,MAAM,CAAA;EAEtC,IAAM0Z,iBAAiB,GAAGA,MAAM;IAC9B,IAAI;MACF,IAAI;AAACC,QAAAA,gBAAAA;AAAgB,OAAC,GAAG3c,OAAO,CAAA;MAChC,IAAI2c,gBAAgB,IAAEzb,SAAS,EAAE;AAC/B,QAAA,OAAOyb,gBAAgB,CAAC9c,OAAO,IAAI,EAAE,CAAC,CAAA;AACxC,OAAA;AACF,KAAC,CAAC,OAAMgN,CAAC,EAAE,EAAC;IAEZ,OAAO+O,0BAA0B,CAAC/b,OAAO,IAAI,EAAE,EAAEmD,MAAM,CAAC,CAAA;GACzD,CAAA;AAAA,EAAA,SAEc4Z,qBAAqBA,CAAAhU,EAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAgU,sBAAA,CAAA9T,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAAoZ,sBAAA,GAAA;AAAAA,IAAAA,sBAAA,GAAA7T,iBAAA,CAApC,WAAqC5H,GAAG,EAAE6H,IAAI,EAAE;AAE9C;AACA,MAAA,IAAItH,KAAK,GAAEP,GAAG,CAAC0b,OAAO,CAACzO,GAAG,CAAC,OAAO,CAAC,IAAIjN,GAAG,CAACS,OAAO,CAAC,OAAO,CAAC,CAAA;MAE3D,IAAIF,KAAK,KAAGT,SAAS,IAAIS,KAAK,CAAC+B,MAAM,IAAE,CAAC,EAAE;QACxC/B,KAAK,GAAA,MAAS+a,iBAAiB,EAAE,CAAA;QACjC1Z,MAAM,CAACC,KAAK,CAAA,uBAAwB,CAAC,CAAA;AACvC,OAAA;AAEA,MAAA,IAAMjD,OAAO,GAAEmc,sBAAsB,CAACtc,OAAO,CAAC,CAAA;MAC9CuB,GAAG,CAAC0b,OAAO,CAACtF,GAAG,CAAC,OAAO,EAAE7V,KAAK,EAAE3B,OAAO,CAAC,CAAA;MACxCoB,GAAG,CAACX,IAAI,GAAG;AACTpB,QAAAA,IAAI,EAAE,OAAO;AACbsC,QAAAA,KAAAA;OACD,CAAA;MAED,MAAMsH,IAAI,EAAE,CAAA;KACb,CAAA,CAAA;AAAA,IAAA,OAAA4T,sBAAA,CAAA9T,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED0E,EAAAA,GAAG,CAACgB,GAAG,CAACyT,qBAAqB,CAAC,CAAA;AAEhC,CAAC;;;;;;;ACjED,IAAMjD,0BAA0B,GAAGA,CAAExR,GAAG,EAAEnI,OAAO,KAAM;EACrD,IAAI;IAAC+c,SAAS;IAAEC,KAAK;AAAEC,IAAAA,KAAAA;AAAK,GAAC,GAAGjd,OAAO,CAAA;EACvC,IAAI,CAAEgd,KAAK,EAAE;AACXA,IAAAA,KAAK,GAAG,aAAa,CAAA;AACvB,GAAA;AAAC,EAAA,SAEcE,qBAAqBA,CAAAtU,EAAA,EAAAC,GAAA,EAAA;AAAA,IAAA,OAAAsU,sBAAA,CAAApU,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAA0Z,sBAAA,GAAA;AAAAA,IAAAA,sBAAA,GAAAnU,iBAAA,CAApC,WAAqC5H,GAAG,EAAE6H,IAAI,EAAE;MAC9C7H,GAAG,CAACX,IAAI,GAAG,IAAI,CAAA;AACf,MAAA,IAAM2c,OAAO,GAAGja,IAAI,CAAC/B,GAAG,CAAC,CAAA;MAEzB,IAAMic,UAAU,GAAGA,MAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAjc,QAAAA,GAAG,CAAC2J,IAAI,GAAE,EAAE,CAAA;AACZ3J,QAAAA,GAAG,CAACkc,QAAQ,CAAC9S,MAAM,GAAE,GAAG,CAAA;AACxBpJ,QAAAA,GAAG,CAACkc,QAAQ,CAACvS,IAAI,GAAG,cAAc,CAAA;AAClC3J,QAAAA,GAAG,CAACkc,QAAQ,CAACzb,OAAO,CAAC,kBAAkB,CAAC,GAAE,eAAe,GAAGmb,KAAK,CAAC5H,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;OAC7F,CAAA;MAED,IAAI,CAAEgI,OAAO,EAAE;QACb,OAAOC,UAAU,EAAE,CAAA;AACrB,OAAA;AAEA,MAAA,IAAM5c,IAAI,GAASsc,MAAAA,SAAS,CAACK,OAAO,CAAC/d,IAAI,EAAE+d,OAAO,CAACG,IAAI,EAAEpV,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAC,CAAA;AAE3E,MAAA,IAAIzI,IAAI,KAAK,KAAK,IAAIA,IAAI,IAAIS,SAAS,EAAE;QACvC,OAAOmc,UAAU,EAAE,CAAA;AACrB,OAAA;MAEAjc,GAAG,CAACX,IAAI,GAAEA,IAAI,CAAA;MACd,MAAMwI,IAAI,EAAE,CAAA;KACb,CAAA,CAAA;AAAA,IAAA,OAAAkU,sBAAA,CAAApU,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;EAED,IAAIwZ,KAAK,IAAI/b,SAAS,IAAI+b,KAAK,CAACvZ,MAAM,IAAI,CAAC,EAAE;AAC3CyE,IAAAA,GAAG,CAACgB,GAAG,CAAC+T,qBAAqB,CAAC,CAAA;AAChC,GAAC,MAAM;AACLD,IAAAA,KAAK,CAACjN,GAAG,CAACwN,CAAC,IACTrV,GAAG,CAACgB,GAAG,CAAC2C,SAAS,CAAC0R,CAAC,EAAEN,qBAAqB,CAAC,CAC7C,CAAC,CAAA;AACH,GAAA;AAEF,CAAC;;;;;;;AC9CD;AACA;AACA;AACA;AACA;AACA;;AAGA,IAAMO,eAAe,GAAGA,CAAChd,IAAI,EAAEid,IAAI,EAAExU,KAAK,KAAKwU,IAAI,CAAC,IAAI,EAAEjd,IAAI,CAACc,EAAE,CAAC,CAAA;AAElE,IAAMoc,mBAAmB,GAAGA,CAACpc,EAAE,EAAEmc,IAAI,EAAExU,KAAK,KAAK;AAC/C,EAAA,IAAMjF,GAAG,GAAG2Z,KAAK,CAAC,kDAAkD,CAAC,CAAA;AACrEF,EAAAA,IAAI,CAACzZ,GAAG,EAAE,IAAI,CAAC,CAAA;AACjB,CAAC,CAAA;AAED,IAAM4Z,mBAAmB,GAAGA,CAACC,QAAQ,EAAEpd,QAAQ,EAAEgd,IAAI,EAAExU,KAAK,KAAK;AAC/D,EAAA,IAAMjF,GAAG,GAAG2Z,KAAK,CAAC,kDAAkD,CAAC,CAAA;AACrEF,EAAAA,IAAI,CAACzZ,GAAG,EAAE,IAAI,CAAC,CAAA;AACjB,CAAC,CAAA;AAGD,IAAM4V,6BAA6B,GAAGA,CAAE1R,GAAG,EAAEnI,OAAO,KAAM;EACxD,IAAM;IAAC+d,WAAW;IAAEC,eAAe;IAAEC,eAAe;IAC7CC,SAAS;IAAEC,UAAU;IAAEC,kBAAkB;AAAEC,IAAAA,mBAAAA;AAAmB,GAAC,GAAGre,OAAO,CAAA;;AAEhF;;AAEA;AACA,EAAA,IAAMse,aAAa,GAAGP,WAAW,IAAIN,eAAe,CAAA;AACpD,EAAA,IAAMc,iBAAiB,GAAGP,eAAe,IAAIL,mBAAmB,CAAA;AAChE,EAAA,IAAMa,iBAAiB,GAAGP,eAAe,IAAIJ,mBAAmB,CAAA;AAChE,EAAA,IAAMY,WAAW,GAAGP,SAAS,IAAI,QAAQ,CAAA;AACzC,EAAA,IAAMQ,YAAY,GAAGP,UAAU,IAAI,SAAS,CAAA;;AAE5C;AACA,EAAA,IAAMQ,cAAc,GAAGA,CAACle,IAAI,EAAEid,IAAI,KAAK;IACrCkB,OAAO,CAACC,QAAQ,CAAC,YAAW;MAC1BP,aAAa,CAAC7d,IAAI,EAAEid,IAAI,EAAEvV,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAC,CAAA;AAC9C,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,IAAM4V,gBAAgB,GAAGA,CAACvd,EAAE,EAAEmc,IAAI,KAAK;IACrCkB,OAAO,CAACC,QAAQ,CAAC,YAAW;MAC1BN,iBAAiB,CAAChd,EAAE,EAAEmc,IAAI,EAAEvV,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAC,CAAA;AAChD,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,IAAM6V,cAAc,GAAE,IAAIC,aAAa,CAACC,QAAQ,CAC9C,CAACnB,QAAQ,EAAEpd,QAAQ,EAAEgd,IAAI,KAAK;AAC5Bc,IAAAA,iBAAiB,CAACV,QAAQ,EAAEpd,QAAQ,EAAEgd,IAAI,EAAEvV,GAAG,CAACiB,OAAO,CAACF,KAAK,CAAC,CAAA;AAClE,GAAC,CAAC,CAAA;AAEF0Q,EAAAA,UAAQ,CAACsF,aAAa,CAACP,cAAc,CAAC,CAAA;AACtC/E,EAAAA,UAAQ,CAACuF,eAAe,CAACL,gBAAgB,CAAC,CAAA;AAC1ClF,EAAAA,UAAQ,CAACzQ,GAAG,CAAC4V,cAAc,CAAC,CAAA;EAE5B5W,GAAG,CAACgB,GAAG,CAACyQ,UAAQ,CAACwF,UAAU,EAAE,CAAC,CAAA;EAC9BjX,GAAG,CAACgB,GAAG,CAACyQ,UAAQ,CAAC/Z,OAAO,EAAE,CAAC,CAAA;;AAG3B;AACA,EAAA,IAAMwf,WAAW,GAAGA,CAACje,GAAG,EAAE6H,IAAI,KAAK;AACjC,IAAA,OAAO2Q,UAAQ,CAAC0F,YAAY,CAAC,OAAO,EAAE,UAASrb,GAAG,EAAExD,IAAI,EAAEuD,IAAI,EAAEub,OAAO,EAAE;MACvE,IAAI9e,IAAI,KAAK,KAAK,EAAE;QAClBW,GAAG,CAAC2J,IAAI,GAAG;AACTyU,UAAAA,OAAO,EAAE,KAAK;AACd/e,UAAAA,IAAI,EAAES,SAAS;AACfqa,UAAAA,aAAa,EAAE,KAAK;AACpBvX,UAAAA,IAAI,EAAEA,IAAI;AACVE,UAAAA,KAAK,EAAED,GAAAA;SACR,CAAA;;AAED;AACA;;AAEA7C,QAAAA,GAAG,CAACkc,QAAQ,CAAC9S,MAAM,GAAE,GAAG,CAAA;AACxBpJ,QAAAA,GAAG,CAACkc,QAAQ,CAACvS,IAAI,GAAG,cAAc,CAAA;AAEpC,OAAC,MAAM;QACL3J,GAAG,CAAC2J,IAAI,GAAG;AACTyU,UAAAA,OAAO,EAAE,IAAI;AACb/e,UAAAA,IAAI,EAAGA,IAAI;AACX8a,UAAAA,aAAa,EAAE,IAAA;SAChB,CAAA;QACD,IAAI6C,kBAAkB,IAAEld,SAAS,EAAE;AACjCE,UAAAA,GAAG,CAAC6Q,QAAQ,CAACmM,kBAAkB,CAAC,CAAA;AAClC,SAAA;AAEA,QAAA,OAAOhd,GAAG,CAACqe,KAAK,CAAChf,IAAI,CAAC,CAAA;AACxB,OAAA;KACD,CAAC,CAACW,GAAG,CAAC,CAAA;GACR,CAAA;AAED,EAAA,IAAMse,YAAY,gBAAA,YAAA;IAAA,IAAA9N,IAAA,GAAA5I,iBAAA,CAAG,WAAO5H,GAAG,EAAE6H,IAAI,EAAK;AACxC,MAAA,IAAI7H,GAAG,CAACka,eAAe,EAAE,EAAE;QACzBla,GAAG,CAACue,MAAM,EAAE,CAAA;QACZve,GAAG,CAAC2J,IAAI,GAAG;AACTyU,UAAAA,OAAO,EAAE,IAAA;SACV,CAAA;QACD,IAAInB,mBAAmB,IAAEnd,SAAS,EAAE;AAClCE,UAAAA,GAAG,CAAC6Q,QAAQ,CAACoM,mBAAmB,CAAC,CAAA;AACnC,SAAA;AACF,OAAC,MAAM;QACLjd,GAAG,CAAC2J,IAAI,GAAG;AACTyU,UAAAA,OAAO,EAAE,KAAA;SACV,CAAA;AACD;AACA;;AAEApe,QAAAA,GAAG,CAACkc,QAAQ,CAAC9S,MAAM,GAAE,GAAG,CAAA;AACxBpJ,QAAAA,GAAG,CAACkc,QAAQ,CAACvS,IAAI,GAAG,cAAc,CAAA;AACpC,OAAA;KACD,CAAA,CAAA;AAAA,IAAA,OAAA,SAnBK2U,YAAYA,CAAA9W,EAAA,EAAAC,GAAA,EAAA;AAAA,MAAA,OAAA+I,IAAA,CAAA7I,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,KAAA,CAAA;GAmBjB,EAAA,CAAA;;AAED;AACA,EAAA,IAAMmc,YAAY,GAAG,IAAIxR,MAAM,EAAE,CAAA;AACjCwR,EAAAA,YAAY,CAAC3Q,IAAI,CAACwP,WAAW,EAAGY,WAAW,CAAC,CAAA;AAC5CO,EAAAA,YAAY,CAACvR,GAAG,CAAEqQ,YAAY,EAAEgB,YAAY,CAAC,CAAA;AAC7CE,EAAAA,YAAY,CAAC3Q,IAAI,CAACyP,YAAY,EAAEgB,YAAY,CAAC,CAAA;EAE7CvX,GAAG,CAACgB,GAAG,CAACyW,YAAY,CAAC5e,MAAM,EAAE,CAAC,CAAA;AAChC,CAAC;;;;;;;ACzHD,IAAMrC,aAAa,GAAGC,aAAa,CAACC,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAA;AACpD,IAAMC,YAAY,GAAGC,IAAI,CAACC,OAAO,CAACP,aAAa,CAAC,CAAA;AAEhD,IAAMkhB,aAAa,GAAE5gB,IAAI,CAACG,OAAO,CAACJ,YAAY,EAAE,qBAAqB,CAAC,CAAA;AACtE,IAAM8gB,SAAS,GAAG/R,YAAY,CAAC8R,aAAa,EAAE,MAAM,CAAC,CAAA;AAErD,SAAS7F,sBAAsBA,CAAC7R,GAAG,EAAE4R,IAAI,EAAE;AAEzC;EAAA,SACegG,WAAWA,CAAAnX,EAAA,EAAA;AAAA,IAAA,OAAAoX,YAAA,CAAAjX,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAAuc,YAAA,GAAA;AAAAA,IAAAA,YAAA,GAAAhX,iBAAA,CAA1B,WAA2B5H,GAAG,EAAE;AAC9B,MAAA,IAAM4B,MAAM,GAAE5B,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAAA;AAE9B,MAAA,IAAMid,KAAK,GAAE7e,GAAG,CAACiL,SAAS,CAAA;MAC1B,IAAMO,EAAE,GAAExL,GAAG,CAACS,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAA;AACjD,MAAA,IAAM+I,MAAM,GAAExJ,GAAG,CAACkL,OAAO,CAAC1B,MAAM,CAAA;AAChC,MAAA,IAAM7L,GAAG,GAAEqC,GAAG,CAACkL,OAAO,CAACvN,GAAG,CAAA;MAC1B,IAAMmhB,IAAI,GAAGnG,IAAI,IAAE7Y,SAAS,GACb,eAAe,GACf,eAAe,CAAA;AAC9B8B,MAAAA,MAAM,CAACgB,IAAI,CAAAwD,EAAAA,CAAAA,MAAA,CAAIyY,KAAK,EAAAzY,KAAAA,CAAAA,CAAAA,MAAA,CAAMoF,EAAE,EAAApF,KAAAA,CAAAA,CAAAA,MAAA,CAAMZ,IAAI,CAACgE,MAAM,CAAC,EAAA,GAAA,CAAA,CAAApD,MAAA,CAAIZ,IAAI,CAAC7H,GAAG,CAAC,EAAAyI,gBAAAA,CAAAA,CAAAA,MAAA,CAAiB0Y,IAAI,CAAE,CAAC,CAAA;AAEnF9e,MAAAA,GAAG,CAAC2J,IAAI,GAAGgP,IAAI,IAAI+F,SAAS,CAAA;KAC7B,CAAA,CAAA;AAAA,IAAA,OAAAE,YAAA,CAAAjX,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED,EAAA,IAAM0c,kBAAkB,GAAG,IAAI/R,MAAM,EAAE,CAAA;AACvC+R,EAAAA,kBAAkB,CAAC9R,GAAG,CAAC,GAAG,EAAE0R,WAAW,CAAC,CAAA;EAExC5X,GAAG,CAACgB,GAAG,CAACgX,kBAAkB,CAACnf,MAAM,EAAE,CAAC,CAAA;AACtC;;;;;;;AC/BA,SAASkZ,0BAA0BA,CAAC/R,GAAG,EAAEnI,OAAO,EAAE;EAAA,SAEjCogB,qBAAqBA,CAAAxX,EAAA,EAAA;AAAA,IAAA,OAAAyX,sBAAA,CAAAtX,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAAA,SAAA4c,sBAAA,GAAA;AAAAA,IAAAA,sBAAA,GAAArX,iBAAA,CAApC,WAAqC5H,GAAG,EAAE;AACxCA,MAAAA,GAAG,CAAC8H,KAAK,CAAClG,MAAM,CAACC,KAAK,CAAAuE,oCAAAA,CAAAA,MAAA,CAAsCpG,GAAG,CAACrC,GAAG,MAAG,CAAC,CAAA;AAEvEqC,MAAAA,GAAG,CAAC2J,IAAI,GAAE,EAAE,CAAA;;AAEZ;AACA;AACA;AACA;AACA;;AAEA3J,MAAAA,GAAG,CAACkc,QAAQ,CAAC9S,MAAM,GAAE,GAAG,CAAA;AACxBpJ,MAAAA,GAAG,CAACkc,QAAQ,CAACvS,IAAI,GAAG,oBAAoB,CAAA;KACzC,CAAA,CAAA;AAAA,IAAA,OAAAsV,sBAAA,CAAAtX,KAAA,CAAA,IAAA,EAAAtF,SAAA,CAAA,CAAA;AAAA,GAAA;AAED,EAAA,IAAM6c,kBAAkB,GAAG,IAAIlS,MAAM,EAAE,CAAA;AACvCkS,EAAAA,kBAAkB,CAACjS,GAAG,CAAC,GAAG,EAAE+R,qBAAqB,CAAC,CAAA;EAElDjY,GAAG,CAACgB,GAAG,CAACmX,kBAAkB,CAACtf,MAAM,EAAE,CAAC,CAAA;AACtC;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v0.4.0
2
+ * miolo v0.5.0
3
3
  *
4
4
  * Copyright (c) Donato Lorenzo <donato@afialapis.com>
5
5
  *
@@ -421,7 +421,7 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
421
421
  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
422
422
  }
423
423
 
424
- var __my_filename$3 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
424
+ var __my_filename$3 = fileURLToPath(import.meta.url);
425
425
  var __my_dirname$3 = path.dirname(__my_filename$3);
426
426
  var favicon = path.resolve(__my_dirname$3, '../static/img/miolo.ico');
427
427
  var base_config = {
@@ -1032,7 +1032,7 @@ function init_catcher_middleware(app) {
1032
1032
  app.context.onerror = catcher_middleware;
1033
1033
  }
1034
1034
 
1035
- var __my_filename$2 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1035
+ var __my_filename$2 = fileURLToPath(import.meta.url);
1036
1036
  var __my_dirname$2 = path.dirname(__my_filename$2);
1037
1037
  var fallback_favicon_path = path.resolve(__my_dirname$2, './miolo.ico');
1038
1038
  var init_static_middleware = function init_static_middleware(app, config) {
@@ -1126,7 +1126,7 @@ function init_session_middleware(app, config) {
1126
1126
  app.use(koa_session(options, app));
1127
1127
  }
1128
1128
 
1129
- var __my_filename$1 = fileURLToPath(require('url').pathToFileURL(__filename).toString());
1129
+ var __my_filename$1 = fileURLToPath(import.meta.url);
1130
1130
  var __my_dirname$1 = path.dirname(__my_filename$1);
1131
1131
  var robots_txt = readFileSync(path.resolve(__my_dirname$1, './robots.txt'), 'utf8');
1132
1132
  function init_route_robots(app) {
@@ -2601,7 +2601,7 @@ var passport = /*#__PURE__*/Object.freeze({
2601
2601
  init_passport_auth_middleware: init_passport_auth_middleware
2602
2602
  });
2603
2603
 
2604
- var __my_filename = fileURLToPath(require('url').pathToFileURL(__filename).toString());
2604
+ var __my_filename = fileURLToPath(import.meta.url);
2605
2605
  var __my_dirname = path.dirname(__my_filename);
2606
2606
  var indexHTMLPath = path.resolve(__my_dirname, 'fallback_index.html');
2607
2607
  var indexHTML = readFileSync(indexHTMLPath, 'utf8');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miolo",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "all-in-one koa-based server",
5
5
  "author": "Donato Lorenzo <donato@afialapis.com>",
6
6
  "contributors": [
@@ -105,7 +105,7 @@
105
105
  "babel-plugin-transform-import-meta": "^2.2.0",
106
106
  "node-fetch": "^2.6.11",
107
107
  "nodemon": "^2.0.22",
108
- "xeira": "^0.3.9"
108
+ "xeira": "^0.3.10"
109
109
  },
110
110
  "eslintConfig": {
111
111
  "extends": [