@andrewcaires/api 4.0.1 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +2 -2
- package/dist/index.d.ts +40 -39
- package/dist/index.esm.js +2 -2
- package/package.json +6 -6
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.0.
|
|
2
|
+
* @andrewcaires/api v4.0.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2024 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
"use strict";var e=require("@andrewcaires/express"),t=require("@andrewcaires/node"),r=require("@andrewcaires/utils.js"),o=require("ws"),s=require("@andrewcaires/sequelize"),i=require("dotenv"),n=require("fs"),d=require("express-session"),a=require("sequelize"),p=require("jsonwebtoken"),u=require("path");function l(e,t,r,o){var s,i=arguments.length,n=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,o);else for(var d=e.length-1;d>=0;d--)(s=e[d])&&(n=(i<3?s(n):i>3?s(t,r,n):s(t,r))||n);return i>3&&n&&Object.defineProperty(t,r,n),n}function c(e,t){return function(r,o){t(r,o,e)}}function g(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function y(e,t,r,o){return new(r||(r=Promise))((function(s,i){function n(e){try{a(o.next(e))}catch(e){i(e)}}function d(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,d)}a((o=o.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError,i.config();class x{static getBool(e,t){return r.toBool(x.getString(e,t.toString()))}static getInt(e,t){return parseInt(x.getString(e,t.toString()))}static getMs(e,t){return r.parseMs(x.getString(e,t))}static getString(e,t){return e in process.env?process.env[e]||"":t}}x.API_CONSOLE_ERROR=x.getBool("API_CONSOLE_ERROR",!1),x.API_DEFAULT_PATH=x.getString("API_DEFAULT_PATH","/api"),x.API_DB_DATABASE=x.getString("API_DB_DATABASE",""),x.API_DB_HOST=x.getString("API_DB_HOST","127.0.0.1"),x.API_DB_PASSWORD=x.getString("API_DB_PASSWORD",""),x.API_DB_PORT=x.getInt("API_DB_PORT",3306),x.API_DB_TYPE=x.getString("API_DB_TYPE",""),x.API_DB_USERNAME=x.getString("API_DB_USERNAME","root"),x.API_DB_LOG=x.getBool("API_DB_LOG",!1),x.API_DB_AUDIT=x.getBool("API_DB_AUDIT",!0),x.API_DB_PREFIX=x.getString("API_DB_PREFIX",""),x.API_DB_TIMEZONE=x.getString("API_DB_TIMEZONE","+00:00"),x.API_HTTP_CRT=x.getString("API_HTTP_CRT",""),x.API_HTTP_KEY=x.getString("API_HTTP_KEY",""),x.API_HTTP_PORT=x.getInt("API_HTTP_PORT",3e3),x.API_HTTP_PUBLIC=x.getString("API_HTTP_PUBLIC",""),x.API_HTTP_CROSS=x.getBool("API_HTTP_CROSS",!1),x.API_HTTP_HYBRID=x.getBool("API_HTTP_HYBRID",!1),x.API_HTTP_REDIRECT=x.getString("API_HTTP_REDIRECT",""),x.API_KEY_HASH=x.getString("API_KEY_HASH",""),x.API_KEY_HEADER=x.getString("API_KEY_HEADER","api_key"),x.API_MODEL_LIMIT=x.getInt("API_MODEL_LIMIT",10),x.API_MODEL_LIMIT_MAX=x.getInt("API_MODEL_LIMIT_MAX",500),x.API_NOTFOUND_REDIRECT=x.getString("API_NOTFOUND_REDIRECT",""),x.API_SLEEP_AUTH=x.getMs("API_SLEEP_AUTH","2s"),x.API_SLEEP_FORGOT=x.getMs("API_SLEEP_FORGOT","5s"),x.API_SLEEP_REGISTRY=x.getMs("API_SLEEP_REGISTRY","5s"),x.API_SESSION_NAME=x.getString("API_SESSION_NAME","session.id"),x.API_SESSION_LIFETIME=x.getMs("API_SESSION_LIFETIME","1d"),x.API_SESSION_SECRET=x.getString("API_SESSION_SECRET","yoursecret"),x.API_TOKEN_CRT=x.getString("API_TOKEN_CRT",""),x.API_TOKEN_KEY=x.getString("API_TOKEN_KEY",""),x.API_TOKEN_FORGOT=x.getMs("API_TOKEN_LIFETIME","1d"),x.API_TOKEN_HEADER=x.getString("API_TOKEN_HEADER","authorization"),x.API_TOKEN_LIFETIME=x.getMs("API_TOKEN_LIFETIME","1d"),x.API_TOKEN_RENEW=x.getMs("API_TOKEN_RENEW","1d"),x.API_UPLOAD_COUNT=x.getInt("API_UPLOAD_COUNT",1),x.API_UPLOAD_FIELD=x.getString("API_UPLOAD_FIELD","upload"),x.API_UPLOAD_SIZE=x.getInt("API_UPLOAD_SIZE",2),x.API_UPLOAD_TEMP=x.getString("API_UPLOAD_TEMP","./temp"),x.API_WEBSOCKET_START=x.getBool("API_WEBSOCKET_START",!1);const h=new s.Connection({type:x.API_DB_TYPE,database:x.API_DB_DATABASE,username:x.API_DB_USERNAME,password:x.API_DB_PASSWORD,hostname:x.API_DB_HOST,hostport:x.API_DB_PORT,logging:x.API_DB_LOG,prefix:x.API_DB_PREFIX});class v extends s.Model{}const m={afterCreate:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null;yield exports.Audit.create({type:"CREATE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify(e.toJSON()),state:!0,userId:null!==(i=null==t?void 0:t.userId)&&void 0!==i?i:null}).catch(r.noop)})),afterUpdate:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null,a={},p=e.changed();p&&p.forEach((t=>a[t]=e.getDataValue(t))),yield exports.Audit.create({type:"UPDATE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify({before:e.previous(),after:a}),state:!0,userId:null!==(i=null==t?void 0:t.userId)&&void 0!==i?i:null}).catch(r.noop)})),afterDestroy:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null;yield exports.Audit.create({type:"DELETE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify(e.toJSON()),state:!0,userId:null!==(i=null==t?void 0:t.userId)&&void 0!==i?i:null}).catch(r.noop)}))};exports.Auth=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Auth.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Auth.prototype,"secret",void 0),l([s.FullDate(),g("design:type",Date)],exports.Auth.prototype,"logout",void 0),l([s.String(),g("design:type",s.String)],exports.Auth.prototype,"useragent",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Auth.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Auth.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Auth.prototype,"deletedAt",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Auth.prototype,"userId",void 0),exports.Auth=l([s.Database(h),s.ModelName("auth")],exports.Auth),exports.Register=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Register.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Register.prototype,"token",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Register.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Register.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Register.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Register.prototype,"deletedAt",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Register.prototype,"userId",void 0),exports.Register=l([s.Database(h),s.ModelName("register")],exports.Register),exports.Group=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Group.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Group.prototype,"name",void 0),l([s.Text(),g("design:type",s.String)],exports.Group.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Group.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Group.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Group.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Group.prototype,"deletedAt",void 0),l([s.HasMany((()=>exports.UserGroup),"groupId"),g("design:type",Array)],exports.Group.prototype,"groups_routes",void 0),l([s.HasMany((()=>exports.UserGroup),"groupId"),g("design:type",Array)],exports.Group.prototype,"users_groups",void 0),exports.Group=l([s.Database(h),s.ModelName("group"),s.Hooks(m)],exports.Group),exports.UserGroup=class extends v{},l([s.CreatedAt,g("design:type",Date)],exports.UserGroup.prototype,"createdAt",void 0),l([s.BelongsTo((()=>exports.Group)),g("design:type",Number)],exports.UserGroup.prototype,"groupId",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.UserGroup.prototype,"userId",void 0),exports.UserGroup=l([s.Database(h),s.ModelName("users_groups"),s.Hooks(m)],exports.UserGroup),exports.User=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.User.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"name",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"email",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"username",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"password",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"salt",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"token",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"avatar",void 0),l([s.DateOnly(),g("design:type",s.String)],exports.User.prototype,"date",void 0),l([s.Text(),g("design:type",s.String)],exports.User.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.User.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.User.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.User.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.User.prototype,"deletedAt",void 0),l([s.HasMany((()=>exports.Audit),"userId"),g("design:type",Array)],exports.User.prototype,"audits",void 0),l([s.HasMany((()=>exports.Auth),"userId"),g("design:type",Array)],exports.User.prototype,"auths",void 0),l([s.HasMany((()=>exports.Register),"userId"),g("design:type",Array)],exports.User.prototype,"registers",void 0),l([s.HasMany((()=>exports.UserGroup),"userId"),g("design:type",Array)],exports.User.prototype,"users_groups",void 0),exports.User=l([s.Database(h),s.ModelName("user"),s.DefaultScope({attributes:{exclude:["password","salt","token"]}}),s.Scopes({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),s.Hooks(m)],exports.User),exports.Audit=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Audit.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Audit.prototype,"type",void 0),l([s.String(),g("design:type",s.String)],exports.Audit.prototype,"model",void 0),l([s.Integer(),g("design:type",s.String)],exports.Audit.prototype,"record",void 0),l([s.Text(),g("design:type",s.String)],exports.Audit.prototype,"data",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Audit.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Audit.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Audit.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Audit.prototype,"deletedAt",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Audit.prototype,"userId",void 0),exports.Audit=l([s.Database(h),s.ModelName("audit")],exports.Audit),exports.Configs=class extends v{},l([s.String(),g("design:type",s.String)],exports.Configs.prototype,"key",void 0),l([s.String(),g("design:type",s.String)],exports.Configs.prototype,"value",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Configs.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Configs.prototype,"updatedAt",void 0),exports.Configs=l([s.Database(h),s.ModelName("configs"),s.Hooks(m)],exports.Configs),exports.Forgot=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Forgot.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Forgot.prototype,"token",void 0),l([s.BigInt(),g("design:type",Number)],exports.Forgot.prototype,"timestamp",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Forgot.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Forgot.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Forgot.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Forgot.prototype,"deletedAt",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Forgot.prototype,"userId",void 0),exports.Forgot=l([s.Database(h),s.ModelName("forgot")],exports.Forgot),exports.Route=class extends v{},l([s.Integer(),s.PrimaryKey,s.NotNull,s.AutoIncrement,g("design:type",Number)],exports.Route.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Route.prototype,"name",void 0),l([s.Text(),g("design:type",s.String)],exports.Route.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Route.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Route.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Route.prototype,"updatedAt",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Route.prototype,"deletedAt",void 0),l([s.HasMany((()=>exports.GroupRoute),"routeId"),g("design:type",Array)],exports.Route.prototype,"groups_routes",void 0),exports.Route=l([s.Database(h),s.ModelName("route"),s.Hooks(m)],exports.Route),exports.GroupRoute=class extends v{},l([s.CreatedAt,g("design:type",Date)],exports.GroupRoute.prototype,"createdAt",void 0),l([s.BelongsTo((()=>exports.Group)),g("design:type",Number)],exports.GroupRoute.prototype,"groupId",void 0),l([s.BelongsTo((()=>exports.Route)),g("design:type",Number)],exports.GroupRoute.prototype,"routeId",void 0),exports.GroupRoute=l([s.Database(h),s.ModelName("groups_routes"),s.Hooks(m)],exports.GroupRoute),exports.Log=class extends v{},l([s.String(),g("design:type",s.String)],exports.Log.prototype,"type",void 0),l([s.String(),g("design:type",s.String)],exports.Log.prototype,"source",void 0),l([s.Text(),g("design:type",s.String)],exports.Log.prototype,"message",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Log.prototype,"createdAt",void 0),exports.Log=l([s.Database(h),s.ModelName("log")],exports.Log),exports.Session=class extends v{},l([s.String(),g("design:type",s.String)],exports.Session.prototype,"session",void 0),l([s.Text(),g("design:type",s.String)],exports.Session.prototype,"json",void 0),l([s.BigInt(),g("design:type",Number)],exports.Session.prototype,"expired",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Session.prototype,"createdAt",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Session.prototype,"updatedAt",void 0),exports.Session=l([s.Database(h),s.ModelName("session")],exports.Session);class A{static write(e,r,o){return y(this,void 0,void 0,(function*(){yield A.writeRaw(t.LogColor.White,"",e,r,o)}))}static error(e,r,o){return y(this,void 0,void 0,(function*(){yield A.writeRaw(t.LogColor.Red,"error",e,r,o)}))}static info(e,r,o){return y(this,void 0,void 0,(function*(){yield A.writeRaw(t.LogColor.Cyan,"info",e,r,o)}))}static success(e,r,o){return y(this,void 0,void 0,(function*(){yield A.writeRaw(t.LogColor.Green,"success",e,r,o)}))}static warning(e,r,o){return y(this,void 0,void 0,(function*(){yield A.writeRaw(t.LogColor.Yellow,"warning",e,r,o)}))}static writeRaw(e,r,o,s,i){return y(this,void 0,void 0,(function*(){i&&t.Log.console(e,r,o),h&&(yield exports.Log.create({type:r,source:s,message:o}).catch((()=>null)))}))}}const f=e=>n.existsSync(e)?n.readFileSync(e):void 0,_={http:f(x.API_HTTP_CRT),token:f(x.API_TOKEN_CRT)},I={http:f(x.API_HTTP_KEY),token:f(x.API_TOKEN_KEY)};class C extends d.Store{constructor(){super(),this.all=e=>y(this,void 0,void 0,(function*(){e=e||r.noop;const t=yield exports.Session.findAll({attributes:["session"],where:{expired:{[a.Op.gte]:Date.now()}}}).catch((t=>(e(t),null)));t&&e(null,t.map((e=>e.session))),e()})),this.clear=e=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy().catch(r.noop),e&&e()})),this.destroy=(e,t)=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy({where:{session:e}}).catch(r.noop),t&&t()})),this.expired=()=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy({where:{expired:{[a.Op.lt]:Date.now()}}}).catch(r.noop)})),this.get=(e,t)=>y(this,void 0,void 0,(function*(){t=t||r.noop;const o=yield exports.Session.findOne({where:{session:e,expired:{[a.Op.gte]:Date.now()}}}).catch((e=>(t(e),null)));if(o){const e=JSON.parse(o.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield o.destroy().catch(r.noop),void t(null)}t(null,e)}else t(null)})),this.length=e=>y(this,void 0,void 0,(function*(){e&&e(null,(yield exports.Session.count().catch(r.noop))||0)})),this.set=(e,t,o)=>y(this,void 0,void 0,(function*(){o=o||r.noop;const s=Date.now()+x.API_SESSION_LIFETIME,i=JSON.stringify(t),[n,d]=(yield exports.Session.findOrCreate({where:{session:e},defaults:{session:e,json:i,expired:s}}).catch(r.noop))||[];n&&(d||(n.json=i,n.expired=s,yield n.save().catch(r.noop))),o()})),this.loop=r.loop(this.expired,3e4),this.loop.start()}}class P{static create(e){return y(this,void 0,void 0,(function*(){if(!I.token)return{error:"Key not found"};const{id:t}=e,o=r.uuidv4(),s=yield exports.Auth.create({secret:o,userId:t}).catch(P.error);if(!s)return{error:"Internal Server Error"};return{auth:s,token:p.sign({id:t,secret:o},I.token,P.options())}}))}static destroy(e){return y(this,void 0,void 0,(function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)}))}static error(e){A.error(e.message,"api.token",x.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:x.API_TOKEN_LIFETIME+"ms"}}static renew(e){return y(this,void 0,void 0,(function*(){if(!I.token)return{error:"Key not found"};const{error:t,decode:o}=P.verify(e,x.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(o){const{id:e,secret:t}=o;if(e&&t){const o=yield exports.User.findOne({where:{id:e,state:!0}}).catch(P.error);if(o){const s=yield exports.Auth.findOne({where:{secret:t,userId:o.id}}).catch(P.error);if(s&&!s.logout){s.secret=r.uuidv4(),yield s.save().catch(P.error);return{auth:s,token:p.sign({id:e,secret:s.secret},I.token,P.options())}}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static user(e,t,r){return y(this,void 0,void 0,(function*(){if(e){t=r.hash.encrypt(e);const o=yield exports.User.findOne({where:{token:t,state:!0}}).catch(P.error);if(o){const t=e.replace(/(-[\w]{4})/g,"-****"),[r]=(yield exports.Auth.findOrCreate({where:{secret:t,userId:o.id},defaults:{secret:t,userId:o.id}}).catch(P.error))||[];if(r)return{auth:r,user:o}}return{error:"Access denied"}}const{error:o,decode:s}=P.verify(t);if(o)return{error:o};if(s){const{id:e,secret:t}=s;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(P.error);if(r){const e=yield exports.Auth.findOne({where:{secret:t,userId:r.id}}).catch(P.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static verify(e,t){if(!_.token)return{error:"Cert not found"};if(!e||e.split(".").length<3)return{error:"Invalid Token"};try{return{decode:p.verify(e,_.token,{clockTolerance:t})}}catch(e){return{error:"Invalid Token"}}}}class S extends e.Application{constructor(e){super(e,{cert:_.http,cross:x.API_HTTP_CROSS,hybrid:x.API_HTTP_HYBRID,key:I.http,notfound:x.API_NOTFOUND_REDIRECT,path:x.API_DEFAULT_PATH,port:x.API_HTTP_PORT,public:x.API_HTTP_PUBLIC,redirect:x.API_HTTP_REDIRECT,session:{store:new C,name:x.API_SESSION_NAME,secret:x.API_SESSION_SECRET,cookie:{maxAge:x.API_SESSION_LIFETIME},genid:r.uuidv4}}),this.hash=new t.Hash(x.API_KEY_HASH)}error(e,t){A.error(e.message,t,x.API_CONSOLE_ERROR)}log(e,t){A.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return y(this,void 0,void 0,(function*(){yield h.sync(),yield e.listen.call(this),x.API_WEBSOCKET_START&&this.server&&(this._webSocket=new o.Server({server:this.server,verifyClient:(e,t)=>t(x.API_WEBSOCKET_START)}),this._webSocket.on("connection",((e,t)=>y(this,void 0,void 0,(function*(){t.url||(t.url="");const o=t.url.length<=1?"":t.url.replace(/\//g,".");let s;e.on("message",(r=>y(this,void 0,void 0,(function*(){if(s)try{const i=JSON.parse(r);this.emit("ws.message"+o,{data:i,message:r,req:t,user:s,ws:e})}catch(i){this.emit("ws.message"+o,{message:r,req:t,user:s,ws:e})}else{const{user:i}=yield P.user("",r.toString(),this);i&&(s=i,this.emit("ws.connection"+o,{req:t,user:s,ws:e}))}s||e.close()})))),e.on("close",(()=>{s&&this.emit("ws.close"+o,{user:s,ws:e})})),yield r.sleep(2e3),s||e.close()})))))}))}websocket(){return this._webSocket}}class O{static all(){return y(this,void 0,void 0,(function*(){const e=yield exports.Configs.findAll().catch(O.error),t={};return e&&e.forEach((e=>t[e.key]=e.value)),t}))}static del(e,t){return y(this,void 0,void 0,(function*(){var r;const o=null!==(r=null==t?void 0:t.id)&&void 0!==r?r:null;return((yield exports.Configs.destroy(Object.assign({where:{key:e}},{userId:o})).catch(O.error))||0)>0}))}static error(e){A.error(e.message,"api.config",x.API_CONSOLE_ERROR)}static get(e){return y(this,arguments,void 0,(function*(e,t=""){const[r]=(yield exports.Configs.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(O.error))||[];return r?r.value:t}))}static set(e,t,r){return y(this,void 0,void 0,(function*(){var o;const s=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,[i]=(yield exports.Configs.findOrCreate(Object.assign({where:{key:e}},{userId:s})).catch(O.error))||[];i&&(i.value=t,yield i.save().catch(O.error))}))}}const w=e.parameterFactory((({ctx:e})=>{var t,r,o;return{userId:null!==(o=null===(r=null===(t=e.req)||void 0===t?void 0:t.user)||void 0===r?void 0:r.id)&&void 0!==o?o:null}})),E=e.parameterFactory((({ctx:e})=>e.req.auth)),R=e.parameterFactory((({ctx:e})=>e.req.user));class T{static all(e,t){return y(this,void 0,void 0,(function*(){return yield exports.Route.findAll({where:Object.assign(Object.assign({},t),{state:!0}),include:[{model:exports.GroupRoute,required:!0,include:[{model:exports.Group,required:!0,where:{state:!0},include:[{model:exports.UserGroup,required:!0,where:{userId:e.id}}]}]}]}).catch((e=>{A.error(e.message,"api.permission",x.API_CONSOLE_ERROR)}))}))}static get(e){return y(this,void 0,void 0,(function*(){const t=yield T.all(e);return t?t.map((e=>e.name)):[]}))}static is(e,t){return y(this,void 0,void 0,(function*(){const r=yield T.all(e,{name:t});return!!r&&r.length>0}))}}class D extends r.EventEmitter{auth(e,t,r,o,s){return y(this,void 0,void 0,(function*(){const{auth:i,error:n,user:d}=yield P.user(t,r,s);return n?e.error(n):i&&d?i.useragent&&i.useragent!=o?e.error("Invalid token"):(e.req.auth=i,e.req.user=d,void e.next()):e.error("Internal Server Error")}))}session(e,t,o){return y(this,void 0,void 0,(function*(){o.auth&&o.user&&(o.useragent?o.useragent!=t&&o.regenerate(r.noop):(o.useragent=t,o.save(r.noop))),e.next()}))}error(e){A.error(e.message,"api.controller",x.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return y(this,void 0,void 0,(function*(){return r?(yield T.is(r,t))?e.next():void e.unauthorized("Access denied"):e.unauthorized("Access denied")}))}read(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".read",r)}))}upload(t,r){r.path||(r.path=x.API_UPLOAD_TEMP),r.size||(r.size=x.API_UPLOAD_SIZE),r.field||(r.field=x.API_UPLOAD_FIELD),e.Upload.middleware(t,r)}validation(e,t){return y(this,void 0,void 0,(function*(){const{error:o,value:s}=yield r.Validation.object(t).parse().validateAsync(e.req.body);if(o)return e.validation(o);e.req.body=s,e.next()}))}write(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".write",r)}))}}l([c(0,e.Ctx()),c(1,e.Headers(x.API_KEY_HEADER)),c(2,e.Headers(x.API_TOKEN_HEADER)),c(3,e.Headers("user-agent")),c(4,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,String,S]),g("design:returntype",Promise)],D.prototype,"auth",null),l([c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Session()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],D.prototype,"session",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"permission",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"read",null),l([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",void 0)],D.prototype,"upload",null),l([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],D.prototype,"validation",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"write",null),exports.ModelController=class extends D{constructor(){super(...arguments),this._columns=[]}_add(t){return y(this,arguments,void 0,(function*({ctx:t,options:r,body:o,user:s}){var i;const n=null!==(i=null==s?void 0:s.id)&&void 0!==i?i:null,d=yield this.model().create(Object.assign(Object.assign({},t.req.body),o||{}),Object.assign(Object.assign({},r||{}),{userId:n})).catch(this.error);if(d){const r=this.key();return t.prepare(e.Status.OK,{[r]:d.getDataValue(r)}),d}t.error("Internal Server Error")}))}_all(t){return y(this,arguments,void 0,(function*({ctx:t,options:o,callback:s,scope:i}){var n,d,p,u,l,c;const g=this.scope(i),y=Object.assign({},o||{});y.where=Object.assign({},y.where||{});const h=t.req.query.limit,v=r.isString(h)?parseInt(h):x.API_MODEL_LIMIT;y.limit=v>=0?Math.min(v,x.API_MODEL_LIMIT_MAX):void 0;const m=t.req.query.offset;if(r.isString(m)){const e=m?parseInt(m):0;y.offset=e>0?e:void 0}const A=[],f=this.columns(),_=e=>f.indexOf(e)>=0,I=null===(n=t.req.query.asc)||void 0===n?void 0:n.toString();I&&I.length&&A.push(...I.split(",").filter(_).map((e=>[e,"ASC"])));const C=null===(d=t.req.query.desc)||void 0===d?void 0:d.toString();C&&C.length&&A.push(...C.split(",").filter(_).map((e=>[e,"DESC"]))),A.length&&(y.order=A);const P=[],S=null===(p=t.req.query.search)||void 0===p?void 0:p.toString();(r.isArray(y.attributes)?y.attributes:f).filter(r.isString).forEach((e=>{var r;if(S&&S.length&&P.push({[e]:{[a.Op.like]:`%${S}%`}}),"search_"+e in t.req.query){const o=null===(r=t.req.query["search_"+e])||void 0===r?void 0:r.toString();o&&o.length&&P.push({[e]:{[a.Op.like]:`%${o}%`}})}})),P.length&&(y.where=Object.assign(Object.assign({},y.where),{[a.Op.or]:[...P]}));const O=null!==(u=yield g.count(Object.assign(Object.assign({},y),{col:f[0]})).catch(this.error))&&void 0!==u?u:0,w=yield g.findAll(y).catch(this.error),E={count:O,limit:null!==(l=y.limit)&&void 0!==l?l:-1,offset:null!==(c=y.offset)&&void 0!==c?c:0};return w?(t.prepare(e.Status.OK,Object.assign(Object.assign({},E),{records:s?yield s(w):w})),Object.assign(Object.assign({},E),{records:w})):(t.error("Internal Server Error"),Object.assign(Object.assign({},E),{records:[]}))}))}columns(){return 0==this._columns.length&&(this._columns=Object.keys(this.model().getAttributes())),this._columns}_del(e){return y(this,arguments,void 0,(function*({ctx:e,options:t,user:r}){var o;const s=this.key(),{[s]:i}=e.req.params;if(!i)return e.error("Internal Server Error"),0;const n=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,d=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[s]:i}),individualHooks:!0}),{userId:n})).catch(this.error);return d?(e.success("OK"),d):(e.notFound("Record not found"),0)}))}error(e){e.sql?A.error(e.message+"\n"+e.sql,"api.controller.sql",x.API_CONSOLE_ERROR):super.error(e)}_get(t){return y(this,arguments,void 0,(function*({ctx:t,options:r,callback:o,scope:s}){const i=this.key(),{[i]:n}=t.req.params,d=yield this.scope(s).findOne(Object.assign(Object.assign({},r||{}),{where:Object.assign(Object.assign({},(r||{}).where),{[i]:n})})).catch(this.error);return d?(t.prepare(e.Status.OK,o?yield o(d):d.toJSON()),d):null===d?t.notFound("Record not found"):void t.error("Internal Server Error")}))}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}_set(e){return y(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:o}){var s,i;const n=this.key(),{[n]:d}=e.req.params,a=null!==(s=null==o?void 0:o.id)&&void 0!==s?s:null,[p]=null!==(i=yield this.model().update(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:d}),individualHooks:!0}),{userId:a})).catch(this.error))&&void 0!==i?i:[];return p?(e.success("OK"),!0):(e.success("Record not changed"),!1)}))}},exports.ModelController=l([e.Extends(D)],exports.ModelController),exports.AuditsController=class extends exports.ModelController{model(){return exports.Audit}all(e,t,r){return y(this,void 0,void 0,(function*(){const o={};t&&(o.type=t),r&&(o.table=r),yield this._all({ctx:e,options:{attributes:{exclude:["data"]},where:o,order:[["created","DESC"]]}})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}},l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),c(1,e.Query("type")),c(2,e.Query("table")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.AuditsController.prototype,"all",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.AuditsController.prototype,"get",null),exports.AuditsController=l([e.Controller("/audits"),e.Extends(exports.ModelController)],exports.AuditsController),exports.AuthController=class extends D{login(e,o,s,i,n){return y(this,void 0,void 0,(function*(){var d;yield r.sleep(x.API_SLEEP_AUTH);const p=yield exports.User.scope("password").findOne({where:{[a.Op.or]:[{email:s},{username:s}]}}).catch(this.error);if(i+=null!==(d=null==p?void 0:p.salt)&&void 0!==d?d:"",!p||p.password!=t.sha256(i))return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const u=yield exports.Register.findOne({where:{state:!0,userId:p.id}}).catch(this.error);if(u)return e.error("Activation required"),n.emit("auth.activation",{ctx:e,register:u,user:p}),void this.emit("auth.activation",{ctx:e,register:u,user:p});if(!p.state)return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e,user:p}),void this.emit("auth.failure",{ctx:e,user:p});const{auth:l,error:c,token:g}=yield P.create(p);return c?(e.error(c),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):l&&g?(l.useragent=o,yield l.save().catch(this.error),e.json({token:g}),n.emit("auth.login",{auth:l,ctx:e,user:p}),void this.emit("auth.login",{auth:l,ctx:e,user:p})):(e.error("Internal Server Error"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))}))}logout(e,t,r,o){return y(this,void 0,void 0,(function*(){if(yield P.destroy(t))return e.success("Disconcerted"),o.emit("auth.logout",{auth:t,ctx:e,user:r}),void this.emit("auth.logout",{auth:t,ctx:e,user:r});e.unauthorized("Access denied")}))}renew(e,t,r,o){return y(this,void 0,void 0,(function*(){const{auth:s,error:i,token:n}=yield P.renew(r);return i?e.error(i):s?(s.useragent=t,yield s.save().catch(this.error),e.json({token:n}),o.emit("auth.renew",{auth:s,ctx:e}),void this.emit("auth.renew",{auth:s,ctx:e})):e.error("Internal Server Error")}))}user(e,t){return y(this,void 0,void 0,(function*(){const r=yield T.all(t);if(!r)return e.error("Internal Server Error");e.json(Object.assign(Object.assign({},t.toJSON()),{permissions:r.map((e=>e.name))}))}))}},l([e.Post("/login"),e.Middleware("validation",{username:r.Validation.string().min(3).required(),password:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Body("username")),c(3,e.Body("password")),c(4,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,String,S]),g("design:returntype",Promise)],exports.AuthController.prototype,"login",null),l([e.Get("/logout"),e.Middleware("auth"),c(0,e.Ctx()),c(1,E()),c(2,R()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.Auth,exports.User,S]),g("design:returntype",Promise)],exports.AuthController.prototype,"logout",null),l([e.Post("/renew"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Body("token")),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,S]),g("design:returntype",Promise)],exports.AuthController.prototype,"renew",null),l([e.Get(),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.AuthController.prototype,"user",null),exports.AuthController=l([e.Controller("/auth"),e.Extends(D)],exports.AuthController),exports.FilesController=class extends D{directory(){return x.API_HTTP_PUBLIC||"./"}files(e){return y(this,void 0,void 0,(function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const o=u.join(this.directory(),t);if(!n.existsSync(o)||!n.statSync(o).isDirectory())return e.notFound("Path not Found");let s=[];return s=n.readdirSync(o),s=s.map((e=>this.info(u.join(o,e)))),s=s.filter(r.isDef),Object.assign(Object.assign({},this.info(o)),{files:s})}))}access(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,this.name()+"."+t,r)}))}info(e){if(!n.existsSync(e))return null;const t=n.statSync(e),r=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const o=t.isDirectory();return{name:r,path:e.replace(/^\/\//,"/"),size:t.size,extension:o?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:o,symlink:t.isSymbolicLink()}}name(){return"files"}},l([e.Get("/path/?*"),e.Middleware("auth"),e.Middleware("access","list"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.FilesController.prototype,"files",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.FilesController.prototype,"access",null),exports.FilesController=l([e.Controller("/files"),e.Extends(D)],exports.FilesController),exports.ForgotController=class extends D{check(e,t){return y(this,void 0,void 0,(function*(){const o=yield this.find(t);if(!o||!o.user)return e.notFound("User not found");o.token=r.uniqueID(),yield o.save(),e.json({token:o.token})}))}forgot(e,t,o){return y(this,void 0,void 0,(function*(){yield r.sleep(x.API_SLEEP_FORGOT);const s=t,i=yield exports.User.findOne({where:{[a.Op.or]:[{email:s},{username:t}]}}).catch(this.error);if(!i)return e.notFound("User not found");const n=r.uniqueID(),d=Date.now()+6e4*x.API_TOKEN_FORGOT,p=yield exports.Forgot.create({token:n,timestamp:d,state:!0,userId:i.id});e.success("OK"),o.emit("forgot.send",{ctx:e,forgot:p,user:i}),this.emit("forgot.send",{ctx:e,forgot:p,user:i})}))}reset(e,r,o,s){return y(this,void 0,void 0,(function*(){const i=yield this.find(r);if(!i)return e.notFound("User not found");i.state=!1,yield i.save().catch(this.error),i.user.password=t.sha256(o),yield i.user.save().catch(this.error),e.success("OK"),s.emit("forgot.reset",{ctx:e,user:i.user}),this.emit("forgot.reset",{ctx:e,user:i.user})}))}find(e){return y(this,void 0,void 0,(function*(){return yield exports.Forgot.findOne({where:{token:e,state:!0},include:[{model:exports.User,required:!0}]}).catch(this.error)}))}},l([e.Get("/check"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Body("token")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.ForgotController.prototype,"check",null),l([e.Post(),e.Middleware("validation",{username:r.Validation.string().min(4).required()}),c(0,e.Ctx()),c(1,e.Body("username")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,S]),g("design:returntype",Promise)],exports.ForgotController.prototype,"forgot",null),l([e.Post("/reset"),e.Middleware("validation",{token:r.Validation.string().required(),password:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body("token")),c(2,e.Body("password")),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,S]),g("design:returntype",Promise)],exports.ForgotController.prototype,"reset",null),exports.ForgotController=l([e.Controller("/forgot"),e.Extends(D)],exports.ForgotController),exports.CrudController=class extends exports.ModelController{constructor(){super(...arguments),this._crud={}}add(e,t){return y(this,void 0,void 0,(function*(){yield this._add({ctx:e,user:t})}))}all(e){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}create(){return this._crud}del(e,t){return y(this,void 0,void 0,(function*(){yield this._del({ctx:e,user:t})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t){return y(this,void 0,void 0,(function*(){yield this._set({ctx:e,user:t})}))}update(){return this._crud}validationAdd(e){return y(this,void 0,void 0,(function*(){const t=this.create();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}validationSet(e){return y(this,void 0,void 0,(function*(){const t=this.update();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}},l([e.Post(),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validationAdd"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"add",null),l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"all",null),l([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"del",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"get",null),l([e.Put("/:id"),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validationSet"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"set",null),l([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationAdd",null),l([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationSet",null),exports.CrudController=l([e.Extends(exports.ModelController)],exports.CrudController),exports.GroupsController=class extends exports.CrudController{model(){return exports.Group}create(){return{name:r.Validation.string().required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}}update(){return{name:r.Validation.string().empty(),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}}},exports.GroupsController=l([e.Controller("/groups"),e.Extends(exports.CrudController)],exports.GroupsController),exports.GroupsRoutesController=class extends exports.ModelController{model(){return exports.GroupRoute}all(e,t){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{groupId:t},include:[{model:exports.Route,required:!0}]},callback:e=>e.map((e=>e.route))})}))}set(e,t,o,s){return y(this,void 0,void 0,(function*(){const i=yield exports.Group.findByPk(t,{attributes:["id"]}).catch(this.error);if(i){const t=i.id;if(yield exports.GroupRoute.destroy(Object.assign({where:{groupId:t}},s)),o){let e=0;for(let r=0;r<o.length;r++)e=yield exports.Route.count({where:{id:o[r]}}),e&&(yield exports.GroupRoute.create({groupId:t,routeId:o[r]},Object.assign({},s)))}return e.success("OK")}if(r.isNull(i))return e.notFound("Record not found");e.error("Internal Server Error")}))}},l([e.Get("/:id/routes"),e.Middleware("auth"),e.Middleware("read","groups"),c(0,e.Ctx()),c(1,e.Params("id")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.GroupsRoutesController.prototype,"all",null),l([e.Put("/:id/routes"),e.Middleware("auth"),e.Middleware("write","groups"),e.Middleware("validation",{routes:r.Validation.array(r.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("routes")),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.GroupsRoutesController.prototype,"set",null),exports.GroupsRoutesController=l([e.Controller("/groups"),e.Extends(exports.ModelController)],exports.GroupsRoutesController),exports.LogsController=class extends exports.ModelController{model(){return exports.Log}all(e,t,r){return y(this,void 0,void 0,(function*(){const o={};t&&(o.type=t),r&&(o.source=r),yield this._all({ctx:e,options:{where:o,order:[["created","DESC"]]}})}))}},l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),c(1,e.Query("type")),c(2,e.Query("source")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.LogsController.prototype,"all",null),exports.LogsController=l([e.Controller("/logs"),e.Extends(exports.ModelController)],exports.LogsController),exports.RegisterController=class extends D{register(e,o,s){return y(this,void 0,void 0,(function*(){yield r.sleep(x.API_SLEEP_REGISTRY);const{name:i,date:n,email:d,username:p,password:u,confirm:l}=o,c=p||d,g=t.sha256(u);if(yield exports.User.count({where:{[a.Op.or]:[{email:d},{username:c}]}}).catch(this.error))return e.validation("Invalid email or username");if(g!=t.sha256(l))return e.error("Invalid password");const y=yield exports.User.create({name:i,email:d,username:c,password:g,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!y)return e.error("Internal Server Error");const h=yield exports.Register.create({token:yield this.getId(),userId:y.id,state:!0}).catch(this.error);if(!h)return y.destroy(),e.error("Internal Server Error");e.success("OK"),s.emit("register.user",{ctx:e,register:h,user:y}),this.emit("register.user",{ctx:e,register:h,user:y})}))}confirm(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield exports.Register.findOne({where:{token:t,state:!0},include:[{model:exports.User,required:!0}]}).catch(this.error);if(!o)return e.notFound("User not found");o.state=!1,yield o.save().catch(this.error),o.user.state=!0,yield o.user.save().catch(this.error),e.success("OK"),r.emit("register.confirm",{ctx:e,register:o,user:o.user}),this.emit("register.confirm",{ctx:e,register:o,user:o.user})}))}send(e,t,r){return y(this,void 0,void 0,(function*(){const o=t,s=yield exports.Register.findOne({where:{state:!0},include:[{model:exports.User,required:!0,where:{[a.Op.or]:[{email:o},{username:t}]}}]}).catch(this.error);if(!s)return e.notFound("User not found");e.success("OK"),r.emit("register.send",{ctx:e,register:s,user:s.user}),this.emit("register.send",{ctx:e,register:s,user:s.user})}))}getId(){return y(this,void 0,void 0,(function*(){const e=r.uuidv4();return(yield exports.Register.count({where:{token:e}}))?this.getId():e}))}},l([e.Post(),e.Middleware("validation",{name:r.Validation.string().required(),date:r.Validation.string().date().required(),email:r.Validation.string().email().required(),username:r.Validation.string().min(4).empty(),password:r.Validation.string().min(5).required(),confirm:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,Object,S]),g("design:returntype",Promise)],exports.RegisterController.prototype,"register",null),l([e.Post("/confirm"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Body("token")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,S]),g("design:returntype",Promise)],exports.RegisterController.prototype,"confirm",null),l([e.Post("/send"),e.Middleware("validation",{username:r.Validation.string().min(4).required()}),c(0,e.Ctx()),c(1,e.Body("username")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,S]),g("design:returntype",Promise)],exports.RegisterController.prototype,"send",null),exports.RegisterController=l([e.Controller("/register"),e.Extends(D)],exports.RegisterController),exports.RoutesController=class extends exports.CrudController{model(){return exports.Route}create(){return{name:r.Validation.string().required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}}update(){return{name:r.Validation.string().empty(),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}}},exports.RoutesController=l([e.Controller("/routes"),e.Extends(exports.CrudController)],exports.RoutesController),exports.SetupController=class extends D{setup(e){return y(this,void 0,void 0,(function*(){if(0==(yield exports.User.count())){const e=r.uniqueID(),o=yield exports.User.create({name:"Admin",email:"admin@localhost",username:"admin",password:t.sha256("admin"+e),salt:e,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0}),s={description:"API CORE",state:!0},i=yield exports.Group.create(Object.assign({name:"admin"},s));yield exports.UserGroup.create({userId:o.id,groupId:i.id});const n=["read","write"],d=["audits","users","groups","routes"];yield r.forEachSeries(d,(e=>y(this,void 0,void 0,(function*(){yield r.forEachSeries(n,(t=>y(this,void 0,void 0,(function*(){const r=yield exports.Route.create(Object.assign({name:`${e}.${t}`},s));yield exports.GroupRoute.create({groupId:i.id,routeId:r.id})}))))}))));const a=["delete","list","read","rename","upload","write"];yield r.forEachSeries(a,(e=>y(this,void 0,void 0,(function*(){const t=yield exports.Route.create(Object.assign({name:`files.${e}`},s));yield exports.GroupRoute.create({groupId:i.id,routeId:t.id})}))));const p=["logs"];yield r.forEachSeries(p,(e=>y(this,void 0,void 0,(function*(){const t=yield exports.Route.create(Object.assign({name:`${e}.read`},s));yield exports.GroupRoute.create({groupId:i.id,routeId:t.id})}))))}e.success("OK")}))}},l([e.Get(),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.SetupController.prototype,"setup",null),exports.SetupController=l([e.Controller("/setup"),e.Extends(D)],exports.SetupController),exports.UsersController=class extends exports.ModelController{model(){return exports.User}constructor(){super(),this.dir=x.API_HTTP_PUBLIC+"/avatar",x.API_HTTP_PUBLIC&&n.existsSync(x.API_HTTP_PUBLIC)&&!n.existsSync(this.dir)&&n.mkdirSync(this.dir)}avatar(e,t,r,o){return y(this,void 0,void 0,(function*(){if(t.length){const s=t[0].filename||"";if(s){const t=this.dir+"/"+r.avatar;if(n.existsSync(t)&&n.lstatSync(t).isFile()&&n.rmSync(t),r.avatar=s,yield r.save(Object.assign({},o)).catch(this.error))return e.success("OK")}}e.success("Record not changed")}))}avatar_remove(e,t,r){return y(this,void 0,void 0,(function*(){const o=this.dir+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&n.existsSync(o)&&n.rmSync(o),e.success("OK")}))}password(e,o,s,i,n){return y(this,void 0,void 0,(function*(){var d;const a=yield this.scope("password").findOne({where:{id:i.id,state:!0}}).catch(this.error);return o+=null!==(d=null==a?void 0:a.salt)&&void 0!==d?d:"",a&&a.password==t.sha256(o)?(a.salt=r.uniqueID(),a.password=t.sha256(s+a.salt),(yield a.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("Record not changed")):e.error("Record not changed")}))}token(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(o)return e.json({token:r.hash.decrypt(o.token)});e.notFound("Record not found")}))}token_get(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(o)return e.json({token:r.hash.decrypt(o.token)});e.notFound("Record not found")}))}token_remove(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(o)return o.token="",yield o.save(Object.assign({},r)).catch(this.error),e.success("OK");e.notFound("Record not found")}))}token_renew(e,t,r,o){return y(this,void 0,void 0,(function*(){const s=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(s){const t=yield this.token_new();return s.token=o.hash.encrypt(t),yield s.save(Object.assign({},r)).catch(this.error),e.json({token:t})}e.notFound("Record not found")}))}token_new(){return y(this,void 0,void 0,(function*(){var e;const t=r.uuidv4();return(null!==(e=yield this.model().count({where:{token:t}}).catch(this.error))&&void 0!==e?e:0)?this.token_new():t}))}add(e,o,s){return y(this,void 0,void 0,(function*(){const i=r.uniqueID();yield this._add({ctx:e,body:{password:t.sha256(o+i),salt:i},user:s})}))}all(e){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}del(e,t,r){return y(this,void 0,void 0,(function*(){if(r.id.toString()==t)return e.notFound("Record not found");yield this._del({ctx:e,user:r})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,o,s){return y(this,void 0,void 0,(function*(){const i=r.uniqueID();yield this._set({ctx:e,body:o?{password:t.sha256(o+i),salt:i}:{},user:s})}))}},l([e.Post("/avatar"),e.Middleware("auth"),e.Middleware("upload",(e=>({count:1,field:"file",path:e.controller.dir,types:["image/bmp","image/jpeg","image/png"],size:32}))),c(0,e.Ctx()),c(1,e.Files()),c(2,R()),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,Array,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar",null),l([e.Get("/avatar/remove"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),c(2,w()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar_remove",null),l([e.Post("/password"),e.Middleware("auth"),e.Middleware("validation",{oldPassword:r.Validation.string().min(5).required(),newPassword:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body("oldPassword")),c(2,e.Body("newPassword")),c(3,R()),c(4,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"password",null),l([e.Get("/token"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,S]),g("design:returntype",Promise)],exports.UsersController.prototype,"token",null),l([e.Get("/token/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,S]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_get",null),l([e.Get("/token/remove/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_remove",null),l([e.Get("/token/renew/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,w()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object,S]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_renew",null),l([e.Post(),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validation",{name:r.Validation.string().required(),email:r.Validation.string().email().required(),username:r.Validation.string().min(4).required(),password:r.Validation.string().min(5).required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}),c(0,e.Ctx()),c(1,e.Body("password")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"add",null),l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"all",null),l([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"del",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"get",null),l([e.Put("/:id"),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validation",{name:r.Validation.string().empty(),email:r.Validation.string().email().empty(),username:r.Validation.string().min(4).empty(),password:r.Validation.string().min(5).empty().filter(""),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}),c(0,e.Ctx()),c(1,e.Body("password")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"set",null),exports.UsersController=l([e.Controller("/users"),e.Extends(exports.ModelController),g("design:paramtypes",[])],exports.UsersController),exports.UsersGroupsController=class extends exports.ModelController{model(){return exports.UserGroup}groups(e,t){return y(this,void 0,void 0,(function*(){yield this.all(e,t.id.toString())}))}all(e,t){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{userId:t},include:[{model:exports.Group,required:!0}]},callback:e=>e.map((e=>e.group))})}))}set(e,t,o,s){return y(this,void 0,void 0,(function*(){const i=yield exports.User.findByPk(t,{attributes:["id"]}).catch(this.error);if(i){if(yield exports.UserGroup.destroy(Object.assign({where:{userId:i.id}},s)),o){let e=0;for(let t=0;t<o.length;t++)e=yield exports.Group.count({where:{id:o[t]}}),e&&(yield exports.UserGroup.create({userId:i.id,groupId:o[t]},Object.assign({},s)))}return e.success("OK")}if(r.isNull(i))return e.notFound("Record not found");e.error("Internal Server Error")}))}},l([e.Get("/groups"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"groups",null),l([e.Get("/:id/groups"),e.Middleware("auth"),e.Middleware("read","users"),c(0,e.Ctx()),c(1,e.Params("id")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"all",null),l([e.Put("/:id/groups"),e.Middleware("auth"),e.Middleware("write","users"),e.Middleware("validation",{groups:r.Validation.array(r.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("groups")),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"set",null),exports.UsersGroupsController=l([e.Controller("/users"),e.Extends(exports.ModelController)],exports.UsersGroupsController),exports.Application=S,exports.Config=O,exports.ControllerBase=D,exports.Env=x,exports.Logs=A,exports.Model=v,exports.Permission=T,exports.ReqAudit=w,exports.ReqAuth=E,exports.ReqUser=R,exports.Token=P,exports.audit=m,exports.conn=h,exports.crt=_,exports.key=I;
|
|
7
|
+
"use strict";var e=require("@andrewcaires/express"),t=require("@andrewcaires/node"),r=require("@andrewcaires/utils.js"),o=require("ws"),s=require("@andrewcaires/sequelize"),i=require("dotenv"),n=require("fs"),d=require("express-session"),a=require("sequelize"),p=require("jsonwebtoken"),u=require("path");function l(e,t,r,o){var s,i=arguments.length,n=i<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,o);else for(var d=e.length-1;d>=0;d--)(s=e[d])&&(n=(i<3?s(n):i>3?s(t,r,n):s(t,r))||n);return i>3&&n&&Object.defineProperty(t,r,n),n}function c(e,t){return function(r,o){t(r,o,e)}}function g(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function y(e,t,r,o){return new(r||(r=Promise))((function(s,i){function n(e){try{a(o.next(e))}catch(e){i(e)}}function d(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(n,d)}a((o=o.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError,i.config();class x{static getBool(e,t){return r.toBool(x.getString(e,t.toString()))}static getInt(e,t){return parseInt(x.getString(e,t.toString()))}static getMs(e,t){return r.parseMs(x.getString(e,t))}static getString(e,t){return e in process.env?process.env[e]||"":t}}x.API_CONSOLE_ERROR=x.getBool("API_CONSOLE_ERROR",!1),x.API_DEFAULT_PATH=x.getString("API_DEFAULT_PATH","/api"),x.API_DB_DATABASE=x.getString("API_DB_DATABASE",""),x.API_DB_HOST=x.getString("API_DB_HOST","127.0.0.1"),x.API_DB_PASSWORD=x.getString("API_DB_PASSWORD",""),x.API_DB_PORT=x.getInt("API_DB_PORT",3306),x.API_DB_TYPE=x.getString("API_DB_TYPE",""),x.API_DB_USERNAME=x.getString("API_DB_USERNAME","root"),x.API_DB_LOG=x.getBool("API_DB_LOG",!1),x.API_DB_AUDIT=x.getBool("API_DB_AUDIT",!0),x.API_DB_PREFIX=x.getString("API_DB_PREFIX",""),x.API_DB_TIMEZONE=x.getString("API_DB_TIMEZONE","+00:00"),x.API_HTTP_CRT=x.getString("API_HTTP_CRT",""),x.API_HTTP_KEY=x.getString("API_HTTP_KEY",""),x.API_HTTP_PORT=x.getInt("API_HTTP_PORT",3e3),x.API_HTTP_PUBLIC=x.getString("API_HTTP_PUBLIC",""),x.API_HTTP_CROSS=x.getBool("API_HTTP_CROSS",!1),x.API_HTTP_HYBRID=x.getBool("API_HTTP_HYBRID",!1),x.API_HTTP_REDIRECT=x.getString("API_HTTP_REDIRECT",""),x.API_KEY_HASH=x.getString("API_KEY_HASH",""),x.API_KEY_HEADER=x.getString("API_KEY_HEADER","api_key"),x.API_MODEL_LIMIT=x.getInt("API_MODEL_LIMIT",10),x.API_MODEL_LIMIT_MAX=x.getInt("API_MODEL_LIMIT_MAX",500),x.API_NOTFOUND_REDIRECT=x.getString("API_NOTFOUND_REDIRECT",""),x.API_SLEEP_AUTH=x.getMs("API_SLEEP_AUTH","2s"),x.API_SLEEP_FORGOT=x.getMs("API_SLEEP_FORGOT","5s"),x.API_SLEEP_REGISTRY=x.getMs("API_SLEEP_REGISTRY","5s"),x.API_SESSION_NAME=x.getString("API_SESSION_NAME","session.id"),x.API_SESSION_LIFETIME=x.getMs("API_SESSION_LIFETIME","1d"),x.API_SESSION_SECRET=x.getString("API_SESSION_SECRET","yoursecret"),x.API_TOKEN_CRT=x.getString("API_TOKEN_CRT",""),x.API_TOKEN_KEY=x.getString("API_TOKEN_KEY",""),x.API_TOKEN_FORGOT=x.getMs("API_TOKEN_LIFETIME","1d"),x.API_TOKEN_HEADER=x.getString("API_TOKEN_HEADER","authorization"),x.API_TOKEN_LIFETIME=x.getMs("API_TOKEN_LIFETIME","1d"),x.API_TOKEN_RENEW=x.getMs("API_TOKEN_RENEW","1d"),x.API_UPLOAD_COUNT=x.getInt("API_UPLOAD_COUNT",1),x.API_UPLOAD_FIELD=x.getString("API_UPLOAD_FIELD","upload"),x.API_UPLOAD_SIZE=x.getInt("API_UPLOAD_SIZE",2),x.API_UPLOAD_TEMP=x.getString("API_UPLOAD_TEMP","./temp"),x.API_WEBSOCKET_START=x.getBool("API_WEBSOCKET_START",!1);const h=new s.Connection({type:x.API_DB_TYPE,database:x.API_DB_DATABASE,username:x.API_DB_USERNAME,password:x.API_DB_PASSWORD,hostname:x.API_DB_HOST,hostport:x.API_DB_PORT,logging:x.API_DB_LOG,prefix:x.API_DB_PREFIX});class v extends s.Model{}const _={afterCreate:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null;yield exports.Audit.create({type:"CREATE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify(e.toJSON()),state:!0,user_id:null!==(i=null==t?void 0:t.user_id)&&void 0!==i?i:null}).catch(r.noop)})),afterUpdate:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null,a={},p=e.changed();p&&p.forEach((t=>a[t]=e.getDataValue(t))),yield exports.Audit.create({type:"UPDATE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify({before:e.previous(),after:a}),state:!0,user_id:null!==(i=null==t?void 0:t.user_id)&&void 0!==i?i:null}).catch(r.noop)})),afterDestroy:(e,t)=>y(void 0,void 0,void 0,(function*(){var o,s,i;if(!x.API_DB_AUDIT)return;const n=r.isObject(e)?e.constructor:null,d=null!==(o=null==n?void 0:n.primaryKeyAttribute)&&void 0!==o?o:null;yield exports.Audit.create({type:"DELETE",model:null!==(s=null==n?void 0:n.getTableName())&&void 0!==s?s:null,record:d?e.getDataValue(d):null,data:JSON.stringify(e.toJSON()),state:!0,user_id:null!==(i=null==t?void 0:t.user_id)&&void 0!==i?i:null}).catch(r.noop)}))};exports.Auth=class extends v{},l([s.Id(),g("design:type",Number)],exports.Auth.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Auth.prototype,"secret",void 0),l([s.FullDate(),g("design:type",Date)],exports.Auth.prototype,"logout",void 0),l([s.String(),g("design:type",s.String)],exports.Auth.prototype,"useragent",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Auth.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Auth.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Auth.prototype,"deleted_at",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Auth.prototype,"user_id",void 0),exports.Auth=l([s.Database(h),s.ModelName("auth")],exports.Auth),exports.Register=class extends v{},l([s.Id(),g("design:type",Number)],exports.Register.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Register.prototype,"token",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Register.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Register.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Register.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Register.prototype,"deleted_at",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Register.prototype,"user_id",void 0),exports.Register=l([s.Database(h),s.ModelName("register")],exports.Register),exports.Group=class extends v{},l([s.Id(),g("design:type",Number)],exports.Group.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Group.prototype,"name",void 0),l([s.Text(),g("design:type",s.String)],exports.Group.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Group.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Group.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Group.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Group.prototype,"deleted_at",void 0),l([s.HasMany((()=>exports.UserGroup),"group_id"),g("design:type",Array)],exports.Group.prototype,"groups_routes",void 0),l([s.HasMany((()=>exports.UserGroup),"group_id"),g("design:type",Array)],exports.Group.prototype,"users_groups",void 0),exports.Group=l([s.Database(h),s.ModelName("group"),s.Hooks(_)],exports.Group),exports.UserGroup=class extends v{},l([s.CreatedAt,g("design:type",Date)],exports.UserGroup.prototype,"created_at",void 0),l([s.BelongsTo((()=>exports.Group)),g("design:type",Number)],exports.UserGroup.prototype,"group_id",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.UserGroup.prototype,"user_id",void 0),exports.UserGroup=l([s.Database(h),s.ModelName("users_groups"),s.Hooks(_)],exports.UserGroup),exports.User=class extends v{},l([s.Id(),g("design:type",Number)],exports.User.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"name",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"email",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"username",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"password",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"salt",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"token",void 0),l([s.String(),g("design:type",s.String)],exports.User.prototype,"avatar",void 0),l([s.DateOnly(),g("design:type",s.String)],exports.User.prototype,"date",void 0),l([s.Text(),g("design:type",s.String)],exports.User.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.User.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.User.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.User.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.User.prototype,"deleted_at",void 0),l([s.HasMany((()=>exports.Audit),"user_id"),g("design:type",Array)],exports.User.prototype,"audits",void 0),l([s.HasMany((()=>exports.Auth),"user_id"),g("design:type",Array)],exports.User.prototype,"auths",void 0),l([s.HasMany((()=>exports.Register),"user_id"),g("design:type",Array)],exports.User.prototype,"registers",void 0),l([s.HasMany((()=>exports.UserGroup),"user_id"),g("design:type",Array)],exports.User.prototype,"users_groups",void 0),exports.User=l([s.Database(h),s.ModelName("user"),s.DefaultScope({attributes:{exclude:["password","salt","token"]}}),s.Scopes({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),s.Hooks(_)],exports.User),exports.Audit=class extends v{},l([s.Id(),g("design:type",Number)],exports.Audit.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Audit.prototype,"type",void 0),l([s.String(),g("design:type",s.String)],exports.Audit.prototype,"model",void 0),l([s.Integer(),g("design:type",s.String)],exports.Audit.prototype,"record",void 0),l([s.Text(),g("design:type",s.String)],exports.Audit.prototype,"data",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Audit.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Audit.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Audit.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Audit.prototype,"deleted_at",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Audit.prototype,"user_id",void 0),exports.Audit=l([s.Database(h),s.ModelName("audit")],exports.Audit),exports.Configs=class extends v{},l([s.String(),g("design:type",s.String)],exports.Configs.prototype,"key",void 0),l([s.String(),g("design:type",s.String)],exports.Configs.prototype,"value",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Configs.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Configs.prototype,"updated_at",void 0),exports.Configs=l([s.Database(h),s.ModelName("configs"),s.Hooks(_)],exports.Configs),exports.Forgot=class extends v{},l([s.Id(),g("design:type",Number)],exports.Forgot.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Forgot.prototype,"token",void 0),l([s.BigInt(),g("design:type",Number)],exports.Forgot.prototype,"timestamp",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Forgot.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Forgot.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Forgot.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Forgot.prototype,"deleted_at",void 0),l([s.BelongsTo((()=>exports.User)),g("design:type",Number)],exports.Forgot.prototype,"user_id",void 0),exports.Forgot=l([s.Database(h),s.ModelName("forgot")],exports.Forgot),exports.Route=class extends v{},l([s.Id(),g("design:type",Number)],exports.Route.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Route.prototype,"name",void 0),l([s.Text(),g("design:type",s.String)],exports.Route.prototype,"description",void 0),l([s.Boolean(),g("design:type",s.Boolean)],exports.Route.prototype,"state",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Route.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Route.prototype,"updated_at",void 0),l([s.DeletedAt,g("design:type",Date)],exports.Route.prototype,"deleted_at",void 0),l([s.HasMany((()=>exports.GroupRoute),"route_id"),g("design:type",Array)],exports.Route.prototype,"groups_routes",void 0),exports.Route=l([s.Database(h),s.ModelName("route"),s.Hooks(_)],exports.Route),exports.GroupRoute=class extends v{},l([s.CreatedAt,g("design:type",Date)],exports.GroupRoute.prototype,"created_at",void 0),l([s.BelongsTo((()=>exports.Group)),g("design:type",Number)],exports.GroupRoute.prototype,"group_id",void 0),l([s.BelongsTo((()=>exports.Route)),g("design:type",Number)],exports.GroupRoute.prototype,"route_id",void 0),exports.GroupRoute=l([s.Database(h),s.ModelName("groups_routes"),s.Hooks(_)],exports.GroupRoute),exports.Log=class extends v{},l([s.Id(),g("design:type",Number)],exports.Log.prototype,"id",void 0),l([s.String(),g("design:type",s.String)],exports.Log.prototype,"type",void 0),l([s.String(),g("design:type",s.String)],exports.Log.prototype,"source",void 0),l([s.Text(),g("design:type",s.String)],exports.Log.prototype,"message",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Log.prototype,"created_at",void 0),exports.Log=l([s.Database(h),s.ModelName("log")],exports.Log),exports.Session=class extends v{},l([s.String(),g("design:type",s.String)],exports.Session.prototype,"session",void 0),l([s.Text(),g("design:type",s.String)],exports.Session.prototype,"json",void 0),l([s.BigInt(),g("design:type",Number)],exports.Session.prototype,"expired",void 0),l([s.CreatedAt,g("design:type",Date)],exports.Session.prototype,"created_at",void 0),l([s.UpdatedAt,g("design:type",Date)],exports.Session.prototype,"updated_at",void 0),exports.Session=l([s.Database(h),s.ModelName("session")],exports.Session);class m{static write(e,r,o){return y(this,void 0,void 0,(function*(){yield m.writeRaw(t.LogColor.White,"",e,r,o)}))}static error(e,r,o){return y(this,void 0,void 0,(function*(){yield m.writeRaw(t.LogColor.Red,"error",e,r,o)}))}static info(e,r,o){return y(this,void 0,void 0,(function*(){yield m.writeRaw(t.LogColor.Cyan,"info",e,r,o)}))}static success(e,r,o){return y(this,void 0,void 0,(function*(){yield m.writeRaw(t.LogColor.Green,"success",e,r,o)}))}static warning(e,r,o){return y(this,void 0,void 0,(function*(){yield m.writeRaw(t.LogColor.Yellow,"warning",e,r,o)}))}static writeRaw(e,r,o,s,i){return y(this,void 0,void 0,(function*(){i&&t.Log.console(e,r,o),h&&(yield exports.Log.create({type:r,source:s,message:o}).catch((()=>null)))}))}}const f=e=>n.existsSync(e)?n.readFileSync(e):void 0,A={http:f(x.API_HTTP_CRT),token:f(x.API_TOKEN_CRT)},C={http:f(x.API_HTTP_KEY),token:f(x.API_TOKEN_KEY)};class S extends d.Store{constructor(){super(),this.all=e=>y(this,void 0,void 0,(function*(){e=e||r.noop;const t=yield exports.Session.findAll({attributes:["session"],where:{expired:{[a.Op.gte]:Date.now()}}}).catch((t=>(e(t),null)));t&&e(null,t.map((e=>e.session))),e()})),this.clear=e=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy().catch(r.noop),e&&e()})),this.destroy=(e,t)=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy({where:{session:e}}).catch(r.noop),t&&t()})),this.expired=()=>y(this,void 0,void 0,(function*(){yield exports.Session.destroy({where:{expired:{[a.Op.lt]:Date.now()}}}).catch(r.noop)})),this.get=(e,t)=>y(this,void 0,void 0,(function*(){t=t||r.noop;const o=yield exports.Session.findOne({where:{session:e,expired:{[a.Op.gte]:Date.now()}}}).catch((e=>(t(e),null)));if(o){const e=JSON.parse(o.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield o.destroy().catch(r.noop),void t(null)}t(null,e)}else t(null)})),this.length=e=>y(this,void 0,void 0,(function*(){e&&e(null,(yield exports.Session.count().catch(r.noop))||0)})),this.set=(e,t,o)=>y(this,void 0,void 0,(function*(){o=o||r.noop;const s=Date.now()+x.API_SESSION_LIFETIME,i=JSON.stringify(t),[n,d]=(yield exports.Session.findOrCreate({where:{session:e},defaults:{session:e,json:i,expired:s}}).catch(r.noop))||[];n&&(d||(n.json=i,n.expired=s,yield n.save().catch(r.noop))),o()})),this.loop=r.loop(this.expired,3e4),this.loop.start()}}class P{static create(e){return y(this,void 0,void 0,(function*(){if(!C.token)return{error:"Key not found"};const{id:t}=e,o=r.uuidv4(),s=yield exports.Auth.create({secret:o,user_id:t}).catch(P.error);if(!s)return{error:"Internal Server Error"};return{auth:s,token:p.sign({id:t,secret:o},C.token,P.options())}}))}static destroy(e){return y(this,void 0,void 0,(function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)}))}static error(e){m.error(e.message,"api.token",x.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:x.API_TOKEN_LIFETIME+"ms"}}static renew(e){return y(this,void 0,void 0,(function*(){if(!C.token)return{error:"Key not found"};const{error:t,decode:o}=P.verify(e,x.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(o){const{id:e,secret:t}=o;if(e&&t){const o=yield exports.User.findOne({where:{id:e,state:!0}}).catch(P.error);if(o){const s=yield exports.Auth.findOne({where:{secret:t,user_id:o.id}}).catch(P.error);if(s&&!s.logout){s.secret=r.uuidv4(),yield s.save().catch(P.error);return{auth:s,token:p.sign({id:e,secret:s.secret},C.token,P.options())}}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static user(e,t,r){return y(this,void 0,void 0,(function*(){if(e){t=r.hash.encrypt(e);const o=yield exports.User.findOne({where:{token:t,state:!0}}).catch(P.error);if(o){const t=e.replace(/(-[\w]{4})/g,"-****"),[r]=(yield exports.Auth.findOrCreate({where:{secret:t,user_id:o.id},defaults:{secret:t,user_id:o.id}}).catch(P.error))||[];if(r)return{auth:r,user:o}}return{error:"Access denied"}}const{error:o,decode:s}=P.verify(t);if(o)return{error:o};if(s){const{id:e,secret:t}=s;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(P.error);if(r){const e=yield exports.Auth.findOne({where:{secret:t,user_id:r.id}}).catch(P.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static verify(e,t){if(!A.token)return{error:"Cert not found"};if(!e||e.split(".").length<3)return{error:"Invalid Token"};try{return{decode:p.verify(e,A.token,{clockTolerance:t})}}catch(e){return{error:"Invalid Token"}}}}class I extends e.Application{constructor(e){super(e,{cert:A.http,cross:x.API_HTTP_CROSS,hybrid:x.API_HTTP_HYBRID,key:C.http,notfound:x.API_NOTFOUND_REDIRECT,path:x.API_DEFAULT_PATH,port:x.API_HTTP_PORT,public:x.API_HTTP_PUBLIC,redirect:x.API_HTTP_REDIRECT,session:{store:new S,name:x.API_SESSION_NAME,secret:x.API_SESSION_SECRET,cookie:{maxAge:x.API_SESSION_LIFETIME},genid:r.uuidv4}}),this.hash=new t.Hash(x.API_KEY_HASH)}error(e,t){m.error(e.message,t,x.API_CONSOLE_ERROR)}log(e,t){m.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return y(this,void 0,void 0,(function*(){yield h.sync(),yield e.listen.call(this),x.API_WEBSOCKET_START&&this.server&&(this._webSocket=new o.Server({server:this.server,verifyClient:(e,t)=>t(x.API_WEBSOCKET_START)}),this._webSocket.on("connection",((e,t)=>y(this,void 0,void 0,(function*(){t.url||(t.url="");const o=t.url.length<=1?"":t.url.replace(/\//g,".");let s;e.on("message",(r=>y(this,void 0,void 0,(function*(){if(s)try{const i=JSON.parse(r);this.emit("ws.message"+o,{data:i,message:r,req:t,user:s,ws:e})}catch(i){this.emit("ws.message"+o,{message:r,req:t,user:s,ws:e})}else{const{user:i}=yield P.user("",r.toString(),this);i&&(s=i,this.emit("ws.connection"+o,{req:t,user:s,ws:e}))}s||e.close()})))),e.on("close",(()=>{s&&this.emit("ws.close"+o,{user:s,ws:e})})),yield r.sleep(2e3),s||e.close()})))))}))}websocket(){return this._webSocket}}class O{static all(){return y(this,void 0,void 0,(function*(){const e=yield exports.Configs.findAll().catch(O.error),t={};return e&&e.forEach((e=>t[e.key]=e.value)),t}))}static del(e,t){return y(this,void 0,void 0,(function*(){var r;const o=null!==(r=null==t?void 0:t.id)&&void 0!==r?r:null;return((yield exports.Configs.destroy(Object.assign({where:{key:e},individualHooks:!0},{user_id:o})).catch(O.error))||0)>0}))}static error(e){m.error(e.message,"api.config",x.API_CONSOLE_ERROR)}static get(e){return y(this,arguments,void 0,(function*(e,t=""){const[r]=(yield exports.Configs.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(O.error))||[];return r?r.value:t}))}static set(e,t,r){return y(this,void 0,void 0,(function*(){var o;const s=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,[i]=(yield exports.Configs.findOrCreate(Object.assign({where:{key:e}},{user_id:s})).catch(O.error))||[];i&&(i.value=t,yield i.save().catch(O.error))}))}}const w=e.parameterFactory((({ctx:e})=>{var t,r,o;return{user_id:null!==(o=null===(r=null===(t=e.req)||void 0===t?void 0:t.user)||void 0===r?void 0:r.id)&&void 0!==o?o:null}})),E=e.parameterFactory((({ctx:e})=>e.req.auth)),R=e.parameterFactory((({ctx:e})=>e.req.user));class T{static all(e,t){return y(this,void 0,void 0,(function*(){return yield exports.Route.findAll({where:Object.assign(Object.assign({},t),{state:!0}),include:[{model:exports.GroupRoute,required:!0,include:[{model:exports.Group,required:!0,where:{state:!0},include:[{model:exports.UserGroup,required:!0,where:{user_id:e.id}}]}]}]}).catch((e=>{m.error(e.message,"api.permission",x.API_CONSOLE_ERROR)}))}))}static get(e){return y(this,void 0,void 0,(function*(){const t=yield T.all(e);return t?t.map((e=>e.name)):[]}))}static is(e,t){return y(this,void 0,void 0,(function*(){const r=yield T.all(e,{name:t});return!!r&&r.length>0}))}}class D extends r.EventEmitter{auth(e,t,r,o,s){return y(this,void 0,void 0,(function*(){const{auth:i,error:n,user:d}=yield P.user(t,r,s);return n?e.error(n):i&&d?i.useragent&&i.useragent!=o?e.error("Invalid token"):(e.req.auth=i,e.req.user=d,void e.next()):e.error("Internal Server Error")}))}session(e,t,o){return y(this,void 0,void 0,(function*(){o.auth&&o.user&&(o.useragent?o.useragent!=t&&o.regenerate(r.noop):(o.useragent=t,o.save(r.noop))),e.next()}))}error(e){m.error(e.message,"api.controller",x.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return y(this,void 0,void 0,(function*(){return r?(yield T.is(r,t))?e.next():void e.unauthorized("Access denied"):e.unauthorized("Access denied")}))}read(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".read",r)}))}upload(t,r){r.path||(r.path=x.API_UPLOAD_TEMP),r.size||(r.size=x.API_UPLOAD_SIZE),r.field||(r.field=x.API_UPLOAD_FIELD),e.Upload.middleware(t,r)}validation(e,t){return y(this,void 0,void 0,(function*(){const{error:o,value:s}=yield r.Validation.object(t).parse().validateAsync(e.req.body);if(o)return e.validation(o);e.req.body=s,e.next()}))}write(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".write",r)}))}}l([c(0,e.Ctx()),c(1,e.Headers(x.API_KEY_HEADER)),c(2,e.Headers(x.API_TOKEN_HEADER)),c(3,e.Headers("user-agent")),c(4,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,String,I]),g("design:returntype",Promise)],D.prototype,"auth",null),l([c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Session()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],D.prototype,"session",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"permission",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"read",null),l([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",void 0)],D.prototype,"upload",null),l([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],D.prototype,"validation",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],D.prototype,"write",null),exports.ModelController=class extends D{constructor(){super(...arguments),this._columns=[]}_add(t){return y(this,arguments,void 0,(function*({ctx:t,options:r,body:o,user:s}){var i;const n=null!==(i=null==s?void 0:s.id)&&void 0!==i?i:null,d=yield this.model().create(Object.assign(Object.assign({},t.req.body),o||{}),Object.assign(Object.assign({},r||{}),{user_id:n})).catch(this.error);if(d){const r=this.key();return t.prepare(e.Status.OK,{[r]:d.getDataValue(r)}),d}t.error("Internal Server Error")}))}_all(t){return y(this,arguments,void 0,(function*({ctx:t,options:o,callback:s,scope:i}){var n,d,p,u,l,c;const g=this.scope(i),y=Object.assign({},o||{});y.where=Object.assign({},y.where||{});const h=t.req.query.limit,v=r.isString(h)?parseInt(h):x.API_MODEL_LIMIT;y.limit=v>=0?Math.min(v,x.API_MODEL_LIMIT_MAX):void 0;const _=t.req.query.offset;if(r.isString(_)){const e=_?parseInt(_):0;y.offset=e>0?e:void 0}const m=[],f=this.columns(),A=e=>f.indexOf(e)>=0,C=null===(n=t.req.query.asc)||void 0===n?void 0:n.toString();C&&C.length&&m.push(...C.split(",").filter(A).map((e=>[e,"ASC"])));const S=null===(d=t.req.query.desc)||void 0===d?void 0:d.toString();S&&S.length&&m.push(...S.split(",").filter(A).map((e=>[e,"DESC"]))),m.length&&(y.order=m);const P=[],I=null===(p=t.req.query.search)||void 0===p?void 0:p.toString();(r.isArray(y.attributes)?y.attributes:f).filter(r.isString).forEach((e=>{var r;if(I&&I.length&&P.push({[e]:{[a.Op.like]:`%${I}%`}}),"search_"+e in t.req.query){const o=null===(r=t.req.query["search_"+e])||void 0===r?void 0:r.toString();o&&o.length&&P.push({[e]:{[a.Op.like]:`%${o}%`}})}})),P.length&&(y.where=Object.assign(Object.assign({},y.where),{[a.Op.or]:[...P]}));const O=null!==(u=yield g.count(Object.assign(Object.assign({},y),{col:f[0]})).catch(this.error))&&void 0!==u?u:0,w=yield g.findAll(y).catch(this.error),E={count:O,limit:null!==(l=y.limit)&&void 0!==l?l:-1,offset:null!==(c=y.offset)&&void 0!==c?c:0};return w?(t.prepare(e.Status.OK,Object.assign(Object.assign({},E),{records:s?yield s(w):w})),Object.assign(Object.assign({},E),{records:w})):(t.error("Internal Server Error"),Object.assign(Object.assign({},E),{records:[]}))}))}columns(){return 0==this._columns.length&&(this._columns=Object.keys(this.model().getAttributes())),this._columns}_del(e){return y(this,arguments,void 0,(function*({ctx:e,options:t,user:r}){var o;const s=this.key(),{[s]:i}=e.req.params;if(!i)return e.error("Internal Server Error"),0;const n=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,d=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[s]:i}),individualHooks:!0}),{user_id:n})).catch(this.error);return d?(e.success("OK"),d):(e.notFound("Record not found"),0)}))}error(e){e.sql?m.error(e.message+"\n"+e.sql,"api.controller.sql",x.API_CONSOLE_ERROR):super.error(e)}_get(t){return y(this,arguments,void 0,(function*({ctx:t,options:r,callback:o,scope:s}){const i=this.key(),{[i]:n}=t.req.params,d=yield this.scope(s).findOne(Object.assign(Object.assign({},r||{}),{where:Object.assign(Object.assign({},(r||{}).where),{[i]:n})})).catch(this.error);return d?(t.prepare(e.Status.OK,o?yield o(d):d.toJSON()),d):null===d?t.notFound("Record not found"):void t.error("Internal Server Error")}))}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}_set(e){return y(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:o}){var s,i;const n=this.key(),{[n]:d}=e.req.params,a=null!==(s=null==o?void 0:o.id)&&void 0!==s?s:null,[p]=null!==(i=yield this.model().update(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:d}),individualHooks:!0}),{user_id:a})).catch(this.error))&&void 0!==i?i:[];return p?(e.success("OK"),!0):(e.success("Record not changed"),!1)}))}},exports.ModelController=l([e.Extends(D)],exports.ModelController),exports.AuditsController=class extends exports.ModelController{model(){return exports.Audit}all(e,t,r){return y(this,void 0,void 0,(function*(){const o={};t&&(o.type=t),r&&(o.table=r),yield this._all({ctx:e,options:{attributes:{exclude:["data"]},where:o,order:[["created_at","DESC"]]}})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}},l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),c(1,e.Query("type")),c(2,e.Query("table")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.AuditsController.prototype,"all",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.AuditsController.prototype,"get",null),exports.AuditsController=l([e.Controller("/audits"),e.Extends(exports.ModelController)],exports.AuditsController),exports.AuthController=class extends D{login(e,o,s,i,n){return y(this,void 0,void 0,(function*(){var d;yield r.sleep(x.API_SLEEP_AUTH);const p=yield exports.User.scope("password").findOne({where:{[a.Op.or]:[{email:s},{username:s}]}}).catch(this.error);if(i+=null!==(d=null==p?void 0:p.salt)&&void 0!==d?d:"",!p||p.password!=t.sha256(i))return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const u=yield exports.Register.findOne({where:{state:!0,user_id:p.id}}).catch(this.error);if(u)return e.error("Activation required"),n.emit("auth.activation",{ctx:e,register:u,user:p}),void this.emit("auth.activation",{ctx:e,register:u,user:p});if(!p.state)return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e,user:p}),void this.emit("auth.failure",{ctx:e,user:p});const{auth:l,error:c,token:g}=yield P.create(p);return c?(e.error(c),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):l&&g?(l.useragent=o,yield l.save().catch(this.error),e.json({token:g}),n.emit("auth.login",{auth:l,ctx:e,user:p}),void this.emit("auth.login",{auth:l,ctx:e,user:p})):(e.error("Internal Server Error"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))}))}logout(e,t,r,o){return y(this,void 0,void 0,(function*(){if(yield P.destroy(t))return e.success("Disconcerted"),o.emit("auth.logout",{auth:t,ctx:e,user:r}),void this.emit("auth.logout",{auth:t,ctx:e,user:r});e.unauthorized("Access denied")}))}renew(e,t,r,o){return y(this,void 0,void 0,(function*(){const{auth:s,error:i,token:n}=yield P.renew(r);return i?e.error(i):s?(s.useragent=t,yield s.save().catch(this.error),e.json({token:n}),o.emit("auth.renew",{auth:s,ctx:e}),void this.emit("auth.renew",{auth:s,ctx:e})):e.error("Internal Server Error")}))}user(e,t){return y(this,void 0,void 0,(function*(){const r=yield T.all(t);if(!r)return e.error("Internal Server Error");e.json(Object.assign(Object.assign({},t.toJSON()),{permissions:r.map((e=>e.name))}))}))}},l([e.Post("/login"),e.Middleware("validation",{username:r.Validation.string().min(3).required(),password:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Body("username")),c(3,e.Body("password")),c(4,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,String,I]),g("design:returntype",Promise)],exports.AuthController.prototype,"login",null),l([e.Get("/logout"),e.Middleware("auth"),c(0,e.Ctx()),c(1,E()),c(2,R()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.Auth,exports.User,I]),g("design:returntype",Promise)],exports.AuthController.prototype,"logout",null),l([e.Post("/renew"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Headers("user-agent")),c(2,e.Body("token")),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,I]),g("design:returntype",Promise)],exports.AuthController.prototype,"renew",null),l([e.Get(),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.AuthController.prototype,"user",null),exports.AuthController=l([e.Controller("/auth"),e.Extends(D)],exports.AuthController),exports.FilesController=class extends D{directory(){return x.API_HTTP_PUBLIC||"./"}files(e){return y(this,void 0,void 0,(function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const o=u.join(this.directory(),t);if(!n.existsSync(o)||!n.statSync(o).isDirectory())return e.notFound("Path not Found");let s=[];return s=n.readdirSync(o),s=s.map((e=>this.info(u.join(o,e)))),s=s.filter(r.isDef),Object.assign(Object.assign({},this.info(o)),{files:s})}))}access(e,t,r){return y(this,void 0,void 0,(function*(){yield this.permission(e,this.name()+"."+t,r)}))}info(e){if(!n.existsSync(e))return null;const t=n.statSync(e),r=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const o=t.isDirectory();return{name:r,path:e.replace(/^\/\//,"/"),size:t.size,extension:o?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:o,symlink:t.isSymbolicLink()}}name(){return"files"}},l([e.Get("/path/?*"),e.Middleware("auth"),e.Middleware("access","list"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.FilesController.prototype,"files",null),l([c(0,e.Ctx()),c(1,e.Argument()),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.FilesController.prototype,"access",null),exports.FilesController=l([e.Controller("/files"),e.Extends(D)],exports.FilesController),exports.ForgotController=class extends D{check(e,t){return y(this,void 0,void 0,(function*(){const o=yield this.find(t);if(!o||!o.user)return e.notFound("User not found");o.token=r.uniqueID(),yield o.save(),e.json({token:o.token})}))}forgot(e,t,o){return y(this,void 0,void 0,(function*(){yield r.sleep(x.API_SLEEP_FORGOT);const s=t,i=yield exports.User.findOne({where:{[a.Op.or]:[{email:s},{username:t}]}}).catch(this.error);if(!i)return e.notFound("User not found");const n=r.uniqueID(),d=Date.now()+6e4*x.API_TOKEN_FORGOT,p=yield exports.Forgot.create({token:n,timestamp:d,state:!0,user_id:i.id});e.success("OK"),o.emit("forgot.send",{ctx:e,forgot:p,user:i}),this.emit("forgot.send",{ctx:e,forgot:p,user:i})}))}reset(e,r,o,s){return y(this,void 0,void 0,(function*(){const i=yield this.find(r);if(!i)return e.notFound("User not found");i.state=!1,yield i.save().catch(this.error),i.user.password=t.sha256(o),yield i.user.save().catch(this.error),e.success("OK"),s.emit("forgot.reset",{ctx:e,user:i.user}),this.emit("forgot.reset",{ctx:e,user:i.user})}))}find(e){return y(this,void 0,void 0,(function*(){return yield exports.Forgot.findOne({where:{token:e,state:!0},include:[{model:exports.User,required:!0}]}).catch(this.error)}))}},l([e.Get("/check"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Body("token")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.ForgotController.prototype,"check",null),l([e.Post(),e.Middleware("validation",{username:r.Validation.string().min(4).required()}),c(0,e.Ctx()),c(1,e.Body("username")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,I]),g("design:returntype",Promise)],exports.ForgotController.prototype,"forgot",null),l([e.Post("/reset"),e.Middleware("validation",{token:r.Validation.string().required(),password:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body("token")),c(2,e.Body("password")),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,I]),g("design:returntype",Promise)],exports.ForgotController.prototype,"reset",null),exports.ForgotController=l([e.Controller("/forgot"),e.Extends(D)],exports.ForgotController),exports.CrudController=class extends exports.ModelController{constructor(){super(...arguments),this._crud={}}add(e,t){return y(this,void 0,void 0,(function*(){yield this._add({ctx:e,user:t})}))}all(e){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}create(){return this._crud}del(e,t){return y(this,void 0,void 0,(function*(){yield this._del({ctx:e,user:t})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t){return y(this,void 0,void 0,(function*(){yield this._set({ctx:e,user:t})}))}update(){return this._crud}validationAdd(e){return y(this,void 0,void 0,(function*(){const t=this.create();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}validationSet(e){return y(this,void 0,void 0,(function*(){const t=this.update();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}},l([e.Post(),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validationAdd"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"add",null),l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"all",null),l([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"del",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"get",null),l([e.Put("/:id"),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validationSet"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.CrudController.prototype,"set",null),l([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationAdd",null),l([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationSet",null),exports.CrudController=l([e.Extends(exports.ModelController)],exports.CrudController),exports.GroupsController=class extends exports.CrudController{model(){return exports.Group}create(){return{name:r.Validation.string().required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}}update(){return{name:r.Validation.string().empty(),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}}},exports.GroupsController=l([e.Controller("/groups"),e.Extends(exports.CrudController)],exports.GroupsController),exports.GroupsRoutesController=class extends exports.ModelController{model(){return exports.GroupRoute}all(e,t){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{group_id:t},include:[{model:exports.Route,required:!0}]},callback:e=>e.map((e=>e.route))})}))}set(e,t,o,s){return y(this,void 0,void 0,(function*(){const i=yield exports.Group.findByPk(t,{attributes:["id"]}).catch(this.error);if(i){const t=i.id;if(yield exports.GroupRoute.destroy(Object.assign({where:{group_id:t},individualHooks:!0},s)),o){let e=0;yield r.sleep(1e3);for(let r=0;r<o.length;r++)e=yield exports.Route.count({where:{id:o[r]}}),e&&(yield exports.GroupRoute.create({group_id:t,route_id:o[r]},Object.assign({},s)))}return e.success("OK")}if(r.isNull(i))return e.notFound("Record not found");e.error("Internal Server Error")}))}},l([e.Get("/:id/routes"),e.Middleware("auth"),e.Middleware("read","groups"),c(0,e.Ctx()),c(1,e.Params("id")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.GroupsRoutesController.prototype,"all",null),l([e.Put("/:id/routes"),e.Middleware("auth"),e.Middleware("write","groups"),e.Middleware("validation",{routes:r.Validation.array(r.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("routes")),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.GroupsRoutesController.prototype,"set",null),exports.GroupsRoutesController=l([e.Controller("/groups"),e.Extends(exports.ModelController)],exports.GroupsRoutesController),exports.LogsController=class extends exports.ModelController{model(){return exports.Log}all(e,t,r){return y(this,void 0,void 0,(function*(){const o={};t&&(o.type=t),r&&(o.source=r),yield this._all({ctx:e,options:{where:o,order:[["created_at","DESC"]]}})}))}},l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),c(1,e.Query("type")),c(2,e.Query("source")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.LogsController.prototype,"all",null),exports.LogsController=l([e.Controller("/logs"),e.Extends(exports.ModelController)],exports.LogsController),exports.RegisterController=class extends D{register(e,o,s){return y(this,void 0,void 0,(function*(){yield r.sleep(x.API_SLEEP_REGISTRY);const{name:i,date:n,email:d,username:p,password:u,confirm:l}=o,c=p||d,g=t.sha256(u);if(yield exports.User.count({where:{[a.Op.or]:[{email:d},{username:c}]}}).catch(this.error))return e.validation("Invalid email or username");if(g!=t.sha256(l))return e.error("Invalid password");const y=yield exports.User.create({name:i,email:d,username:c,password:g,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!y)return e.error("Internal Server Error");const h=yield exports.Register.create({token:yield this.getId(),user_id:y.id,state:!0}).catch(this.error);if(!h)return yield y.destroy().catch(this.error),e.error("Internal Server Error");e.success("OK"),s.emit("register.user",{ctx:e,register:h,user:y}),this.emit("register.user",{ctx:e,register:h,user:y})}))}confirm(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield exports.Register.findOne({where:{token:t,state:!0},include:[{model:exports.User,required:!0}]}).catch(this.error);if(!o)return e.notFound("User not found");o.state=!1,yield o.save().catch(this.error),o.user.state=!0,yield o.user.save().catch(this.error),e.success("OK"),r.emit("register.confirm",{ctx:e,register:o,user:o.user}),this.emit("register.confirm",{ctx:e,register:o,user:o.user})}))}send(e,t,r){return y(this,void 0,void 0,(function*(){const o=t,s=yield exports.Register.findOne({where:{state:!0},include:[{model:exports.User,required:!0,where:{[a.Op.or]:[{email:o},{username:t}]}}]}).catch(this.error);if(!s)return e.notFound("User not found");e.success("OK"),r.emit("register.send",{ctx:e,register:s,user:s.user}),this.emit("register.send",{ctx:e,register:s,user:s.user})}))}getId(){return y(this,void 0,void 0,(function*(){const e=r.uuidv4();return(yield exports.Register.count({where:{token:e}}))?this.getId():e}))}},l([e.Post(),e.Middleware("validation",{name:r.Validation.string().required(),date:r.Validation.date().required(),email:r.Validation.string().email().required(),username:r.Validation.string().min(4).empty(),password:r.Validation.string().min(5).required(),confirm:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,Object,I]),g("design:returntype",Promise)],exports.RegisterController.prototype,"register",null),l([e.Post("/confirm"),e.Middleware("validation",{token:r.Validation.string().required()}),c(0,e.Ctx()),c(1,e.Body("token")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,I]),g("design:returntype",Promise)],exports.RegisterController.prototype,"confirm",null),l([e.Post("/send"),e.Middleware("validation",{username:r.Validation.string().min(4).required()}),c(0,e.Ctx()),c(1,e.Body("username")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,I]),g("design:returntype",Promise)],exports.RegisterController.prototype,"send",null),exports.RegisterController=l([e.Controller("/register"),e.Extends(D)],exports.RegisterController),exports.RoutesController=class extends exports.CrudController{model(){return exports.Route}create(){return{name:r.Validation.string().required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}}update(){return{name:r.Validation.string().empty(),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}}},exports.RoutesController=l([e.Controller("/routes"),e.Extends(exports.CrudController)],exports.RoutesController),exports.SetupController=class extends D{setup(e){return y(this,void 0,void 0,(function*(){if(0==(yield exports.User.count())){const e=r.uniqueID(),o=yield exports.User.create({name:"Admin",email:"admin@localhost",username:"admin",password:t.sha256("admin"+e),salt:e,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0}),s={description:"API CORE",state:!0},i=yield exports.Group.create(Object.assign({name:"admin"},s));yield exports.UserGroup.create({user_id:o.id,group_id:i.id});const n=["read","write"],d=["audits","users","groups","routes"];yield r.forEachSeries(d,(e=>y(this,void 0,void 0,(function*(){yield r.forEachSeries(n,(t=>y(this,void 0,void 0,(function*(){const r=yield exports.Route.create(Object.assign({name:`${e}.${t}`},s));yield exports.GroupRoute.create({group_id:i.id,route_id:r.id})}))))}))));const a=["delete","list","read","rename","upload","write"];yield r.forEachSeries(a,(e=>y(this,void 0,void 0,(function*(){const t=yield exports.Route.create(Object.assign({name:`files.${e}`},s));yield exports.GroupRoute.create({group_id:i.id,route_id:t.id})}))));const p=["logs"];yield r.forEachSeries(p,(e=>y(this,void 0,void 0,(function*(){const t=yield exports.Route.create(Object.assign({name:`${e}.read`},s));yield exports.GroupRoute.create({group_id:i.id,route_id:t.id})}))))}e.success("OK")}))}},l([e.Get(),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.SetupController.prototype,"setup",null),exports.SetupController=l([e.Controller("/setup"),e.Extends(D)],exports.SetupController),exports.UsersController=class extends exports.ModelController{model(){return exports.User}constructor(){super(),this.dir=x.API_HTTP_PUBLIC+"/avatar",x.API_HTTP_PUBLIC&&n.existsSync(x.API_HTTP_PUBLIC)&&!n.existsSync(this.dir)&&n.mkdirSync(this.dir)}avatar(e,t,r,o){return y(this,void 0,void 0,(function*(){if(t.length){const s=t[0].filename||"";if(s){const t=this.dir+"/"+r.avatar;if(n.existsSync(t)&&n.lstatSync(t).isFile()&&n.rmSync(t),r.avatar=s,yield r.save(Object.assign({},o)).catch(this.error))return e.success("OK")}}e.success("Record not changed")}))}avatar_remove(e,t,r){return y(this,void 0,void 0,(function*(){const o=this.dir+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&n.existsSync(o)&&n.rmSync(o),e.success("OK")}))}password(e,o,s,i,n){return y(this,void 0,void 0,(function*(){var d;const a=yield this.scope("password").findOne({where:{id:i.id,state:!0}}).catch(this.error);return o+=null!==(d=null==a?void 0:a.salt)&&void 0!==d?d:"",a&&a.password==t.sha256(o)?(a.salt=r.uniqueID(),a.password=t.sha256(s+a.salt),(yield a.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("Record not changed")):e.error("Record not changed")}))}token(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(o)return e.json({token:r.hash.decrypt(o.token)});e.notFound("Record not found")}))}token_get(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(o)return e.json({token:r.hash.decrypt(o.token)});e.notFound("Record not found")}))}token_remove(e,t,r){return y(this,void 0,void 0,(function*(){const o=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(o)return o.token="",yield o.save(Object.assign({},r)).catch(this.error),e.success("OK");e.notFound("Record not found")}))}token_renew(e,t,r,o){return y(this,void 0,void 0,(function*(){const s=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(s){const t=yield this.token_new();return s.token=o.hash.encrypt(t),yield s.save(Object.assign({},r)).catch(this.error),e.json({token:t})}e.notFound("Record not found")}))}token_new(){return y(this,void 0,void 0,(function*(){var e;const t=r.uuidv4();return(null!==(e=yield this.model().count({where:{token:t}}).catch(this.error))&&void 0!==e?e:0)?this.token_new():t}))}add(e,o,s){return y(this,void 0,void 0,(function*(){const i=r.uniqueID();yield this._add({ctx:e,body:{password:t.sha256(o+i),salt:i},user:s})}))}all(e){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}del(e,t,r){return y(this,void 0,void 0,(function*(){if(r.id.toString()==t)return e.notFound("Record not found");yield this._del({ctx:e,user:r})}))}get(e){return y(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,o,s){return y(this,void 0,void 0,(function*(){const i=r.uniqueID();yield this._set({ctx:e,body:o?{password:t.sha256(o+i),salt:i}:{},user:s})}))}},l([e.Post("/avatar"),e.Middleware("auth"),e.Middleware("upload",(e=>({count:1,field:"file",path:e.controller.dir,types:["image/bmp","image/jpeg","image/png"],size:32}))),c(0,e.Ctx()),c(1,e.Files()),c(2,R()),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,Array,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar",null),l([e.Get("/avatar/remove"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),c(2,w()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar_remove",null),l([e.Post("/password"),e.Middleware("auth"),e.Middleware("validation",{oldPassword:r.Validation.string().min(5).required(),newPassword:r.Validation.string().min(5).required()}),c(0,e.Ctx()),c(1,e.Body("oldPassword")),c(2,e.Body("newPassword")),c(3,R()),c(4,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"password",null),l([e.Get("/token"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,I]),g("design:returntype",Promise)],exports.UsersController.prototype,"token",null),l([e.Get("/token/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,I]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_get",null),l([e.Get("/token/remove/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_remove",null),l([e.Get("/token/renew/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,w()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object,I]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_renew",null),l([e.Post(),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validation",{name:r.Validation.string().required(),email:r.Validation.string().email().required(),username:r.Validation.string().min(4).required(),password:r.Validation.string().min(5).required(),description:r.Validation.string().empty(""),state:r.Validation.boolean().parse().required()}),c(0,e.Ctx()),c(1,e.Body("password")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"add",null),l([e.Get(),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"all",null),l([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("write"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"del",null),l([e.Get("/:id"),e.Middleware("auth"),e.Middleware("read"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"get",null),l([e.Put("/:id"),e.Middleware("auth"),e.Middleware("write"),e.Middleware("validation",{name:r.Validation.string().empty(),email:r.Validation.string().email().empty(),username:r.Validation.string().min(4).empty(),password:r.Validation.string().min(5).empty().filter(""),description:r.Validation.string().empty(),state:r.Validation.boolean().parse().empty()}),c(0,e.Ctx()),c(1,e.Body("password")),c(2,R()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"set",null),exports.UsersController=l([e.Controller("/users"),e.Extends(exports.ModelController),g("design:paramtypes",[])],exports.UsersController),exports.UsersGroupsController=class extends exports.ModelController{model(){return exports.UserGroup}groups(e,t){return y(this,void 0,void 0,(function*(){yield this.all(e,t.id.toString())}))}all(e,t){return y(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{user_id:t},include:[{model:exports.Group,required:!0}]},callback:e=>e.map((e=>e.group))})}))}set(e,t,o,s){return y(this,void 0,void 0,(function*(){const i=yield exports.User.findByPk(t,{attributes:["id"]}).catch(this.error);if(i){if(yield exports.UserGroup.destroy(Object.assign({where:{user_id:i.id},individualHooks:!0},s)),o){let e=0;yield r.sleep(1e3);for(let t=0;t<o.length;t++)e=yield exports.Group.count({where:{id:o[t]}}),e&&(yield exports.UserGroup.create({user_id:i.id,group_id:o[t]},Object.assign({},s)))}return e.success("OK")}if(r.isNull(i))return e.notFound("Record not found");e.error("Internal Server Error")}))}},l([e.Get("/groups"),e.Middleware("auth"),c(0,e.Ctx()),c(1,R()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"groups",null),l([e.Get("/:id/groups"),e.Middleware("auth"),e.Middleware("read","users"),c(0,e.Ctx()),c(1,e.Params("id")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"all",null),l([e.Put("/:id/groups"),e.Middleware("auth"),e.Middleware("write","users"),e.Middleware("validation",{groups:r.Validation.array(r.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("groups")),c(3,w()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"set",null),exports.UsersGroupsController=l([e.Controller("/users"),e.Extends(exports.ModelController)],exports.UsersGroupsController),exports.Application=I,exports.Config=O,exports.ControllerBase=D,exports.Env=x,exports.Logs=m,exports.Model=v,exports.Permission=T,exports.ReqAudit=w,exports.ReqAuth=E,exports.ReqUser=R,exports.Token=P,exports.audit=_,exports.conn=h,exports.crt=A,exports.key=C;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.0.
|
|
2
|
+
* @andrewcaires/api v4.0.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2024 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
@@ -19,10 +19,10 @@ declare class Auth extends Model {
|
|
|
19
19
|
secret: string;
|
|
20
20
|
logout: Date;
|
|
21
21
|
useragent: string;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
created_at: Date;
|
|
23
|
+
updated_at: Date;
|
|
24
|
+
deleted_at: Date;
|
|
25
|
+
user_id: number;
|
|
26
26
|
user: User;
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -30,10 +30,10 @@ declare class Register extends Model {
|
|
|
30
30
|
id: number;
|
|
31
31
|
token: string;
|
|
32
32
|
state: boolean;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
created_at: Date;
|
|
34
|
+
updated_at: Date;
|
|
35
|
+
deleted_at: Date;
|
|
36
|
+
user_id: number;
|
|
37
37
|
user: User;
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -42,17 +42,17 @@ declare class Route extends Model {
|
|
|
42
42
|
name: string;
|
|
43
43
|
description: string;
|
|
44
44
|
state: boolean;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
created_at: Date;
|
|
46
|
+
updated_at: Date;
|
|
47
|
+
deleted_at: Date;
|
|
48
48
|
groups_routes: Array<GroupRoute>;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
declare class GroupRoute extends Model {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
created_at: Date;
|
|
53
|
+
group_id: number;
|
|
54
54
|
group: Group;
|
|
55
|
-
|
|
55
|
+
route_id: number;
|
|
56
56
|
route: Route;
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -61,18 +61,18 @@ declare class Group extends Model {
|
|
|
61
61
|
name: string;
|
|
62
62
|
description: string;
|
|
63
63
|
state: boolean;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
created_at: Date;
|
|
65
|
+
updated_at: Date;
|
|
66
|
+
deleted_at: Date;
|
|
67
67
|
groups_routes: Array<GroupRoute>;
|
|
68
68
|
users_groups: Array<UserGroup>;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
declare class UserGroup extends Model {
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
created_at: Date;
|
|
73
|
+
group_id: number;
|
|
74
74
|
group: Group;
|
|
75
|
-
|
|
75
|
+
user_id: number;
|
|
76
76
|
user: User;
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -88,9 +88,9 @@ declare class User extends Model {
|
|
|
88
88
|
date: string;
|
|
89
89
|
description: string;
|
|
90
90
|
state: boolean;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
created_at: Date;
|
|
92
|
+
updated_at: Date;
|
|
93
|
+
deleted_at: Date;
|
|
94
94
|
audits: Array<Audit>;
|
|
95
95
|
auths: Array<Auth>;
|
|
96
96
|
registers: Array<Register>;
|
|
@@ -104,18 +104,18 @@ declare class Audit extends Model {
|
|
|
104
104
|
record: string;
|
|
105
105
|
data: string;
|
|
106
106
|
state: boolean;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
created_at: Date;
|
|
108
|
+
updated_at: Date;
|
|
109
|
+
deleted_at: Date;
|
|
110
|
+
user_id: number;
|
|
111
111
|
user: User;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
declare class Configs extends Model {
|
|
115
115
|
key: string;
|
|
116
116
|
value: string;
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
created_at: Date;
|
|
118
|
+
updated_at: Date;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
declare class Forgot extends Model {
|
|
@@ -123,26 +123,27 @@ declare class Forgot extends Model {
|
|
|
123
123
|
token: string;
|
|
124
124
|
timestamp: number;
|
|
125
125
|
state: boolean;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
126
|
+
created_at: Date;
|
|
127
|
+
updated_at: Date;
|
|
128
|
+
deleted_at: Date;
|
|
129
|
+
user_id: number;
|
|
130
130
|
user: User;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
declare class Log extends Model {
|
|
134
|
+
id: number;
|
|
134
135
|
type: string;
|
|
135
136
|
source: string;
|
|
136
137
|
message: string;
|
|
137
|
-
|
|
138
|
+
created_at: Date;
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
declare class Session extends Model {
|
|
141
142
|
session: string;
|
|
142
143
|
json: string;
|
|
143
144
|
expired: number;
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
created_at: Date;
|
|
146
|
+
updated_at: Date;
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
declare abstract class ControllerBase extends EventEmitter {
|
|
@@ -309,7 +310,7 @@ declare class GroupsController extends CrudController<Group> {
|
|
|
309
310
|
|
|
310
311
|
declare class GroupsRoutesController extends ModelController<GroupRoute> {
|
|
311
312
|
model(): typeof GroupRoute;
|
|
312
|
-
protected all(ctx: Context,
|
|
313
|
+
protected all(ctx: Context, group_id: string): Promise<void>;
|
|
313
314
|
protected set(ctx: Context, id: string, routes: Array<number>, audit: TypeObjectAny): Promise<void>;
|
|
314
315
|
}
|
|
315
316
|
|
|
@@ -357,7 +358,7 @@ declare class UsersController extends ModelController<User> {
|
|
|
357
358
|
declare class UsersGroupsController extends ModelController<UserGroup> {
|
|
358
359
|
model(): typeof UserGroup;
|
|
359
360
|
protected groups(ctx: Context, user: User): Promise<void>;
|
|
360
|
-
protected all(ctx: Context,
|
|
361
|
+
protected all(ctx: Context, user_id: string): Promise<void>;
|
|
361
362
|
protected set(ctx: Context, id: string, groups: Array<number>, audit: TypeObjectAny): Promise<void>;
|
|
362
363
|
}
|
|
363
364
|
|
package/dist/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.0.
|
|
2
|
+
* @andrewcaires/api v4.0.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2024 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
import{Application as e,parameterFactory as t,Ctx as r,Headers as i,App as n,Session as o,Argument as s,Upload as d,Context as a,Extends as u,Status as c,Get as p,Middleware as l,Query as y,Controller as g,Post as h,Body as v,Delete as m,Put as _,Params as f,Files as I}from"@andrewcaires/express";import{LogColor as P,Log as A,Hash as O,sha256 as E}from"@andrewcaires/node";import{toBool as S,parseMs as w,isObject as T,noop as b,loop as D,uuidv4 as R,sleep as k,EventEmitter as x,Validation as F,isString as N,isArray as j,isDef as q,uniqueID as L,isNull as B,forEachSeries as K}from"@andrewcaires/utils.js";import C from"ws";import{Connection as H,Model as U,Integer as M,PrimaryKey as Y,NotNull as G,AutoIncrement as z,String as W,FullDate as J,CreatedAt as X,UpdatedAt as $,DeletedAt as V,BelongsTo as Z,Database as Q,ModelName as ee,Boolean as te,Text as re,HasMany as ie,Hooks as ne,DateOnly as oe,DefaultScope as se,Scopes as de,BigInt as ae}from"@andrewcaires/sequelize";import{config as ue}from"dotenv";import{existsSync as ce,readFileSync as pe,statSync as le,readdirSync as ye,mkdirSync as ge,lstatSync as he,rmSync as ve}from"fs";import{Store as me}from"express-session";import{Op as _e}from"sequelize";import{verify as fe,sign as Ie}from"jsonwebtoken";import{join as Pe}from"path";function Ae(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var d=e.length-1;d>=0;d--)(n=e[d])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s}function Oe(e,t){return function(r,i){t(r,i,e)}}function Ee(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function Se(e,t,r,i){return new(r||(r=Promise))((function(n,o){function s(e){try{a(i.next(e))}catch(e){o(e)}}function d(e){try{a(i.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,d)}a((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError,ue();class we{static getBool(e,t){return S(we.getString(e,t.toString()))}static getInt(e,t){return parseInt(we.getString(e,t.toString()))}static getMs(e,t){return w(we.getString(e,t))}static getString(e,t){return e in process.env?process.env[e]||"":t}}we.API_CONSOLE_ERROR=we.getBool("API_CONSOLE_ERROR",!1),we.API_DEFAULT_PATH=we.getString("API_DEFAULT_PATH","/api"),we.API_DB_DATABASE=we.getString("API_DB_DATABASE",""),we.API_DB_HOST=we.getString("API_DB_HOST","127.0.0.1"),we.API_DB_PASSWORD=we.getString("API_DB_PASSWORD",""),we.API_DB_PORT=we.getInt("API_DB_PORT",3306),we.API_DB_TYPE=we.getString("API_DB_TYPE",""),we.API_DB_USERNAME=we.getString("API_DB_USERNAME","root"),we.API_DB_LOG=we.getBool("API_DB_LOG",!1),we.API_DB_AUDIT=we.getBool("API_DB_AUDIT",!0),we.API_DB_PREFIX=we.getString("API_DB_PREFIX",""),we.API_DB_TIMEZONE=we.getString("API_DB_TIMEZONE","+00:00"),we.API_HTTP_CRT=we.getString("API_HTTP_CRT",""),we.API_HTTP_KEY=we.getString("API_HTTP_KEY",""),we.API_HTTP_PORT=we.getInt("API_HTTP_PORT",3e3),we.API_HTTP_PUBLIC=we.getString("API_HTTP_PUBLIC",""),we.API_HTTP_CROSS=we.getBool("API_HTTP_CROSS",!1),we.API_HTTP_HYBRID=we.getBool("API_HTTP_HYBRID",!1),we.API_HTTP_REDIRECT=we.getString("API_HTTP_REDIRECT",""),we.API_KEY_HASH=we.getString("API_KEY_HASH",""),we.API_KEY_HEADER=we.getString("API_KEY_HEADER","api_key"),we.API_MODEL_LIMIT=we.getInt("API_MODEL_LIMIT",10),we.API_MODEL_LIMIT_MAX=we.getInt("API_MODEL_LIMIT_MAX",500),we.API_NOTFOUND_REDIRECT=we.getString("API_NOTFOUND_REDIRECT",""),we.API_SLEEP_AUTH=we.getMs("API_SLEEP_AUTH","2s"),we.API_SLEEP_FORGOT=we.getMs("API_SLEEP_FORGOT","5s"),we.API_SLEEP_REGISTRY=we.getMs("API_SLEEP_REGISTRY","5s"),we.API_SESSION_NAME=we.getString("API_SESSION_NAME","session.id"),we.API_SESSION_LIFETIME=we.getMs("API_SESSION_LIFETIME","1d"),we.API_SESSION_SECRET=we.getString("API_SESSION_SECRET","yoursecret"),we.API_TOKEN_CRT=we.getString("API_TOKEN_CRT",""),we.API_TOKEN_KEY=we.getString("API_TOKEN_KEY",""),we.API_TOKEN_FORGOT=we.getMs("API_TOKEN_LIFETIME","1d"),we.API_TOKEN_HEADER=we.getString("API_TOKEN_HEADER","authorization"),we.API_TOKEN_LIFETIME=we.getMs("API_TOKEN_LIFETIME","1d"),we.API_TOKEN_RENEW=we.getMs("API_TOKEN_RENEW","1d"),we.API_UPLOAD_COUNT=we.getInt("API_UPLOAD_COUNT",1),we.API_UPLOAD_FIELD=we.getString("API_UPLOAD_FIELD","upload"),we.API_UPLOAD_SIZE=we.getInt("API_UPLOAD_SIZE",2),we.API_UPLOAD_TEMP=we.getString("API_UPLOAD_TEMP","./temp"),we.API_WEBSOCKET_START=we.getBool("API_WEBSOCKET_START",!1);const Te=new H({type:we.API_DB_TYPE,database:we.API_DB_DATABASE,username:we.API_DB_USERNAME,password:we.API_DB_PASSWORD,hostname:we.API_DB_HOST,hostport:we.API_DB_PORT,logging:we.API_DB_LOG,prefix:we.API_DB_PREFIX});class be extends U{}const De={afterCreate:(e,t)=>Se(void 0,void 0,void 0,(function*(){var r,i,n;if(!we.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield je.create({type:"CREATE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify(e.toJSON()),state:!0,userId:null!==(n=null==t?void 0:t.userId)&&void 0!==n?n:null}).catch(b)})),afterUpdate:(e,t)=>Se(void 0,void 0,void 0,(function*(){var r,i,n;if(!we.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null,d={},a=e.changed();a&&a.forEach((t=>d[t]=e.getDataValue(t))),yield je.create({type:"UPDATE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify({before:e.previous(),after:d}),state:!0,userId:null!==(n=null==t?void 0:t.userId)&&void 0!==n?n:null}).catch(b)})),afterDestroy:(e,t)=>Se(void 0,void 0,void 0,(function*(){var r,i,n;if(!we.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield je.create({type:"DELETE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify(e.toJSON()),state:!0,userId:null!==(n=null==t?void 0:t.userId)&&void 0!==n?n:null}).catch(b)}))};let Re=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],Re.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],Re.prototype,"secret",void 0),Ae([J(),Ee("design:type",Date)],Re.prototype,"logout",void 0),Ae([W(),Ee("design:type",W)],Re.prototype,"useragent",void 0),Ae([X,Ee("design:type",Date)],Re.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],Re.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],Re.prototype,"deletedAt",void 0),Ae([Z((()=>Ne)),Ee("design:type",Number)],Re.prototype,"userId",void 0),Re=Ae([Q(Te),ee("auth")],Re);let ke=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],ke.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],ke.prototype,"token",void 0),Ae([te(),Ee("design:type",te)],ke.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],ke.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],ke.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],ke.prototype,"deletedAt",void 0),Ae([Z((()=>Ne)),Ee("design:type",Number)],ke.prototype,"userId",void 0),ke=Ae([Q(Te),ee("register")],ke);let xe=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],xe.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],xe.prototype,"name",void 0),Ae([re(),Ee("design:type",W)],xe.prototype,"description",void 0),Ae([te(),Ee("design:type",te)],xe.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],xe.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],xe.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],xe.prototype,"deletedAt",void 0),Ae([ie((()=>Fe),"groupId"),Ee("design:type",Array)],xe.prototype,"groups_routes",void 0),Ae([ie((()=>Fe),"groupId"),Ee("design:type",Array)],xe.prototype,"users_groups",void 0),xe=Ae([Q(Te),ee("group"),ne(De)],xe);let Fe=class extends be{};Ae([X,Ee("design:type",Date)],Fe.prototype,"createdAt",void 0),Ae([Z((()=>xe)),Ee("design:type",Number)],Fe.prototype,"groupId",void 0),Ae([Z((()=>Ne)),Ee("design:type",Number)],Fe.prototype,"userId",void 0),Fe=Ae([Q(Te),ee("users_groups"),ne(De)],Fe);let Ne=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],Ne.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"name",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"email",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"username",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"password",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"salt",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"token",void 0),Ae([W(),Ee("design:type",W)],Ne.prototype,"avatar",void 0),Ae([oe(),Ee("design:type",W)],Ne.prototype,"date",void 0),Ae([re(),Ee("design:type",W)],Ne.prototype,"description",void 0),Ae([te(),Ee("design:type",te)],Ne.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],Ne.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],Ne.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],Ne.prototype,"deletedAt",void 0),Ae([ie((()=>je),"userId"),Ee("design:type",Array)],Ne.prototype,"audits",void 0),Ae([ie((()=>Re),"userId"),Ee("design:type",Array)],Ne.prototype,"auths",void 0),Ae([ie((()=>ke),"userId"),Ee("design:type",Array)],Ne.prototype,"registers",void 0),Ae([ie((()=>Fe),"userId"),Ee("design:type",Array)],Ne.prototype,"users_groups",void 0),Ne=Ae([Q(Te),ee("user"),se({attributes:{exclude:["password","salt","token"]}}),de({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),ne(De)],Ne);let je=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],je.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],je.prototype,"type",void 0),Ae([W(),Ee("design:type",W)],je.prototype,"model",void 0),Ae([M(),Ee("design:type",W)],je.prototype,"record",void 0),Ae([re(),Ee("design:type",W)],je.prototype,"data",void 0),Ae([te(),Ee("design:type",te)],je.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],je.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],je.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],je.prototype,"deletedAt",void 0),Ae([Z((()=>Ne)),Ee("design:type",Number)],je.prototype,"userId",void 0),je=Ae([Q(Te),ee("audit")],je);let qe=class extends be{};Ae([W(),Ee("design:type",W)],qe.prototype,"key",void 0),Ae([W(),Ee("design:type",W)],qe.prototype,"value",void 0),Ae([X,Ee("design:type",Date)],qe.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],qe.prototype,"updatedAt",void 0),qe=Ae([Q(Te),ee("configs"),ne(De)],qe);let Le=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],Le.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],Le.prototype,"token",void 0),Ae([ae(),Ee("design:type",Number)],Le.prototype,"timestamp",void 0),Ae([te(),Ee("design:type",te)],Le.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],Le.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],Le.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],Le.prototype,"deletedAt",void 0),Ae([Z((()=>Ne)),Ee("design:type",Number)],Le.prototype,"userId",void 0),Le=Ae([Q(Te),ee("forgot")],Le);let Be=class extends be{};Ae([M(),Y,G,z,Ee("design:type",Number)],Be.prototype,"id",void 0),Ae([W(),Ee("design:type",W)],Be.prototype,"name",void 0),Ae([re(),Ee("design:type",W)],Be.prototype,"description",void 0),Ae([te(),Ee("design:type",te)],Be.prototype,"state",void 0),Ae([X,Ee("design:type",Date)],Be.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],Be.prototype,"updatedAt",void 0),Ae([V,Ee("design:type",Date)],Be.prototype,"deletedAt",void 0),Ae([ie((()=>Ke),"routeId"),Ee("design:type",Array)],Be.prototype,"groups_routes",void 0),Be=Ae([Q(Te),ee("route"),ne(De)],Be);let Ke=class extends be{};Ae([X,Ee("design:type",Date)],Ke.prototype,"createdAt",void 0),Ae([Z((()=>xe)),Ee("design:type",Number)],Ke.prototype,"groupId",void 0),Ae([Z((()=>Be)),Ee("design:type",Number)],Ke.prototype,"routeId",void 0),Ke=Ae([Q(Te),ee("groups_routes"),ne(De)],Ke);let Ce=class extends be{};Ae([W(),Ee("design:type",W)],Ce.prototype,"type",void 0),Ae([W(),Ee("design:type",W)],Ce.prototype,"source",void 0),Ae([re(),Ee("design:type",W)],Ce.prototype,"message",void 0),Ae([X,Ee("design:type",Date)],Ce.prototype,"createdAt",void 0),Ce=Ae([Q(Te),ee("log")],Ce);let He=class extends be{};Ae([W(),Ee("design:type",W)],He.prototype,"session",void 0),Ae([re(),Ee("design:type",W)],He.prototype,"json",void 0),Ae([ae(),Ee("design:type",Number)],He.prototype,"expired",void 0),Ae([X,Ee("design:type",Date)],He.prototype,"createdAt",void 0),Ae([$,Ee("design:type",Date)],He.prototype,"updatedAt",void 0),He=Ae([Q(Te),ee("session")],He);class Ue{static write(e,t,r){return Se(this,void 0,void 0,(function*(){yield Ue.writeRaw(P.White,"",e,t,r)}))}static error(e,t,r){return Se(this,void 0,void 0,(function*(){yield Ue.writeRaw(P.Red,"error",e,t,r)}))}static info(e,t,r){return Se(this,void 0,void 0,(function*(){yield Ue.writeRaw(P.Cyan,"info",e,t,r)}))}static success(e,t,r){return Se(this,void 0,void 0,(function*(){yield Ue.writeRaw(P.Green,"success",e,t,r)}))}static warning(e,t,r){return Se(this,void 0,void 0,(function*(){yield Ue.writeRaw(P.Yellow,"warning",e,t,r)}))}static writeRaw(e,t,r,i,n){return Se(this,void 0,void 0,(function*(){n&&A.console(e,t,r),Te&&(yield Ce.create({type:t,source:i,message:r}).catch((()=>null)))}))}}const Me=e=>ce(e)?pe(e):void 0,Ye={http:Me(we.API_HTTP_CRT),token:Me(we.API_TOKEN_CRT)},Ge={http:Me(we.API_HTTP_KEY),token:Me(we.API_TOKEN_KEY)};class ze extends me{constructor(){super(),this.all=e=>Se(this,void 0,void 0,(function*(){e=e||b;const t=yield He.findAll({attributes:["session"],where:{expired:{[_e.gte]:Date.now()}}}).catch((t=>(e(t),null)));t&&e(null,t.map((e=>e.session))),e()})),this.clear=e=>Se(this,void 0,void 0,(function*(){yield He.destroy().catch(b),e&&e()})),this.destroy=(e,t)=>Se(this,void 0,void 0,(function*(){yield He.destroy({where:{session:e}}).catch(b),t&&t()})),this.expired=()=>Se(this,void 0,void 0,(function*(){yield He.destroy({where:{expired:{[_e.lt]:Date.now()}}}).catch(b)})),this.get=(e,t)=>Se(this,void 0,void 0,(function*(){t=t||b;const r=yield He.findOne({where:{session:e,expired:{[_e.gte]:Date.now()}}}).catch((e=>(t(e),null)));if(r){const e=JSON.parse(r.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield r.destroy().catch(b),void t(null)}t(null,e)}else t(null)})),this.length=e=>Se(this,void 0,void 0,(function*(){e&&e(null,(yield He.count().catch(b))||0)})),this.set=(e,t,r)=>Se(this,void 0,void 0,(function*(){r=r||b;const i=Date.now()+we.API_SESSION_LIFETIME,n=JSON.stringify(t),[o,s]=(yield He.findOrCreate({where:{session:e},defaults:{session:e,json:n,expired:i}}).catch(b))||[];o&&(s||(o.json=n,o.expired=i,yield o.save().catch(b))),r()})),this.loop=D(this.expired,3e4),this.loop.start()}}class We{static create(e){return Se(this,void 0,void 0,(function*(){if(!Ge.token)return{error:"Key not found"};const{id:t}=e,r=R(),i=yield Re.create({secret:r,userId:t}).catch(We.error);if(!i)return{error:"Internal Server Error"};return{auth:i,token:Ie({id:t,secret:r},Ge.token,We.options())}}))}static destroy(e){return Se(this,void 0,void 0,(function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)}))}static error(e){Ue.error(e.message,"api.token",we.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:we.API_TOKEN_LIFETIME+"ms"}}static renew(e){return Se(this,void 0,void 0,(function*(){if(!Ge.token)return{error:"Key not found"};const{error:t,decode:r}=We.verify(e,we.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(r){const{id:e,secret:t}=r;if(e&&t){const r=yield Ne.findOne({where:{id:e,state:!0}}).catch(We.error);if(r){const i=yield Re.findOne({where:{secret:t,userId:r.id}}).catch(We.error);if(i&&!i.logout){i.secret=R(),yield i.save().catch(We.error);return{auth:i,token:Ie({id:e,secret:i.secret},Ge.token,We.options())}}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static user(e,t,r){return Se(this,void 0,void 0,(function*(){if(e){t=r.hash.encrypt(e);const i=yield Ne.findOne({where:{token:t,state:!0}}).catch(We.error);if(i){const t=e.replace(/(-[\w]{4})/g,"-****"),[r]=(yield Re.findOrCreate({where:{secret:t,userId:i.id},defaults:{secret:t,userId:i.id}}).catch(We.error))||[];if(r)return{auth:r,user:i}}return{error:"Access denied"}}const{error:i,decode:n}=We.verify(t);if(i)return{error:i};if(n){const{id:e,secret:t}=n;if(e&&t){const r=yield Ne.findOne({where:{id:e,state:!0}}).catch(We.error);if(r){const e=yield Re.findOne({where:{secret:t,userId:r.id}}).catch(We.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static verify(e,t){if(!Ye.token)return{error:"Cert not found"};if(!e||e.split(".").length<3)return{error:"Invalid Token"};try{return{decode:fe(e,Ye.token,{clockTolerance:t})}}catch(e){return{error:"Invalid Token"}}}}class Je extends e{constructor(e){super(e,{cert:Ye.http,cross:we.API_HTTP_CROSS,hybrid:we.API_HTTP_HYBRID,key:Ge.http,notfound:we.API_NOTFOUND_REDIRECT,path:we.API_DEFAULT_PATH,port:we.API_HTTP_PORT,public:we.API_HTTP_PUBLIC,redirect:we.API_HTTP_REDIRECT,session:{store:new ze,name:we.API_SESSION_NAME,secret:we.API_SESSION_SECRET,cookie:{maxAge:we.API_SESSION_LIFETIME},genid:R}}),this.hash=new O(we.API_KEY_HASH)}error(e,t){Ue.error(e.message,t,we.API_CONSOLE_ERROR)}log(e,t){Ue.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return Se(this,void 0,void 0,(function*(){yield Te.sync(),yield e.listen.call(this),we.API_WEBSOCKET_START&&this.server&&(this._webSocket=new C.Server({server:this.server,verifyClient:(e,t)=>t(we.API_WEBSOCKET_START)}),this._webSocket.on("connection",((e,t)=>Se(this,void 0,void 0,(function*(){t.url||(t.url="");const r=t.url.length<=1?"":t.url.replace(/\//g,".");let i;e.on("message",(n=>Se(this,void 0,void 0,(function*(){if(i)try{const o=JSON.parse(n);this.emit("ws.message"+r,{data:o,message:n,req:t,user:i,ws:e})}catch(o){this.emit("ws.message"+r,{message:n,req:t,user:i,ws:e})}else{const{user:o}=yield We.user("",n.toString(),this);o&&(i=o,this.emit("ws.connection"+r,{req:t,user:i,ws:e}))}i||e.close()})))),e.on("close",(()=>{i&&this.emit("ws.close"+r,{user:i,ws:e})})),yield k(2e3),i||e.close()})))))}))}websocket(){return this._webSocket}}class Xe{static all(){return Se(this,void 0,void 0,(function*(){const e=yield qe.findAll().catch(Xe.error),t={};return e&&e.forEach((e=>t[e.key]=e.value)),t}))}static del(e,t){return Se(this,void 0,void 0,(function*(){var r;const i=null!==(r=null==t?void 0:t.id)&&void 0!==r?r:null;return((yield qe.destroy(Object.assign({where:{key:e}},{userId:i})).catch(Xe.error))||0)>0}))}static error(e){Ue.error(e.message,"api.config",we.API_CONSOLE_ERROR)}static get(e){return Se(this,arguments,void 0,(function*(e,t=""){const[r]=(yield qe.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(Xe.error))||[];return r?r.value:t}))}static set(e,t,r){return Se(this,void 0,void 0,(function*(){var i;const n=null!==(i=null==r?void 0:r.id)&&void 0!==i?i:null,[o]=(yield qe.findOrCreate(Object.assign({where:{key:e}},{userId:n})).catch(Xe.error))||[];o&&(o.value=t,yield o.save().catch(Xe.error))}))}}const $e=t((({ctx:e})=>{var t,r,i;return{userId:null!==(i=null===(r=null===(t=e.req)||void 0===t?void 0:t.user)||void 0===r?void 0:r.id)&&void 0!==i?i:null}})),Ve=t((({ctx:e})=>e.req.auth)),Ze=t((({ctx:e})=>e.req.user));class Qe{static all(e,t){return Se(this,void 0,void 0,(function*(){return yield Be.findAll({where:Object.assign(Object.assign({},t),{state:!0}),include:[{model:Ke,required:!0,include:[{model:xe,required:!0,where:{state:!0},include:[{model:Fe,required:!0,where:{userId:e.id}}]}]}]}).catch((e=>{Ue.error(e.message,"api.permission",we.API_CONSOLE_ERROR)}))}))}static get(e){return Se(this,void 0,void 0,(function*(){const t=yield Qe.all(e);return t?t.map((e=>e.name)):[]}))}static is(e,t){return Se(this,void 0,void 0,(function*(){const r=yield Qe.all(e,{name:t});return!!r&&r.length>0}))}}class et extends x{auth(e,t,r,i,n){return Se(this,void 0,void 0,(function*(){const{auth:o,error:s,user:d}=yield We.user(t,r,n);return s?e.error(s):o&&d?o.useragent&&o.useragent!=i?e.error("Invalid token"):(e.req.auth=o,e.req.user=d,void e.next()):e.error("Internal Server Error")}))}session(e,t,r){return Se(this,void 0,void 0,(function*(){r.auth&&r.user&&(r.useragent?r.useragent!=t&&r.regenerate(b):(r.useragent=t,r.save(b))),e.next()}))}error(e){Ue.error(e.message,"api.controller",we.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return Se(this,void 0,void 0,(function*(){return r?(yield Qe.is(r,t))?e.next():void e.unauthorized("Access denied"):e.unauthorized("Access denied")}))}read(e,t,r){return Se(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".read",r)}))}upload(e,t){t.path||(t.path=we.API_UPLOAD_TEMP),t.size||(t.size=we.API_UPLOAD_SIZE),t.field||(t.field=we.API_UPLOAD_FIELD),d.middleware(e,t)}validation(e,t){return Se(this,void 0,void 0,(function*(){const{error:r,value:i}=yield F.object(t).parse().validateAsync(e.req.body);if(r)return e.validation(r);e.req.body=i,e.next()}))}write(e,t,r){return Se(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".write",r)}))}}Ae([Oe(0,r()),Oe(1,i(we.API_KEY_HEADER)),Oe(2,i(we.API_TOKEN_HEADER)),Oe(3,i("user-agent")),Oe(4,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String,String,Je]),Ee("design:returntype",Promise)],et.prototype,"auth",null),Ae([Oe(0,r()),Oe(1,i("user-agent")),Oe(2,o()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Object]),Ee("design:returntype",Promise)],et.prototype,"session",null),Ae([Oe(0,r()),Oe(1,s()),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],et.prototype,"permission",null),Ae([Oe(0,r()),Oe(1,s()),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],et.prototype,"read",null),Ae([Oe(0,r()),Oe(1,s()),Ee("design:type",Function),Ee("design:paramtypes",[a,Object]),Ee("design:returntype",void 0)],et.prototype,"upload",null),Ae([Oe(0,r()),Oe(1,s()),Ee("design:type",Function),Ee("design:paramtypes",[a,Object]),Ee("design:returntype",Promise)],et.prototype,"validation",null),Ae([Oe(0,r()),Oe(1,s()),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],et.prototype,"write",null);let tt=class extends et{constructor(){super(...arguments),this._columns=[]}_add(e){return Se(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:i}){var n;const o=null!==(n=null==i?void 0:i.id)&&void 0!==n?n:null,s=yield this.model().create(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign({},t||{}),{userId:o})).catch(this.error);if(s){const t=this.key();return e.prepare(c.OK,{[t]:s.getDataValue(t)}),s}e.error("Internal Server Error")}))}_all(e){return Se(this,arguments,void 0,(function*({ctx:e,options:t,callback:r,scope:i}){var n,o,s,d,a,u;const p=this.scope(i),l=Object.assign({},t||{});l.where=Object.assign({},l.where||{});const y=e.req.query.limit,g=N(y)?parseInt(y):we.API_MODEL_LIMIT;l.limit=g>=0?Math.min(g,we.API_MODEL_LIMIT_MAX):void 0;const h=e.req.query.offset;if(N(h)){const e=h?parseInt(h):0;l.offset=e>0?e:void 0}const v=[],m=this.columns(),_=e=>m.indexOf(e)>=0,f=null===(n=e.req.query.asc)||void 0===n?void 0:n.toString();f&&f.length&&v.push(...f.split(",").filter(_).map((e=>[e,"ASC"])));const I=null===(o=e.req.query.desc)||void 0===o?void 0:o.toString();I&&I.length&&v.push(...I.split(",").filter(_).map((e=>[e,"DESC"]))),v.length&&(l.order=v);const P=[],A=null===(s=e.req.query.search)||void 0===s?void 0:s.toString();(j(l.attributes)?l.attributes:m).filter(N).forEach((t=>{var r;if(A&&A.length&&P.push({[t]:{[_e.like]:`%${A}%`}}),"search_"+t in e.req.query){const i=null===(r=e.req.query["search_"+t])||void 0===r?void 0:r.toString();i&&i.length&&P.push({[t]:{[_e.like]:`%${i}%`}})}})),P.length&&(l.where=Object.assign(Object.assign({},l.where),{[_e.or]:[...P]}));const O=null!==(d=yield p.count(Object.assign(Object.assign({},l),{col:m[0]})).catch(this.error))&&void 0!==d?d:0,E=yield p.findAll(l).catch(this.error),S={count:O,limit:null!==(a=l.limit)&&void 0!==a?a:-1,offset:null!==(u=l.offset)&&void 0!==u?u:0};return E?(e.prepare(c.OK,Object.assign(Object.assign({},S),{records:r?yield r(E):E})),Object.assign(Object.assign({},S),{records:E})):(e.error("Internal Server Error"),Object.assign(Object.assign({},S),{records:[]}))}))}columns(){return 0==this._columns.length&&(this._columns=Object.keys(this.model().getAttributes())),this._columns}_del(e){return Se(this,arguments,void 0,(function*({ctx:e,options:t,user:r}){var i;const n=this.key(),{[n]:o}=e.req.params;if(!o)return e.error("Internal Server Error"),0;const s=null!==(i=null==r?void 0:r.id)&&void 0!==i?i:null,d=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:o}),individualHooks:!0}),{userId:s})).catch(this.error);return d?(e.success("OK"),d):(e.notFound("Record not found"),0)}))}error(e){e.sql?Ue.error(e.message+"\n"+e.sql,"api.controller.sql",we.API_CONSOLE_ERROR):super.error(e)}_get(e){return Se(this,arguments,void 0,(function*({ctx:e,options:t,callback:r,scope:i}){const n=this.key(),{[n]:o}=e.req.params,s=yield this.scope(i).findOne(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:o})})).catch(this.error);return s?(e.prepare(c.OK,r?yield r(s):s.toJSON()),s):null===s?e.notFound("Record not found"):void e.error("Internal Server Error")}))}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}_set(e){return Se(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:i}){var n,o;const s=this.key(),{[s]:d}=e.req.params,a=null!==(n=null==i?void 0:i.id)&&void 0!==n?n:null,[u]=null!==(o=yield this.model().update(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[s]:d}),individualHooks:!0}),{userId:a})).catch(this.error))&&void 0!==o?o:[];return u?(e.success("OK"),!0):(e.success("Record not changed"),!1)}))}};tt=Ae([u(et)],tt);let rt=class extends tt{model(){return je}all(e,t,r){return Se(this,void 0,void 0,(function*(){const i={};t&&(i.type=t),r&&(i.table=r),yield this._all({ctx:e,options:{attributes:{exclude:["data"]},where:i,order:[["created","DESC"]]}})}))}get(e){return Se(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}};Ae([p(),l("auth"),l("read"),Oe(0,r()),Oe(1,y("type")),Oe(2,y("table")),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String]),Ee("design:returntype",Promise)],rt.prototype,"all",null),Ae([p("/:id"),l("auth"),l("read"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],rt.prototype,"get",null),rt=Ae([g("/audits"),u(tt)],rt);let it=class extends et{login(e,t,r,i,n){return Se(this,void 0,void 0,(function*(){var o;yield k(we.API_SLEEP_AUTH);const s=yield Ne.scope("password").findOne({where:{[_e.or]:[{email:r},{username:r}]}}).catch(this.error);if(i+=null!==(o=null==s?void 0:s.salt)&&void 0!==o?o:"",!s||s.password!=E(i))return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const d=yield ke.findOne({where:{state:!0,userId:s.id}}).catch(this.error);if(d)return e.error("Activation required"),n.emit("auth.activation",{ctx:e,register:d,user:s}),void this.emit("auth.activation",{ctx:e,register:d,user:s});if(!s.state)return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e,user:s}),void this.emit("auth.failure",{ctx:e,user:s});const{auth:a,error:u,token:c}=yield We.create(s);return u?(e.error(u),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):a&&c?(a.useragent=t,yield a.save().catch(this.error),e.json({token:c}),n.emit("auth.login",{auth:a,ctx:e,user:s}),void this.emit("auth.login",{auth:a,ctx:e,user:s})):(e.error("Internal Server Error"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))}))}logout(e,t,r,i){return Se(this,void 0,void 0,(function*(){if(yield We.destroy(t))return e.success("Disconcerted"),i.emit("auth.logout",{auth:t,ctx:e,user:r}),void this.emit("auth.logout",{auth:t,ctx:e,user:r});e.unauthorized("Access denied")}))}renew(e,t,r,i){return Se(this,void 0,void 0,(function*(){const{auth:n,error:o,token:s}=yield We.renew(r);return o?e.error(o):n?(n.useragent=t,yield n.save().catch(this.error),e.json({token:s}),i.emit("auth.renew",{auth:n,ctx:e}),void this.emit("auth.renew",{auth:n,ctx:e})):e.error("Internal Server Error")}))}user(e,t){return Se(this,void 0,void 0,(function*(){const r=yield Qe.all(t);if(!r)return e.error("Internal Server Error");e.json(Object.assign(Object.assign({},t.toJSON()),{permissions:r.map((e=>e.name))}))}))}};Ae([h("/login"),l("validation",{username:F.string().min(3).required(),password:F.string().min(5).required()}),Oe(0,r()),Oe(1,i("user-agent")),Oe(2,v("username")),Oe(3,v("password")),Oe(4,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String,String,Je]),Ee("design:returntype",Promise)],it.prototype,"login",null),Ae([p("/logout"),l("auth"),Oe(0,r()),Oe(1,Ve()),Oe(2,Ze()),Oe(3,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,Re,Ne,Je]),Ee("design:returntype",Promise)],it.prototype,"logout",null),Ae([h("/renew"),l("validation",{token:F.string().required()}),Oe(0,r()),Oe(1,i("user-agent")),Oe(2,v("token")),Oe(3,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String,Je]),Ee("design:returntype",Promise)],it.prototype,"renew",null),Ae([p(),l("auth"),Oe(0,r()),Oe(1,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne]),Ee("design:returntype",Promise)],it.prototype,"user",null),it=Ae([g("/auth"),u(et)],it);let nt=class extends et{directory(){return we.API_HTTP_PUBLIC||"./"}files(e){return Se(this,void 0,void 0,(function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const r=Pe(this.directory(),t);if(!ce(r)||!le(r).isDirectory())return e.notFound("Path not Found");let i=[];return i=ye(r),i=i.map((e=>this.info(Pe(r,e)))),i=i.filter(q),Object.assign(Object.assign({},this.info(r)),{files:i})}))}access(e,t,r){return Se(this,void 0,void 0,(function*(){yield this.permission(e,this.name()+"."+t,r)}))}info(e){if(!ce(e))return null;const t=le(e),r=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const i=t.isDirectory();return{name:r,path:e.replace(/^\/\//,"/"),size:t.size,extension:i?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:i,symlink:t.isSymbolicLink()}}name(){return"files"}};Ae([p("/path/?*"),l("auth"),l("access","list"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],nt.prototype,"files",null),Ae([Oe(0,r()),Oe(1,s()),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],nt.prototype,"access",null),nt=Ae([g("/files"),u(et)],nt);let ot=class extends et{check(e,t){return Se(this,void 0,void 0,(function*(){const r=yield this.find(t);if(!r||!r.user)return e.notFound("User not found");r.token=L(),yield r.save(),e.json({token:r.token})}))}forgot(e,t,r){return Se(this,void 0,void 0,(function*(){yield k(we.API_SLEEP_FORGOT);const i=t,n=yield Ne.findOne({where:{[_e.or]:[{email:i},{username:t}]}}).catch(this.error);if(!n)return e.notFound("User not found");const o=L(),s=Date.now()+6e4*we.API_TOKEN_FORGOT,d=yield Le.create({token:o,timestamp:s,state:!0,userId:n.id});e.success("OK"),r.emit("forgot.send",{ctx:e,forgot:d,user:n}),this.emit("forgot.send",{ctx:e,forgot:d,user:n})}))}reset(e,t,r,i){return Se(this,void 0,void 0,(function*(){const n=yield this.find(t);if(!n)return e.notFound("User not found");n.state=!1,yield n.save().catch(this.error),n.user.password=E(r),yield n.user.save().catch(this.error),e.success("OK"),i.emit("forgot.reset",{ctx:e,user:n.user}),this.emit("forgot.reset",{ctx:e,user:n.user})}))}find(e){return Se(this,void 0,void 0,(function*(){return yield Le.findOne({where:{token:e,state:!0},include:[{model:Ne,required:!0}]}).catch(this.error)}))}};Ae([p("/check"),l("validation",{token:F.string().required()}),Oe(0,r()),Oe(1,v("token")),Ee("design:type",Function),Ee("design:paramtypes",[a,String]),Ee("design:returntype",Promise)],ot.prototype,"check",null),Ae([h(),l("validation",{username:F.string().min(4).required()}),Oe(0,r()),Oe(1,v("username")),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Je]),Ee("design:returntype",Promise)],ot.prototype,"forgot",null),Ae([h("/reset"),l("validation",{token:F.string().required(),password:F.string().min(5).required()}),Oe(0,r()),Oe(1,v("token")),Oe(2,v("password")),Oe(3,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String,Je]),Ee("design:returntype",Promise)],ot.prototype,"reset",null),ot=Ae([g("/forgot"),u(et)],ot);let st=class extends tt{constructor(){super(...arguments),this._crud={}}add(e,t){return Se(this,void 0,void 0,(function*(){yield this._add({ctx:e,user:t})}))}all(e){return Se(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}create(){return this._crud}del(e,t){return Se(this,void 0,void 0,(function*(){yield this._del({ctx:e,user:t})}))}get(e){return Se(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t){return Se(this,void 0,void 0,(function*(){yield this._set({ctx:e,user:t})}))}update(){return this._crud}validationAdd(e){return Se(this,void 0,void 0,(function*(){const t=this.create();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}validationSet(e){return Se(this,void 0,void 0,(function*(){const t=this.update();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}};Ae([h(),l("auth"),l("write"),l("validationAdd"),Oe(0,r()),Oe(1,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne]),Ee("design:returntype",Promise)],st.prototype,"add",null),Ae([p(),l("auth"),l("read"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],st.prototype,"all",null),Ae([m("/:id"),l("auth"),l("write"),Oe(0,r()),Oe(1,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne]),Ee("design:returntype",Promise)],st.prototype,"del",null),Ae([p("/:id"),l("auth"),l("read"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],st.prototype,"get",null),Ae([_("/:id"),l("auth"),l("write"),l("validationSet"),Oe(0,r()),Oe(1,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne]),Ee("design:returntype",Promise)],st.prototype,"set",null),Ae([Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],st.prototype,"validationAdd",null),Ae([Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],st.prototype,"validationSet",null),st=Ae([u(tt)],st);let dt=class extends st{model(){return xe}create(){return{name:F.string().required(),description:F.string().empty(""),state:F.boolean().parse().required()}}update(){return{name:F.string().empty(),description:F.string().empty(),state:F.boolean().parse().empty()}}};dt=Ae([g("/groups"),u(st)],dt);let at=class extends tt{model(){return Ke}all(e,t){return Se(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{groupId:t},include:[{model:Be,required:!0}]},callback:e=>e.map((e=>e.route))})}))}set(e,t,r,i){return Se(this,void 0,void 0,(function*(){const n=yield xe.findByPk(t,{attributes:["id"]}).catch(this.error);if(n){const t=n.id;if(yield Ke.destroy(Object.assign({where:{groupId:t}},i)),r){let e=0;for(let n=0;n<r.length;n++)e=yield Be.count({where:{id:r[n]}}),e&&(yield Ke.create({groupId:t,routeId:r[n]},Object.assign({},i)))}return e.success("OK")}if(B(n))return e.notFound("Record not found");e.error("Internal Server Error")}))}};Ae([p("/:id/routes"),l("auth"),l("read","groups"),Oe(0,r()),Oe(1,f("id")),Ee("design:type",Function),Ee("design:paramtypes",[a,String]),Ee("design:returntype",Promise)],at.prototype,"all",null),Ae([_("/:id/routes"),l("auth"),l("write","groups"),l("validation",{routes:F.array(F.number().parse())}),Oe(0,r()),Oe(1,f("id")),Oe(2,v("routes")),Oe(3,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Array,Object]),Ee("design:returntype",Promise)],at.prototype,"set",null),at=Ae([g("/groups"),u(tt)],at);let ut=class extends tt{model(){return Ce}all(e,t,r){return Se(this,void 0,void 0,(function*(){const i={};t&&(i.type=t),r&&(i.source=r),yield this._all({ctx:e,options:{where:i,order:[["created","DESC"]]}})}))}};Ae([p(),l("auth"),l("read"),Oe(0,r()),Oe(1,y("type")),Oe(2,y("source")),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String]),Ee("design:returntype",Promise)],ut.prototype,"all",null),ut=Ae([g("/logs"),u(tt)],ut);let ct=class extends et{register(e,t,r){return Se(this,void 0,void 0,(function*(){yield k(we.API_SLEEP_REGISTRY);const{name:i,date:n,email:o,username:s,password:d,confirm:a}=t,u=s||o,c=E(d);if(yield Ne.count({where:{[_e.or]:[{email:o},{username:u}]}}).catch(this.error))return e.validation("Invalid email or username");if(c!=E(a))return e.error("Invalid password");const p=yield Ne.create({name:i,email:o,username:u,password:c,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!p)return e.error("Internal Server Error");const l=yield ke.create({token:yield this.getId(),userId:p.id,state:!0}).catch(this.error);if(!l)return p.destroy(),e.error("Internal Server Error");e.success("OK"),r.emit("register.user",{ctx:e,register:l,user:p}),this.emit("register.user",{ctx:e,register:l,user:p})}))}confirm(e,t,r){return Se(this,void 0,void 0,(function*(){const i=yield ke.findOne({where:{token:t,state:!0},include:[{model:Ne,required:!0}]}).catch(this.error);if(!i)return e.notFound("User not found");i.state=!1,yield i.save().catch(this.error),i.user.state=!0,yield i.user.save().catch(this.error),e.success("OK"),r.emit("register.confirm",{ctx:e,register:i,user:i.user}),this.emit("register.confirm",{ctx:e,register:i,user:i.user})}))}send(e,t,r){return Se(this,void 0,void 0,(function*(){const i=t,n=yield ke.findOne({where:{state:!0},include:[{model:Ne,required:!0,where:{[_e.or]:[{email:i},{username:t}]}}]}).catch(this.error);if(!n)return e.notFound("User not found");e.success("OK"),r.emit("register.send",{ctx:e,register:n,user:n.user}),this.emit("register.send",{ctx:e,register:n,user:n.user})}))}getId(){return Se(this,void 0,void 0,(function*(){const e=R();return(yield ke.count({where:{token:e}}))?this.getId():e}))}};Ae([h(),l("validation",{name:F.string().required(),date:F.string().date().required(),email:F.string().email().required(),username:F.string().min(4).empty(),password:F.string().min(5).required(),confirm:F.string().min(5).required()}),Oe(0,r()),Oe(1,v()),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,Object,Je]),Ee("design:returntype",Promise)],ct.prototype,"register",null),Ae([h("/confirm"),l("validation",{token:F.string().required()}),Oe(0,r()),Oe(1,v("token")),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Je]),Ee("design:returntype",Promise)],ct.prototype,"confirm",null),Ae([h("/send"),l("validation",{username:F.string().min(4).required()}),Oe(0,r()),Oe(1,v("username")),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Je]),Ee("design:returntype",Promise)],ct.prototype,"send",null),ct=Ae([g("/register"),u(et)],ct);let pt=class extends st{model(){return Be}create(){return{name:F.string().required(),description:F.string().empty(""),state:F.boolean().parse().required()}}update(){return{name:F.string().empty(),description:F.string().empty(),state:F.boolean().parse().empty()}}};pt=Ae([g("/routes"),u(st)],pt);let lt=class extends et{setup(e){return Se(this,void 0,void 0,(function*(){if(0==(yield Ne.count())){const e=L(),t=yield Ne.create({name:"Admin",email:"admin@localhost",username:"admin",password:E("admin"+e),salt:e,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0}),r={description:"API CORE",state:!0},i=yield xe.create(Object.assign({name:"admin"},r));yield Fe.create({userId:t.id,groupId:i.id});const n=["read","write"],o=["audits","users","groups","routes"];yield K(o,(e=>Se(this,void 0,void 0,(function*(){yield K(n,(t=>Se(this,void 0,void 0,(function*(){const n=yield Be.create(Object.assign({name:`${e}.${t}`},r));yield Ke.create({groupId:i.id,routeId:n.id})}))))}))));const s=["delete","list","read","rename","upload","write"];yield K(s,(e=>Se(this,void 0,void 0,(function*(){const t=yield Be.create(Object.assign({name:`files.${e}`},r));yield Ke.create({groupId:i.id,routeId:t.id})}))));const d=["logs"];yield K(d,(e=>Se(this,void 0,void 0,(function*(){const t=yield Be.create(Object.assign({name:`${e}.read`},r));yield Ke.create({groupId:i.id,routeId:t.id})}))))}e.success("OK")}))}};Ae([p(),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],lt.prototype,"setup",null),lt=Ae([g("/setup"),u(et)],lt);let yt=class extends tt{model(){return Ne}constructor(){super(),this.dir=we.API_HTTP_PUBLIC+"/avatar",we.API_HTTP_PUBLIC&&ce(we.API_HTTP_PUBLIC)&&!ce(this.dir)&&ge(this.dir)}avatar(e,t,r,i){return Se(this,void 0,void 0,(function*(){if(t.length){const n=t[0].filename||"";if(n){const t=this.dir+"/"+r.avatar;if(ce(t)&&he(t).isFile()&&ve(t),r.avatar=n,yield r.save(Object.assign({},i)).catch(this.error))return e.success("OK")}}e.success("Record not changed")}))}avatar_remove(e,t,r){return Se(this,void 0,void 0,(function*(){const i=this.dir+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&ce(i)&&ve(i),e.success("OK")}))}password(e,t,r,i,n){return Se(this,void 0,void 0,(function*(){var o;const s=yield this.scope("password").findOne({where:{id:i.id,state:!0}}).catch(this.error);return t+=null!==(o=null==s?void 0:s.salt)&&void 0!==o?o:"",s&&s.password==E(t)?(s.salt=L(),s.password=E(r+s.salt),(yield s.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("Record not changed")):e.error("Record not changed")}))}token(e,t,r){return Se(this,void 0,void 0,(function*(){const i=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(i)return e.json({token:r.hash.decrypt(i.token)});e.notFound("Record not found")}))}token_get(e,t,r){return Se(this,void 0,void 0,(function*(){const i=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(i)return e.json({token:r.hash.decrypt(i.token)});e.notFound("Record not found")}))}token_remove(e,t,r){return Se(this,void 0,void 0,(function*(){const i=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(i)return i.token="",yield i.save(Object.assign({},r)).catch(this.error),e.success("OK");e.notFound("Record not found")}))}token_renew(e,t,r,i){return Se(this,void 0,void 0,(function*(){const n=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(n){const t=yield this.token_new();return n.token=i.hash.encrypt(t),yield n.save(Object.assign({},r)).catch(this.error),e.json({token:t})}e.notFound("Record not found")}))}token_new(){return Se(this,void 0,void 0,(function*(){var e;const t=R();return(null!==(e=yield this.model().count({where:{token:t}}).catch(this.error))&&void 0!==e?e:0)?this.token_new():t}))}add(e,t,r){return Se(this,void 0,void 0,(function*(){const i=L();yield this._add({ctx:e,body:{password:E(t+i),salt:i},user:r})}))}all(e){return Se(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}del(e,t,r){return Se(this,void 0,void 0,(function*(){if(r.id.toString()==t)return e.notFound("Record not found");yield this._del({ctx:e,user:r})}))}get(e){return Se(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t,r){return Se(this,void 0,void 0,(function*(){const i=L();yield this._set({ctx:e,body:t?{password:E(t+i),salt:i}:{},user:r})}))}};Ae([h("/avatar"),l("auth"),l("upload",(e=>({count:1,field:"file",path:e.controller.dir,types:["image/bmp","image/jpeg","image/png"],size:32}))),Oe(0,r()),Oe(1,I()),Oe(2,Ze()),Oe(3,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,Array,Ne,Object]),Ee("design:returntype",Promise)],yt.prototype,"avatar",null),Ae([p("/avatar/remove"),l("auth"),Oe(0,r()),Oe(1,Ze()),Oe(2,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne,Object]),Ee("design:returntype",Promise)],yt.prototype,"avatar_remove",null),Ae([h("/password"),l("auth"),l("validation",{oldPassword:F.string().min(5).required(),newPassword:F.string().min(5).required()}),Oe(0,r()),Oe(1,v("oldPassword")),Oe(2,v("newPassword")),Oe(3,Ze()),Oe(4,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,String,Ne,Object]),Ee("design:returntype",Promise)],yt.prototype,"password",null),Ae([p("/token"),l("auth"),Oe(0,r()),Oe(1,Ze()),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne,Je]),Ee("design:returntype",Promise)],yt.prototype,"token",null),Ae([p("/token/:id"),l("auth"),l("write"),Oe(0,r()),Oe(1,f("id")),Oe(2,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Je]),Ee("design:returntype",Promise)],yt.prototype,"token_get",null),Ae([p("/token/remove/:id"),l("auth"),l("write"),Oe(0,r()),Oe(1,f("id")),Oe(2,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Object]),Ee("design:returntype",Promise)],yt.prototype,"token_remove",null),Ae([p("/token/renew/:id"),l("auth"),l("write"),Oe(0,r()),Oe(1,f("id")),Oe(2,$e()),Oe(3,n()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Object,Je]),Ee("design:returntype",Promise)],yt.prototype,"token_renew",null),Ae([h(),l("auth"),l("write"),l("validation",{name:F.string().required(),email:F.string().email().required(),username:F.string().min(4).required(),password:F.string().min(5).required(),description:F.string().empty(""),state:F.boolean().parse().required()}),Oe(0,r()),Oe(1,v("password")),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],yt.prototype,"add",null),Ae([p(),l("auth"),l("read"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],yt.prototype,"all",null),Ae([m("/:id"),l("auth"),l("write"),Oe(0,r()),Oe(1,f("id")),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],yt.prototype,"del",null),Ae([p("/:id"),l("auth"),l("read"),Oe(0,r()),Ee("design:type",Function),Ee("design:paramtypes",[a]),Ee("design:returntype",Promise)],yt.prototype,"get",null),Ae([_("/:id"),l("auth"),l("write"),l("validation",{name:F.string().empty(),email:F.string().email().empty(),username:F.string().min(4).empty(),password:F.string().min(5).empty().filter(""),description:F.string().empty(),state:F.boolean().parse().empty()}),Oe(0,r()),Oe(1,v("password")),Oe(2,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Ne]),Ee("design:returntype",Promise)],yt.prototype,"set",null),yt=Ae([g("/users"),u(tt),Ee("design:paramtypes",[])],yt);let gt=class extends tt{model(){return Fe}groups(e,t){return Se(this,void 0,void 0,(function*(){yield this.all(e,t.id.toString())}))}all(e,t){return Se(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{userId:t},include:[{model:xe,required:!0}]},callback:e=>e.map((e=>e.group))})}))}set(e,t,r,i){return Se(this,void 0,void 0,(function*(){const n=yield Ne.findByPk(t,{attributes:["id"]}).catch(this.error);if(n){if(yield Fe.destroy(Object.assign({where:{userId:n.id}},i)),r){let e=0;for(let t=0;t<r.length;t++)e=yield xe.count({where:{id:r[t]}}),e&&(yield Fe.create({userId:n.id,groupId:r[t]},Object.assign({},i)))}return e.success("OK")}if(B(n))return e.notFound("Record not found");e.error("Internal Server Error")}))}};Ae([p("/groups"),l("auth"),Oe(0,r()),Oe(1,Ze()),Ee("design:type",Function),Ee("design:paramtypes",[a,Ne]),Ee("design:returntype",Promise)],gt.prototype,"groups",null),Ae([p("/:id/groups"),l("auth"),l("read","users"),Oe(0,r()),Oe(1,f("id")),Ee("design:type",Function),Ee("design:paramtypes",[a,String]),Ee("design:returntype",Promise)],gt.prototype,"all",null),Ae([_("/:id/groups"),l("auth"),l("write","users"),l("validation",{groups:F.array(F.number().parse())}),Oe(0,r()),Oe(1,f("id")),Oe(2,v("groups")),Oe(3,$e()),Ee("design:type",Function),Ee("design:paramtypes",[a,String,Array,Object]),Ee("design:returntype",Promise)],gt.prototype,"set",null),gt=Ae([g("/users"),u(tt)],gt);export{Je as Application,je as Audit,rt as AuditsController,Re as Auth,it as AuthController,Xe as Config,qe as Configs,et as ControllerBase,st as CrudController,we as Env,nt as FilesController,Le as Forgot,ot as ForgotController,xe as Group,Ke as GroupRoute,dt as GroupsController,at as GroupsRoutesController,Ce as Log,Ue as Logs,ut as LogsController,be as Model,tt as ModelController,Qe as Permission,ke as Register,ct as RegisterController,$e as ReqAudit,Ve as ReqAuth,Ze as ReqUser,Be as Route,pt as RoutesController,He as Session,lt as SetupController,We as Token,Ne as User,Fe as UserGroup,yt as UsersController,gt as UsersGroupsController,De as audit,Te as conn,Ye as crt,Ge as key};
|
|
7
|
+
import{Application as e,parameterFactory as t,Ctx as r,Headers as i,App as n,Session as o,Argument as s,Upload as d,Context as a,Extends as u,Status as c,Get as l,Middleware as p,Query as y,Controller as g,Post as h,Body as v,Delete as _,Put as m,Params as f,Files as P}from"@andrewcaires/express";import{LogColor as I,Log as A,Hash as O,sha256 as E}from"@andrewcaires/node";import{toBool as S,parseMs as w,isObject as T,noop as b,loop as D,uuidv4 as R,sleep as k,EventEmitter as x,Validation as F,isString as N,isArray as j,isDef as q,uniqueID as L,isNull as B,forEachSeries as K}from"@andrewcaires/utils.js";import H from"ws";import{Connection as C,Model as U,Id as M,String as Y,FullDate as G,CreatedAt as z,UpdatedAt as W,DeletedAt as J,BelongsTo as X,Database as $,ModelName as V,Boolean as Z,Text as Q,HasMany as ee,Hooks as te,DateOnly as re,DefaultScope as ie,Scopes as ne,Integer as oe,BigInt as se}from"@andrewcaires/sequelize";import{config as de}from"dotenv";import{existsSync as ae,readFileSync as ue,statSync as ce,readdirSync as le,mkdirSync as pe,lstatSync as ye,rmSync as ge}from"fs";import{Store as he}from"express-session";import{Op as ve}from"sequelize";import{verify as _e,sign as me}from"jsonwebtoken";import{join as fe}from"path";function Pe(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var d=e.length-1;d>=0;d--)(n=e[d])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s}function Ie(e,t){return function(r,i){t(r,i,e)}}function Ae(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function Oe(e,t,r,i){return new(r||(r=Promise))((function(n,o){function s(e){try{a(i.next(e))}catch(e){o(e)}}function d(e){try{a(i.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,d)}a((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError,de();class Ee{static getBool(e,t){return S(Ee.getString(e,t.toString()))}static getInt(e,t){return parseInt(Ee.getString(e,t.toString()))}static getMs(e,t){return w(Ee.getString(e,t))}static getString(e,t){return e in process.env?process.env[e]||"":t}}Ee.API_CONSOLE_ERROR=Ee.getBool("API_CONSOLE_ERROR",!1),Ee.API_DEFAULT_PATH=Ee.getString("API_DEFAULT_PATH","/api"),Ee.API_DB_DATABASE=Ee.getString("API_DB_DATABASE",""),Ee.API_DB_HOST=Ee.getString("API_DB_HOST","127.0.0.1"),Ee.API_DB_PASSWORD=Ee.getString("API_DB_PASSWORD",""),Ee.API_DB_PORT=Ee.getInt("API_DB_PORT",3306),Ee.API_DB_TYPE=Ee.getString("API_DB_TYPE",""),Ee.API_DB_USERNAME=Ee.getString("API_DB_USERNAME","root"),Ee.API_DB_LOG=Ee.getBool("API_DB_LOG",!1),Ee.API_DB_AUDIT=Ee.getBool("API_DB_AUDIT",!0),Ee.API_DB_PREFIX=Ee.getString("API_DB_PREFIX",""),Ee.API_DB_TIMEZONE=Ee.getString("API_DB_TIMEZONE","+00:00"),Ee.API_HTTP_CRT=Ee.getString("API_HTTP_CRT",""),Ee.API_HTTP_KEY=Ee.getString("API_HTTP_KEY",""),Ee.API_HTTP_PORT=Ee.getInt("API_HTTP_PORT",3e3),Ee.API_HTTP_PUBLIC=Ee.getString("API_HTTP_PUBLIC",""),Ee.API_HTTP_CROSS=Ee.getBool("API_HTTP_CROSS",!1),Ee.API_HTTP_HYBRID=Ee.getBool("API_HTTP_HYBRID",!1),Ee.API_HTTP_REDIRECT=Ee.getString("API_HTTP_REDIRECT",""),Ee.API_KEY_HASH=Ee.getString("API_KEY_HASH",""),Ee.API_KEY_HEADER=Ee.getString("API_KEY_HEADER","api_key"),Ee.API_MODEL_LIMIT=Ee.getInt("API_MODEL_LIMIT",10),Ee.API_MODEL_LIMIT_MAX=Ee.getInt("API_MODEL_LIMIT_MAX",500),Ee.API_NOTFOUND_REDIRECT=Ee.getString("API_NOTFOUND_REDIRECT",""),Ee.API_SLEEP_AUTH=Ee.getMs("API_SLEEP_AUTH","2s"),Ee.API_SLEEP_FORGOT=Ee.getMs("API_SLEEP_FORGOT","5s"),Ee.API_SLEEP_REGISTRY=Ee.getMs("API_SLEEP_REGISTRY","5s"),Ee.API_SESSION_NAME=Ee.getString("API_SESSION_NAME","session.id"),Ee.API_SESSION_LIFETIME=Ee.getMs("API_SESSION_LIFETIME","1d"),Ee.API_SESSION_SECRET=Ee.getString("API_SESSION_SECRET","yoursecret"),Ee.API_TOKEN_CRT=Ee.getString("API_TOKEN_CRT",""),Ee.API_TOKEN_KEY=Ee.getString("API_TOKEN_KEY",""),Ee.API_TOKEN_FORGOT=Ee.getMs("API_TOKEN_LIFETIME","1d"),Ee.API_TOKEN_HEADER=Ee.getString("API_TOKEN_HEADER","authorization"),Ee.API_TOKEN_LIFETIME=Ee.getMs("API_TOKEN_LIFETIME","1d"),Ee.API_TOKEN_RENEW=Ee.getMs("API_TOKEN_RENEW","1d"),Ee.API_UPLOAD_COUNT=Ee.getInt("API_UPLOAD_COUNT",1),Ee.API_UPLOAD_FIELD=Ee.getString("API_UPLOAD_FIELD","upload"),Ee.API_UPLOAD_SIZE=Ee.getInt("API_UPLOAD_SIZE",2),Ee.API_UPLOAD_TEMP=Ee.getString("API_UPLOAD_TEMP","./temp"),Ee.API_WEBSOCKET_START=Ee.getBool("API_WEBSOCKET_START",!1);const Se=new C({type:Ee.API_DB_TYPE,database:Ee.API_DB_DATABASE,username:Ee.API_DB_USERNAME,password:Ee.API_DB_PASSWORD,hostname:Ee.API_DB_HOST,hostport:Ee.API_DB_PORT,logging:Ee.API_DB_LOG,prefix:Ee.API_DB_PREFIX});class we extends U{}const Te={afterCreate:(e,t)=>Oe(void 0,void 0,void 0,(function*(){var r,i,n;if(!Ee.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield Fe.create({type:"CREATE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify(e.toJSON()),state:!0,user_id:null!==(n=null==t?void 0:t.user_id)&&void 0!==n?n:null}).catch(b)})),afterUpdate:(e,t)=>Oe(void 0,void 0,void 0,(function*(){var r,i,n;if(!Ee.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null,d={},a=e.changed();a&&a.forEach((t=>d[t]=e.getDataValue(t))),yield Fe.create({type:"UPDATE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify({before:e.previous(),after:d}),state:!0,user_id:null!==(n=null==t?void 0:t.user_id)&&void 0!==n?n:null}).catch(b)})),afterDestroy:(e,t)=>Oe(void 0,void 0,void 0,(function*(){var r,i,n;if(!Ee.API_DB_AUDIT)return;const o=T(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield Fe.create({type:"DELETE",model:null!==(i=null==o?void 0:o.getTableName())&&void 0!==i?i:null,record:s?e.getDataValue(s):null,data:JSON.stringify(e.toJSON()),state:!0,user_id:null!==(n=null==t?void 0:t.user_id)&&void 0!==n?n:null}).catch(b)}))};let be=class extends we{};Pe([M(),Ae("design:type",Number)],be.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],be.prototype,"secret",void 0),Pe([G(),Ae("design:type",Date)],be.prototype,"logout",void 0),Pe([Y(),Ae("design:type",Y)],be.prototype,"useragent",void 0),Pe([z,Ae("design:type",Date)],be.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],be.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],be.prototype,"deleted_at",void 0),Pe([X((()=>xe)),Ae("design:type",Number)],be.prototype,"user_id",void 0),be=Pe([$(Se),V("auth")],be);let De=class extends we{};Pe([M(),Ae("design:type",Number)],De.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],De.prototype,"token",void 0),Pe([Z(),Ae("design:type",Z)],De.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],De.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],De.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],De.prototype,"deleted_at",void 0),Pe([X((()=>xe)),Ae("design:type",Number)],De.prototype,"user_id",void 0),De=Pe([$(Se),V("register")],De);let Re=class extends we{};Pe([M(),Ae("design:type",Number)],Re.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],Re.prototype,"name",void 0),Pe([Q(),Ae("design:type",Y)],Re.prototype,"description",void 0),Pe([Z(),Ae("design:type",Z)],Re.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],Re.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],Re.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],Re.prototype,"deleted_at",void 0),Pe([ee((()=>ke),"group_id"),Ae("design:type",Array)],Re.prototype,"groups_routes",void 0),Pe([ee((()=>ke),"group_id"),Ae("design:type",Array)],Re.prototype,"users_groups",void 0),Re=Pe([$(Se),V("group"),te(Te)],Re);let ke=class extends we{};Pe([z,Ae("design:type",Date)],ke.prototype,"created_at",void 0),Pe([X((()=>Re)),Ae("design:type",Number)],ke.prototype,"group_id",void 0),Pe([X((()=>xe)),Ae("design:type",Number)],ke.prototype,"user_id",void 0),ke=Pe([$(Se),V("users_groups"),te(Te)],ke);let xe=class extends we{};Pe([M(),Ae("design:type",Number)],xe.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"name",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"email",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"username",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"password",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"salt",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"token",void 0),Pe([Y(),Ae("design:type",Y)],xe.prototype,"avatar",void 0),Pe([re(),Ae("design:type",Y)],xe.prototype,"date",void 0),Pe([Q(),Ae("design:type",Y)],xe.prototype,"description",void 0),Pe([Z(),Ae("design:type",Z)],xe.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],xe.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],xe.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],xe.prototype,"deleted_at",void 0),Pe([ee((()=>Fe),"user_id"),Ae("design:type",Array)],xe.prototype,"audits",void 0),Pe([ee((()=>be),"user_id"),Ae("design:type",Array)],xe.prototype,"auths",void 0),Pe([ee((()=>De),"user_id"),Ae("design:type",Array)],xe.prototype,"registers",void 0),Pe([ee((()=>ke),"user_id"),Ae("design:type",Array)],xe.prototype,"users_groups",void 0),xe=Pe([$(Se),V("user"),ie({attributes:{exclude:["password","salt","token"]}}),ne({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),te(Te)],xe);let Fe=class extends we{};Pe([M(),Ae("design:type",Number)],Fe.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],Fe.prototype,"type",void 0),Pe([Y(),Ae("design:type",Y)],Fe.prototype,"model",void 0),Pe([oe(),Ae("design:type",Y)],Fe.prototype,"record",void 0),Pe([Q(),Ae("design:type",Y)],Fe.prototype,"data",void 0),Pe([Z(),Ae("design:type",Z)],Fe.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],Fe.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],Fe.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],Fe.prototype,"deleted_at",void 0),Pe([X((()=>xe)),Ae("design:type",Number)],Fe.prototype,"user_id",void 0),Fe=Pe([$(Se),V("audit")],Fe);let Ne=class extends we{};Pe([Y(),Ae("design:type",Y)],Ne.prototype,"key",void 0),Pe([Y(),Ae("design:type",Y)],Ne.prototype,"value",void 0),Pe([z,Ae("design:type",Date)],Ne.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],Ne.prototype,"updated_at",void 0),Ne=Pe([$(Se),V("configs"),te(Te)],Ne);let je=class extends we{};Pe([M(),Ae("design:type",Number)],je.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],je.prototype,"token",void 0),Pe([se(),Ae("design:type",Number)],je.prototype,"timestamp",void 0),Pe([Z(),Ae("design:type",Z)],je.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],je.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],je.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],je.prototype,"deleted_at",void 0),Pe([X((()=>xe)),Ae("design:type",Number)],je.prototype,"user_id",void 0),je=Pe([$(Se),V("forgot")],je);let qe=class extends we{};Pe([M(),Ae("design:type",Number)],qe.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],qe.prototype,"name",void 0),Pe([Q(),Ae("design:type",Y)],qe.prototype,"description",void 0),Pe([Z(),Ae("design:type",Z)],qe.prototype,"state",void 0),Pe([z,Ae("design:type",Date)],qe.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],qe.prototype,"updated_at",void 0),Pe([J,Ae("design:type",Date)],qe.prototype,"deleted_at",void 0),Pe([ee((()=>Le),"route_id"),Ae("design:type",Array)],qe.prototype,"groups_routes",void 0),qe=Pe([$(Se),V("route"),te(Te)],qe);let Le=class extends we{};Pe([z,Ae("design:type",Date)],Le.prototype,"created_at",void 0),Pe([X((()=>Re)),Ae("design:type",Number)],Le.prototype,"group_id",void 0),Pe([X((()=>qe)),Ae("design:type",Number)],Le.prototype,"route_id",void 0),Le=Pe([$(Se),V("groups_routes"),te(Te)],Le);let Be=class extends we{};Pe([M(),Ae("design:type",Number)],Be.prototype,"id",void 0),Pe([Y(),Ae("design:type",Y)],Be.prototype,"type",void 0),Pe([Y(),Ae("design:type",Y)],Be.prototype,"source",void 0),Pe([Q(),Ae("design:type",Y)],Be.prototype,"message",void 0),Pe([z,Ae("design:type",Date)],Be.prototype,"created_at",void 0),Be=Pe([$(Se),V("log")],Be);let Ke=class extends we{};Pe([Y(),Ae("design:type",Y)],Ke.prototype,"session",void 0),Pe([Q(),Ae("design:type",Y)],Ke.prototype,"json",void 0),Pe([se(),Ae("design:type",Number)],Ke.prototype,"expired",void 0),Pe([z,Ae("design:type",Date)],Ke.prototype,"created_at",void 0),Pe([W,Ae("design:type",Date)],Ke.prototype,"updated_at",void 0),Ke=Pe([$(Se),V("session")],Ke);class He{static write(e,t,r){return Oe(this,void 0,void 0,(function*(){yield He.writeRaw(I.White,"",e,t,r)}))}static error(e,t,r){return Oe(this,void 0,void 0,(function*(){yield He.writeRaw(I.Red,"error",e,t,r)}))}static info(e,t,r){return Oe(this,void 0,void 0,(function*(){yield He.writeRaw(I.Cyan,"info",e,t,r)}))}static success(e,t,r){return Oe(this,void 0,void 0,(function*(){yield He.writeRaw(I.Green,"success",e,t,r)}))}static warning(e,t,r){return Oe(this,void 0,void 0,(function*(){yield He.writeRaw(I.Yellow,"warning",e,t,r)}))}static writeRaw(e,t,r,i,n){return Oe(this,void 0,void 0,(function*(){n&&A.console(e,t,r),Se&&(yield Be.create({type:t,source:i,message:r}).catch((()=>null)))}))}}const Ce=e=>ae(e)?ue(e):void 0,Ue={http:Ce(Ee.API_HTTP_CRT),token:Ce(Ee.API_TOKEN_CRT)},Me={http:Ce(Ee.API_HTTP_KEY),token:Ce(Ee.API_TOKEN_KEY)};class Ye extends he{constructor(){super(),this.all=e=>Oe(this,void 0,void 0,(function*(){e=e||b;const t=yield Ke.findAll({attributes:["session"],where:{expired:{[ve.gte]:Date.now()}}}).catch((t=>(e(t),null)));t&&e(null,t.map((e=>e.session))),e()})),this.clear=e=>Oe(this,void 0,void 0,(function*(){yield Ke.destroy().catch(b),e&&e()})),this.destroy=(e,t)=>Oe(this,void 0,void 0,(function*(){yield Ke.destroy({where:{session:e}}).catch(b),t&&t()})),this.expired=()=>Oe(this,void 0,void 0,(function*(){yield Ke.destroy({where:{expired:{[ve.lt]:Date.now()}}}).catch(b)})),this.get=(e,t)=>Oe(this,void 0,void 0,(function*(){t=t||b;const r=yield Ke.findOne({where:{session:e,expired:{[ve.gte]:Date.now()}}}).catch((e=>(t(e),null)));if(r){const e=JSON.parse(r.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield r.destroy().catch(b),void t(null)}t(null,e)}else t(null)})),this.length=e=>Oe(this,void 0,void 0,(function*(){e&&e(null,(yield Ke.count().catch(b))||0)})),this.set=(e,t,r)=>Oe(this,void 0,void 0,(function*(){r=r||b;const i=Date.now()+Ee.API_SESSION_LIFETIME,n=JSON.stringify(t),[o,s]=(yield Ke.findOrCreate({where:{session:e},defaults:{session:e,json:n,expired:i}}).catch(b))||[];o&&(s||(o.json=n,o.expired=i,yield o.save().catch(b))),r()})),this.loop=D(this.expired,3e4),this.loop.start()}}class Ge{static create(e){return Oe(this,void 0,void 0,(function*(){if(!Me.token)return{error:"Key not found"};const{id:t}=e,r=R(),i=yield be.create({secret:r,user_id:t}).catch(Ge.error);if(!i)return{error:"Internal Server Error"};return{auth:i,token:me({id:t,secret:r},Me.token,Ge.options())}}))}static destroy(e){return Oe(this,void 0,void 0,(function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)}))}static error(e){He.error(e.message,"api.token",Ee.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:Ee.API_TOKEN_LIFETIME+"ms"}}static renew(e){return Oe(this,void 0,void 0,(function*(){if(!Me.token)return{error:"Key not found"};const{error:t,decode:r}=Ge.verify(e,Ee.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(r){const{id:e,secret:t}=r;if(e&&t){const r=yield xe.findOne({where:{id:e,state:!0}}).catch(Ge.error);if(r){const i=yield be.findOne({where:{secret:t,user_id:r.id}}).catch(Ge.error);if(i&&!i.logout){i.secret=R(),yield i.save().catch(Ge.error);return{auth:i,token:me({id:e,secret:i.secret},Me.token,Ge.options())}}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static user(e,t,r){return Oe(this,void 0,void 0,(function*(){if(e){t=r.hash.encrypt(e);const i=yield xe.findOne({where:{token:t,state:!0}}).catch(Ge.error);if(i){const t=e.replace(/(-[\w]{4})/g,"-****"),[r]=(yield be.findOrCreate({where:{secret:t,user_id:i.id},defaults:{secret:t,user_id:i.id}}).catch(Ge.error))||[];if(r)return{auth:r,user:i}}return{error:"Access denied"}}const{error:i,decode:n}=Ge.verify(t);if(i)return{error:i};if(n){const{id:e,secret:t}=n;if(e&&t){const r=yield xe.findOne({where:{id:e,state:!0}}).catch(Ge.error);if(r){const e=yield be.findOne({where:{secret:t,user_id:r.id}}).catch(Ge.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"Access denied"}}}return{error:"Invalid token"}}))}static verify(e,t){if(!Ue.token)return{error:"Cert not found"};if(!e||e.split(".").length<3)return{error:"Invalid Token"};try{return{decode:_e(e,Ue.token,{clockTolerance:t})}}catch(e){return{error:"Invalid Token"}}}}class ze extends e{constructor(e){super(e,{cert:Ue.http,cross:Ee.API_HTTP_CROSS,hybrid:Ee.API_HTTP_HYBRID,key:Me.http,notfound:Ee.API_NOTFOUND_REDIRECT,path:Ee.API_DEFAULT_PATH,port:Ee.API_HTTP_PORT,public:Ee.API_HTTP_PUBLIC,redirect:Ee.API_HTTP_REDIRECT,session:{store:new Ye,name:Ee.API_SESSION_NAME,secret:Ee.API_SESSION_SECRET,cookie:{maxAge:Ee.API_SESSION_LIFETIME},genid:R}}),this.hash=new O(Ee.API_KEY_HASH)}error(e,t){He.error(e.message,t,Ee.API_CONSOLE_ERROR)}log(e,t){He.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return Oe(this,void 0,void 0,(function*(){yield Se.sync(),yield e.listen.call(this),Ee.API_WEBSOCKET_START&&this.server&&(this._webSocket=new H.Server({server:this.server,verifyClient:(e,t)=>t(Ee.API_WEBSOCKET_START)}),this._webSocket.on("connection",((e,t)=>Oe(this,void 0,void 0,(function*(){t.url||(t.url="");const r=t.url.length<=1?"":t.url.replace(/\//g,".");let i;e.on("message",(n=>Oe(this,void 0,void 0,(function*(){if(i)try{const o=JSON.parse(n);this.emit("ws.message"+r,{data:o,message:n,req:t,user:i,ws:e})}catch(o){this.emit("ws.message"+r,{message:n,req:t,user:i,ws:e})}else{const{user:o}=yield Ge.user("",n.toString(),this);o&&(i=o,this.emit("ws.connection"+r,{req:t,user:i,ws:e}))}i||e.close()})))),e.on("close",(()=>{i&&this.emit("ws.close"+r,{user:i,ws:e})})),yield k(2e3),i||e.close()})))))}))}websocket(){return this._webSocket}}class We{static all(){return Oe(this,void 0,void 0,(function*(){const e=yield Ne.findAll().catch(We.error),t={};return e&&e.forEach((e=>t[e.key]=e.value)),t}))}static del(e,t){return Oe(this,void 0,void 0,(function*(){var r;const i=null!==(r=null==t?void 0:t.id)&&void 0!==r?r:null;return((yield Ne.destroy(Object.assign({where:{key:e},individualHooks:!0},{user_id:i})).catch(We.error))||0)>0}))}static error(e){He.error(e.message,"api.config",Ee.API_CONSOLE_ERROR)}static get(e){return Oe(this,arguments,void 0,(function*(e,t=""){const[r]=(yield Ne.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(We.error))||[];return r?r.value:t}))}static set(e,t,r){return Oe(this,void 0,void 0,(function*(){var i;const n=null!==(i=null==r?void 0:r.id)&&void 0!==i?i:null,[o]=(yield Ne.findOrCreate(Object.assign({where:{key:e}},{user_id:n})).catch(We.error))||[];o&&(o.value=t,yield o.save().catch(We.error))}))}}const Je=t((({ctx:e})=>{var t,r,i;return{user_id:null!==(i=null===(r=null===(t=e.req)||void 0===t?void 0:t.user)||void 0===r?void 0:r.id)&&void 0!==i?i:null}})),Xe=t((({ctx:e})=>e.req.auth)),$e=t((({ctx:e})=>e.req.user));class Ve{static all(e,t){return Oe(this,void 0,void 0,(function*(){return yield qe.findAll({where:Object.assign(Object.assign({},t),{state:!0}),include:[{model:Le,required:!0,include:[{model:Re,required:!0,where:{state:!0},include:[{model:ke,required:!0,where:{user_id:e.id}}]}]}]}).catch((e=>{He.error(e.message,"api.permission",Ee.API_CONSOLE_ERROR)}))}))}static get(e){return Oe(this,void 0,void 0,(function*(){const t=yield Ve.all(e);return t?t.map((e=>e.name)):[]}))}static is(e,t){return Oe(this,void 0,void 0,(function*(){const r=yield Ve.all(e,{name:t});return!!r&&r.length>0}))}}class Ze extends x{auth(e,t,r,i,n){return Oe(this,void 0,void 0,(function*(){const{auth:o,error:s,user:d}=yield Ge.user(t,r,n);return s?e.error(s):o&&d?o.useragent&&o.useragent!=i?e.error("Invalid token"):(e.req.auth=o,e.req.user=d,void e.next()):e.error("Internal Server Error")}))}session(e,t,r){return Oe(this,void 0,void 0,(function*(){r.auth&&r.user&&(r.useragent?r.useragent!=t&&r.regenerate(b):(r.useragent=t,r.save(b))),e.next()}))}error(e){He.error(e.message,"api.controller",Ee.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return Oe(this,void 0,void 0,(function*(){return r?(yield Ve.is(r,t))?e.next():void e.unauthorized("Access denied"):e.unauthorized("Access denied")}))}read(e,t,r){return Oe(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".read",r)}))}upload(e,t){t.path||(t.path=Ee.API_UPLOAD_TEMP),t.size||(t.size=Ee.API_UPLOAD_SIZE),t.field||(t.field=Ee.API_UPLOAD_FIELD),d.middleware(e,t)}validation(e,t){return Oe(this,void 0,void 0,(function*(){const{error:r,value:i}=yield F.object(t).parse().validateAsync(e.req.body);if(r)return e.validation(r);e.req.body=i,e.next()}))}write(e,t,r){return Oe(this,void 0,void 0,(function*(){yield this.permission(e,(t||this.name())+".write",r)}))}}Pe([Ie(0,r()),Ie(1,i(Ee.API_KEY_HEADER)),Ie(2,i(Ee.API_TOKEN_HEADER)),Ie(3,i("user-agent")),Ie(4,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String,String,ze]),Ae("design:returntype",Promise)],Ze.prototype,"auth",null),Pe([Ie(0,r()),Ie(1,i("user-agent")),Ie(2,o()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,Object]),Ae("design:returntype",Promise)],Ze.prototype,"session",null),Pe([Ie(0,r()),Ie(1,s()),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],Ze.prototype,"permission",null),Pe([Ie(0,r()),Ie(1,s()),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],Ze.prototype,"read",null),Pe([Ie(0,r()),Ie(1,s()),Ae("design:type",Function),Ae("design:paramtypes",[a,Object]),Ae("design:returntype",void 0)],Ze.prototype,"upload",null),Pe([Ie(0,r()),Ie(1,s()),Ae("design:type",Function),Ae("design:paramtypes",[a,Object]),Ae("design:returntype",Promise)],Ze.prototype,"validation",null),Pe([Ie(0,r()),Ie(1,s()),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],Ze.prototype,"write",null);let Qe=class extends Ze{constructor(){super(...arguments),this._columns=[]}_add(e){return Oe(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:i}){var n;const o=null!==(n=null==i?void 0:i.id)&&void 0!==n?n:null,s=yield this.model().create(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign({},t||{}),{user_id:o})).catch(this.error);if(s){const t=this.key();return e.prepare(c.OK,{[t]:s.getDataValue(t)}),s}e.error("Internal Server Error")}))}_all(e){return Oe(this,arguments,void 0,(function*({ctx:e,options:t,callback:r,scope:i}){var n,o,s,d,a,u;const l=this.scope(i),p=Object.assign({},t||{});p.where=Object.assign({},p.where||{});const y=e.req.query.limit,g=N(y)?parseInt(y):Ee.API_MODEL_LIMIT;p.limit=g>=0?Math.min(g,Ee.API_MODEL_LIMIT_MAX):void 0;const h=e.req.query.offset;if(N(h)){const e=h?parseInt(h):0;p.offset=e>0?e:void 0}const v=[],_=this.columns(),m=e=>_.indexOf(e)>=0,f=null===(n=e.req.query.asc)||void 0===n?void 0:n.toString();f&&f.length&&v.push(...f.split(",").filter(m).map((e=>[e,"ASC"])));const P=null===(o=e.req.query.desc)||void 0===o?void 0:o.toString();P&&P.length&&v.push(...P.split(",").filter(m).map((e=>[e,"DESC"]))),v.length&&(p.order=v);const I=[],A=null===(s=e.req.query.search)||void 0===s?void 0:s.toString();(j(p.attributes)?p.attributes:_).filter(N).forEach((t=>{var r;if(A&&A.length&&I.push({[t]:{[ve.like]:`%${A}%`}}),"search_"+t in e.req.query){const i=null===(r=e.req.query["search_"+t])||void 0===r?void 0:r.toString();i&&i.length&&I.push({[t]:{[ve.like]:`%${i}%`}})}})),I.length&&(p.where=Object.assign(Object.assign({},p.where),{[ve.or]:[...I]}));const O=null!==(d=yield l.count(Object.assign(Object.assign({},p),{col:_[0]})).catch(this.error))&&void 0!==d?d:0,E=yield l.findAll(p).catch(this.error),S={count:O,limit:null!==(a=p.limit)&&void 0!==a?a:-1,offset:null!==(u=p.offset)&&void 0!==u?u:0};return E?(e.prepare(c.OK,Object.assign(Object.assign({},S),{records:r?yield r(E):E})),Object.assign(Object.assign({},S),{records:E})):(e.error("Internal Server Error"),Object.assign(Object.assign({},S),{records:[]}))}))}columns(){return 0==this._columns.length&&(this._columns=Object.keys(this.model().getAttributes())),this._columns}_del(e){return Oe(this,arguments,void 0,(function*({ctx:e,options:t,user:r}){var i;const n=this.key(),{[n]:o}=e.req.params;if(!o)return e.error("Internal Server Error"),0;const s=null!==(i=null==r?void 0:r.id)&&void 0!==i?i:null,d=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:o}),individualHooks:!0}),{user_id:s})).catch(this.error);return d?(e.success("OK"),d):(e.notFound("Record not found"),0)}))}error(e){e.sql?He.error(e.message+"\n"+e.sql,"api.controller.sql",Ee.API_CONSOLE_ERROR):super.error(e)}_get(e){return Oe(this,arguments,void 0,(function*({ctx:e,options:t,callback:r,scope:i}){const n=this.key(),{[n]:o}=e.req.params,s=yield this.scope(i).findOne(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:o})})).catch(this.error);return s?(e.prepare(c.OK,r?yield r(s):s.toJSON()),s):null===s?e.notFound("Record not found"):void e.error("Internal Server Error")}))}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}_set(e){return Oe(this,arguments,void 0,(function*({ctx:e,options:t,body:r,user:i}){var n,o;const s=this.key(),{[s]:d}=e.req.params,a=null!==(n=null==i?void 0:i.id)&&void 0!==n?n:null,[u]=null!==(o=yield this.model().update(Object.assign(Object.assign({},e.req.body),r||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[s]:d}),individualHooks:!0}),{user_id:a})).catch(this.error))&&void 0!==o?o:[];return u?(e.success("OK"),!0):(e.success("Record not changed"),!1)}))}};Qe=Pe([u(Ze)],Qe);let et=class extends Qe{model(){return Fe}all(e,t,r){return Oe(this,void 0,void 0,(function*(){const i={};t&&(i.type=t),r&&(i.table=r),yield this._all({ctx:e,options:{attributes:{exclude:["data"]},where:i,order:[["created_at","DESC"]]}})}))}get(e){return Oe(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}};Pe([l(),p("auth"),p("read"),Ie(0,r()),Ie(1,y("type")),Ie(2,y("table")),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String]),Ae("design:returntype",Promise)],et.prototype,"all",null),Pe([l("/:id"),p("auth"),p("read"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],et.prototype,"get",null),et=Pe([g("/audits"),u(Qe)],et);let tt=class extends Ze{login(e,t,r,i,n){return Oe(this,void 0,void 0,(function*(){var o;yield k(Ee.API_SLEEP_AUTH);const s=yield xe.scope("password").findOne({where:{[ve.or]:[{email:r},{username:r}]}}).catch(this.error);if(i+=null!==(o=null==s?void 0:s.salt)&&void 0!==o?o:"",!s||s.password!=E(i))return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const d=yield De.findOne({where:{state:!0,user_id:s.id}}).catch(this.error);if(d)return e.error("Activation required"),n.emit("auth.activation",{ctx:e,register:d,user:s}),void this.emit("auth.activation",{ctx:e,register:d,user:s});if(!s.state)return e.notFound("Invalid username or password"),n.emit("auth.failure",{ctx:e,user:s}),void this.emit("auth.failure",{ctx:e,user:s});const{auth:a,error:u,token:c}=yield Ge.create(s);return u?(e.error(u),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):a&&c?(a.useragent=t,yield a.save().catch(this.error),e.json({token:c}),n.emit("auth.login",{auth:a,ctx:e,user:s}),void this.emit("auth.login",{auth:a,ctx:e,user:s})):(e.error("Internal Server Error"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))}))}logout(e,t,r,i){return Oe(this,void 0,void 0,(function*(){if(yield Ge.destroy(t))return e.success("Disconcerted"),i.emit("auth.logout",{auth:t,ctx:e,user:r}),void this.emit("auth.logout",{auth:t,ctx:e,user:r});e.unauthorized("Access denied")}))}renew(e,t,r,i){return Oe(this,void 0,void 0,(function*(){const{auth:n,error:o,token:s}=yield Ge.renew(r);return o?e.error(o):n?(n.useragent=t,yield n.save().catch(this.error),e.json({token:s}),i.emit("auth.renew",{auth:n,ctx:e}),void this.emit("auth.renew",{auth:n,ctx:e})):e.error("Internal Server Error")}))}user(e,t){return Oe(this,void 0,void 0,(function*(){const r=yield Ve.all(t);if(!r)return e.error("Internal Server Error");e.json(Object.assign(Object.assign({},t.toJSON()),{permissions:r.map((e=>e.name))}))}))}};Pe([h("/login"),p("validation",{username:F.string().min(3).required(),password:F.string().min(5).required()}),Ie(0,r()),Ie(1,i("user-agent")),Ie(2,v("username")),Ie(3,v("password")),Ie(4,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String,String,ze]),Ae("design:returntype",Promise)],tt.prototype,"login",null),Pe([l("/logout"),p("auth"),Ie(0,r()),Ie(1,Xe()),Ie(2,$e()),Ie(3,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,be,xe,ze]),Ae("design:returntype",Promise)],tt.prototype,"logout",null),Pe([h("/renew"),p("validation",{token:F.string().required()}),Ie(0,r()),Ie(1,i("user-agent")),Ie(2,v("token")),Ie(3,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String,ze]),Ae("design:returntype",Promise)],tt.prototype,"renew",null),Pe([l(),p("auth"),Ie(0,r()),Ie(1,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe]),Ae("design:returntype",Promise)],tt.prototype,"user",null),tt=Pe([g("/auth"),u(Ze)],tt);let rt=class extends Ze{directory(){return Ee.API_HTTP_PUBLIC||"./"}files(e){return Oe(this,void 0,void 0,(function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const r=fe(this.directory(),t);if(!ae(r)||!ce(r).isDirectory())return e.notFound("Path not Found");let i=[];return i=le(r),i=i.map((e=>this.info(fe(r,e)))),i=i.filter(q),Object.assign(Object.assign({},this.info(r)),{files:i})}))}access(e,t,r){return Oe(this,void 0,void 0,(function*(){yield this.permission(e,this.name()+"."+t,r)}))}info(e){if(!ae(e))return null;const t=ce(e),r=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const i=t.isDirectory();return{name:r,path:e.replace(/^\/\//,"/"),size:t.size,extension:i?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:i,symlink:t.isSymbolicLink()}}name(){return"files"}};Pe([l("/path/?*"),p("auth"),p("access","list"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],rt.prototype,"files",null),Pe([Ie(0,r()),Ie(1,s()),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],rt.prototype,"access",null),rt=Pe([g("/files"),u(Ze)],rt);let it=class extends Ze{check(e,t){return Oe(this,void 0,void 0,(function*(){const r=yield this.find(t);if(!r||!r.user)return e.notFound("User not found");r.token=L(),yield r.save(),e.json({token:r.token})}))}forgot(e,t,r){return Oe(this,void 0,void 0,(function*(){yield k(Ee.API_SLEEP_FORGOT);const i=t,n=yield xe.findOne({where:{[ve.or]:[{email:i},{username:t}]}}).catch(this.error);if(!n)return e.notFound("User not found");const o=L(),s=Date.now()+6e4*Ee.API_TOKEN_FORGOT,d=yield je.create({token:o,timestamp:s,state:!0,user_id:n.id});e.success("OK"),r.emit("forgot.send",{ctx:e,forgot:d,user:n}),this.emit("forgot.send",{ctx:e,forgot:d,user:n})}))}reset(e,t,r,i){return Oe(this,void 0,void 0,(function*(){const n=yield this.find(t);if(!n)return e.notFound("User not found");n.state=!1,yield n.save().catch(this.error),n.user.password=E(r),yield n.user.save().catch(this.error),e.success("OK"),i.emit("forgot.reset",{ctx:e,user:n.user}),this.emit("forgot.reset",{ctx:e,user:n.user})}))}find(e){return Oe(this,void 0,void 0,(function*(){return yield je.findOne({where:{token:e,state:!0},include:[{model:xe,required:!0}]}).catch(this.error)}))}};Pe([l("/check"),p("validation",{token:F.string().required()}),Ie(0,r()),Ie(1,v("token")),Ae("design:type",Function),Ae("design:paramtypes",[a,String]),Ae("design:returntype",Promise)],it.prototype,"check",null),Pe([h(),p("validation",{username:F.string().min(4).required()}),Ie(0,r()),Ie(1,v("username")),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,ze]),Ae("design:returntype",Promise)],it.prototype,"forgot",null),Pe([h("/reset"),p("validation",{token:F.string().required(),password:F.string().min(5).required()}),Ie(0,r()),Ie(1,v("token")),Ie(2,v("password")),Ie(3,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String,ze]),Ae("design:returntype",Promise)],it.prototype,"reset",null),it=Pe([g("/forgot"),u(Ze)],it);let nt=class extends Qe{constructor(){super(...arguments),this._crud={}}add(e,t){return Oe(this,void 0,void 0,(function*(){yield this._add({ctx:e,user:t})}))}all(e){return Oe(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}create(){return this._crud}del(e,t){return Oe(this,void 0,void 0,(function*(){yield this._del({ctx:e,user:t})}))}get(e){return Oe(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t){return Oe(this,void 0,void 0,(function*(){yield this._set({ctx:e,user:t})}))}update(){return this._crud}validationAdd(e){return Oe(this,void 0,void 0,(function*(){const t=this.create();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}validationSet(e){return Oe(this,void 0,void 0,(function*(){const t=this.update();if(t==this._crud)return e.error("Internal Server Error");yield this.validation(e,t)}))}};Pe([h(),p("auth"),p("write"),p("validationAdd"),Ie(0,r()),Ie(1,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe]),Ae("design:returntype",Promise)],nt.prototype,"add",null),Pe([l(),p("auth"),p("read"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],nt.prototype,"all",null),Pe([_("/:id"),p("auth"),p("write"),Ie(0,r()),Ie(1,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe]),Ae("design:returntype",Promise)],nt.prototype,"del",null),Pe([l("/:id"),p("auth"),p("read"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],nt.prototype,"get",null),Pe([m("/:id"),p("auth"),p("write"),p("validationSet"),Ie(0,r()),Ie(1,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe]),Ae("design:returntype",Promise)],nt.prototype,"set",null),Pe([Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],nt.prototype,"validationAdd",null),Pe([Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],nt.prototype,"validationSet",null),nt=Pe([u(Qe)],nt);let ot=class extends nt{model(){return Re}create(){return{name:F.string().required(),description:F.string().empty(""),state:F.boolean().parse().required()}}update(){return{name:F.string().empty(),description:F.string().empty(),state:F.boolean().parse().empty()}}};ot=Pe([g("/groups"),u(nt)],ot);let st=class extends Qe{model(){return Le}all(e,t){return Oe(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{group_id:t},include:[{model:qe,required:!0}]},callback:e=>e.map((e=>e.route))})}))}set(e,t,r,i){return Oe(this,void 0,void 0,(function*(){const n=yield Re.findByPk(t,{attributes:["id"]}).catch(this.error);if(n){const t=n.id;if(yield Le.destroy(Object.assign({where:{group_id:t},individualHooks:!0},i)),r){let e=0;yield k(1e3);for(let n=0;n<r.length;n++)e=yield qe.count({where:{id:r[n]}}),e&&(yield Le.create({group_id:t,route_id:r[n]},Object.assign({},i)))}return e.success("OK")}if(B(n))return e.notFound("Record not found");e.error("Internal Server Error")}))}};Pe([l("/:id/routes"),p("auth"),p("read","groups"),Ie(0,r()),Ie(1,f("id")),Ae("design:type",Function),Ae("design:paramtypes",[a,String]),Ae("design:returntype",Promise)],st.prototype,"all",null),Pe([m("/:id/routes"),p("auth"),p("write","groups"),p("validation",{routes:F.array(F.number().parse())}),Ie(0,r()),Ie(1,f("id")),Ie(2,v("routes")),Ie(3,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,Array,Object]),Ae("design:returntype",Promise)],st.prototype,"set",null),st=Pe([g("/groups"),u(Qe)],st);let dt=class extends Qe{model(){return Be}all(e,t,r){return Oe(this,void 0,void 0,(function*(){const i={};t&&(i.type=t),r&&(i.source=r),yield this._all({ctx:e,options:{where:i,order:[["created_at","DESC"]]}})}))}};Pe([l(),p("auth"),p("read"),Ie(0,r()),Ie(1,y("type")),Ie(2,y("source")),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String]),Ae("design:returntype",Promise)],dt.prototype,"all",null),dt=Pe([g("/logs"),u(Qe)],dt);let at=class extends Ze{register(e,t,r){return Oe(this,void 0,void 0,(function*(){yield k(Ee.API_SLEEP_REGISTRY);const{name:i,date:n,email:o,username:s,password:d,confirm:a}=t,u=s||o,c=E(d);if(yield xe.count({where:{[ve.or]:[{email:o},{username:u}]}}).catch(this.error))return e.validation("Invalid email or username");if(c!=E(a))return e.error("Invalid password");const l=yield xe.create({name:i,email:o,username:u,password:c,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!l)return e.error("Internal Server Error");const p=yield De.create({token:yield this.getId(),user_id:l.id,state:!0}).catch(this.error);if(!p)return yield l.destroy().catch(this.error),e.error("Internal Server Error");e.success("OK"),r.emit("register.user",{ctx:e,register:p,user:l}),this.emit("register.user",{ctx:e,register:p,user:l})}))}confirm(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=yield De.findOne({where:{token:t,state:!0},include:[{model:xe,required:!0}]}).catch(this.error);if(!i)return e.notFound("User not found");i.state=!1,yield i.save().catch(this.error),i.user.state=!0,yield i.user.save().catch(this.error),e.success("OK"),r.emit("register.confirm",{ctx:e,register:i,user:i.user}),this.emit("register.confirm",{ctx:e,register:i,user:i.user})}))}send(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=t,n=yield De.findOne({where:{state:!0},include:[{model:xe,required:!0,where:{[ve.or]:[{email:i},{username:t}]}}]}).catch(this.error);if(!n)return e.notFound("User not found");e.success("OK"),r.emit("register.send",{ctx:e,register:n,user:n.user}),this.emit("register.send",{ctx:e,register:n,user:n.user})}))}getId(){return Oe(this,void 0,void 0,(function*(){const e=R();return(yield De.count({where:{token:e}}))?this.getId():e}))}};Pe([h(),p("validation",{name:F.string().required(),date:F.date().required(),email:F.string().email().required(),username:F.string().min(4).empty(),password:F.string().min(5).required(),confirm:F.string().min(5).required()}),Ie(0,r()),Ie(1,v()),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,Object,ze]),Ae("design:returntype",Promise)],at.prototype,"register",null),Pe([h("/confirm"),p("validation",{token:F.string().required()}),Ie(0,r()),Ie(1,v("token")),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,ze]),Ae("design:returntype",Promise)],at.prototype,"confirm",null),Pe([h("/send"),p("validation",{username:F.string().min(4).required()}),Ie(0,r()),Ie(1,v("username")),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,ze]),Ae("design:returntype",Promise)],at.prototype,"send",null),at=Pe([g("/register"),u(Ze)],at);let ut=class extends nt{model(){return qe}create(){return{name:F.string().required(),description:F.string().empty(""),state:F.boolean().parse().required()}}update(){return{name:F.string().empty(),description:F.string().empty(),state:F.boolean().parse().empty()}}};ut=Pe([g("/routes"),u(nt)],ut);let ct=class extends Ze{setup(e){return Oe(this,void 0,void 0,(function*(){if(0==(yield xe.count())){const e=L(),t=yield xe.create({name:"Admin",email:"admin@localhost",username:"admin",password:E("admin"+e),salt:e,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0}),r={description:"API CORE",state:!0},i=yield Re.create(Object.assign({name:"admin"},r));yield ke.create({user_id:t.id,group_id:i.id});const n=["read","write"],o=["audits","users","groups","routes"];yield K(o,(e=>Oe(this,void 0,void 0,(function*(){yield K(n,(t=>Oe(this,void 0,void 0,(function*(){const n=yield qe.create(Object.assign({name:`${e}.${t}`},r));yield Le.create({group_id:i.id,route_id:n.id})}))))}))));const s=["delete","list","read","rename","upload","write"];yield K(s,(e=>Oe(this,void 0,void 0,(function*(){const t=yield qe.create(Object.assign({name:`files.${e}`},r));yield Le.create({group_id:i.id,route_id:t.id})}))));const d=["logs"];yield K(d,(e=>Oe(this,void 0,void 0,(function*(){const t=yield qe.create(Object.assign({name:`${e}.read`},r));yield Le.create({group_id:i.id,route_id:t.id})}))))}e.success("OK")}))}};Pe([l(),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],ct.prototype,"setup",null),ct=Pe([g("/setup"),u(Ze)],ct);let lt=class extends Qe{model(){return xe}constructor(){super(),this.dir=Ee.API_HTTP_PUBLIC+"/avatar",Ee.API_HTTP_PUBLIC&&ae(Ee.API_HTTP_PUBLIC)&&!ae(this.dir)&&pe(this.dir)}avatar(e,t,r,i){return Oe(this,void 0,void 0,(function*(){if(t.length){const n=t[0].filename||"";if(n){const t=this.dir+"/"+r.avatar;if(ae(t)&&ye(t).isFile()&&ge(t),r.avatar=n,yield r.save(Object.assign({},i)).catch(this.error))return e.success("OK")}}e.success("Record not changed")}))}avatar_remove(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=this.dir+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&ae(i)&&ge(i),e.success("OK")}))}password(e,t,r,i,n){return Oe(this,void 0,void 0,(function*(){var o;const s=yield this.scope("password").findOne({where:{id:i.id,state:!0}}).catch(this.error);return t+=null!==(o=null==s?void 0:s.salt)&&void 0!==o?o:"",s&&s.password==E(t)?(s.salt=L(),s.password=E(r+s.salt),(yield s.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("Record not changed")):e.error("Record not changed")}))}token(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(i)return e.json({token:r.hash.decrypt(i.token)});e.notFound("Record not found")}))}token_get(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(i)return e.json({token:r.hash.decrypt(i.token)});e.notFound("Record not found")}))}token_remove(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(i)return i.token="",yield i.save(Object.assign({},r)).catch(this.error),e.success("OK");e.notFound("Record not found")}))}token_renew(e,t,r,i){return Oe(this,void 0,void 0,(function*(){const n=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(n){const t=yield this.token_new();return n.token=i.hash.encrypt(t),yield n.save(Object.assign({},r)).catch(this.error),e.json({token:t})}e.notFound("Record not found")}))}token_new(){return Oe(this,void 0,void 0,(function*(){var e;const t=R();return(null!==(e=yield this.model().count({where:{token:t}}).catch(this.error))&&void 0!==e?e:0)?this.token_new():t}))}add(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=L();yield this._add({ctx:e,body:{password:E(t+i),salt:i},user:r})}))}all(e){return Oe(this,void 0,void 0,(function*(){yield this._all({ctx:e})}))}del(e,t,r){return Oe(this,void 0,void 0,(function*(){if(r.id.toString()==t)return e.notFound("Record not found");yield this._del({ctx:e,user:r})}))}get(e){return Oe(this,void 0,void 0,(function*(){yield this._get({ctx:e})}))}set(e,t,r){return Oe(this,void 0,void 0,(function*(){const i=L();yield this._set({ctx:e,body:t?{password:E(t+i),salt:i}:{},user:r})}))}};Pe([h("/avatar"),p("auth"),p("upload",(e=>({count:1,field:"file",path:e.controller.dir,types:["image/bmp","image/jpeg","image/png"],size:32}))),Ie(0,r()),Ie(1,P()),Ie(2,$e()),Ie(3,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,Array,xe,Object]),Ae("design:returntype",Promise)],lt.prototype,"avatar",null),Pe([l("/avatar/remove"),p("auth"),Ie(0,r()),Ie(1,$e()),Ie(2,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe,Object]),Ae("design:returntype",Promise)],lt.prototype,"avatar_remove",null),Pe([h("/password"),p("auth"),p("validation",{oldPassword:F.string().min(5).required(),newPassword:F.string().min(5).required()}),Ie(0,r()),Ie(1,v("oldPassword")),Ie(2,v("newPassword")),Ie(3,$e()),Ie(4,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,String,xe,Object]),Ae("design:returntype",Promise)],lt.prototype,"password",null),Pe([l("/token"),p("auth"),Ie(0,r()),Ie(1,$e()),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe,ze]),Ae("design:returntype",Promise)],lt.prototype,"token",null),Pe([l("/token/:id"),p("auth"),p("write"),Ie(0,r()),Ie(1,f("id")),Ie(2,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,ze]),Ae("design:returntype",Promise)],lt.prototype,"token_get",null),Pe([l("/token/remove/:id"),p("auth"),p("write"),Ie(0,r()),Ie(1,f("id")),Ie(2,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,Object]),Ae("design:returntype",Promise)],lt.prototype,"token_remove",null),Pe([l("/token/renew/:id"),p("auth"),p("write"),Ie(0,r()),Ie(1,f("id")),Ie(2,Je()),Ie(3,n()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,Object,ze]),Ae("design:returntype",Promise)],lt.prototype,"token_renew",null),Pe([h(),p("auth"),p("write"),p("validation",{name:F.string().required(),email:F.string().email().required(),username:F.string().min(4).required(),password:F.string().min(5).required(),description:F.string().empty(""),state:F.boolean().parse().required()}),Ie(0,r()),Ie(1,v("password")),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],lt.prototype,"add",null),Pe([l(),p("auth"),p("read"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],lt.prototype,"all",null),Pe([_("/:id"),p("auth"),p("write"),Ie(0,r()),Ie(1,f("id")),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],lt.prototype,"del",null),Pe([l("/:id"),p("auth"),p("read"),Ie(0,r()),Ae("design:type",Function),Ae("design:paramtypes",[a]),Ae("design:returntype",Promise)],lt.prototype,"get",null),Pe([m("/:id"),p("auth"),p("write"),p("validation",{name:F.string().empty(),email:F.string().email().empty(),username:F.string().min(4).empty(),password:F.string().min(5).empty().filter(""),description:F.string().empty(),state:F.boolean().parse().empty()}),Ie(0,r()),Ie(1,v("password")),Ie(2,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,xe]),Ae("design:returntype",Promise)],lt.prototype,"set",null),lt=Pe([g("/users"),u(Qe),Ae("design:paramtypes",[])],lt);let pt=class extends Qe{model(){return ke}groups(e,t){return Oe(this,void 0,void 0,(function*(){yield this.all(e,t.id.toString())}))}all(e,t){return Oe(this,void 0,void 0,(function*(){yield this._all({ctx:e,options:{where:{user_id:t},include:[{model:Re,required:!0}]},callback:e=>e.map((e=>e.group))})}))}set(e,t,r,i){return Oe(this,void 0,void 0,(function*(){const n=yield xe.findByPk(t,{attributes:["id"]}).catch(this.error);if(n){if(yield ke.destroy(Object.assign({where:{user_id:n.id},individualHooks:!0},i)),r){let e=0;yield k(1e3);for(let t=0;t<r.length;t++)e=yield Re.count({where:{id:r[t]}}),e&&(yield ke.create({user_id:n.id,group_id:r[t]},Object.assign({},i)))}return e.success("OK")}if(B(n))return e.notFound("Record not found");e.error("Internal Server Error")}))}};Pe([l("/groups"),p("auth"),Ie(0,r()),Ie(1,$e()),Ae("design:type",Function),Ae("design:paramtypes",[a,xe]),Ae("design:returntype",Promise)],pt.prototype,"groups",null),Pe([l("/:id/groups"),p("auth"),p("read","users"),Ie(0,r()),Ie(1,f("id")),Ae("design:type",Function),Ae("design:paramtypes",[a,String]),Ae("design:returntype",Promise)],pt.prototype,"all",null),Pe([m("/:id/groups"),p("auth"),p("write","users"),p("validation",{groups:F.array(F.number().parse())}),Ie(0,r()),Ie(1,f("id")),Ie(2,v("groups")),Ie(3,Je()),Ae("design:type",Function),Ae("design:paramtypes",[a,String,Array,Object]),Ae("design:returntype",Promise)],pt.prototype,"set",null),pt=Pe([g("/users"),u(Qe)],pt);export{ze as Application,Fe as Audit,et as AuditsController,be as Auth,tt as AuthController,We as Config,Ne as Configs,Ze as ControllerBase,nt as CrudController,Ee as Env,rt as FilesController,je as Forgot,it as ForgotController,Re as Group,Le as GroupRoute,ot as GroupsController,st as GroupsRoutesController,Be as Log,He as Logs,dt as LogsController,we as Model,Qe as ModelController,Ve as Permission,De as Register,at as RegisterController,Je as ReqAudit,Xe as ReqAuth,$e as ReqUser,qe as Route,ut as RoutesController,Ke as Session,ct as SetupController,Ge as Token,xe as User,ke as UserGroup,lt as UsersController,pt as UsersGroupsController,Te as audit,Se as conn,Ue as crt,Me as key};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewcaires/api",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"description": "Simple api for small applications using express, jsonwebtoken, sequelize and websocket",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@andrewcaires/express": "^1.1.11",
|
|
49
49
|
"@andrewcaires/node": "^1.1.5",
|
|
50
|
-
"@andrewcaires/sequelize": "^1.0.
|
|
51
|
-
"@andrewcaires/utils.js": "^0.3.
|
|
50
|
+
"@andrewcaires/sequelize": "^1.0.3",
|
|
51
|
+
"@andrewcaires/utils.js": "^0.3.6",
|
|
52
52
|
"cors": "^2.8.5",
|
|
53
53
|
"dotenv": "^16.4.5",
|
|
54
54
|
"express-session": "^1.18.0",
|
|
@@ -62,13 +62,13 @@
|
|
|
62
62
|
"@types/cors": "^2.8.17",
|
|
63
63
|
"@types/express-session": "^1.18.0",
|
|
64
64
|
"@types/jsonwebtoken": "^9.0.7",
|
|
65
|
-
"@types/node": "^22.7.
|
|
65
|
+
"@types/node": "^22.7.4",
|
|
66
66
|
"@types/ws": "^8.5.12",
|
|
67
67
|
"eslint": "^9.11.1",
|
|
68
68
|
"mariadb": "^3.3.2",
|
|
69
|
-
"rollup": "^4.
|
|
69
|
+
"rollup": "^4.24.0",
|
|
70
70
|
"rollup-plugin-dts": "^6.1.1",
|
|
71
71
|
"tslib": "^2.7.0",
|
|
72
|
-
"typescript-eslint": "^8.
|
|
72
|
+
"typescript-eslint": "^8.8.0"
|
|
73
73
|
}
|
|
74
74
|
}
|