miolo 1.0.4 → 1.0.6

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 v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1465,9 +1465,21 @@ var init_parser = function init_parser() {
1465
1465
  };
1466
1466
 
1467
1467
  function _miolo_cacher_options_merge(def, opt, logger) {
1468
+ var _opt$redis, _def$redis, _process$env, _opt$redis2, _def$redis2, _process$env2, _opt$redis3, _def$redis3, _process$env3, _opt$redis4, _def$redis4, _process$env4, _opt$redis5, _def$redis5;
1469
+ var redis_host = (opt == null || (_opt$redis = opt.redis) == null ? void 0 : _opt$redis.host) || (def == null || (_def$redis = def.redis) == null ? void 0 : _def$redis.host) || ((_process$env = process.env) == null ? void 0 : _process$env.REDIS_HOST) || '127.0.0.1';
1470
+ var redis_port = (opt == null || (_opt$redis2 = opt.redis) == null ? void 0 : _opt$redis2.port) || (def == null || (_def$redis2 = def.redis) == null ? void 0 : _def$redis2.port) || ((_process$env2 = process.env) == null ? void 0 : _process$env2.REDIS_PORT) || 6379;
1471
+ var redis_username = (opt == null || (_opt$redis3 = opt.redis) == null ? void 0 : _opt$redis3.username) || (def == null || (_def$redis3 = def.redis) == null ? void 0 : _def$redis3.username) || ((_process$env3 = process.env) == null ? void 0 : _process$env3.REDIS_USERNAME) || '';
1472
+ var redis_password = (opt == null || (_opt$redis4 = opt.redis) == null ? void 0 : _opt$redis4.password) || (def == null || (_def$redis4 = def.redis) == null ? void 0 : _def$redis4.password) || ((_process$env4 = process.env) == null ? void 0 : _process$env4.REDIS_PASSWORD) || '';
1473
+ var redis_credentials = '';
1474
+ if (redis_username) {
1475
+ redis_credentials = "" + redis_username + (redis_password ? ":" + redis_password : '') + "@";
1476
+ }
1477
+ var redis_url = (opt == null || (_opt$redis5 = opt.redis) == null ? void 0 : _opt$redis5.url) || (def == null || (_def$redis5 = def.redis) == null ? void 0 : _def$redis5.url) || "redis://" + redis_credentials + redis_host + ":" + redis_port + "'";
1468
1478
  return {
1469
1479
  type: (opt == null ? void 0 : opt.type) || (def == null ? void 0 : def.type),
1470
- redis: (opt == null ? void 0 : opt.redis) || (def == null ? void 0 : def.redis),
1480
+ redis: {
1481
+ url: redis_url
1482
+ },
1471
1483
  namespace: (opt == null ? void 0 : opt.namespace) || (def == null ? void 0 : def.namespace),
1472
1484
  version: (opt == null ? void 0 : opt.version) || (def == null ? void 0 : def.version),
1473
1485
  clean: (opt == null ? void 0 : opt.clean) === true || (def == null ? void 0 : def.clean) === true,
@@ -2187,6 +2199,10 @@ function _geoip_is_local(ip, local_ips) {
2187
2199
  if (local_ips === void 0) {
2188
2200
  local_ips = [];
2189
2201
  }
2202
+ // if (process.env.NODE_ENV == 'development') {
2203
+ // return true
2204
+ // }
2205
+
2190
2206
  var all_local_ips = [].concat(_geoip_def_local_ips, local_ips || []);
2191
2207
  return all_local_ips.indexOf(ip) >= 0;
2192
2208
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -10,4 +10,4 @@
10
10
  *
11
11
  * @license MIT
12
12
  */
13
- import e from"koa";import r from"deepmerge";import t from"node:path";import{fileURLToPath as o}from"node:url";import n from"nodemailer";import i,{readFileSync as a}from"node:fs";import{uncolor as l,red as c,red_light as u,yellow as s,cyan as d,magenta as f,gray as v,green as p,cyan_light as m,blue as h,green_bold as g,yellow_bold as y}from"tinguir";import b from"node:util";import _,{format as w,transports as x,createLogger as S}from"winston";import{intre_now as k}from"intre";import{dropConnections as O,getConnection as E}from"calustra";export{getConnection as miolo_db_connection}from"calustra";import{cacheiro as j}from"cacheiro";export{cacheiro as miolo_cacher}from"cacheiro";import q from"koa-better-body";import C from"koa-convert";import I from"koa-compress";import{constants as P}from"node:zlib";import R from"node:http";import N from"koa-ratelimit";import F from"node:https";import M from"koa-mount";import J from"koa-static";import L from"koa-favicon";import{performance as T}from"node:perf_hooks";import{Reader as A}from"@maxmind/geoip2-node";import U from"@koa/router";import z from"jwt-simple";import B from"koa-passport";import D from"passport-local";import{createSession as G}from"koa-session";import W from"@koa/cors";import H from"koa-proxies";import Y from"qs";import{renderToString as K}from"react-dom/server";import{CronJob as V}from"cron";import Z from"node:os";import Q from"diskspace";import{createHttpTerminator as X}from"http-terminator";function $(e,r,t,o,n,i,a){try{var l=e[i](a),c=l.value}catch(e){return void t(e)}l.done?r(c):Promise.resolve(c).then(o,n)}function ee(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){$(i,o,n,a,l,"next",e)}function l(e){$(i,o,n,a,l,"throw",e)}a(void 0)}))}}function re(e,r,t){return(r=function(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function te(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function oe(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?te(Object(t),!0).forEach((function(r){re(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):te(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var ne=o(import.meta.url),ie=t.dirname(ne),ae=864e6,le={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:t.resolve(ie,"../static/img/miolo.ico"),folders:{}},cors:!1,proxy:!1,ratelimit:{max:1e3,duration:6e4,errorMessage:"Rate Limit reached",whitelist_ips:[],blacklist_ips:[],ipsum_folder:"/var/ipsum"},request:{lazy:1,slow:2,onStart:void 0,onDone:void 0,geoip:{enabled:!1,db:"/var/lib/GeoIP/GeoLite2-City.mmdb",local_ips:["127.0.0.1"]}}},session:{salt:"SUPER_SALTY_YES?",secret:"SUPER_SECRET_KEY_KERE",options:{maxAge:ae,secure:!0,sameSite:"lax"}},db:{config:{dialect:"postgres",host:"localhost",port:5432,database:"miolo",user:"postgres",password:"postgres",max:5,min:0,idleTimeoutMillis:1e4},options:{tables:[]}},routes:{bodyField:void 0,crud:[{prefix:"",routes:[]}],queries:[]},log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/afialapis/%MIOLO%.log",zippedArchive:!0,maxsize:20971520,maxFiles:20},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},mail:{silent:!0,options:{port:25,host:"mail.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},auth:{},render:{},middlewares:[],cron:[],cache:{default:{type:"combined",redis:{host:"127.0.0.1",port:6379},version:1,clean:!1},calustra:{namespace:"miolo-calustra",ttl:864e5},session:{namespace:"miolo-session",ttl:ae},custom:{}},socket:{enabled:!1,cli:{}}};function ce(e){var{options:r,defaults:t,silent:o}=e,i=n.createTransport(r,t);function a(){return(a=ee((function*(e){if(!0===o)return console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************"),{ok:!0,silent:!0,error:void 0,messageId:void 0};try{var r=i.sendMail(e);return r.ok=!(null==r||!r.messageId),r}catch(t){return{error:t,ok:!1}}}))).apply(this,arguments)}var l={send:function(e){return a.apply(this,arguments)},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),i.verify((function(e,r){e?(console.error("[miolo][Verify][MAILER] Verifying ERROR"),console.error(e)):console.info("[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages")}))},options:r,defaults:t,silent:o};return l}var{combine:ue,timestamp:se,_label:de,printf:fe,errors:ve}=w,pe=function(e,r){var o,n,a,p,m=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"miolo",h={silly:v,debug:f,verbose:d,info:s,warn:u,error:c},g={silly:"sly",debug:"dbg",verbose:"vbs",info:"inf",warn:"wrn",error:"err"},y=0,w={},O=r=>{var t,o=h[r.level],n=new Date(r.timestamp).toLocaleString((null==e||null===(t=e.format)||void 0===t?void 0:t.locale)||"en"),i="".padStart(y," "),a="[".concat(m,"] ").concat(o(n)," ").concat(o(g[r.level])," ").concat(i).concat(r.message);return r.stack?"".concat(a,"\n").concat(r.stack):a},E=[];!0===(null==e||null===(o=e.console)||void 0===o?void 0:o.enabled)&&E.push(new x.Console({humanReadableUnhandledException:!0,level:(null==e||null===(p=e.console)||void 0===p?void 0:p.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));if(!0===(null==e||null===(n=e.file)||void 0===n?void 0:n.enabled)){var j,q,C=new x.File({filename:null!=e&&null!==(j=e.file)&&void 0!==j&&j.filename?e.file.filename.replace("%MIOLO%",m):"/var/log/afialapis/miolo.log",level:(null==e||null===(q=e.file)||void 0===q?void 0:q.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0,maxRetries:10});!function(e){process.on("SIGHUP",(function(){var r=t.join(e.dirname,e._getFile(!1));return function(){console.log("[miolo][file-logger] SIGHUP received. Reopening ".concat(r,"..."));try{e._stream&&(e._stream.end(),e._stream.destroy());var t=i.createWriteStream(r,e.options);t.setMaxListeners(1/0),e._size=0,e._stream=t,e.opening=!1,e.emit("open",r),console.log("[miolo][file-logger] Reopened ".concat(r," successfully"))}catch(o){console.error("[miolo][file-logger] Error reopening ".concat(r,": ").concat(o.toString()))}}()}))}(C),E.push(C);var I=r=>{var o,n,a=t.join(C.dirname,C.filename),l=O({level:"info",message:"[logger][file-rotate] ".concat(r,"\n"),timestamp:k()});try{i.accessSync(a,i.constants.F_OK),i.appendFileSync(a,l)}catch(c){i.writeFileSync(a,l,{encoding:"utf-8"})}!0===(null==e||null===(o=e.console)||void 0===o?void 0:o.enabled)&&(C.levels[(null==e||null===(n=e.console)||void 0===n?void 0:n.level)||(null==e?void 0:e.level)||"error"]>=C.levels.info&&console.log(l))};C.on("finish",(function(e){I("Log done")})),C.on("error",(function(e){I(c("Error: ".concat(e)))}))}if(!0===(null==e||null===(a=e.mail)||void 0===a?void 0:a.enabled)){var P=function(e,r){var t=function(t){_.Transport.call(this,t),t=t||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||r.defaults.name,this.to=e.to||r.defaults.to,this.from=e.from||r.defaults.from,this.humanReadableUnhandledException=t.humanReadableUnhandledException||!0,this.handleExceptions=t.handleExceptions||!0,this.json=t.json||!1,this.colorize=t.colorize||!1};return b.inherits(t,_.Transport),t.prototype.name="MailerLogger",t.prototype.log=function(t,o){var n=this,i="",a="";try{try{i=t.message.split("\n")[0]}catch(s){i=t.message.toString()}i=l(i)}catch(d){i="Could not create a title for the error (".concat(d.toString(),")")}try{try{a=l(t.message)}catch(d){a=t.message.toString()}}catch(d){a="Could not create a body for the error (".concat(d.toString(),")")}var c="".concat(null==e?void 0:e.name," [").concat(t.level.toUpperCase(),"] ").concat(i),u={from:this.from,to:this.to,subject:c,text:a};r.send(u,(function(){n.emit("logged"),o(null,!0)}))},t}(e.mail,r);x.MailerLogger=P,E.push(new x.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}var R=S({level:(null==e?void 0:e.level)||"silly",format:ue(ve({stack:!0}),se(),fe(O)),transports:E}),N=(e,r)=>{var t=(r,t)=>{if(null!=t&&t.section)if(t.section in w){var o=parseFloat((Date.now()-w[t.section].timeStart)/1e3).toFixed(2);r="".concat(r," (time: ").concat(o,")"),y-=w[t.section].indentIncr,e(r,t),delete w[t.section]}else{w[t.section]={indentIncr:parseInt((null==t?void 0:t.indent)||4),timeStart:Date.now()};var n=Math.max(y+w[t.section].indentIncr,0);e(r,t),y=n}else e(r,t)};return Object.defineProperty(t,"name",{value:r}),t};R.error=N(R.error,"error"),R.warn=N(R.warn,"warn"),R.info=N(R.info,"info"),R.http=N(R.http,"http"),R.verbose=N(R.verbose,"verbose"),R.debug=N(R.debug,"debug"),R.silly=N(R.silly,"silly");try{R.debug("[logger] Inited for ".concat(R.transports.map((e=>"".concat(e.name," (").concat(e.level,")").concat(e.silent?c(" SILENT!"):""))).join(",")))}catch(F){}return R};class me{parse_value_str(e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(null==e||null==e){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])throw"Wrong str value passed: ".concat(e);return r}return e.toString()}parse_field_str(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected str value not passed for ".concat(r);return o}return this.parse_value_str(e[r],t,o)}parse_value_int(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=parseInt(e);if(null==o||isNaN(o)){if(r)throw"Wrong int value passed: ".concat(e);return t}return o}parse_field_int(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected int value not passed for ".concat(r);return o}return this.parse_value_int(e[r],t,o)}parse_value_float(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=parseFloat(e);if(null==o||isNaN(o)){if(r)throw"Wrong float value passed: ".concat(e);return t}return e}parse_field_float(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected float value not passed for ".concat(r);return o}return this.parse_value_float(e[r],t,o)}parse_value_bool(e){if(null!=e&&null!=e)return!0===e||"true"===e||"True"===e||1===e||"1"===e||!1!==e&&"false"!==e&&"False"!==e&&0!==e&&"0"!==e&&(arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0);if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])throw"Wrong bool value passed for ".concat(name)}parse_field_bool(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected bool value not passed for ".concat(r);return o}return this.parse_value_bool(e[r],t,o)}parse_value_obj(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(null==e||null==e){if(r)throw"Wrong obj value passed: ".concat(e);return t}if(0==Object.keys(e).length){if(r)throw"Empty obj value passed: ".concat(e);return t}if("object"!=typeof e)throw"Wrong obj value passed: ".concat(e);return e}parse_field_obj(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected obj value not passed for ".concat(r);return o}return this.parse_value_obj(e[r],t,o)}}var he=()=>new me;function ge(e,r,t){return{type:(null==r?void 0:r.type)||(null==e?void 0:e.type),redis:(null==r?void 0:r.redis)||(null==e?void 0:e.redis),namespace:(null==r?void 0:r.namespace)||(null==e?void 0:e.namespace),version:(null==r?void 0:r.version)||(null==e?void 0:e.version),clean:!0===(null==r?void 0:r.clean)||!0===(null==e?void 0:e.clean),ttl:(null==r?void 0:r.ttl)||(null==e?void 0:e.ttl),log:t}}function ye(e,r){return ge(e.cache.default,e.cache.calustra,r)}var be=void 0;function _e(e,r){var t=function(){var t=ee((function*(){if(null==be){be={};var t=function(e,r){var t=e.cache.default,o=e.cache.custom||{},n={};for(var[i,a]of Object.entries(o)){var l=ge(t,a,r);l.namespace=l.namespace||"miolo-".concat(i),n[i]=l}return n}(e,r);for(var[o,n]of Object.entries(t)){var i=yield j(n);be[o]=i}}return be}));return function(){return t.apply(this,arguments)}}(),o=function(){var e=ee((function*(e){return(yield t())[e]}));return function(r){return e.apply(this,arguments)}}(),n=function(){var e=ee((function*(){var e=yield t();return Object.keys(e)}));return function(){return e.apply(this,arguments)}}(),i=function(){var e=ee((function*(e,r){var n=yield t();r&&(yield o(e)).unsetAll();delete n[e]}));return function(r,t){return e.apply(this,arguments)}}(),a=function(){var e=ee((function*(e){if(e){var r=yield t();for(var[o,n]of Object.entries(r))yield n.unsetAll()}be={}}));return function(r){return e.apply(this,arguments)}}();return{get_cache:o,get_cache_names:n,drop_cache:i,drop_caches:a}}var we=(e,r)=>{var t=ce(r.mail),o=pe(r.log,t,null==r?void 0:r.name),n=he(),i=function(e,r){var t,o,n=function(){var t=ee((function*(t){var o=oe(oe(oe({},e.db.options),t||{}),{},{log:r,cache:ye(e,r)}),n=yield E(e.db.config,o);return n.get_model=n.getModel,n}));return function(e){return t.apply(this,arguments)}}(),i=function(){var t=ee((function*(t,o){var n=oe(oe(oe({},e.db.options),o||{}),{},{log:r});return(yield E(e.db.config,n)).get_model(t)}));return function(e,r){return t.apply(this,arguments)}}(),a={init_connection:(o=ee((function*(){return yield n({reset:!0})})),function(){return o.apply(this,arguments)}),fly_connection:(t=ee((function*(){return yield n({cache:!1})})),function(){return t.apply(this,arguments)}),get_connection:n,get_model:i,drop_connections:O};return a}(r,o),a=_e(r,o),l={config:oe({},r),emailer:t,logger:o,parser:n,db:i,cache:a};function c(){return(c=ee((function*(e,r){e.miolo=l,yield r()}))).apply(this,arguments)}e.use((function(e,r){return c.apply(this,arguments)})),e.context.miolo=l},xe=[401,403];var Se="/var/ipsum",ke="ipsum.txt";function Oe(e,r){var t=r?r.error:console.error;if(!e)return[];try{var o=[];return e.split("\n").filter((e=>e.indexOf("#")<0)).map((e=>{var[r,t]=e.split("\t");parseInt(t)>=1&&o.push(r)})),o}catch(n){return t("[cron][".concat(d("IPsum"),"] Error getting IPs from content")),[]}}function Ee(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Se,r=arguments.length>1?arguments[1]:void 0,o=arguments.length>2?arguments[2]:void 0,n=o?o.error:console.error,a=o?o.debug:console.log;if(i.existsSync(e))try{a("[cron][".concat(d("IPsum"),"] Updating file...")),function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"https://raw.githubusercontent.com/stamparm/ipsum/master/ipsum.txt",t=arguments.length>2?arguments[2]:void 0,o=t?t.error:console.error;F.get(r,(r=>{var t=[];r.on("data",(e=>{t.push(e)})).on("end",(()=>{var r=Buffer.concat(t).toString();e(r)}))})).on("error",(r=>{o("[cron][".concat(d("IPsum"),"] Error downloading remote file (").concat(r.toString(),")")),e("")}))}((n=>{var l=t.join(e,ke);i.writeFileSync(l,n,{encoding:"utf8",flag:"w"});var c=n.split("\n").length,u=Oe(n,o),s=u.length;a("[cron][".concat(d("IPsum"),"] File downloaded. ").concat(c," ips on the list (").concat(s," appearing in ").concat(1," or more lists)")),r&&r(u)}))}catch(l){n("[cron][".concat(d("IPsum"),"] Error ").concat(l," updating the file"))}else n("[cron][".concat(d("IPsum"),"] Folder ").concat(e," does not exist"))}function je(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Se,r=arguments.length>1?arguments[1]:void 0,o=arguments.length>2?arguments[2]:void 0,n=o?o.debug:console.log,a=o?o.warn:console.log,l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Se,r=arguments.length>1?arguments[1]:void 0,o=r?r.error:console.error;if(!i.existsSync(e))return r&&o("[cron][".concat(d("IPsum"),"] Folder ").concat(e," does not exist")),[];var n=t.join(e,ke);return i.existsSync(n)?Oe(i.readFileSync(n,{encoding:"utf8"}),r):(r&&o("[cron][".concat(d("IPsum"),"] File ").concat(n," does not exist")),[])}(e,o);return l.length>0?(r&&r(l),n("[cron][".concat(d("IPsum"),"] File contains ").concat(l.length," ips")),l):(a("[cron][".concat(d("IPsum"),"] File is empty. Launching update...")),Ee(e,r,o),[])}var qe=["52.212.247.108","54.218.32.58","170.106.82.193","110.166.71.39","39.107.54.8","205.210.31.240 ","134.122.52.203","165.232.105.25","66.249.73.200","35.206.153.204","199.244.88.227","198.12.222.107","212.128.118.10"];var Ce=o(import.meta.url),Ie=t.dirname(Ce),Pe=t.resolve(Ie,"./miolo.ico"),Re=t.resolve(Ie,"../../../.."),Ne=void 0,Fe=["127.0.0.1","::1:"];var Me=function(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:console;if(function(e){return[...Fe,...(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[])||[]].indexOf(e)>=0}(e,null==r?void 0:r.local_ips))return{local:!0,country:"",city:""};try{var o,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/var/lib/GeoIP/GeoLite2-City.mmdb",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:console;try{if(null!=Ne)return Ne;var t=i.readFileSync(e);return Ne=A.openBuffer(t)}catch(o){return r.error("[geoip] Error initing:"),void r.error(o)}}(null==r?void 0:r.db,t),a=n.city(e);return{country:a.country.isoCode,city:null===(o=a.city)||void 0===o||null===(o=o.names)||void 0===o?void 0:o.en}}catch(l){t.error("[geoip] Error localizing IP ".concat(e,":")),t.error(l)}return{country:"",city:""}},Je={total:0};var Le=o(import.meta.url),Te=t.dirname(Le),Ae=a(t.resolve(Te,"./robots.txt"),"utf8");var Ue=(e,r,t)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=r;if(null!=e)return e(t||{})}catch(n){}return function(e,r){var t=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="miolo_unsafe_secret",r.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:t};return z.encode(n,o)}(t||{},o)};function i(){return i=ee((function*(e,r){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var a=function(e){var r,t=null==e||null===(r=e.options)||void 0===r?void 0:r.maxAge;isNaN(t)&&(t=86400);var o=new Date;return o.setSeconds(o.getSeconds()+t),{expires:o,httpOnly:!1}}(t);e.cookies.set("token",i,a),e.session={user:{name:"guest"},authenticated:!0,token:i},yield r()})),i.apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))},ze=(e,r)=>{var{auth_user:t,realm:o,paths:n}=r;function i(e,r){return a.apply(this,arguments)}function a(){return(a=ee((function*(r,n){var i;try{i=(e=>{var r,t=null==e||null===(r=e.headers)||void 0===r?void 0:r.authorization;if(t)try{t=t.replace("Basic ","");try{t=Buffer.from(t,"base64").toString()}catch(i){t=atob(t)}var[o,n]=t.split(":");return{username:o,password:n}}catch(i){return}})(r.request)}catch(c){}var a=()=>{r.session={user:void 0,authenticated:!1},r.body={user:void 0,authenticated:!1},r.response.status=401,r.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return a();var l=yield t(i.username,i.password,e.context.miolo);if(!1===l||null==l)return a();r.session={user:l,authenticated:!0},yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((r=>e.use(M(r,i))))};class Be{constructor(e,r){this.options=e,this.logger=r,this._cache=void 0}init_cache(){var e=this;return ee((function*(){return null==e._cache&&(e.logger.silly("[session-store] Initing store"),e._cache=yield j(e.options)),e._cache}))()}get(e,r,t){var o=this;return ee((function*(){var{rolling:r,ctx:n}=t,i=yield o.init_cache(),a=yield i.getItem(e);try{var l=JSON.parse(a);return o.logger.silly("[session-store] Get session for ".concat(e,": ").concat(JSON.stringify(l))),l}catch(c){return void o.logger.silly("[session-store] No session for ".concat(e))}}))()}set(e,r,t,o){var n=this;return ee((function*(){var{rolling:t,changed:i,ctx:a}=o;n.logger.silly("[session-store] Set session for ".concat(e));var l=yield n.init_cache(),c=void 0;try{c=JSON.stringify(r)}catch(u){}yield l.setItem(e,c)}))()}destroy(e,r){var t=this;return ee((function*(){var{ctx:o}=r;t.logger.silly("[session-store] Destroy session for ".concat(e));var n=yield t.init_cache();yield n.unsetItem(e)}))()}}function De(e,r){var t=function(e,r){return ge(e.cache.default,e.cache.session,r)}({cache:e},r);return new Be(t,r)}var Ge=(e,r,t)=>r(null,e.id),We=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},He=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Ye=(e,r,t,o)=>{var{get_user_id:n,find_user_by_id:i,local_auth_user:a,url_login:l,url_logout:c,url_login_redirect:u,url_logout_redirect:s}=r,d=n||Ge,f=i||We,v=a||He,p=l||"/login",m=c||"/logout",h=new D.Strategy(((r,t,o)=>{v(r,t,o,e.context.miolo)}));function g(){return(g=ee((function*(e,r){try{e.session.authenticated&&(e.session.user=e.state.user)}catch(t){}yield r()}))).apply(this,arguments)}!function(e,r,t){var o=De(t,e.context.miolo.logger);e.keys=[r.secret||"*secret*"];var n=oe({store:o},r.options||{});e.use(G(n,e))}(e,t,o),B.serializeUser(((r,t)=>{process.nextTick((function(){d(r,t,e.context.miolo)}))})),B.deserializeUser(((r,t)=>{process.nextTick((function(){f(r,t,e.context.miolo)}))})),B.use(h),e.use(B.initialize()),e.use(B.session()),e.use((function(e,r){return g.apply(this,arguments)}));var y=function(){var e=ee((function*(e,r){e.session.authenticated?(e.session.user=void 0,e.session.authenticated=!1,yield e.logout(),e.body={user:void 0,authenticated:!1},null!=s&&e.redirect(s)):(e.body={user:void 0,authenticated:!1},e.response.status=401)}));return function(r,t){return e.apply(this,arguments)}}(),b=new U;b.post(p,((e,r)=>B.authenticate("local",function(){var r=ee((function*(r,t,o,n){if(!1!==t)return e.session.user=e.state.user,e.session.authenticated=!0,e.body={user:t,authenticated:!0},null!=u&&e.redirect(u),yield e.login(t);e.session.user=void 0,e.session.authenticated=!1,e.body={user:void 0,authenticated:!1,info:o,error:r},e.response.status=401}));return function(e,t,o,n){return r.apply(this,arguments)}}())(e))),b.get(m,y),b.post(m,y),e.use(b.routes())},Ke=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Ve=(e,r)=>{var t=e.context.miolo.logger;Ke(r,"cors",(r=>{if("simple"==r)t.debug("[http] Setting CORS the simple way"),e.use(function(){var e=ee((function*(e,r){e.set("[http] Access-Control-Allow-Origin","*"),e.set("[http] Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield r()}));return function(r,t){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(r);t.debug("[http] Setting CORS headers for ".concat(JSON.stringify(o))),e.use(W(o))}})),Ke(r,"proxy",(r=>{var[o,n]=(e=>{var r,t,o,n;return null==e&&(e={}),[(null===(r=e)||void 0===r?void 0:r.path)||"/",{target:(null===(t=e)||void 0===t?void 0:t.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(r);t.debug("[http] Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(H(o,n))}))},Ze=function(){var e=ee((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),Qe=function(){var e=ee((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Xe={require:!1,action:"redirect",redirect_url:"/",error_code:401},$e={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}};function er(e){var r=e.indexOf("?")>=0?e.substr(e.indexOf("?")+1):"";return r?Y.parse(r):{}}function rr(e,r){function t(e){return o.apply(this,arguments)}function o(){return(o=ee((function*(r){var t=r.request.fields;try{r.miolo.logger.debug("[router] ".concat(e.name,"() Calling with params ").concat(JSON.stringify(t)))}catch(n){r.miolo.logger.debug("[router] ".concat(e.name,"()Calling with params (?)"))}var o=yield e(r.miolo,t);try{r.miolo.logger.debug("[router] ".concat(e.name,"() Called with result ").concat(JSON.stringify(o)))}catch(n){r.miolo.logger.debug("[router] ".concat(e.name,"() Called with result (?)"))}r.body=o}))).apply(this,arguments)}return Object.defineProperty(t,"name",{value:e.name,writable:!1}),t}function tr(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n=function(){var e=ee((function*(e,t){var o,n=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated),i=r.auth;return!(!0===i.require||"read-only"===i.require&&"w"===t)||(n||("error"==i.action?(e.miolo.logger.error("[router] Unauthorized access. Throwing error ".concat(i.error_code)),e.throw(i.error_code,null,{})):"redirect"==i.action?(e.miolo.logger.warn("[router] Unauthorized access. Redirecting to ".concat(i.redirect_url)),e.redirect(i.redirect_url)):(e.miolo.logger.error("[router] Crud path ".concat(r.url," specified auth but no action")),e.body={})),n)}));return function(r,t){return e.apply(this,arguments)}}(),i=function(){var e=ee((function*(e,t,o){var i=yield e.miolo.db.get_model(r.name);if(!i)throw e.miolo.logger.error("[router] Could not get model for ".concat(r.name)),new Error("[router] Could not get model for ".concat(r.name));var a,l={};try{var c;if(!(yield n(e,t)))return void(e.body={});var u=!0;if(null!=r&&r.before&&(u=yield r.before(e)),!u)return void(e.body={});var s=null==e||null===(c=e.session)||void 0===c||null===(c=c.user)||void 0===c?void 0:c.id,d={};!0===r.useUserFields.use&&(d=r.useUserFields.fieldNames);var f={uid:s,fieldNames:d};l=yield o(i,f),null!=r&&r.after&&(l=yield r.after(e,l))}catch(v){e.miolo.logger.error("[router] Unexpected error on CRUD ".concat(r.name,"-").concat(t)),e.miolo.logger.error(v)}a=l,l=null==r.bodyField?a:{[r.bodyField]:a},e.body=l}));return function(r,t,o){return e.apply(this,arguments)}}(),a=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.read(o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),l=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.keyList(o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),c=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.find(o.id,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),u=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.distinct(o.distinct_field,o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),s=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o,n=e.request.fields;null!=t&&null!==(o=t.fieldNames)&&void 0!==o&&o.created_by&&(n[t.fieldNames.created_by]=t.uid);var i={transaction:void 0};return yield r.insert(n,i)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),d=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o,n=e.request.fields;null!=t&&null!==(o=t.fieldNames)&&void 0!==o&&o.last_update_by&&(n[t.fieldNames.last_update_by]=t.uid);var i={transaction:void 0};return yield r.update(n,{id:n.id},i)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),f=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o=e.request.fields,n={transaction:void 0};return yield r.delete({id:o.id},n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),v=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);v.indexOf("//")>=0;)v=v.replace(/\/\//g,"/");t.debug("[router] Routing table ".concat(r.name," to ").concat(v));var p=r.mode.indexOf("r")>=0,m=r.mode.indexOf("w")>=0,h=r.mode.indexOf("u")>=0||m;p&&(e.get("".concat(v,"/find"),(e=>c(e))),e.get("".concat(v,"/read"),(e=>a(e))),e.get("".concat(v,"/distinct"),(e=>u(e))),e.get("".concat(v,"/key_list"),(e=>l(e)))),h&&(e.post("".concat(v,"/save"),(e=>s(e))),e.post("".concat(v,"/update"),(e=>d(e)))),m&&e.post("".concat(v,"/delete"),(e=>f(e)))}))}))}function or(e,t){var o=e.context.miolo.logger,n=new U;try{var i=(e=>{var t=(null==e?void 0:e.crud)||[];if(!t)return[];if(!Array.isArray(t))return[];var o=[];return t.map((t=>{var n=null==t?void 0:t.routes;if(n&&Array.isArray(n)){var i=(null==t?void 0:t.bodyField)||(null==e?void 0:e.bodyField),a=(null==t?void 0:t.before)||(null==e?void 0:e.before)||Ze,l=(null==t?void 0:t.after)||(null==e?void 0:e.after)||Qe,c=r.all([Xe,(null==e?void 0:e.auth)||{},(null==t?void 0:t.auth)||{}]),u=[];for(var s of n){var d="string"==typeof s?{name:s}:s;if(d.name){var f={name:d.name,url:(null==d?void 0:d.url)||d.name,mode:(null==d?void 0:d.mode)||"rw",bodyField:(null==d?void 0:d.bodyField)||i,useUserFields:r.all([$e,(null==d?void 0:d.useUserFields)||{}]),auth:r.all([c,(null==d?void 0:d.auth)||{}]),before:(null==d?void 0:d.before)||a,after:(null==d?void 0:d.after)||l};u.push(f)}}u.length>0&&o.push({prefix:(null==t?void 0:t.prefix)||"",routes:u})}})),o})(t),a=(e=>{var t=(null==e?void 0:e.queries)||[];if(!t)return[];if(!Array.isArray(t))return[];var o=[];return t.map((t=>{var n=null==t?void 0:t.routes;if(n&&Array.isArray(n)){var i=(null==t?void 0:t.before)||(null==e?void 0:e.before)||Ze,a=(null==t?void 0:t.after)||(null==e?void 0:e.after)||Qe,l=r.all([Xe,(null==t?void 0:t.auth)||{},(null==e?void 0:e.auth)||{}]),c=[];for(var u of n)if(u.url){var s=void 0;if(u.callback||u.callback_fn){s=u.callback||rr(u.callback_fn);var d={url:u.url,method:(null==u?void 0:u.method)||"GET",callback:s,auth:r.all([l,(null==u?void 0:u.auth)||{}]),before:(null==u?void 0:u.before)||i,after:(null==u?void 0:u.after)||a};c.push(d)}}o.push({prefix:(null==t?void 0:t.prefix)||"",routes:c})}})),o})(t),l=i.length>0,c=a.length>0;if(!l&&!c)throw"[router] Could not get any route from the passed <routes> param";l&&tr(n,i,o),c&&function(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n,i=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");var a=r.auth,l=!0===a.require||"read-only"===a.require&&"POST"===r.method;t.debug("[router] Routing ".concat((null===(n=r.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(r.method," ").concat(i).concat(l?" (auth)":""));var c=function(){var e=ee((function*(e){if(l){var t,o=!0===(null==e||null===(t=e.session)||void 0===t?void 0:t.authenticated);return o||("error"==a.action?(e.miolo.logger.error("Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):"redirect"==a.action?(e.miolo.logger.warn("Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)):(e.miolo.logger.error("Route path ".concat(r.url," specified auth but no action")),e.body={})),o}return!0}));return function(r){return e.apply(this,arguments)}}(),u=function(){var e=ee((function*(e){var t={};try{try{var o;if("GET"==r.method&&(null===(o=e.request)||void 0===o||!o.fields)&&e.request.url.indexOf("?")>0){var n=er(e.request.url);n&&(e.request.fields=n)}}catch(u){e.miolo.logger.error("[router] Error while trying to qet query params for ".concat(e.request.url))}if(!(yield c(e)))return;var a=!0;if(null!=r&&r.before&&(a=yield r.before(e)),!a)return;t=yield r.callback(e),null!=r&&r.after&&(t=yield r.after(e,t))}catch(s){var l;e.miolo.logger.error("[router] Unexpected error on Query ".concat(null===(l=r.callback)||void 0===l?void 0:l.name," at ").concat(i)),e.miolo.logger.error(s)}return t}));return function(r){return e.apply(this,arguments)}}(),s=r.method.toLowerCase();e[s](i,(e=>u(e,r)))}))}))}(n,a,o)}catch(u){o.error("[router] Error initing the router."),o.error("[router] routes:"),o.error(t),o.error(u)}e.use(n.routes())}var nr=o(import.meta.url),ir=t.dirname(nr),ar=a(t.resolve(ir,"fallback_index.html"),"utf8");function lr(e,r,t,o,n){var i=(null==r?void 0:r.html)||ar;i.indexOf("{context}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {context} template variable"),i.indexOf("{children}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {children} template variable");var a=function(){var e=ee((function*(e){var t={};try{var o;null!=r&&null!==(o=r.ssr)&&void 0!==o&&o.loader&&(t=yield r.ssr.loader(e))}catch(c){var n,i="URL: ".concat(e.request.url,"\nFields: ").concat(JSON.stringify((null===(n=e.request)||void 0===n?void 0:n.fields)||{})),a=null!=c&&c.stack?"".concat(c.toString(),"\n").concat(c.stack):c.toString(),l="".concat("Error produced by loader in render.ssr middleware","\n").concat(i,"\n").concat(a);e.miolo.logger.error(l)}return t}));return function(r){return e.apply(this,arguments)}}();function l(){return(l=ee((function*(e){var n,l,c=((e,r,t)=>{var o,n,i=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated);return{config:r,user:null==e||null===(n=e.session)||void 0===n?void 0:n.user,authenticated:i,ssr_data:t,extra:null==e?void 0:e.extra}})(e,{hostname:null==t?void 0:t.hostname,port:null==t?void 0:t.port,catcher_url:null==t?void 0:t.catcher_url,login_url:null==o||null===(n=o.credentials)||void 0===n?void 0:n.url_login,logout_url:null==o||null===(l=o.credentials)||void 0===l?void 0:l.url_logout},yield a(e)),u=((e,t)=>{var o="";try{var n;null!=r&&null!==(n=r.ssr)&&void 0!==n&&n.renderer?o=K(r.ssr.renderer(e,t)):e.miolo.logger.warn("Missing renderer in render.ssr middleware")}catch(a){e.miolo.logger.error("Error in renderer (render.ssr middleware):\n".concat(a.toString())),o="\n <div>\n MIOLO: Error SSR renderer: ".concat(a.toString(),"\n </div> \n ")}return i.replace("{context}",JSON.stringify(t,null,2)).replace("{children}",o)})(e,c);e.miolo.logger.debug("[render-ssr] Returned body is ".concat(Buffer.byteLength(u,"utf8")," bytes")),e.body=u}))).apply(this,arguments)}e.use((function(e){return l.apply(this,arguments)}))}function cr(e){return e?e/1e6:0}function ur(e){return e?e/1e6:0}function sr(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(cr(Z.freemem()),2),n=Math.round(cr(Z.totalmem()),2),(i=Math.round(100*o/n,2))>80?t.error("[cron][".concat(d("SysCheck"),"] RAM ").concat(s(o)," MB used of ").concat(p(n)," MB (").concat(s(i)," %)")):t.info("[cron][".concat(d("SysCheck"),"] RAM ").concat(s(o)," MB used of ").concat(p(n)," MB (").concat(s(i)," %)")),Q.check("/",(function(e,r){var o=Math.round(ur(r.used),2),n=Math.round(ur(r.total),2),i=Math.round(ur(r.free),2);i<1?t.error("[cron][".concat(d("SysCheck"),"] DISK ").concat(s(o)," GB used of ").concat(p(n)," GB (").concat(s(i)," GB free)")):t.info("[cron][".concat(d("SysCheck"),"] DISK ").concat(s(o)," GB used of ").concat(p(n)," GB (").concat(s(i)," GB free)"))}))},start:!0}}function dr(e,r){var t=e.context.miolo,o=t.logger,n=[sr(),{name:"IPsum",cronTime:"0 0 * * *",onTick:(e,r)=>{Ee(e.config.http.ratelimit.ipsum_folder||Se,(r=>{e.logger.debug("[cron][".concat(d("IPsum"),"] File downloaded. ").concat(p(r.length)," ips will be ").concat(s("blacklisted"),"!"))}),e.logger)},start:!0},...r||[]],i=[];n.map((e=>{var r=e.name,o=function(e,r){var t,o=e.logger,n=null!=r&&null!==(t=r.onTick)&&void 0!==t&&t.name&&"onTick"!=r.onTick.name?r.onTick.name:"custom",i=(null==r?void 0:r.name)||n;return new V((null==r?void 0:r.cronTime)||"*/5 * * * *",(t=>{try{o.silly("[cron][Custom Job ".concat(d(i),"] ").concat(g("ticks!"))),r.onTick(e,t)}catch(n){o.error("[cron][Custom Job ".concat(d(i),"] Error at onTick()")),o.error(n)}}),(()=>{if(o.silly("[cron][Custom Job ".concat(d(i),"] ").concat(g("completed!"))),null!=r&&r.onComplete)try{r.onComplete(e)}catch(t){o.error("[cron][Custom Job ".concat(d(i),"] Error at onComplete()")),o.error(t)}}),!1,(null==r?void 0:r.timezone)||"Europe/Madrid")}(t,e);i.push({name:r,job:o,running:!1})}));var a=e=>{var r;return(r="number"==typeof e?i[e]:i.filter((r=>r.name==e))[0])||o.error("[cron] Job ".concat(d(e)," Not Found")),r},l=e=>{try{return e.job.start(),e.running=!0,o.debug("[cron][Job ".concat(d(e.name),"] ").concat(g("started!"))),1}catch(r){return o.error("[cron][Job ".concat(d(e.name),"] Error starting it")),o.error(r),0}},c=e=>{try{return e.job.stop(),e.running=!1,o.debug("[cron][Job ".concat(d(e.name),"] ").concat(y("stopped!"))),1}catch(r){return o.error("[cron][Job ".concat(d(e.name),"] Error stopping it")),o.error(r),0}};return e.cron={jobs:i,start_one:e=>{var r=a(e);return r?[l(r),r.name]:[0,""]},start:()=>{try{var e=[],r=[];i.map((t=>{1==l(t)?e.push(t.name):r.push(t.name)})),e.length>0&&o.info("[cron] Started ".concat(e.length," jobs: ").concat(e)),r.length>0&&o.warn("[cron] Could not start ".concat(r.length," jobs: ").concat(r))}catch(t){o.error("[cron] start() error: ".concat(t))}},stop_one:e=>{var r=a(e);return r?[c(r),r.name]:[0,""]},stop:()=>{try{var e=[],r=[];i.map((t=>{1==c(t)?e.push(t.name):r.push(t.name)})),e.length>0&&o.info("[cron] Stopped ".concat(e.length," jobs: ").concat(e)),r.length>0&&o.warn("[cron] Could not stop ".concat(r.length," jobs: ").concat(r))}catch(t){o.error("[cron] stop() error: ".concat(t))}}},e}function fr(e,r){var t,o=e.context.miolo.logger,n=function(){var t=ee((function*(){try{var t,n,i;if(null!=(null===(t=e.http)||void 0===t?void 0:t.server))return void o.warn("[http][start] Server already running on ".concat(null==e||null===(n=e.http)||void 0===n?void 0:n.hostname,":").concat(null==e||null===(i=e.http)||void 0===i?void 0:i.port));var a=R.createServer(e.callback()),l=X({server:a}),c=function(){var t=ee((function*(){try{yield l.terminate(),delete e.http.server,o.info("[http][stop] miolo has been shutdowned from ".concat(r.hostname,":").concat(r.port))}catch(t){o.error("[http][stop] error: ".concat(t))}}));return function(){return t.apply(this,arguments)}}();e.http.server=a,e.http.stop=c,yield((e,r,t)=>new Promise(((o,n)=>{e.listen(r,t,(e=>{e?n(e):o()}))})))(a,r.port,r.hostname),o.info("[http][start] miolo is listening on ".concat(r.hostname,":").concat(r.port))}catch(u){o.error("[http][start] error: ".concat(u))}}));return function(){return t.apply(this,arguments)}}();return e.http={server:void 0,start:n,stop:(t=ee((function*(){o.warn("[http] stop() stop() function still not attached. Is server running?")})),function(){return t.apply(this,arguments)}),hostname:r.hostname,port:r.port},e}function vr(t,o){var n,i,a,l=new e,u=function(e){var t,o=r(le,e);return o.auth_type=function(e){var r,t,o;return null!=e&&null!==(r=e.auth)&&void 0!==r&&r.basic?"basic":null!=e&&null!==(t=e.auth)&&void 0!==t&&t.credentials?"credentials":null!=e&&null!==(o=e.auth)&&void 0!==o&&o.custom?"custom":"guest"}(e),o.use_catcher=!(null==o||null===(t=o.http)||void 0===t||!t.catcher_url),o}(t);we(l,u),Ve(l,u.http),(e=>{e.use(I({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:P.Z_SYNC_FLUSH},deflate:{flush:P.Z_SYNC_FLUSH},br:!1})),e.use(C(q({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))})(l),function(e){var r=e.context.miolo.logger;function t(){return(t=ee((function*(e){if(e){if(!(e instanceof Error)){var t=e;if("object"==typeof e)try{t=JSON.stringify(e)}catch(a){}var o=new Error("non-error thrown: "+t);e&&(e.name&&(o.name=e.name),e.message&&(o.message=e.message),e.stack&&(o.stack=e.stack),e.status&&(o.status=e.status),e.headers&&(o.headers=e.headers)),e=o}(this.headerSent||!this.writable)&&(e.headerSent=!0),this.app.emit("error",e,this),"ENOENT"===e.code&&(e.status=404);var n=e.status||400;this.accepts(["text","json","html"])?"number"==typeof e.status&&R.STATUS_CODES[e.status]||(e.status=500):(n=406,e.message="Unsupported type"),this.status=n;var i=this.headers["x-real-ip"]||this.headers["x-orig-ip"]||this.ip||"127.0.0.1";xe.indexOf(n)>=0?r.warn("[".concat(i,"] ").concat(this.method," ").concat(this.url," - ").concat(n,": ").concat(e.message)):r.error(e),e.headerSent?r.warn("headers were already sent, returning early"):(this.type="json",this.body=JSON.stringify(this.body||"",null,2),this.length=Buffer.byteLength(this.body),this.res.end(this.body))}}))).apply(this,arguments)}e.context.onerror=function(e){return t.apply(this,arguments)}}(l),function(e,r){var t=e.context.miolo,o=je(null==r?void 0:r.ipsum_folder,void 0,t.logger),n={driver:"memory",db:new Map,id:e=>e.request.ip,headers:{remaining:"Rate-Limit-Remaining",reset:"Rate-Limit-Reset",total:"Rate-Limit-Total"},disableHeader:!1,max:(null==r?void 0:r.max)||1e3,duration:(null==r?void 0:r.duration)||6e4,errorMessage:(null==r?void 0:r.errorMessage)||"Rate Limit reached",whitelist:(null==r?void 0:r.whitelist)||(e=>{var t=(null==r?void 0:r.whitelist_ips)||[];return!!t&&t.indexOf(e.request.ip)>=0}),blacklist:(null==r?void 0:r.blacklist)||(e=>{var t=e.request.ip,n=[...o,...qe,...(null==r?void 0:r.blacklist_ips)||[]].indexOf(t)>=0;return n&&e.miolo.logger.debug("Rejecting ".concat(s("blacklisted")," ").concat(f(t))),n})};e.use(N(n))}(l,null===(n=u.http)||void 0===n?void 0:n.ratelimit),((e,r)=>{var{favicon:t,folders:o}=r,n=t||Pe;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(Re,""))),e.use(L(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(Re,""))),e.use(M(i,J(a,{index:!1})))})(l,null===(i=u.http)||void 0===i?void 0:i.static),function(e,r){var t=function(){var e=ee((function*(e,r){return{}}));return function(r,t){return e.apply(this,arguments)}}(),o=function(){var e=ee((function*(e,r,t){}));return function(r,t,o){return e.apply(this,arguments)}}(),n={lazy:(null==r?void 0:r.lazy)||1,slow:(null==r?void 0:r.slow)||2,onStart:(null==r?void 0:r.onStart)||t,onDone:(null==r?void 0:r.onDone)||o,geoip:(null==r?void 0:r.geoip)||{enabled:!1}};function i(){return(i=ee((function*(e,r){var t,o,i,a,l,u,v=e.miolo.logger,h=(e=>{var r=[e.headers["x-real-ip"],e.headers["x-orig-ip"],e.ip,"127.0.0.1"];for(var t of r)if(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(t))return t})(e),g=T.now();e.request.body=oe(oe({},e.request.fields),e.request.files),Je.total+=1,Je[h]=(Je[h]||0)+1,e.requestId=Je.total,e.request.ip=h;var y=!0===(null==n||null===(t=n.geoip)||void 0===t?void 0:t.enabled),b={};y&&(b=Me(h,n.geoip,v)),e.request.geoip=b;var _=e.request.url.indexOf("?")>=0?e.request.url.substr(0,e.request.url.indexOf("?")):e.request.url,w=y?!0===(null===(o=b)||void 0===o?void 0:o.local)?"":null!==(i=b)&&void 0!==i&&i.country?null!==(a=b)&&void 0!==a&&a.city?" (".concat(null===(l=b)||void 0===l?void 0:l.city,", ").concat(b.country,")"):" (".concat(b.country,")"):"":"",x="".concat(f(h)).concat(w," ").concat(d(e.request.method)," ").concat(d(_)," [").concat(m(Je[h]),"/").concat(m(e.requestId),"]"),S=null!=e.request.body?JSON.stringify(e.request.body):"";v.info("".concat(x," - START")),v.debug("".concat(x," - Body: ").concat(S));var k=yield n.onStart(e,{started:g,description:"pending"});yield r();var O=null==e||null===(u=e.session)||void 0===u?void 0:u.user,E="";null!=O&&(null!=O&&O.id?E=" - uid ".concat(null==O?void 0:O.id):null!=O&&O.token&&(E=" - token ".concat(null==O?void 0:O.token)));var j,q=e.response.status,C=q;200==q?j=p:q>200&&q<=299?(j=s,e.response.redirected&&e.response.url&&(C+=" -> ".concat(e.response.url))):j=c;var I="[".concat(j(C),"]"),P=parseFloat((T.now()-g)/1e3).toFixed(2),R=P<n.lazy?p:P<n.slow?s:c,N=P<n.lazy?"Ok":P<n.slow?"lazy":"slow",F=null!=e.session?JSON.stringify(e.session):"";v.debug("".concat(x," - Session: ").concat(F.slice(0,150),"...")),v.silly("".concat(x," - Session: ").concat(F));var M=null!=e.body?JSON.stringify(e.body):"";v.debug("".concat(x," - Response: ").concat(M.slice(0,150),"...")),v.silly("".concat(x," - Response: ").concat(M)),yield n.onDone(e,k,{started:g,elapsed:P,description:N}),v.info("".concat(x," - DONE ").concat(I).concat(E," (").concat(R(N),": ").concat(R(P),")"))}))).apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))}(l,null==u||null===(a=u.http)||void 0===a?void 0:a.request),function(e){function r(){return(r=ee((function*(e){e.body=Ae}))).apply(this,arguments)}var t=new U;t.get("/robots.txt",(function(e){return r.apply(this,arguments)})),e.use(t.routes())}(l),u.use_catcher&&function(e,r){function t(){return t=ee((function*(e){var{error:r,warning:t,path:o,agent:n}=e.request.body,i=e.miolo.logger;if(t){var a="".concat(s("[JS Warning]")," on ").concat(h(o),": ").concat(JSON.stringify(t.msg),"\n")+"".concat(s("[JS Warning]")," File => ").concat(t.file,"\n")+"".concat(s("[JS Warning]")," Line => ").concat(t.line,"\n")+"".concat(s("[JS Warning]")," Col => ").concat(t.col,"\n")+"".concat(s("[JS Warning]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(s("[JS Warning]")," Agent => ").concat(n);i.warn(a)}else{var l="".concat(c("[JS Error]")," on ").concat(h(o),": ").concat(JSON.stringify(r.msg),"\n")+"".concat(c("[JS Error]")," File => ").concat(r.file,"\n")+"".concat(c("[JS Error]")," Line => ").concat(r.line,"\n")+"".concat(c("[JS Error]")," Col => ").concat(r.col,"\n")+"".concat(c("[JS Error]")," Error => ").concat(JSON.stringify(r.error),"\n")+"".concat(c("[JS Error]")," Agent => ").concat(n);i.error(l)}e.body={result:1}})),t.apply(this,arguments)}var o=new U;o.post(r,(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(l,u.http.catcher_url),"guest"==u.auth_type&&Ue(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&ze(l,u.auth.basic),"credentials"==u.auth_type&&Ye(l,u.auth.credentials,null==u?void 0:u.session,null==u?void 0:u.cache),"custom"==u.auth_type&&((e,r)=>{var t=e.context.miolo.logger;try{var o=r(e);if("function"==typeof o)e.use(o);else if(Array.isArray(o)){var n=new U;o.map((e=>{var r=e.method.toLowerCase();n[r](e.url,e.callback)})),e.use(n.routes())}}catch(i){t.error("Custom auth error: ".concat(i,"'"))}})(l,u.auth.custom);var v=null==u?void 0:u.middlewares;return v&&((e,r)=>{null!=r&&0!=r.length&&r.map((r=>{e.use(r)}))})(l,v),null!=u&&u.routes&&or(l,u.routes),null!=(null==o?void 0:o.middleware)?l.use(o.middleware):lr(l,o,u.http,null==u?void 0:u.auth,null==u||u.socket),dr(l,null==u?void 0:u.cron),fr(l,null==u?void 0:u.http),l.start=ee((function*(){yield l.context.miolo.db.init_connection(),yield l.http.start(),l.cron.start()})),l.stop=ee((function*(){l.context.miolo.db.drop_connections(),yield l.http.stop(),l.cron.stop()})),l.restart=ee((function*(){yield l.stop(),yield l.start()})),l}export{vr as miolo,ce as miolo_emailer,pe as miolo_logger,he as miolo_parser};
13
+ import e from"koa";import r from"deepmerge";import t from"node:path";import{fileURLToPath as o}from"node:url";import n from"nodemailer";import i,{readFileSync as a}from"node:fs";import{uncolor as l,red as c,red_light as u,yellow as s,cyan as d,magenta as v,gray as f,green as p,cyan_light as m,blue as h,green_bold as g,yellow_bold as y}from"tinguir";import b from"node:util";import _,{format as w,transports as S,createLogger as x}from"winston";import{intre_now as k}from"intre";import{dropConnections as O,getConnection as E}from"calustra";export{getConnection as miolo_db_connection}from"calustra";import{cacheiro as j}from"cacheiro";export{cacheiro as miolo_cacher}from"cacheiro";import R from"koa-better-body";import I from"koa-convert";import q from"koa-compress";import{constants as C}from"node:zlib";import P from"node:http";import N from"koa-ratelimit";import M from"node:https";import F from"koa-mount";import J from"koa-static";import L from"koa-favicon";import{performance as T}from"node:perf_hooks";import{Reader as A}from"@maxmind/geoip2-node";import U from"@koa/router";import z from"jwt-simple";import D from"koa-passport";import B from"passport-local";import{createSession as G}from"koa-session";import W from"@koa/cors";import H from"koa-proxies";import Y from"qs";import{renderToString as K}from"react-dom/server";import{CronJob as V}from"cron";import Z from"node:os";import Q from"diskspace";import{createHttpTerminator as X}from"http-terminator";function $(e,r,t,o,n,i,a){try{var l=e[i](a),c=l.value}catch(e){return void t(e)}l.done?r(c):Promise.resolve(c).then(o,n)}function ee(e){return function(){var r=this,t=arguments;return new Promise((function(o,n){var i=e.apply(r,t);function a(e){$(i,o,n,a,l,"next",e)}function l(e){$(i,o,n,a,l,"throw",e)}a(void 0)}))}}function re(e,r,t){return(r=function(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,r);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function te(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function oe(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?te(Object(t),!0).forEach((function(r){re(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):te(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var ne=o(import.meta.url),ie=t.dirname(ne),ae=864e6,le={name:"miolo",http:{port:8001,hostname:"localhost",catcher_url:"/sys/jserror",static:{favicon:t.resolve(ie,"../static/img/miolo.ico"),folders:{}},cors:!1,proxy:!1,ratelimit:{max:1e3,duration:6e4,errorMessage:"Rate Limit reached",whitelist_ips:[],blacklist_ips:[],ipsum_folder:"/var/ipsum"},request:{lazy:1,slow:2,onStart:void 0,onDone:void 0,geoip:{enabled:!1,db:"/var/lib/GeoIP/GeoLite2-City.mmdb",local_ips:["127.0.0.1"]}}},session:{salt:"SUPER_SALTY_YES?",secret:"SUPER_SECRET_KEY_KERE",options:{maxAge:ae,secure:!0,sameSite:"lax"}},db:{config:{dialect:"postgres",host:"localhost",port:5432,database:"miolo",user:"postgres",password:"postgres",max:5,min:0,idleTimeoutMillis:1e4},options:{tables:[]}},routes:{bodyField:void 0,crud:[{prefix:"",routes:[]}],queries:[]},log:{level:"debug",format:{locale:"en-GB"},console:{enabled:!0,level:"silly"},file:{enabled:!0,level:"silly",filename:"/var/log/afialapis/%MIOLO%.log",zippedArchive:!0,maxsize:20971520,maxFiles:20},mail:{enabled:!1,level:"warn",name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},mail:{silent:!0,options:{port:25,host:"mail.com",authMethod:"PLAIN",secure:!1,tls:{rejectUnauthorized:!1},logger:!1,debug:!1},defaults:{name:"miolo",from:"miolo@mail.com",to:"errors@mail.com"}},auth:{},render:{},middlewares:[],cron:[],cache:{default:{type:"combined",redis:{host:"127.0.0.1",port:6379},version:1,clean:!1},calustra:{namespace:"miolo-calustra",ttl:864e5},session:{namespace:"miolo-session",ttl:ae},custom:{}},socket:{enabled:!1,cli:{}}};function ce(e){var{options:r,defaults:t,silent:o}=e,i=n.createTransport(r,t);function a(){return(a=ee((function*(e){if(!0===o)return console.info("*********************************"),console.info("This mail will not be send (emailing is disabled):"),console.info(e),console.info("*********************************"),{ok:!0,silent:!0,error:void 0,messageId:void 0};try{var r=i.sendMail(e);return r.ok=!(null==r||!r.messageId),r}catch(t){return{error:t,ok:!1}}}))).apply(this,arguments)}var l={send:function(e){return a.apply(this,arguments)},verify:function(){console.info("[miolo][Verify][MAILER] Verifying..."),i.verify((function(e,r){e?(console.error("[miolo][Verify][MAILER] Verifying ERROR"),console.error(e)):console.info("[miolo][Verify][MAILER] Verifyed OK: Server is ready to take our messages")}))},options:r,defaults:t,silent:o};return l}var{combine:ue,timestamp:se,_label:de,printf:ve,errors:fe}=w,pe=function(e,r){var o,n,a,p,m=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"miolo",h={silly:f,debug:v,verbose:d,info:s,warn:u,error:c},g={silly:"sly",debug:"dbg",verbose:"vbs",info:"inf",warn:"wrn",error:"err"},y=0,w={},O=r=>{var t,o=h[r.level],n=new Date(r.timestamp).toLocaleString((null==e||null===(t=e.format)||void 0===t?void 0:t.locale)||"en"),i="".padStart(y," "),a="[".concat(m,"] ").concat(o(n)," ").concat(o(g[r.level])," ").concat(i).concat(r.message);return r.stack?"".concat(a,"\n").concat(r.stack):a},E=[];!0===(null==e||null===(o=e.console)||void 0===o?void 0:o.enabled)&&E.push(new S.Console({humanReadableUnhandledException:!0,level:(null==e||null===(p=e.console)||void 0===p?void 0:p.level)||(null==e?void 0:e.level)||"silly",handleExceptions:!0}));if(!0===(null==e||null===(n=e.file)||void 0===n?void 0:n.enabled)){var j,R,I=new S.File({filename:null!=e&&null!==(j=e.file)&&void 0!==j&&j.filename?e.file.filename.replace("%MIOLO%",m):"/var/log/afialapis/miolo.log",level:(null==e||null===(R=e.file)||void 0===R?void 0:R.level)||(null==e?void 0:e.level)||"info",humanReadableUnhandledException:!0,handleExceptions:!0,maxRetries:10});!function(e){process.on("SIGHUP",(function(){var r=t.join(e.dirname,e._getFile(!1));return function(){console.log("[miolo][file-logger] SIGHUP received. Reopening ".concat(r,"..."));try{e._stream&&(e._stream.end(),e._stream.destroy());var t=i.createWriteStream(r,e.options);t.setMaxListeners(1/0),e._size=0,e._stream=t,e.opening=!1,e.emit("open",r),console.log("[miolo][file-logger] Reopened ".concat(r," successfully"))}catch(o){console.error("[miolo][file-logger] Error reopening ".concat(r,": ").concat(o.toString()))}}()}))}(I),E.push(I);var q=r=>{var o,n,a=t.join(I.dirname,I.filename),l=O({level:"info",message:"[logger][file-rotate] ".concat(r,"\n"),timestamp:k()});try{i.accessSync(a,i.constants.F_OK),i.appendFileSync(a,l)}catch(c){i.writeFileSync(a,l,{encoding:"utf-8"})}!0===(null==e||null===(o=e.console)||void 0===o?void 0:o.enabled)&&(I.levels[(null==e||null===(n=e.console)||void 0===n?void 0:n.level)||(null==e?void 0:e.level)||"error"]>=I.levels.info&&console.log(l))};I.on("finish",(function(e){q("Log done")})),I.on("error",(function(e){q(c("Error: ".concat(e)))}))}if(!0===(null==e||null===(a=e.mail)||void 0===a?void 0:a.enabled)){var C=function(e,r){var t=function(t){_.Transport.call(this,t),t=t||{},this.level=e.level||"info",this.ename=(null==e?void 0:e.name)||r.defaults.name,this.to=e.to||r.defaults.to,this.from=e.from||r.defaults.from,this.humanReadableUnhandledException=t.humanReadableUnhandledException||!0,this.handleExceptions=t.handleExceptions||!0,this.json=t.json||!1,this.colorize=t.colorize||!1};return b.inherits(t,_.Transport),t.prototype.name="MailerLogger",t.prototype.log=function(t,o){var n=this,i="",a="";try{try{i=t.message.split("\n")[0]}catch(s){i=t.message.toString()}i=l(i)}catch(d){i="Could not create a title for the error (".concat(d.toString(),")")}try{try{a=l(t.message)}catch(d){a=t.message.toString()}}catch(d){a="Could not create a body for the error (".concat(d.toString(),")")}var c="".concat(null==e?void 0:e.name," [").concat(t.level.toUpperCase(),"] ").concat(i),u={from:this.from,to:this.to,subject:c,text:a};r.send(u,(function(){n.emit("logged"),o(null,!0)}))},t}(e.mail,r);S.MailerLogger=C,E.push(new S.MailerLogger({humanReadableUnhandledException:!0,handleExceptions:!0}))}var P=x({level:(null==e?void 0:e.level)||"silly",format:ue(fe({stack:!0}),se(),ve(O)),transports:E}),N=(e,r)=>{var t=(r,t)=>{if(null!=t&&t.section)if(t.section in w){var o=parseFloat((Date.now()-w[t.section].timeStart)/1e3).toFixed(2);r="".concat(r," (time: ").concat(o,")"),y-=w[t.section].indentIncr,e(r,t),delete w[t.section]}else{w[t.section]={indentIncr:parseInt((null==t?void 0:t.indent)||4),timeStart:Date.now()};var n=Math.max(y+w[t.section].indentIncr,0);e(r,t),y=n}else e(r,t)};return Object.defineProperty(t,"name",{value:r}),t};P.error=N(P.error,"error"),P.warn=N(P.warn,"warn"),P.info=N(P.info,"info"),P.http=N(P.http,"http"),P.verbose=N(P.verbose,"verbose"),P.debug=N(P.debug,"debug"),P.silly=N(P.silly,"silly");try{P.debug("[logger] Inited for ".concat(P.transports.map((e=>"".concat(e.name," (").concat(e.level,")").concat(e.silent?c(" SILENT!"):""))).join(",")))}catch(M){}return P};class me{parse_value_str(e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(null==e||null==e){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])throw"Wrong str value passed: ".concat(e);return r}return e.toString()}parse_field_str(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected str value not passed for ".concat(r);return o}return this.parse_value_str(e[r],t,o)}parse_value_int(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=parseInt(e);if(null==o||isNaN(o)){if(r)throw"Wrong int value passed: ".concat(e);return t}return o}parse_field_int(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected int value not passed for ".concat(r);return o}return this.parse_value_int(e[r],t,o)}parse_value_float(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,o=parseFloat(e);if(null==o||isNaN(o)){if(r)throw"Wrong float value passed: ".concat(e);return t}return e}parse_field_float(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected float value not passed for ".concat(r);return o}return this.parse_value_float(e[r],t,o)}parse_value_bool(e){if(null!=e&&null!=e)return!0===e||"true"===e||"True"===e||1===e||"1"===e||!1!==e&&"false"!==e&&"False"!==e&&0!==e&&"0"!==e&&(arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0);if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])throw"Wrong bool value passed for ".concat(name)}parse_field_bool(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected bool value not passed for ".concat(r);return o}return this.parse_value_bool(e[r],t,o)}parse_value_obj(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(null==e||null==e){if(r)throw"Wrong obj value passed: ".concat(e);return t}if(0==Object.keys(e).length){if(r)throw"Empty obj value passed: ".concat(e);return t}if("object"!=typeof e)throw"Wrong obj value passed: ".concat(e);return e}parse_field_obj(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;if(!(r in e)){if(t)throw"Expected obj value not passed for ".concat(r);return o}return this.parse_value_obj(e[r],t,o)}}var he=()=>new me;function ge(e,r,t){var o,n,i,a,l,c,u,s,d,v,f,p,m,h,g=(null==r||null===(o=r.redis)||void 0===o?void 0:o.host)||(null==e||null===(n=e.redis)||void 0===n?void 0:n.host)||(null===(i=process.env)||void 0===i?void 0:i.REDIS_HOST)||"127.0.0.1",y=(null==r||null===(a=r.redis)||void 0===a?void 0:a.port)||(null==e||null===(l=e.redis)||void 0===l?void 0:l.port)||(null===(c=process.env)||void 0===c?void 0:c.REDIS_PORT)||6379,b=(null==r||null===(u=r.redis)||void 0===u?void 0:u.username)||(null==e||null===(s=e.redis)||void 0===s?void 0:s.username)||(null===(d=process.env)||void 0===d?void 0:d.REDIS_USERNAME)||"",_=(null==r||null===(v=r.redis)||void 0===v?void 0:v.password)||(null==e||null===(f=e.redis)||void 0===f?void 0:f.password)||(null===(p=process.env)||void 0===p?void 0:p.REDIS_PASSWORD)||"",w="";b&&(w="".concat(b).concat(_?":".concat(_):"","@"));var S=(null==r||null===(m=r.redis)||void 0===m?void 0:m.url)||(null==e||null===(h=e.redis)||void 0===h?void 0:h.url)||"redis://".concat(w).concat(g,":").concat(y,"'");return{type:(null==r?void 0:r.type)||(null==e?void 0:e.type),redis:{url:S},namespace:(null==r?void 0:r.namespace)||(null==e?void 0:e.namespace),version:(null==r?void 0:r.version)||(null==e?void 0:e.version),clean:!0===(null==r?void 0:r.clean)||!0===(null==e?void 0:e.clean),ttl:(null==r?void 0:r.ttl)||(null==e?void 0:e.ttl),log:t}}function ye(e,r){return ge(e.cache.default,e.cache.calustra,r)}var be=void 0;function _e(e,r){var t=function(){var t=ee((function*(){if(null==be){be={};var t=function(e,r){var t=e.cache.default,o=e.cache.custom||{},n={};for(var[i,a]of Object.entries(o)){var l=ge(t,a,r);l.namespace=l.namespace||"miolo-".concat(i),n[i]=l}return n}(e,r);for(var[o,n]of Object.entries(t)){var i=yield j(n);be[o]=i}}return be}));return function(){return t.apply(this,arguments)}}(),o=function(){var e=ee((function*(e){return(yield t())[e]}));return function(r){return e.apply(this,arguments)}}(),n=function(){var e=ee((function*(){var e=yield t();return Object.keys(e)}));return function(){return e.apply(this,arguments)}}(),i=function(){var e=ee((function*(e,r){var n=yield t();r&&(yield o(e)).unsetAll();delete n[e]}));return function(r,t){return e.apply(this,arguments)}}(),a=function(){var e=ee((function*(e){if(e){var r=yield t();for(var[o,n]of Object.entries(r))yield n.unsetAll()}be={}}));return function(r){return e.apply(this,arguments)}}();return{get_cache:o,get_cache_names:n,drop_cache:i,drop_caches:a}}var we=(e,r)=>{var t=ce(r.mail),o=pe(r.log,t,null==r?void 0:r.name),n=he(),i=function(e,r){var t,o,n=function(){var t=ee((function*(t){var o=oe(oe(oe({},e.db.options),t||{}),{},{log:r,cache:ye(e,r)}),n=yield E(e.db.config,o);return n.get_model=n.getModel,n}));return function(e){return t.apply(this,arguments)}}(),i=function(){var t=ee((function*(t,o){var n=oe(oe(oe({},e.db.options),o||{}),{},{log:r});return(yield E(e.db.config,n)).get_model(t)}));return function(e,r){return t.apply(this,arguments)}}(),a={init_connection:(o=ee((function*(){return yield n({reset:!0})})),function(){return o.apply(this,arguments)}),fly_connection:(t=ee((function*(){return yield n({cache:!1})})),function(){return t.apply(this,arguments)}),get_connection:n,get_model:i,drop_connections:O};return a}(r,o),a=_e(r,o),l={config:oe({},r),emailer:t,logger:o,parser:n,db:i,cache:a};function c(){return(c=ee((function*(e,r){e.miolo=l,yield r()}))).apply(this,arguments)}e.use((function(e,r){return c.apply(this,arguments)})),e.context.miolo=l},Se=[401,403];var xe="/var/ipsum",ke="ipsum.txt";function Oe(e,r){var t=r?r.error:console.error;if(!e)return[];try{var o=[];return e.split("\n").filter((e=>e.indexOf("#")<0)).map((e=>{var[r,t]=e.split("\t");parseInt(t)>=1&&o.push(r)})),o}catch(n){return t("[cron][".concat(d("IPsum"),"] Error getting IPs from content")),[]}}function Ee(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:xe,r=arguments.length>1?arguments[1]:void 0,o=arguments.length>2?arguments[2]:void 0,n=o?o.error:console.error,a=o?o.debug:console.log;if(i.existsSync(e))try{a("[cron][".concat(d("IPsum"),"] Updating file...")),function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"https://raw.githubusercontent.com/stamparm/ipsum/master/ipsum.txt",t=arguments.length>2?arguments[2]:void 0,o=t?t.error:console.error;M.get(r,(r=>{var t=[];r.on("data",(e=>{t.push(e)})).on("end",(()=>{var r=Buffer.concat(t).toString();e(r)}))})).on("error",(r=>{o("[cron][".concat(d("IPsum"),"] Error downloading remote file (").concat(r.toString(),")")),e("")}))}((n=>{var l=t.join(e,ke);i.writeFileSync(l,n,{encoding:"utf8",flag:"w"});var c=n.split("\n").length,u=Oe(n,o),s=u.length;a("[cron][".concat(d("IPsum"),"] File downloaded. ").concat(c," ips on the list (").concat(s," appearing in ").concat(1," or more lists)")),r&&r(u)}))}catch(l){n("[cron][".concat(d("IPsum"),"] Error ").concat(l," updating the file"))}else n("[cron][".concat(d("IPsum"),"] Folder ").concat(e," does not exist"))}function je(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:xe,r=arguments.length>1?arguments[1]:void 0,o=arguments.length>2?arguments[2]:void 0,n=o?o.debug:console.log,a=o?o.warn:console.log,l=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:xe,r=arguments.length>1?arguments[1]:void 0,o=r?r.error:console.error;if(!i.existsSync(e))return r&&o("[cron][".concat(d("IPsum"),"] Folder ").concat(e," does not exist")),[];var n=t.join(e,ke);return i.existsSync(n)?Oe(i.readFileSync(n,{encoding:"utf8"}),r):(r&&o("[cron][".concat(d("IPsum"),"] File ").concat(n," does not exist")),[])}(e,o);return l.length>0?(r&&r(l),n("[cron][".concat(d("IPsum"),"] File contains ").concat(l.length," ips")),l):(a("[cron][".concat(d("IPsum"),"] File is empty. Launching update...")),Ee(e,r,o),[])}var Re=["52.212.247.108","54.218.32.58","170.106.82.193","110.166.71.39","39.107.54.8","205.210.31.240 ","134.122.52.203","165.232.105.25","66.249.73.200","35.206.153.204","199.244.88.227","198.12.222.107","212.128.118.10"];var Ie=o(import.meta.url),qe=t.dirname(Ie),Ce=t.resolve(qe,"./miolo.ico"),Pe=t.resolve(qe,"../../../.."),Ne=void 0,Me=["127.0.0.1","::1:"];var Fe=function(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:console;if(function(e){return[...Me,...(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[])||[]].indexOf(e)>=0}(e,null==r?void 0:r.local_ips))return{local:!0,country:"",city:""};try{var o,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/var/lib/GeoIP/GeoLite2-City.mmdb",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:console;try{if(null!=Ne)return Ne;var t=i.readFileSync(e);return Ne=A.openBuffer(t)}catch(o){return r.error("[geoip] Error initing:"),void r.error(o)}}(null==r?void 0:r.db,t),a=n.city(e);return{country:a.country.isoCode,city:null===(o=a.city)||void 0===o||null===(o=o.names)||void 0===o?void 0:o.en}}catch(l){t.error("[geoip] Error localizing IP ".concat(e,":")),t.error(l)}return{country:"",city:""}},Je={total:0};var Le=o(import.meta.url),Te=t.dirname(Le),Ae=a(t.resolve(Te,"./robots.txt"),"utf8");var Ue=(e,r,t)=>{var o=e.context.miolo.logger,n=()=>{try{var{make_guest_token:e}=r;if(null!=e)return e(t||{})}catch(n){}return function(e,r){var t=Math.random().toString(),o=null==e?void 0:e.secret;o||(o="miolo_unsafe_secret",r.error("Guest token made with an unsafe secret string. Please, configure your own through session.secret."));var n={admin:!1,buid:t};return z.encode(n,o)}(t||{},o)};function i(){return i=ee((function*(e,r){var i=e.cookies.get("token")||e.headers.token;void 0!==i&&0!=i.length||(i=yield n(),o.debug("Guest token conceeded"));var a=function(e){var r,t=null==e||null===(r=e.options)||void 0===r?void 0:r.maxAge;isNaN(t)&&(t=86400);var o=new Date;return o.setSeconds(o.getSeconds()+t),{expires:o,httpOnly:!1}}(t);e.cookies.set("token",i,a),e.session={user:{name:"guest"},authenticated:!0,token:i},yield r()})),i.apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))},ze=(e,r)=>{var{auth_user:t,realm:o,paths:n}=r;function i(e,r){return a.apply(this,arguments)}function a(){return(a=ee((function*(r,n){var i;try{i=(e=>{var r,t=null==e||null===(r=e.headers)||void 0===r?void 0:r.authorization;if(t)try{t=t.replace("Basic ","");try{t=Buffer.from(t,"base64").toString()}catch(i){t=atob(t)}var[o,n]=t.split(":");return{username:o,password:n}}catch(i){return}})(r.request)}catch(c){}var a=()=>{r.session={user:void 0,authenticated:!1},r.body={user:void 0,authenticated:!1},r.response.status=401,r.response.headers["WWW-Authenticate"]='Basic realm="'+o.replace(/"/g,'\\"')+'"'};if(!i)return a();var l=yield t(i.username,i.password,e.context.miolo);if(!1===l||null==l)return a();r.session={user:l,authenticated:!0},yield n()}))).apply(this,arguments)}o||(o="Secure Area"),null==n||0==n.length?e.use(i):n.map((r=>e.use(F(r,i))))};class De{constructor(e,r){this.options=e,this.logger=r,this._cache=void 0}init_cache(){var e=this;return ee((function*(){return null==e._cache&&(e.logger.silly("[session-store] Initing store"),e._cache=yield j(e.options)),e._cache}))()}get(e,r,t){var o=this;return ee((function*(){var{rolling:r,ctx:n}=t,i=yield o.init_cache(),a=yield i.getItem(e);try{var l=JSON.parse(a);return o.logger.silly("[session-store] Get session for ".concat(e,": ").concat(JSON.stringify(l))),l}catch(c){return void o.logger.silly("[session-store] No session for ".concat(e))}}))()}set(e,r,t,o){var n=this;return ee((function*(){var{rolling:t,changed:i,ctx:a}=o;n.logger.silly("[session-store] Set session for ".concat(e));var l=yield n.init_cache(),c=void 0;try{c=JSON.stringify(r)}catch(u){}yield l.setItem(e,c)}))()}destroy(e,r){var t=this;return ee((function*(){var{ctx:o}=r;t.logger.silly("[session-store] Destroy session for ".concat(e));var n=yield t.init_cache();yield n.unsetItem(e)}))()}}function Be(e,r){var t=function(e,r){return ge(e.cache.default,e.cache.session,r)}({cache:e},r);return new De(t,r)}var Ge=(e,r,t)=>r(null,e.id),We=(e,r,t)=>{r(Error("You need to define auth.passport.find_user_by_id"),null)},He=(e,r,t,o)=>{t(Error("You need to define auth.passport.local_auth_user"),null)},Ye=(e,r,t,o)=>{var{get_user_id:n,find_user_by_id:i,local_auth_user:a,url_login:l,url_logout:c,url_login_redirect:u,url_logout_redirect:s}=r,d=n||Ge,v=i||We,f=a||He,p=l||"/login",m=c||"/logout",h=new B.Strategy(((r,t,o)=>{f(r,t,o,e.context.miolo)}));function g(){return(g=ee((function*(e,r){try{e.session.authenticated&&(e.session.user=e.state.user)}catch(t){}yield r()}))).apply(this,arguments)}!function(e,r,t){var o=Be(t,e.context.miolo.logger);e.keys=[r.secret||"*secret*"];var n=oe({store:o},r.options||{});e.use(G(n,e))}(e,t,o),D.serializeUser(((r,t)=>{process.nextTick((function(){d(r,t,e.context.miolo)}))})),D.deserializeUser(((r,t)=>{process.nextTick((function(){v(r,t,e.context.miolo)}))})),D.use(h),e.use(D.initialize()),e.use(D.session()),e.use((function(e,r){return g.apply(this,arguments)}));var y=function(){var e=ee((function*(e,r){e.session.authenticated?(e.session.user=void 0,e.session.authenticated=!1,yield e.logout(),e.body={user:void 0,authenticated:!1},null!=s&&e.redirect(s)):(e.body={user:void 0,authenticated:!1},e.response.status=401)}));return function(r,t){return e.apply(this,arguments)}}(),b=new U;b.post(p,((e,r)=>D.authenticate("local",function(){var r=ee((function*(r,t,o,n){if(!1!==t)return e.session.user=e.state.user,e.session.authenticated=!0,e.body={user:t,authenticated:!0},null!=u&&e.redirect(u),yield e.login(t);e.session.user=void 0,e.session.authenticated=!1,e.body={user:void 0,authenticated:!1,info:o,error:r},e.response.status=401}));return function(e,t,o,n){return r.apply(this,arguments)}}())(e))),b.get(m,y),b.post(m,y),e.use(b.routes())},Ke=(e,r,t)=>{try{var o=e[r];if(null!=o&&0!=o)return t(o)}catch(n){}},Ve=(e,r)=>{var t=e.context.miolo.logger;Ke(r,"cors",(r=>{if("simple"==r)t.debug("[http] Setting CORS the simple way"),e.use(function(){var e=ee((function*(e,r){e.set("[http] Access-Control-Allow-Origin","*"),e.set("[http] Access-Control-Expose-Headers","SourceMap,X-SourceMap"),yield r()}));return function(r,t){return e.apply(this,arguments)}}());else{var o=(e=>"object"==typeof e?e:{})(r);t.debug("[http] Setting CORS headers for ".concat(JSON.stringify(o))),e.use(W(o))}})),Ke(r,"proxy",(r=>{var[o,n]=(e=>{var r,t,o,n;return null==e&&(e={}),[(null===(r=e)||void 0===r?void 0:r.path)||"/",{target:(null===(t=e)||void 0===t?void 0:t.target)||"https://proxy.miolo.com",changeOrigin:null==(null===(o=e)||void 0===o?void 0:o.changeOrigin)||e.changeOrigin,logs:null==(null===(n=e)||void 0===n?void 0:n.logs)||e.logs}]})(r);t.debug("[http] Setting Proxy for ".concat(o," to ").concat(n.target," ")),e.use(H(o,n))}))},Ze=function(){var e=ee((function*(e){return!0}));return function(r){return e.apply(this,arguments)}}(),Qe=function(){var e=ee((function*(e,r){return r}));return function(r,t){return e.apply(this,arguments)}}(),Xe={require:!1,action:"redirect",redirect_url:"/",error_code:401},$e={use:!1,fieldNames:{created_by:"created_by",last_update_by:"last_update_by"}};function er(e){var r=e.indexOf("?")>=0?e.substr(e.indexOf("?")+1):"";return r?Y.parse(r):{}}function rr(e,r){function t(e){return o.apply(this,arguments)}function o(){return(o=ee((function*(r){var t=r.request.fields;try{r.miolo.logger.debug("[router] ".concat(e.name,"() Calling with params ").concat(JSON.stringify(t)))}catch(n){r.miolo.logger.debug("[router] ".concat(e.name,"()Calling with params (?)"))}var o=yield e(r.miolo,t);try{r.miolo.logger.debug("[router] ".concat(e.name,"() Called with result ").concat(JSON.stringify(o)))}catch(n){r.miolo.logger.debug("[router] ".concat(e.name,"() Called with result (?)"))}r.body=o}))).apply(this,arguments)}return Object.defineProperty(t,"name",{value:e.name,writable:!1}),t}function tr(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n=function(){var e=ee((function*(e,t){var o,n=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated),i=r.auth;return!(!0===i.require||"read-only"===i.require&&"w"===t)||(n||("error"==i.action?(e.miolo.logger.error("[router] Unauthorized access. Throwing error ".concat(i.error_code)),e.throw(i.error_code,null,{})):"redirect"==i.action?(e.miolo.logger.warn("[router] Unauthorized access. Redirecting to ".concat(i.redirect_url)),e.redirect(i.redirect_url)):(e.miolo.logger.error("[router] Crud path ".concat(r.url," specified auth but no action")),e.body={})),n)}));return function(r,t){return e.apply(this,arguments)}}(),i=function(){var e=ee((function*(e,t,o){var i=yield e.miolo.db.get_model(r.name);if(!i)throw e.miolo.logger.error("[router] Could not get model for ".concat(r.name)),new Error("[router] Could not get model for ".concat(r.name));var a,l={};try{var c;if(!(yield n(e,t)))return void(e.body={});var u=!0;if(null!=r&&r.before&&(u=yield r.before(e)),!u)return void(e.body={});var s=null==e||null===(c=e.session)||void 0===c||null===(c=c.user)||void 0===c?void 0:c.id,d={};!0===r.useUserFields.use&&(d=r.useUserFields.fieldNames);var v={uid:s,fieldNames:d};l=yield o(i,v),null!=r&&r.after&&(l=yield r.after(e,l))}catch(f){e.miolo.logger.error("[router] Unexpected error on CRUD ".concat(r.name,"-").concat(t)),e.miolo.logger.error(f)}a=l,l=null==r.bodyField?a:{[r.bodyField]:a},e.body=l}));return function(r,t,o){return e.apply(this,arguments)}}(),a=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.read(o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),l=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.keyList(o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),c=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.find(o.id,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),u=function(){var e=ee((function*(e){yield i(e,"r",function(){var r=ee((function*(r,t){var o=er(e.request.url),n={transaction:void 0};return yield r.distinct(o.distinct_field,o,n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),s=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o,n=e.request.fields;null!=t&&null!==(o=t.fieldNames)&&void 0!==o&&o.created_by&&(n[t.fieldNames.created_by]=t.uid);var i={transaction:void 0};return yield r.insert(n,i)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),d=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o,n=e.request.fields;null!=t&&null!==(o=t.fieldNames)&&void 0!==o&&o.last_update_by&&(n[t.fieldNames.last_update_by]=t.uid);var i={transaction:void 0};return yield r.update(n,{id:n.id},i)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),v=function(){var e=ee((function*(e){yield i(e,"w",function(){var r=ee((function*(r,t){var o=e.request.fields,n={transaction:void 0};return yield r.delete({id:o.id},n)}));return function(e,t){return r.apply(this,arguments)}}())}));return function(r){return e.apply(this,arguments)}}(),f=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);f.indexOf("//")>=0;)f=f.replace(/\/\//g,"/");t.debug("[router] Routing table ".concat(r.name," to ").concat(f));var p=r.mode.indexOf("r")>=0,m=r.mode.indexOf("w")>=0,h=r.mode.indexOf("u")>=0||m;p&&(e.get("".concat(f,"/find"),(e=>c(e))),e.get("".concat(f,"/read"),(e=>a(e))),e.get("".concat(f,"/distinct"),(e=>u(e))),e.get("".concat(f,"/key_list"),(e=>l(e)))),h&&(e.post("".concat(f,"/save"),(e=>s(e))),e.post("".concat(f,"/update"),(e=>d(e)))),m&&e.post("".concat(f,"/delete"),(e=>v(e)))}))}))}function or(e,t){var o=e.context.miolo.logger,n=new U;try{var i=(e=>{var t=(null==e?void 0:e.crud)||[];if(!t)return[];if(!Array.isArray(t))return[];var o=[];return t.map((t=>{var n=null==t?void 0:t.routes;if(n&&Array.isArray(n)){var i=(null==t?void 0:t.bodyField)||(null==e?void 0:e.bodyField),a=(null==t?void 0:t.before)||(null==e?void 0:e.before)||Ze,l=(null==t?void 0:t.after)||(null==e?void 0:e.after)||Qe,c=r.all([Xe,(null==e?void 0:e.auth)||{},(null==t?void 0:t.auth)||{}]),u=[];for(var s of n){var d="string"==typeof s?{name:s}:s;if(d.name){var v={name:d.name,url:(null==d?void 0:d.url)||d.name,mode:(null==d?void 0:d.mode)||"rw",bodyField:(null==d?void 0:d.bodyField)||i,useUserFields:r.all([$e,(null==d?void 0:d.useUserFields)||{}]),auth:r.all([c,(null==d?void 0:d.auth)||{}]),before:(null==d?void 0:d.before)||a,after:(null==d?void 0:d.after)||l};u.push(v)}}u.length>0&&o.push({prefix:(null==t?void 0:t.prefix)||"",routes:u})}})),o})(t),a=(e=>{var t=(null==e?void 0:e.queries)||[];if(!t)return[];if(!Array.isArray(t))return[];var o=[];return t.map((t=>{var n=null==t?void 0:t.routes;if(n&&Array.isArray(n)){var i=(null==t?void 0:t.before)||(null==e?void 0:e.before)||Ze,a=(null==t?void 0:t.after)||(null==e?void 0:e.after)||Qe,l=r.all([Xe,(null==t?void 0:t.auth)||{},(null==e?void 0:e.auth)||{}]),c=[];for(var u of n)if(u.url){var s=void 0;if(u.callback||u.callback_fn){s=u.callback||rr(u.callback_fn);var d={url:u.url,method:(null==u?void 0:u.method)||"GET",callback:s,auth:r.all([l,(null==u?void 0:u.auth)||{}]),before:(null==u?void 0:u.before)||i,after:(null==u?void 0:u.after)||a};c.push(d)}}o.push({prefix:(null==t?void 0:t.prefix)||"",routes:c})}})),o})(t),l=i.length>0,c=a.length>0;if(!l&&!c)throw"[router] Could not get any route from the passed <routes> param";l&&tr(n,i,o),c&&function(e,r,t){r.map((r=>{var o=r.prefix;r.routes.map((r=>{for(var n,i=o?"/".concat(o,"/").concat(r.url):"/".concat(r.url);i.indexOf("//")>=0;)i=i.replace(/\/\//g,"/");var a=r.auth,l=!0===a.require||"read-only"===a.require&&"POST"===r.method;t.debug("[router] Routing ".concat((null===(n=r.callback)||void 0===n?void 0:n.name)||"callback"," to ").concat(r.method," ").concat(i).concat(l?" (auth)":""));var c=function(){var e=ee((function*(e){if(l){var t,o=!0===(null==e||null===(t=e.session)||void 0===t?void 0:t.authenticated);return o||("error"==a.action?(e.miolo.logger.error("Unauthorized access. Throwing error ".concat(a.error_code)),e.throw(a.error_code,null,{})):"redirect"==a.action?(e.miolo.logger.warn("Unauthorized access. Redirecting to ".concat(a.redirect_url)),e.redirect(a.redirect_url)):(e.miolo.logger.error("Route path ".concat(r.url," specified auth but no action")),e.body={})),o}return!0}));return function(r){return e.apply(this,arguments)}}(),u=function(){var e=ee((function*(e){var t={};try{try{var o;if("GET"==r.method&&(null===(o=e.request)||void 0===o||!o.fields)&&e.request.url.indexOf("?")>0){var n=er(e.request.url);n&&(e.request.fields=n)}}catch(u){e.miolo.logger.error("[router] Error while trying to qet query params for ".concat(e.request.url))}if(!(yield c(e)))return;var a=!0;if(null!=r&&r.before&&(a=yield r.before(e)),!a)return;t=yield r.callback(e),null!=r&&r.after&&(t=yield r.after(e,t))}catch(s){var l;e.miolo.logger.error("[router] Unexpected error on Query ".concat(null===(l=r.callback)||void 0===l?void 0:l.name," at ").concat(i)),e.miolo.logger.error(s)}return t}));return function(r){return e.apply(this,arguments)}}(),s=r.method.toLowerCase();e[s](i,(e=>u(e,r)))}))}))}(n,a,o)}catch(u){o.error("[router] Error initing the router."),o.error("[router] routes:"),o.error(t),o.error(u)}e.use(n.routes())}var nr=o(import.meta.url),ir=t.dirname(nr),ar=a(t.resolve(ir,"fallback_index.html"),"utf8");function lr(e,r,t,o,n){var i=(null==r?void 0:r.html)||ar;i.indexOf("{context}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {context} template variable"),i.indexOf("{children}")<0&&e.context.miolo.logger.error("Provided HTML for rendering has no {children} template variable");var a=function(){var e=ee((function*(e){var t={};try{var o;null!=r&&null!==(o=r.ssr)&&void 0!==o&&o.loader&&(t=yield r.ssr.loader(e))}catch(c){var n,i="URL: ".concat(e.request.url,"\nFields: ").concat(JSON.stringify((null===(n=e.request)||void 0===n?void 0:n.fields)||{})),a=null!=c&&c.stack?"".concat(c.toString(),"\n").concat(c.stack):c.toString(),l="".concat("Error produced by loader in render.ssr middleware","\n").concat(i,"\n").concat(a);e.miolo.logger.error(l)}return t}));return function(r){return e.apply(this,arguments)}}();function l(){return(l=ee((function*(e){var n,l,c=((e,r,t)=>{var o,n,i=!0===(null==e||null===(o=e.session)||void 0===o?void 0:o.authenticated);return{config:r,user:null==e||null===(n=e.session)||void 0===n?void 0:n.user,authenticated:i,ssr_data:t,extra:null==e?void 0:e.extra}})(e,{hostname:null==t?void 0:t.hostname,port:null==t?void 0:t.port,catcher_url:null==t?void 0:t.catcher_url,login_url:null==o||null===(n=o.credentials)||void 0===n?void 0:n.url_login,logout_url:null==o||null===(l=o.credentials)||void 0===l?void 0:l.url_logout},yield a(e)),u=((e,t)=>{var o="";try{var n;null!=r&&null!==(n=r.ssr)&&void 0!==n&&n.renderer?o=K(r.ssr.renderer(e,t)):e.miolo.logger.warn("Missing renderer in render.ssr middleware")}catch(a){e.miolo.logger.error("Error in renderer (render.ssr middleware):\n".concat(a.toString())),o="\n <div>\n MIOLO: Error SSR renderer: ".concat(a.toString(),"\n </div> \n ")}return i.replace("{context}",JSON.stringify(t,null,2)).replace("{children}",o)})(e,c);e.miolo.logger.debug("[render-ssr] Returned body is ".concat(Buffer.byteLength(u,"utf8")," bytes")),e.body=u}))).apply(this,arguments)}e.use((function(e){return l.apply(this,arguments)}))}function cr(e){return e?e/1e6:0}function ur(e){return e?e/1e6:0}function sr(){return{name:"SysCheck",cronTime:"0,15,30,45 * * * *",onTick:(e,r)=>{var t,o,n,i;t=e.logger,o=Math.round(cr(Z.freemem()),2),n=Math.round(cr(Z.totalmem()),2),(i=Math.round(100*o/n,2))>80?t.error("[cron][".concat(d("SysCheck"),"] RAM ").concat(s(o)," MB used of ").concat(p(n)," MB (").concat(s(i)," %)")):t.info("[cron][".concat(d("SysCheck"),"] RAM ").concat(s(o)," MB used of ").concat(p(n)," MB (").concat(s(i)," %)")),Q.check("/",(function(e,r){var o=Math.round(ur(r.used),2),n=Math.round(ur(r.total),2),i=Math.round(ur(r.free),2);i<1?t.error("[cron][".concat(d("SysCheck"),"] DISK ").concat(s(o)," GB used of ").concat(p(n)," GB (").concat(s(i)," GB free)")):t.info("[cron][".concat(d("SysCheck"),"] DISK ").concat(s(o)," GB used of ").concat(p(n)," GB (").concat(s(i)," GB free)"))}))},start:!0}}function dr(e,r){var t=e.context.miolo,o=t.logger,n=[sr(),{name:"IPsum",cronTime:"0 0 * * *",onTick:(e,r)=>{Ee(e.config.http.ratelimit.ipsum_folder||xe,(r=>{e.logger.debug("[cron][".concat(d("IPsum"),"] File downloaded. ").concat(p(r.length)," ips will be ").concat(s("blacklisted"),"!"))}),e.logger)},start:!0},...r||[]],i=[];n.map((e=>{var r=e.name,o=function(e,r){var t,o=e.logger,n=null!=r&&null!==(t=r.onTick)&&void 0!==t&&t.name&&"onTick"!=r.onTick.name?r.onTick.name:"custom",i=(null==r?void 0:r.name)||n;return new V((null==r?void 0:r.cronTime)||"*/5 * * * *",(t=>{try{o.silly("[cron][Custom Job ".concat(d(i),"] ").concat(g("ticks!"))),r.onTick(e,t)}catch(n){o.error("[cron][Custom Job ".concat(d(i),"] Error at onTick()")),o.error(n)}}),(()=>{if(o.silly("[cron][Custom Job ".concat(d(i),"] ").concat(g("completed!"))),null!=r&&r.onComplete)try{r.onComplete(e)}catch(t){o.error("[cron][Custom Job ".concat(d(i),"] Error at onComplete()")),o.error(t)}}),!1,(null==r?void 0:r.timezone)||"Europe/Madrid")}(t,e);i.push({name:r,job:o,running:!1})}));var a=e=>{var r;return(r="number"==typeof e?i[e]:i.filter((r=>r.name==e))[0])||o.error("[cron] Job ".concat(d(e)," Not Found")),r},l=e=>{try{return e.job.start(),e.running=!0,o.debug("[cron][Job ".concat(d(e.name),"] ").concat(g("started!"))),1}catch(r){return o.error("[cron][Job ".concat(d(e.name),"] Error starting it")),o.error(r),0}},c=e=>{try{return e.job.stop(),e.running=!1,o.debug("[cron][Job ".concat(d(e.name),"] ").concat(y("stopped!"))),1}catch(r){return o.error("[cron][Job ".concat(d(e.name),"] Error stopping it")),o.error(r),0}};return e.cron={jobs:i,start_one:e=>{var r=a(e);return r?[l(r),r.name]:[0,""]},start:()=>{try{var e=[],r=[];i.map((t=>{1==l(t)?e.push(t.name):r.push(t.name)})),e.length>0&&o.info("[cron] Started ".concat(e.length," jobs: ").concat(e)),r.length>0&&o.warn("[cron] Could not start ".concat(r.length," jobs: ").concat(r))}catch(t){o.error("[cron] start() error: ".concat(t))}},stop_one:e=>{var r=a(e);return r?[c(r),r.name]:[0,""]},stop:()=>{try{var e=[],r=[];i.map((t=>{1==c(t)?e.push(t.name):r.push(t.name)})),e.length>0&&o.info("[cron] Stopped ".concat(e.length," jobs: ").concat(e)),r.length>0&&o.warn("[cron] Could not stop ".concat(r.length," jobs: ").concat(r))}catch(t){o.error("[cron] stop() error: ".concat(t))}}},e}function vr(e,r){var t,o=e.context.miolo.logger,n=function(){var t=ee((function*(){try{var t,n,i;if(null!=(null===(t=e.http)||void 0===t?void 0:t.server))return void o.warn("[http][start] Server already running on ".concat(null==e||null===(n=e.http)||void 0===n?void 0:n.hostname,":").concat(null==e||null===(i=e.http)||void 0===i?void 0:i.port));var a=P.createServer(e.callback()),l=X({server:a}),c=function(){var t=ee((function*(){try{yield l.terminate(),delete e.http.server,o.info("[http][stop] miolo has been shutdowned from ".concat(r.hostname,":").concat(r.port))}catch(t){o.error("[http][stop] error: ".concat(t))}}));return function(){return t.apply(this,arguments)}}();e.http.server=a,e.http.stop=c,yield((e,r,t)=>new Promise(((o,n)=>{e.listen(r,t,(e=>{e?n(e):o()}))})))(a,r.port,r.hostname),o.info("[http][start] miolo is listening on ".concat(r.hostname,":").concat(r.port))}catch(u){o.error("[http][start] error: ".concat(u))}}));return function(){return t.apply(this,arguments)}}();return e.http={server:void 0,start:n,stop:(t=ee((function*(){o.warn("[http] stop() stop() function still not attached. Is server running?")})),function(){return t.apply(this,arguments)}),hostname:r.hostname,port:r.port},e}function fr(t,o){var n,i,a,l=new e,u=function(e){var t,o=r(le,e);return o.auth_type=function(e){var r,t,o;return null!=e&&null!==(r=e.auth)&&void 0!==r&&r.basic?"basic":null!=e&&null!==(t=e.auth)&&void 0!==t&&t.credentials?"credentials":null!=e&&null!==(o=e.auth)&&void 0!==o&&o.custom?"custom":"guest"}(e),o.use_catcher=!(null==o||null===(t=o.http)||void 0===t||!t.catcher_url),o}(t);we(l,u),Ve(l,u.http),(e=>{e.use(q({filter:function(e){return"application/json"==e||"text/html"==e},gzip:{flush:C.Z_SYNC_FLUSH},deflate:{flush:C.Z_SYNC_FLUSH},br:!1})),e.use(I(R({formLimit:"100mb",jsonLimit:"100mb",bufferLimit:"100mb"})))})(l),function(e){var r=e.context.miolo.logger;function t(){return(t=ee((function*(e){if(e){if(!(e instanceof Error)){var t=e;if("object"==typeof e)try{t=JSON.stringify(e)}catch(a){}var o=new Error("non-error thrown: "+t);e&&(e.name&&(o.name=e.name),e.message&&(o.message=e.message),e.stack&&(o.stack=e.stack),e.status&&(o.status=e.status),e.headers&&(o.headers=e.headers)),e=o}(this.headerSent||!this.writable)&&(e.headerSent=!0),this.app.emit("error",e,this),"ENOENT"===e.code&&(e.status=404);var n=e.status||400;this.accepts(["text","json","html"])?"number"==typeof e.status&&P.STATUS_CODES[e.status]||(e.status=500):(n=406,e.message="Unsupported type"),this.status=n;var i=this.headers["x-real-ip"]||this.headers["x-orig-ip"]||this.ip||"127.0.0.1";Se.indexOf(n)>=0?r.warn("[".concat(i,"] ").concat(this.method," ").concat(this.url," - ").concat(n,": ").concat(e.message)):r.error(e),e.headerSent?r.warn("headers were already sent, returning early"):(this.type="json",this.body=JSON.stringify(this.body||"",null,2),this.length=Buffer.byteLength(this.body),this.res.end(this.body))}}))).apply(this,arguments)}e.context.onerror=function(e){return t.apply(this,arguments)}}(l),function(e,r){var t=e.context.miolo,o=je(null==r?void 0:r.ipsum_folder,void 0,t.logger),n={driver:"memory",db:new Map,id:e=>e.request.ip,headers:{remaining:"Rate-Limit-Remaining",reset:"Rate-Limit-Reset",total:"Rate-Limit-Total"},disableHeader:!1,max:(null==r?void 0:r.max)||1e3,duration:(null==r?void 0:r.duration)||6e4,errorMessage:(null==r?void 0:r.errorMessage)||"Rate Limit reached",whitelist:(null==r?void 0:r.whitelist)||(e=>{var t=(null==r?void 0:r.whitelist_ips)||[];return!!t&&t.indexOf(e.request.ip)>=0}),blacklist:(null==r?void 0:r.blacklist)||(e=>{var t=e.request.ip,n=[...o,...Re,...(null==r?void 0:r.blacklist_ips)||[]].indexOf(t)>=0;return n&&e.miolo.logger.debug("Rejecting ".concat(s("blacklisted")," ").concat(v(t))),n})};e.use(N(n))}(l,null===(n=u.http)||void 0===n?void 0:n.ratelimit),((e,r)=>{var{favicon:t,folders:o}=r,n=t||Ce;for(var[i,a]of(e.context.miolo.logger.debug("[static] Serving favicon from ".concat(n.replace(Pe,""))),e.use(L(n)),Object.entries(o)))e.context.miolo.logger.debug("[static] Mounting static folder ".concat(i," => ").concat(a.replace(Pe,""))),e.use(F(i,J(a,{index:!1})))})(l,null===(i=u.http)||void 0===i?void 0:i.static),function(e,r){var t=function(){var e=ee((function*(e,r){return{}}));return function(r,t){return e.apply(this,arguments)}}(),o=function(){var e=ee((function*(e,r,t){}));return function(r,t,o){return e.apply(this,arguments)}}(),n={lazy:(null==r?void 0:r.lazy)||1,slow:(null==r?void 0:r.slow)||2,onStart:(null==r?void 0:r.onStart)||t,onDone:(null==r?void 0:r.onDone)||o,geoip:(null==r?void 0:r.geoip)||{enabled:!1}};function i(){return(i=ee((function*(e,r){var t,o,i,a,l,u,f=e.miolo.logger,h=(e=>{var r=[e.headers["x-real-ip"],e.headers["x-orig-ip"],e.ip,"127.0.0.1"];for(var t of r)if(/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(t))return t})(e),g=T.now();e.request.body=oe(oe({},e.request.fields),e.request.files),Je.total+=1,Je[h]=(Je[h]||0)+1,e.requestId=Je.total,e.request.ip=h;var y=!0===(null==n||null===(t=n.geoip)||void 0===t?void 0:t.enabled),b={};y&&(b=Fe(h,n.geoip,f)),e.request.geoip=b;var _=e.request.url.indexOf("?")>=0?e.request.url.substr(0,e.request.url.indexOf("?")):e.request.url,w=y?!0===(null===(o=b)||void 0===o?void 0:o.local)?"":null!==(i=b)&&void 0!==i&&i.country?null!==(a=b)&&void 0!==a&&a.city?" (".concat(null===(l=b)||void 0===l?void 0:l.city,", ").concat(b.country,")"):" (".concat(b.country,")"):"":"",S="".concat(v(h)).concat(w," ").concat(d(e.request.method)," ").concat(d(_)," [").concat(m(Je[h]),"/").concat(m(e.requestId),"]"),x=null!=e.request.body?JSON.stringify(e.request.body):"";f.info("".concat(S," - START")),f.debug("".concat(S," - Body: ").concat(x));var k=yield n.onStart(e,{started:g,description:"pending"});yield r();var O=null==e||null===(u=e.session)||void 0===u?void 0:u.user,E="";null!=O&&(null!=O&&O.id?E=" - uid ".concat(null==O?void 0:O.id):null!=O&&O.token&&(E=" - token ".concat(null==O?void 0:O.token)));var j,R=e.response.status,I=R;200==R?j=p:R>200&&R<=299?(j=s,e.response.redirected&&e.response.url&&(I+=" -> ".concat(e.response.url))):j=c;var q="[".concat(j(I),"]"),C=parseFloat((T.now()-g)/1e3).toFixed(2),P=C<n.lazy?p:C<n.slow?s:c,N=C<n.lazy?"Ok":C<n.slow?"lazy":"slow",M=null!=e.session?JSON.stringify(e.session):"";f.debug("".concat(S," - Session: ").concat(M.slice(0,150),"...")),f.silly("".concat(S," - Session: ").concat(M));var F=null!=e.body?JSON.stringify(e.body):"";f.debug("".concat(S," - Response: ").concat(F.slice(0,150),"...")),f.silly("".concat(S," - Response: ").concat(F)),yield n.onDone(e,k,{started:g,elapsed:C,description:N}),f.info("".concat(S," - DONE ").concat(q).concat(E," (").concat(P(N),": ").concat(P(C),")"))}))).apply(this,arguments)}e.use((function(e,r){return i.apply(this,arguments)}))}(l,null==u||null===(a=u.http)||void 0===a?void 0:a.request),function(e){function r(){return(r=ee((function*(e){e.body=Ae}))).apply(this,arguments)}var t=new U;t.get("/robots.txt",(function(e){return r.apply(this,arguments)})),e.use(t.routes())}(l),u.use_catcher&&function(e,r){function t(){return t=ee((function*(e){var{error:r,warning:t,path:o,agent:n}=e.request.body,i=e.miolo.logger;if(t){var a="".concat(s("[JS Warning]")," on ").concat(h(o),": ").concat(JSON.stringify(t.msg),"\n")+"".concat(s("[JS Warning]")," File => ").concat(t.file,"\n")+"".concat(s("[JS Warning]")," Line => ").concat(t.line,"\n")+"".concat(s("[JS Warning]")," Col => ").concat(t.col,"\n")+"".concat(s("[JS Warning]")," Error => ").concat(JSON.stringify(t.error),"\n")+"".concat(s("[JS Warning]")," Agent => ").concat(n);i.warn(a)}else{var l="".concat(c("[JS Error]")," on ").concat(h(o),": ").concat(JSON.stringify(r.msg),"\n")+"".concat(c("[JS Error]")," File => ").concat(r.file,"\n")+"".concat(c("[JS Error]")," Line => ").concat(r.line,"\n")+"".concat(c("[JS Error]")," Col => ").concat(r.col,"\n")+"".concat(c("[JS Error]")," Error => ").concat(JSON.stringify(r.error),"\n")+"".concat(c("[JS Error]")," Agent => ").concat(n);i.error(l)}e.body={result:1}})),t.apply(this,arguments)}var o=new U;o.post(r,(function(e){return t.apply(this,arguments)})),e.use(o.routes())}(l,u.http.catcher_url),"guest"==u.auth_type&&Ue(l,u.auth.guest,null==u?void 0:u.session),"basic"==u.auth_type&&ze(l,u.auth.basic),"credentials"==u.auth_type&&Ye(l,u.auth.credentials,null==u?void 0:u.session,null==u?void 0:u.cache),"custom"==u.auth_type&&((e,r)=>{var t=e.context.miolo.logger;try{var o=r(e);if("function"==typeof o)e.use(o);else if(Array.isArray(o)){var n=new U;o.map((e=>{var r=e.method.toLowerCase();n[r](e.url,e.callback)})),e.use(n.routes())}}catch(i){t.error("Custom auth error: ".concat(i,"'"))}})(l,u.auth.custom);var f=null==u?void 0:u.middlewares;return f&&((e,r)=>{null!=r&&0!=r.length&&r.map((r=>{e.use(r)}))})(l,f),null!=u&&u.routes&&or(l,u.routes),null!=(null==o?void 0:o.middleware)?l.use(o.middleware):lr(l,o,u.http,null==u?void 0:u.auth,null==u||u.socket),dr(l,null==u?void 0:u.cron),vr(l,null==u?void 0:u.http),l.start=ee((function*(){yield l.context.miolo.db.init_connection(),yield l.http.start(),l.cron.start()})),l.stop=ee((function*(){l.context.miolo.db.drop_connections(),yield l.http.stop(),l.cron.stop()})),l.restart=ee((function*(){yield l.stop(),yield l.start()})),l}export{fr as miolo,ce as miolo_emailer,pe as miolo_logger,he as miolo_parser};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * miolo v1.0.4
2
+ * miolo v1.0.6
3
3
  *
4
4
  * https://www.afialapis.com/os/miolo
5
5
  *
@@ -1114,9 +1114,21 @@ var init_parser = () => {
1114
1114
  };
1115
1115
 
1116
1116
  function _miolo_cacher_options_merge(def, opt, logger) {
1117
+ var _opt$redis, _def$redis, _process$env, _opt$redis2, _def$redis2, _process$env2, _opt$redis3, _def$redis3, _process$env3, _opt$redis4, _def$redis4, _process$env4, _opt$redis5, _def$redis5;
1118
+ var redis_host = (opt === null || opt === void 0 || (_opt$redis = opt.redis) === null || _opt$redis === void 0 ? void 0 : _opt$redis.host) || (def === null || def === void 0 || (_def$redis = def.redis) === null || _def$redis === void 0 ? void 0 : _def$redis.host) || ((_process$env = process.env) === null || _process$env === void 0 ? void 0 : _process$env.REDIS_HOST) || '127.0.0.1';
1119
+ var redis_port = (opt === null || opt === void 0 || (_opt$redis2 = opt.redis) === null || _opt$redis2 === void 0 ? void 0 : _opt$redis2.port) || (def === null || def === void 0 || (_def$redis2 = def.redis) === null || _def$redis2 === void 0 ? void 0 : _def$redis2.port) || ((_process$env2 = process.env) === null || _process$env2 === void 0 ? void 0 : _process$env2.REDIS_PORT) || 6379;
1120
+ var redis_username = (opt === null || opt === void 0 || (_opt$redis3 = opt.redis) === null || _opt$redis3 === void 0 ? void 0 : _opt$redis3.username) || (def === null || def === void 0 || (_def$redis3 = def.redis) === null || _def$redis3 === void 0 ? void 0 : _def$redis3.username) || ((_process$env3 = process.env) === null || _process$env3 === void 0 ? void 0 : _process$env3.REDIS_USERNAME) || '';
1121
+ var redis_password = (opt === null || opt === void 0 || (_opt$redis4 = opt.redis) === null || _opt$redis4 === void 0 ? void 0 : _opt$redis4.password) || (def === null || def === void 0 || (_def$redis4 = def.redis) === null || _def$redis4 === void 0 ? void 0 : _def$redis4.password) || ((_process$env4 = process.env) === null || _process$env4 === void 0 ? void 0 : _process$env4.REDIS_PASSWORD) || '';
1122
+ var redis_credentials = '';
1123
+ if (redis_username) {
1124
+ redis_credentials = "".concat(redis_username).concat(redis_password ? ":".concat(redis_password) : '', "@");
1125
+ }
1126
+ var redis_url = (opt === null || opt === void 0 || (_opt$redis5 = opt.redis) === null || _opt$redis5 === void 0 ? void 0 : _opt$redis5.url) || (def === null || def === void 0 || (_def$redis5 = def.redis) === null || _def$redis5 === void 0 ? void 0 : _def$redis5.url) || "redis://".concat(redis_credentials).concat(redis_host, ":").concat(redis_port, "'");
1117
1127
  return {
1118
1128
  type: (opt === null || opt === void 0 ? void 0 : opt.type) || (def === null || def === void 0 ? void 0 : def.type),
1119
- redis: (opt === null || opt === void 0 ? void 0 : opt.redis) || (def === null || def === void 0 ? void 0 : def.redis),
1129
+ redis: {
1130
+ url: redis_url
1131
+ },
1120
1132
  namespace: (opt === null || opt === void 0 ? void 0 : opt.namespace) || (def === null || def === void 0 ? void 0 : def.namespace),
1121
1133
  version: (opt === null || opt === void 0 ? void 0 : opt.version) || (def === null || def === void 0 ? void 0 : def.version),
1122
1134
  clean: (opt === null || opt === void 0 ? void 0 : opt.clean) === true || (def === null || def === void 0 ? void 0 : def.clean) === true,
@@ -1663,6 +1675,10 @@ var _geoip_reader = undefined;
1663
1675
  var _geoip_def_local_ips = ['127.0.0.1', '::1:'];
1664
1676
  function _geoip_is_local(ip) {
1665
1677
  var local_ips = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
1678
+ // if ("production" == 'development') {
1679
+ // return true
1680
+ // }
1681
+
1666
1682
  var all_local_ips = [..._geoip_def_local_ips, ...(local_ips || [])];
1667
1683
  return all_local_ips.indexOf(ip) >= 0;
1668
1684
  }