@andrewcaires/api 4.3.2 → 4.3.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 +3 -2
- package/dist/index.esm.js +2 -2
- package/package.json +5 -5
package/dist/index.cjs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.3.
|
|
2
|
+
* @andrewcaires/api v4.3.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
"use strict";var e=require("@andrewcaires/express"),t=require("@andrewcaires/sequelize"),r=require("@andrewcaires/node"),o=require("dotenv"),i=require("@andrewcaires/utils.js"),s=require("sequelize"),n=require("ws"),d=require("fs"),a=require("express-session"),p=require("jsonwebtoken"),l=require("path");function u(e,t,r,o){var i,s=arguments.length,n=s<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--)(i=e[d])&&(n=(s<3?i(n):s>3?i(t,r,n):i(t,r))||n);return s>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(i,s){function n(e){try{a(o.next(e))}catch(e){s(e)}}function d(e){try{a(o.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(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;const h=e=>{var t,r,o,i,s,n,d,a,p;return{audit_client:null!==(t=e.ip())&&void 0!==t?t:"0.0.0.0",audit_href:(null===(r=null==e?void 0:e.req)||void 0===r?void 0:r.protocol)+"://"+(null===(o=null==e?void 0:e.req)||void 0===o?void 0:o.get("host"))+(null===(i=null==e?void 0:e.req)||void 0===i?void 0:i.originalUrl),audit_user_agent:null!==(n=null===(s=e.req)||void 0===s?void 0:s.headers["user-agent"])&&void 0!==n?n:"",audit_user_id:null!==(p=null===(a=null===(d=null==e?void 0:e.req)||void 0===d?void 0:d.user)||void 0===a?void 0:a.id)&&void 0!==p?p:null}},x=e.parameterFactory(({ctx:e})=>h(e)),m=e.parameterFactory(({ctx:e})=>e.req.auth),v=e.parameterFactory(({ctx:e})=>e.req.user);class A{static migrations(e){return r.Metadata(A.MIGRATE,e,{version:""})}}A.MIGRATE=Symbol();const _=e=>t=>{A.migrations(t).version=e};o.config({quiet:!0});class S extends r.Env{}S.API_CONSOLE_ERROR=S.getBool("API_CONSOLE_ERROR",!1),S.API_BODYPARSER_STRICT=S.getBool("API_BODYPARSER_STRICT",!0),S.API_BODYPARSER_INFLATE=S.getBool("API_BODYPARSER_INFLATE",!0),S.API_BODYPARSER_LIMIT=S.getString("API_BODYPARSER_LIMIT","10mb"),S.API_BODYPARSER_TYPE=S.getString("API_BODYPARSER_TYPE","json"),S.API_DB_DATABASE=S.getString("API_DB_DATABASE",""),S.API_DB_HOST=S.getString("API_DB_HOST","127.0.0.1"),S.API_DB_PASSWORD=S.getString("API_DB_PASSWORD",""),S.API_DB_PORT=S.getInt("API_DB_PORT",3306),S.API_DB_TYPE=S.getString("API_DB_TYPE",""),S.API_DB_USERNAME=S.getString("API_DB_USERNAME","root"),S.API_DB_LOG=S.getBool("API_DB_LOG",!1),S.API_DB_AUDIT=S.getBool("API_DB_AUDIT",!0),S.API_DB_PREFIX=S.getString("API_DB_PREFIX",""),S.API_DB_TIMEZONE=S.getString("API_DB_TIMEZONE","+00:00"),S.API_HTTP_CRT=S.getString("API_HTTP_CRT",""),S.API_HTTP_KEY=S.getString("API_HTTP_KEY",""),S.API_HTTP_PORT=S.getInt("API_HTTP_PORT",3e3),S.API_HTTP_PUBLIC=S.getString("API_HTTP_PUBLIC",""),S.API_HTTP_CROSS=S.getBool("API_HTTP_CROSS",!1),S.API_HTTP_HYBRID=S.getBool("API_HTTP_HYBRID",!1),S.API_HTTP_NOTFOUND=S.getString("API_HTTP_NOTFOUND",""),S.API_HTTP_PATH=S.getString("API_HTTP_PATH","/api"),S.API_HTTP_REDIRECT=S.getString("API_HTTP_REDIRECT",""),S.API_KEY_HASH=S.getString("API_KEY_HASH",""),S.API_KEY_HEADER=S.getString("API_KEY_HEADER","x-api-key"),S.API_MODEL_LIMIT=S.getInt("API_MODEL_LIMIT",10),S.API_MODEL_LIMIT_MAX=S.getInt("API_MODEL_LIMIT_MAX",500),S.API_SLEEP_AUTH=S.getMs("API_SLEEP_AUTH","2s"),S.API_SLEEP_FORGOT=S.getMs("API_SLEEP_FORGOT","5s"),S.API_SLEEP_REGISTRY=S.getMs("API_SLEEP_REGISTRY","5s"),S.API_SESSION_NAME=S.getString("API_SESSION_NAME","session.id"),S.API_SESSION_LIFETIME=S.getMs("API_SESSION_LIFETIME","1d"),S.API_SESSION_SECRET=S.getString("API_SESSION_SECRET","yoursecret"),S.API_TOKEN_CRT=S.getString("API_TOKEN_CRT",""),S.API_TOKEN_KEY=S.getString("API_TOKEN_KEY",""),S.API_TOKEN_FORGOT=S.getMs("API_TOKEN_LIFETIME","1d"),S.API_TOKEN_HEADER=S.getString("API_TOKEN_HEADER","authorization"),S.API_TOKEN_HEADER_KEY=S.getString("API_TOKEN_HEADER","bearer"),S.API_TOKEN_LIFETIME=S.getMs("API_TOKEN_LIFETIME","1d"),S.API_TOKEN_RENEW=S.getMs("API_TOKEN_RENEW","1d"),S.API_UPLOAD_COUNT=S.getInt("API_UPLOAD_COUNT",1),S.API_UPLOAD_FIELD=S.getString("API_UPLOAD_FIELD","upload"),S.API_UPLOAD_SIZE=S.getInt("API_UPLOAD_SIZE",2),S.API_UPLOAD_TEMP=S.getString("API_UPLOAD_TEMP","./temp"),S.API_USER_HISTORY=S.getBool("API_USER_HISTORY",!0),S.API_WEBSOCKET_START=S.getBool("API_WEBSOCKET_START",!1);const C=new t.Connection({type:S.API_DB_TYPE,database:S.API_DB_DATABASE,username:S.API_DB_USERNAME,password:S.API_DB_PASSWORD,hostname:S.API_DB_HOST,hostport:S.API_DB_PORT,logging:S.API_DB_LOG,prefix:S.API_DB_PREFIX,timezone:S.API_DB_TIMEZONE});class P extends t.Model{constructor(){super(...arguments),this._version=""}}const O=(e,t,r)=>{var o,i,s,n,d;return{type:e,model:null!==(o=null==t?void 0:t.getTableName())&&void 0!==o?o:null,client:null!==(i=null==r?void 0:r.audit_client)&&void 0!==i?i:null,href:null!==(s=null==r?void 0:r.audit_href)&&void 0!==s?s:null,user_agent:null!==(n=null==r?void 0:r.audit_user_agent)&&void 0!==n?n:null,user_id:null!==(d=null==r?void 0:r.audit_user_id)&&void 0!==d?d:null,state:!0}},E={afterCreate:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!S.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield exports.Audit.create(Object.assign(Object.assign({},O("CREATE",o,t)),{record:s?e.getDataValue(s):null,data:e.toJSON()})).catch(i.noop)}),afterUpdate:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!S.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null,n={},d=e.changed();d&&d.forEach(t=>n[t]=e.getDataValue(t)),yield exports.Audit.create(Object.assign(Object.assign({},O("UPDATE",o,t)),{record:s?e.getDataValue(s):null,data:n,previously:e.previous()})).catch(i.noop)}),afterDestroy:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!S.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield exports.Audit.create(Object.assign(Object.assign({},O("DELETE",o,t)),{record:s?e.getDataValue(s):null,data:e.toJSON()})).catch(i.noop)})};exports.Auth=class extends P{},u([t.Id(),g("design:type",Number)],exports.Auth.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Auth.prototype,"secret",void 0),u([t.FullDate(),g("design:type",Date)],exports.Auth.prototype,"logout",void 0),u([t.String(),g("design:type",t.String)],exports.Auth.prototype,"user_agent",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Auth.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Auth.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Auth.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Auth.prototype,"user_id",void 0),exports.Auth=u([t.Database(C),t.ModelName("auth"),_("4.2.0")],exports.Auth),exports.Register=class extends P{},u([t.Id(),g("design:type",Number)],exports.Register.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Register.prototype,"token",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Register.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Register.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Register.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Register.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Register.prototype,"user_id",void 0),exports.Register=u([t.Database(C),t.ModelName("register"),_("4.2.0")],exports.Register),exports.Group=class extends P{},u([t.Id(),g("design:type",Number)],exports.Group.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Group.prototype,"name",void 0),u([t.Text(),g("design:type",t.String)],exports.Group.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Group.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Group.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Group.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Group.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.UserGroup,"group_id"),g("design:type",Array)],exports.Group.prototype,"groups_routes",void 0),u([t.HasMany(()=>exports.UserGroup,"group_id"),g("design:type",Array)],exports.Group.prototype,"users_groups",void 0),exports.Group=u([t.Database(C),t.ModelName("group"),t.Hooks(E),_("4.2.0")],exports.Group),exports.UserGroup=class extends P{},u([t.CreatedAt,g("design:type",Date)],exports.UserGroup.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.Group),g("design:type",Number)],exports.UserGroup.prototype,"group_id",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.UserGroup.prototype,"user_id",void 0),exports.UserGroup=u([t.Database(C),t.ModelName("users_groups"),t.Hooks(E),_("4.2.0")],exports.UserGroup),exports.UserHistory=class extends P{},u([t.String(),g("design:type",t.String)],exports.UserHistory.prototype,"password",void 0),u([t.CreatedAt,g("design:type",Date)],exports.UserHistory.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.UserHistory.prototype,"user_id",void 0),exports.UserHistory=u([t.Database(C),t.ModelName("users_histories"),_("4.2.0")],exports.UserHistory),exports.User=class extends P{},u([t.Id(),g("design:type",Number)],exports.User.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"name",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"email",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"username",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"password",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"salt",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"token",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"avatar",void 0),u([t.DateOnly(),g("design:type",t.String)],exports.User.prototype,"date",void 0),u([t.Text(),g("design:type",t.String)],exports.User.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.User.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.User.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.User.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.User.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.Audit,"user_id"),g("design:type",Array)],exports.User.prototype,"audits",void 0),u([t.HasMany(()=>exports.Auth,"user_id"),g("design:type",Array)],exports.User.prototype,"auths",void 0),u([t.HasMany(()=>exports.Register,"user_id"),g("design:type",Array)],exports.User.prototype,"registers",void 0),u([t.HasMany(()=>exports.UserGroup,"user_id"),g("design:type",Array)],exports.User.prototype,"users_groups",void 0),u([t.HasMany(()=>exports.UserHistory,"user_id"),g("design:type",Array)],exports.User.prototype,"users_histories",void 0),exports.User=u([t.Database(C),t.ModelName("user"),t.DefaultScope({attributes:{exclude:["password","salt","token"]}}),t.Scopes({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),t.Hooks(E),_("4.2.0")],exports.User),exports.Audit=class extends P{},u([t.Id(),g("design:type",Number)],exports.Audit.prototype,"id",void 0),u([t.Enum("CREATE","DELETE","UPDATE"),g("design:type",t.String)],exports.Audit.prototype,"type",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"model",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"record",void 0),u([t.Json(),g("design:type",Object)],exports.Audit.prototype,"data",void 0),u([t.Json(),g("design:type",Object)],exports.Audit.prototype,"previously",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"client",void 0),u([t.Text(),g("design:type",t.String)],exports.Audit.prototype,"href",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"user_agent",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Audit.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Audit.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Audit.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Audit.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Audit.prototype,"user_id",void 0),exports.Audit=u([t.Database(C),t.ModelName("audit"),_("4.2.0")],exports.Audit),exports.Configs=class extends P{},u([t.String(),g("design:type",t.String)],exports.Configs.prototype,"key",void 0),u([t.String(),g("design:type",t.String)],exports.Configs.prototype,"value",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Configs.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Configs.prototype,"updated_at",void 0),exports.Configs=u([t.Database(C),t.ModelName("configs"),t.Hooks(E),_("4.2.0")],exports.Configs),exports.Forgot=class extends P{},u([t.Id(),g("design:type",Number)],exports.Forgot.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Forgot.prototype,"token",void 0),u([t.BigInt(),g("design:type",Number)],exports.Forgot.prototype,"timestamp",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Forgot.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Forgot.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Forgot.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Forgot.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Forgot.prototype,"user_id",void 0),exports.Forgot=u([t.Database(C),t.ModelName("forgot"),_("4.2.0")],exports.Forgot),exports.Permission=class extends P{},u([t.Id(),g("design:type",Number)],exports.Permission.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Permission.prototype,"name",void 0),u([t.String(),t.Unique(!0),g("design:type",t.String)],exports.Permission.prototype,"route",void 0),u([t.String(),g("design:type",t.String)],exports.Permission.prototype,"tag",void 0),u([t.Text(),g("design:type",t.String)],exports.Permission.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Permission.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Permission.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Permission.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Permission.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.GroupPermission,"permission_id"),g("design:type",Array)],exports.Permission.prototype,"groups_permissions",void 0),exports.Permission=u([t.Database(C),t.ModelName("permission"),t.Hooks(E),_("4.3.1")],exports.Permission),exports.GroupPermission=class extends P{},u([t.CreatedAt,g("design:type",Date)],exports.GroupPermission.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.Group),g("design:type",Number)],exports.GroupPermission.prototype,"group_id",void 0),u([t.BelongsTo(()=>exports.Permission),g("design:type",Number)],exports.GroupPermission.prototype,"permission_id",void 0),exports.GroupPermission=u([t.Database(C),t.ModelName("groups_permissions"),t.Hooks(E),_("4.2.0")],exports.GroupPermission),exports.Log=class extends P{},u([t.Id(),g("design:type",Number)],exports.Log.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Log.prototype,"type",void 0),u([t.String(),g("design:type",t.String)],exports.Log.prototype,"source",void 0),u([t.Text(),g("design:type",t.String)],exports.Log.prototype,"message",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Log.prototype,"created_at",void 0),exports.Log=u([t.Database(C),t.ModelName("log"),_("4.2.0")],exports.Log),exports.Migration=class extends P{},u([t.String(),g("design:type",t.String)],exports.Migration.prototype,"model",void 0),u([t.String(),g("design:type",t.String)],exports.Migration.prototype,"version",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Migration.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Migration.prototype,"updated_at",void 0),exports.Migration=u([t.Database(C),t.ModelName("migration"),_("4.2.0")],exports.Migration),exports.Session=class extends P{},u([t.String(),g("design:type",t.String)],exports.Session.prototype,"session",void 0),u([t.Text(),g("design:type",t.String)],exports.Session.prototype,"json",void 0),u([t.BigInt(),g("design:type",Number)],exports.Session.prototype,"expired",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Session.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Session.prototype,"updated_at",void 0),exports.Session=u([t.Database(C),t.ModelName("session"),_("4.2.0")],exports.Session);class f{static write(e,t,o){return y(this,void 0,void 0,function*(){yield f.writeRaw(r.LogColor.White,"",e,t,o)})}static error(e,t,o){return y(this,void 0,void 0,function*(){yield f.writeRaw(r.LogColor.Red,"error",e,t,o)})}static info(e,t,o){return y(this,void 0,void 0,function*(){yield f.writeRaw(r.LogColor.Cyan,"info",e,t,o)})}static success(e,t,o){return y(this,void 0,void 0,function*(){yield f.writeRaw(r.LogColor.Green,"success",e,t,o)})}static warning(e,t,o){return y(this,void 0,void 0,function*(){yield f.writeRaw(r.LogColor.Yellow,"warning",e,t,o)})}static writeRaw(e,t,o,i,s){return y(this,void 0,void 0,function*(){s&&r.Log.console(e,t,o),C&&(yield exports.Log.create({type:t,source:i,message:o}).catch(()=>null))})}}const I=e=>d.existsSync(e)?d.readFileSync(e):void 0,R={http:I(S.API_HTTP_CRT),token:I(S.API_TOKEN_CRT)},T={http:I(S.API_HTTP_KEY),token:I(S.API_TOKEN_KEY)};class D extends a.Store{constructor(){super(),this.all=e=>y(this,void 0,void 0,function*(){e=e||i.noop;const t=yield exports.Session.findAll({attributes:["session"],where:{expired:{[s.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(i.noop),e&&e()}),this.destroy=(e,t)=>y(this,void 0,void 0,function*(){yield exports.Session.destroy({where:{session:e}}).catch(i.noop),t&&t()}),this.expired=()=>y(this,void 0,void 0,function*(){yield exports.Session.destroy({where:{expired:{[s.Op.lt]:Date.now()}}}).catch(i.noop)}),this.get=(e,t)=>y(this,void 0,void 0,function*(){t=t||i.noop;const r=yield exports.Session.findOne({where:{session:e,expired:{[s.Op.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(i.noop),void t(null)}return void t(null,e)}t(null)}),this.length=e=>y(this,void 0,void 0,function*(){e&&e(null,(yield exports.Session.count().catch(i.noop))||0)}),this.set=(e,t,r)=>y(this,void 0,void 0,function*(){r=r||i.noop;const o=Date.now()+S.API_SESSION_LIFETIME,s=JSON.stringify(t),[n,d]=(yield exports.Session.findOrCreate({where:{session:e},defaults:{session:e,json:s,expired:o}}).catch(i.noop))||[];n&&(d||(n.json=s,n.expired=o,yield n.save().catch(i.noop))),r()}),this.loop=i.loop(this.expired,3e4),this.loop.start()}}class w{static create(e){return y(this,void 0,void 0,function*(){if(!T.token)return{error:"KEY NOT FOUND"};const{id:t}=e,r=i.uuidv4(),o=yield exports.Auth.create({secret:r,user_id:t}).catch(w.error);if(!o)return{error:"INTERNAL SERVER ERROR"};return{auth:o,token:p.sign({id:t,secret:r},T.token,w.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){f.error(e.message,"api.token",S.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:`${S.API_TOKEN_LIFETIME}ms`}}static renew(e){return y(this,void 0,void 0,function*(){if(!T.token)return{error:"KEY NOT FOUND"};const{error:t,decode:r}=w.verify(e,S.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(r){const{id:e,secret:t}=r;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(w.error);if(r){const o=yield exports.Auth.findOne({where:{secret:t,user_id:r.id}}).catch(w.error);if(o&&!o.logout){o.secret=i.uuidv4(),yield o.save().catch(w.error);return{auth:o,token:p.sign({id:e,secret:o.secret},T.token,w.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(w.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(w.error))||[];if(r)return{auth:r,user:o}}return{error:"ACCESS DENIED"}}const{error:o,decode:i}=w.verify(t);if(o)return{error:o};if(i){const{id:e,secret:t}=i;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(w.error);if(r){const e=yield exports.Auth.findOne({where:{secret:t,user_id:r.id}}).catch(w.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static verify(e,t){if(!R.token)return{error:"CERT NOT FOUND"};if(!e||e.split(".").length<3)return{error:"INVALID TOKEN"};try{return{decode:p.verify(e,R.token,{clockTolerance:t})}}catch(e){return{error:"INVALID TOKEN"}}}}class U extends e.Application{constructor(e){super(e,{cert:R.http,cross:S.API_HTTP_CROSS,hybrid:S.API_HTTP_HYBRID,json:{strict:S.API_BODYPARSER_STRICT,inflate:S.API_BODYPARSER_INFLATE,limit:S.API_BODYPARSER_LIMIT,type:S.API_BODYPARSER_TYPE},key:T.http,notfound:S.API_HTTP_NOTFOUND,path:S.API_HTTP_PATH,port:S.API_HTTP_PORT,public:S.API_HTTP_PUBLIC,redirect:S.API_HTTP_REDIRECT,session:{store:new D,name:S.API_SESSION_NAME,secret:S.API_SESSION_SECRET,cookie:{maxAge:S.API_SESSION_LIFETIME},genid:i.uuidv4}}),this.hash=new r.Hash(S.API_KEY_HASH)}error(e,t){f.error(e.message,t,S.API_CONSOLE_ERROR)}log(e,t){f.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return y(this,void 0,void 0,function*(){yield C.sync(),yield this.migrations(C),yield i.forEachSeries(this.controllers,e=>y(this,void 0,void 0,function*(){i.isFunction(e.sync)&&(yield e.sync(this))})),yield e.listen.call(this),S.API_WEBSOCKET_START&&this.server&&(this._webSocket=new n.WebSocketServer({server:this.server,verifyClient:(e,t)=>t(S.API_WEBSOCKET_START)}),this._webSocket.on("connection",(e,t)=>y(this,void 0,void 0,function*(){t.url||(t.url="");const r=t.url.length<=1?"":t.url.replace(/\//g,".");let o;e.on("message",i=>y(this,void 0,void 0,function*(){if(o)try{const s=JSON.parse(i);this.emit("ws.message"+r,{data:s,message:i,req:t,user:o,ws:e})}catch(s){this.emit("ws.message"+r,{erro:s,message:i,req:t,user:o,ws:e})}else{const{user:s}=yield w.user("",i.toString(),this);s&&(o=s,this.emit("ws.connection"+r,{req:t,user:o,ws:e}))}o||e.close()})),e.on("close",()=>{o&&this.emit("ws.close"+r,{user:o,ws:e})}),yield i.sleep(2e3),o||e.close()})))})}migrations(e){return y(this,void 0,void 0,function*(){const r=[];yield i.forEachSeries(Object.keys(e.models),t=>y(this,void 0,void 0,function*(){var o;const i=e.models[t],{version:s}=A.migrations(i);if(!s)return;const[n,d]=null!==(o=yield exports.Migration.findOrCreate({where:{model:i.tableName},defaults:{model:i.tableName,version:""}}).catch(this.error))&&void 0!==o?o:[];n&&(d||n.version!=s)&&(n.version=s,yield n.save().catch(this.error),r.push(i))})),r.length&&(yield t.migrate(e,r))})}websocket(){return this._webSocket}}class N extends i.EventEmitter{auth(e,t,r,o,i){return y(this,void 0,void 0,function*(){var s;const[n,d]=null!==(s=null==r?void 0:r.split(" "))&&void 0!==s?s:["",""];if(!d||n.toLowerCase()!=S.API_TOKEN_HEADER_KEY)return e.error("INVALID TOKEN");const{auth:a,error:p,user:l}=yield w.user(t,d,i);return p?e.error(p):a&&l?a.user_agent&&a.user_agent!=o?e.error("INVALID TOKEN"):(e.req.auth=a,e.req.user=l,void e.next()):e.error("INTERNAL SERVER ERROR")})}canCreate(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".create",r)})}canDelete(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".delete",r)})}canRead(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".read",r)})}canUpdate(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".update",r)})}error(e){f.error(e.message,"api.controller",S.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return y(this,void 0,void 0,function*(){if(r){if((yield this.permissions(r,{route:t})).length>0)return e.next()}e.unauthorized("ACCESS DENIED")})}permissions(e,t){return y(this,void 0,void 0,function*(){var r;return null!==(r=yield exports.Permission.findAll({where:Object.assign(Object.assign({},null!=t?t:{}),{state:!0}),include:[{model:exports.GroupPermission,required:!0,include:[{model:exports.Group,required:!0,where:{state:!0},include:[{model:exports.UserGroup,required:!0,where:{user_id:e.id}}]}]}]}).catch(this.error))&&void 0!==r?r:[]})}session(e,t,r){return y(this,void 0,void 0,function*(){r.auth&&r.user&&(r.user_agent?r.user_agent!=t&&r.regenerate(i.noop):(r.user_agent=t,r.save(i.noop))),e.next()})}sync(){return y(this,void 0,void 0,function*(){})}upload(t,r){r.path||(r.path=S.API_UPLOAD_TEMP),r.size||(r.size=S.API_UPLOAD_SIZE),r.field||(r.field=S.API_UPLOAD_FIELD),e.Upload.middleware(t,r)}validation(e,t){return y(this,void 0,void 0,function*(){const{error:r,value:o}=yield i.Validation.object(t).parse().validateAsync(e.req.body);if(r)return e.validation(r);e.req.body=o,e.next()})}}u([c(0,e.Ctx()),c(1,e.Headers(S.API_KEY_HEADER)),c(2,e.Headers(S.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,U]),g("design:returntype",Promise)],N.prototype,"auth",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],N.prototype,"canCreate",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],N.prototype,"canDelete",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],N.prototype,"canRead",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],N.prototype,"canUpdate",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],N.prototype,"permission",null),u([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)],N.prototype,"session",null),u([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",void 0)],N.prototype,"upload",null),u([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],N.prototype,"validation",null);class b{}var M,F,B,L;b.ATTRIBUTES=Symbol("ATTRIBUTES"),b.PERMISSIONS=Symbol("PERMISSIONS"),exports.ModelController=class extends N{constructor(){super(...arguments),this[M]=[],this[F]=["create","read","update","delete"]}attributes(e){if(0==this[b.ATTRIBUTES].length&&(this[b.ATTRIBUTES]=Object.keys(this.model().getAttributes())),i.isArray(e))return e.length?e.map(e=>i.isString(e)&&-1!=this[b.ATTRIBUTES].indexOf(e)?e:void 0).filter(i.isString):this[b.ATTRIBUTES];const{exclude:t,include:r}=e,o=i.isUndefined(r)?this[b.ATTRIBUTES]:r.map(e=>i.isString(e)&&-1!=this[b.ATTRIBUTES].indexOf(e)?e:void 0).filter(i.isString),s=null!=t?t:[];return s.length?o.filter(e=>-1==s.indexOf(e)?e:void 0).filter(i.isString):o}create(t){return y(this,arguments,void 0,function*({ctx:t,options:r,body:o}){const i=yield this.model().create(Object.assign(Object.assign({},t.req.body),o||{}),Object.assign(Object.assign({},r||{}),h(t))).catch(this.error);if(i){const r=this.key();return t.prepare(e.Status.OK,{[r]:i.getDataValue(r)}),i}t.error("INTERNAL SERVER ERROR")})}delete(e){return y(this,arguments,void 0,function*({ctx:e,options:t}){const r=this.key(),{[r]:o}=e.req.params;if(!o)return e.error("INTERNAL SERVER ERROR"),0;const i=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[r]:o}),individualHooks:!0}),h(e))).catch(this.error);return i?(e.success("OK"),i):(e.notFound("RECORD NOT FOUND"),0)})}error(e){(null==e?void 0:e.sql)?f.error((null==e?void 0:e.message)+"\n"+(null==e?void 0:e.sql),"api.controller.sql",S.API_CONSOLE_ERROR):super.error(e)}findAll(r){return y(this,arguments,void 0,function*({ctx:r,options:o,callback:n,scope:d,advanced:a,attributes:p,unlimited:l}){var u,c,g;const y=this.scope(d),h=Object.assign({},o||{}),{limit:x,offset:m,asc:v,desc:A,search:_,where:C}=r.req.query;if(i.isUndefined(h.limit)){const e=i.clamp(i.isString(x)?parseInt(x)||0:S.API_MODEL_LIMIT,-1,S.API_MODEL_LIMIT_MAX);h.limit=e>0?e:l?void 0:S.API_MODEL_LIMIT}if(i.isNumber(h.limit)&&(h.limit=h.limit>0?h.limit:void 0),i.isString(m)){const e=m&&parseInt(m)||0;h.offset=e>0?e:void 0}p=null!=p?p:this.attributes(null!==(u=null==h?void 0:h.attributes)&&void 0!==u?u:[]);const P=[],O=e=>p.indexOf(e)>=0;if(i.isString(v)&&v.length&&P.push(...v.split(";").filter(O).map(e=>[e,"ASC"])),i.isString(A)&&A.length&&P.push(...A.split(";").filter(O).map(e=>[e,"DESC"])),P.length&&(h.order=P),h.where=Object.assign({},h.where||{}),i.isString(C)&&(null==a||a)){const e=t.Where.parse(p,C);if(!i.isUndefined(e.error))return r.validation(e.error.join(", ")),{count:0,records:[]};h.where=Object.assign(Object.assign({},h.where),null!==(c=e.value)&&void 0!==c?c:{})}else{const e=[];p.forEach(t=>{i.isString(_)&&_.length&&e.push({[t]:{[s.Op.like]:`%${_}%`}})}),e.length&&(h.where=Object.assign(Object.assign({},h.where),{[s.Op.or]:[...e]}))}const E=y.count(Object.assign(Object.assign({},h),{distinct:!!h.include,col:this[b.ATTRIBUTES].length?this[b.ATTRIBUTES][0]:void 0})).catch(this.error),f=y.findAll(h).catch(this.error);yield Promise.allSettled([E,f]);const I=null!==(g=yield E)&&void 0!==g?g:0;let R=yield f;const T={count:I};return R?(R=n?yield n(R):R,(i.isNumber(null==o?void 0:o.limit)||0==I)&&(T.count=R.length),r.prepare(e.Status.OK,Object.assign(Object.assign({},T),{records:R})),Object.assign(Object.assign({},T),{records:R})):(r.error("INTERNAL SERVER ERROR"),Object.assign(Object.assign({},T),{records:[]}))})}findOne(t){return y(this,arguments,void 0,function*({ctx:t,options:r,callback:o,scope:i}){const s=this.key(),{[s]:n}=t.req.params,d=yield this.scope(i).findOne(Object.assign(Object.assign({},r||{}),{where:Object.assign(Object.assign({},(r||{}).where),{[s]: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")})}sync(){return y(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t={description:"",state:!0};yield i.forEachSeries(this[b.PERMISSIONS],r=>y(this,void 0,void 0,function*(){const o=`${e}.${r}`,s=i.upperCamelCase(e.replace(/_/g," ")," ");yield exports.Permission.findOrCreate({where:{route:o},defaults:Object.assign({name:`${s} ${i.upperCamelCase(r," ")}`,route:o,tag:s},t)})}))})}update(e){return y(this,arguments,void 0,function*({ctx:e,options:t,body:r}){var o;const i=this.key(),{[i]:s}=e.req.params,[n]=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),{[i]:s}),individualHooks:!0}),h(e))).catch(this.error))&&void 0!==o?o:[];return n?(e.success("OK"),!0):(e.success("RECORD NOT CHANGED"),!1)})}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}},M=b.ATTRIBUTES,F=b.PERMISSIONS,exports.ModelController=u([e.Extends(N)],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.findAll({ctx:e,options:{attributes:{exclude:["data","previously"]},where:o,order:[["created_at","DESC"]]},unlimited:!0})})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}},u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),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),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.AuditsController.prototype,"get",null),exports.AuditsController=u([e.Controller("/audits"),e.Extends(exports.ModelController)],exports.AuditsController),exports.AuthController=class extends N{login(e,t,o,n,d){return y(this,void 0,void 0,function*(){var a;yield i.sleep(S.API_SLEEP_AUTH);const p=yield exports.User.scope("password").findOne({where:{[s.Op.or]:[{email:o},{username:o}]}}).catch(this.error);if(n+=null!==(a=null==p?void 0:p.salt)&&void 0!==a?a:"",!p||p.password!=r.sha256(n))return e.notFound("INVALID USERNAME OR PASSWORD"),d.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const l=yield exports.Register.findOne({where:{state:!0,user_id:p.id}}).catch(this.error);if(l)return e.error("ACTIVATION REQUIRED"),d.emit("auth.activation",{ctx:e,register:l,user:p}),void this.emit("auth.activation",{ctx:e,register:l,user:p});if(!p.state)return e.notFound("INVALID USERNAME OR PASSWORD"),d.emit("auth.failure",{ctx:e,user:p}),void this.emit("auth.failure",{ctx:e,user:p});const{auth:u,error:c,token:g}=yield w.create(p);return c?(e.error(c),d.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):u&&g?(u.user_agent=t,yield u.save().catch(this.error),e.json({token:g}),d.emit("auth.login",{auth:u,ctx:e,user:p}),void this.emit("auth.login",{auth:u,ctx:e,user:p})):(e.error("INTERNAL SERVER ERROR"),d.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 w.destroy(t))return e.success("OK"),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:i,error:s,token:n}=yield w.renew(r);return s?e.error(s):i?(i.user_agent=t,yield i.save().catch(this.error),e.json({token:n}),o.emit("auth.renew",{auth:i,ctx:e}),void this.emit("auth.renew",{auth:i,ctx:e})):e.error("INTERNAL SERVER ERROR")})}user(e,t){return y(this,void 0,void 0,function*(){const r=yield this.permissions(t);if(!r)return e.error("INTERNAL SERVER ERROR");e.json(Object.assign(Object.assign({},i.denied(["username","date","description","state","created_at","updated_at","deleted_at"],t.toJSON())),{permissions:r.map(e=>e.route)}))})}},u([e.Post("/login"),e.Middleware("validation",{username:i.Validation.string().min(3).required(),password:i.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,U]),g("design:returntype",Promise)],exports.AuthController.prototype,"login",null),u([e.Get("/logout"),e.Middleware("auth"),c(0,e.Ctx()),c(1,m()),c(2,v()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.Auth,exports.User,U]),g("design:returntype",Promise)],exports.AuthController.prototype,"logout",null),u([e.Post("/renew"),e.Middleware("validation",{token:i.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,U]),g("design:returntype",Promise)],exports.AuthController.prototype,"renew",null),u([e.Get(),e.Middleware("auth"),c(0,e.Ctx()),c(1,v()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.AuthController.prototype,"user",null),exports.AuthController=u([e.Controller("/auth"),e.Extends(N)],exports.AuthController),exports.FilesController=class extends N{constructor(){super(...arguments),this[B]=["delete","download","edit","list","read","rename","upload","write"]}directory(){return S.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 r=l.join(this.directory(),t);if(!d.existsSync(r)||!d.statSync(r).isDirectory())return e.notFound("RECORD NOT FOUND");let o=[];return o=d.readdirSync(r),o=o.map(e=>this.info(l.join(r,e))),o=o.filter(i.isDef),Object.assign(Object.assign({},this.info(r)),{files:o})})}access(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,this.name()+"."+t,r)})}info(e){if(!d.existsSync(e))return null;const t=d.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"}sync(){return y(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t=i.upperCamelCase(e.replace(/_/g," ")," "),r={description:"",state:!0};yield i.forEachSeries(this[b.PERMISSIONS],o=>y(this,void 0,void 0,function*(){const s=`${e}.${o}`;yield exports.Permission.findOrCreate({where:{route:s},defaults:Object.assign({name:`${t} ${i.upperCamelCase(o," ")}`,route:s,tag:t},r)})}))})}},B=b.PERMISSIONS,u([e.Get("/path"),e.Get("/path/*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),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.FilesController.prototype,"access",null),exports.FilesController=u([e.Controller("/files"),e.Extends(N)],exports.FilesController),exports.ForgotController=class extends N{check(e,t){return y(this,void 0,void 0,function*(){const r=yield this.find(t);if(!r||!r.user)return e.notFound("RECORD NOT FOUND");r.token=i.uniqueID(),yield r.save(),e.json({token:r.token})})}forgot(e,t,r){return y(this,void 0,void 0,function*(){yield i.sleep(S.API_SLEEP_FORGOT);const o=t,n=yield exports.User.findOne({where:{[s.Op.or]:[{email:o},{username:t}]}}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const d=i.uniqueID(),a=Date.now()+6e4*S.API_TOKEN_FORGOT,p=yield exports.Forgot.create({token:d,timestamp:a,state:!0,user_id:n.id});e.success("OK"),r.emit("forgot.send",{ctx:e,forgot:p,user:n}),this.emit("forgot.send",{ctx:e,forgot:p,user:n})})}reset(e,t,o,i){return y(this,void 0,void 0,function*(){const s=yield this.find(t);if(!s)return e.notFound("RECORD NOT FOUND");s.state=!1,yield s.save().catch(this.error),s.user.password=r.sha256(o),yield s.user.save().catch(this.error),e.success("OK"),i.emit("forgot.reset",{ctx:e,user:s.user}),this.emit("forgot.reset",{ctx:e,user:s.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)})}},u([e.Get("/check"),e.Middleware("validation",{token:i.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),u([e.Post(),e.Middleware("validation",{username:i.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,U]),g("design:returntype",Promise)],exports.ForgotController.prototype,"forgot",null),u([e.Post("/reset"),e.Middleware("validation",{token:i.Validation.string().required(),password:i.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,U]),g("design:returntype",Promise)],exports.ForgotController.prototype,"reset",null),exports.ForgotController=u([e.Controller("/forgot"),e.Extends(N)],exports.ForgotController),exports.CrudController=class extends exports.ModelController{constructor(){super(...arguments),this._crud={}}CrudArgumentsCreate(e){return{ctx:e}}CrudArgumentsFindAll(e){return{ctx:e}}CrudArgumentsFindOne(e){return{ctx:e}}CrudArgumentsDelete(e){return{ctx:e}}CrudArgumentsUpdate(e){return{ctx:e}}CrudValidationCreate(){return this._crud}CrudValidationUpdate(){return this._crud}add(e){return y(this,void 0,void 0,function*(){yield this.create(this.CrudArgumentsCreate(e))})}all(e){return y(this,void 0,void 0,function*(){yield this.findAll(this.CrudArgumentsFindAll(e))})}del(e){return y(this,void 0,void 0,function*(){yield this.delete(this.CrudArgumentsDelete(e))})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne(this.CrudArgumentsFindOne(e))})}set(e){return y(this,void 0,void 0,function*(){yield this.update(this.CrudArgumentsUpdate(e))})}validationCreate(e){return y(this,void 0,void 0,function*(){const t=this.CrudValidationCreate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}validationUpdate(e){return y(this,void 0,void 0,function*(){const t=this.CrudValidationUpdate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}},u([e.Post(),e.Middleware("auth"),e.Middleware("canCreate"),e.Middleware("validationCreate"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"add",null),u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"all",null),u([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"del",null),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"get",null),u([e.Put("/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),e.Middleware("validationUpdate"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"set",null),u([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationCreate",null),u([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationUpdate",null),exports.CrudController=u([e.Extends(exports.ModelController)],exports.CrudController),exports.GroupsController=class extends exports.CrudController{constructor(){super(...arguments),this.schemaCreate={name:i.Validation.string().required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()},this.schemaUpdate={name:i.Validation.string().empty(),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}}model(){return exports.Group}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}},exports.GroupsController=u([e.Controller("/groups"),e.Extends(exports.CrudController)],exports.GroupsController),exports.GroupsPermissionsController=class extends exports.ModelController{model(){return exports.GroupPermission}all(e,t){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{group_id:t},include:[{model:exports.Permission,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.permission)})})}me(e,t){return y(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,r,o){return y(this,void 0,void 0,function*(){const s=yield exports.Group.findByPk(t,{attributes:["id"]}).catch(this.error);if(!s)return e.notFound("RECORD NOT FOUND");const n=s.id;if(yield exports.GroupPermission.destroy(Object.assign({where:{group_id:n},individualHooks:!0},o)),r){let e=0;yield i.sleep(1e3);for(let t=0;t<r.length;t++)e=yield exports.Permission.count({where:{id:r[t]}}),e&&(yield exports.GroupPermission.create({group_id:n,permission_id:r[t]},Object.assign({},o)))}e.success("OK")})}},u([e.Get("/:id/permissions"),e.Middleware("auth"),e.Middleware("canRead","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.GroupsPermissionsController.prototype,"all",null),u([e.Get("/permissions"),e.Middleware("auth"),e.Middleware("canRead","users"),c(0,e.Ctx()),c(1,v()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.GroupsPermissionsController.prototype,"me",null),u([e.Put("/:id/permissions"),e.Middleware("auth"),e.Middleware("canUpdate","groups"),e.Middleware("validation",{permissions:i.Validation.array(i.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("permissions")),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.GroupsPermissionsController.prototype,"set",null),exports.GroupsPermissionsController=u([e.Controller("/groups"),e.Extends(exports.ModelController)],exports.GroupsPermissionsController),exports.LogsController=class extends exports.ModelController{constructor(){super(...arguments),this[L]=["read"]}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.findAll({ctx:e,options:{where:o,order:[["created_at","DESC"]]},unlimited:!0})})}},L=b.PERMISSIONS,u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),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=u([e.Controller("/logs"),e.Extends(exports.ModelController)],exports.LogsController),exports.PermissionsController=class extends exports.CrudController{constructor(){super(...arguments),this.schemaCreate={name:i.Validation.string().required(),route:i.Validation.string().required(),tag:i.Validation.string().required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()},this.schemaUpdate={name:i.Validation.string().empty(),route:i.Validation.string().empty(),tag:i.Validation.string().empty(),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}}model(){return exports.Permission}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}},exports.PermissionsController=u([e.Controller("/permissions"),e.Extends(exports.CrudController)],exports.PermissionsController),exports.RegisterController=class extends N{register(e,t,o){return y(this,void 0,void 0,function*(){yield i.sleep(S.API_SLEEP_REGISTRY);const{name:n,date:d,email:a,username:p,password:l,confirm:u}=t,c=p||a,g=r.sha256(l);if(yield exports.User.count({where:{[s.Op.or]:[{email:a},{username:c}]}}).catch(this.error))return e.validation("INVALID EMAIL OR USERNAME");if(g!=r.sha256(u))return e.error("INVALID PASSWORD");const y=yield exports.User.create({name:n,email:a,username:c,password:g,avatar:"",date:d,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"),o.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("RECORD 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,i=yield exports.Register.findOne({where:{state:!0},include:[{model:exports.User,required:!0,where:{[s.Op.or]:[{email:o},{username:t}]}}]}).catch(this.error);if(!i)return e.notFound("RECORD NOT FOUND");e.success("OK"),r.emit("register.send",{ctx:e,register:i,user:i.user}),this.emit("register.send",{ctx:e,register:i,user:i.user})})}getId(){return y(this,void 0,void 0,function*(){const e=i.uuidv4();return(yield exports.Register.count({where:{token:e}}))?this.getId():e})}},u([e.Post(),e.Middleware("validation",{name:i.Validation.string().required(),date:i.Validation.date().required(),email:i.Validation.string().email().required(),username:i.Validation.string().min(4).empty(),password:i.Validation.string().min(5).required(),confirm:i.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,U]),g("design:returntype",Promise)],exports.RegisterController.prototype,"register",null),u([e.Post("/confirm"),e.Middleware("validation",{token:i.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,U]),g("design:returntype",Promise)],exports.RegisterController.prototype,"confirm",null),u([e.Post("/send"),e.Middleware("validation",{username:i.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,U]),g("design:returntype",Promise)],exports.RegisterController.prototype,"send",null),exports.RegisterController=u([e.Controller("/register"),e.Extends(N)],exports.RegisterController),exports.SetupController=class extends N{setup(e,t){return y(this,void 0,void 0,function*(){var o;if(yield exports.User.count())return e.success("OK");const s=i.uniqueID(),n=yield exports.User.create({name:"Admin",email:"admin@localhost",username:"admin",password:r.sha256("admin"+s),salt:s,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0},Object.assign({},t)),d=yield exports.Group.create(Object.assign({name:"Admin"},{description:"API CORE",state:!0}),Object.assign({},t));yield exports.UserGroup.create({user_id:n.id,group_id:d.id},Object.assign({},t));const a=null!==(o=yield exports.Permission.findAll({where:{state:!0}}).catch(this.error))&&void 0!==o?o:[];yield i.forEachSeries(a,e=>y(this,void 0,void 0,function*(){yield exports.GroupPermission.create({group_id:d.id,permission_id:e.id},Object.assign({},t))})),e.success("OK")})}},u([e.Get(),c(0,e.Ctx()),c(1,x()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],exports.SetupController.prototype,"setup",null),exports.SetupController=u([e.Controller("/setup"),e.Extends(N)],exports.SetupController),exports.UsersController=class extends exports.ModelController{model(){return exports.User}constructor(){super(),this.path=S.API_HTTP_PUBLIC+"/avatar",S.API_HTTP_PUBLIC&&d.existsSync(S.API_HTTP_PUBLIC)&&!d.existsSync(this.path)&&d.mkdirSync(this.path)}avatar(e,t,r,o){return y(this,void 0,void 0,function*(){if(t.length){const i=t[0].filename||"";if(i){const t=this.path+"/"+r.avatar;if(d.existsSync(t)&&d.lstatSync(t).isFile()&&d.rmSync(t),r.avatar=i,yield r.save(Object.assign({},o)).catch(this.error))return e.success("OK")}}e.success("RECORD NOT CHANGED")})}avatar_del(e,t,r){return y(this,void 0,void 0,function*(){const o=this.path+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&d.existsSync(o)&&d.rmSync(o),e.success("OK")})}password(e,t,o,s,n){return y(this,void 0,void 0,function*(){var d;if(S.API_USER_HISTORY){if(yield exports.UserHistory.count({where:{password:r.sha256(o+s.id)}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED")}const a=yield this.scope("password").findOne({where:{id:s.id,state:!0}}).catch(this.error);return t+=null!==(d=null==a?void 0:a.salt)&&void 0!==d?d:"",a&&a.password==r.sha256(t)?(a.salt=i.uniqueID(),a.password=r.sha256(o+a.salt),(yield a.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("RECORD NOT CHANGED")):e.error("INVALID PASSWORD")})}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_del(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_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_renew(e,t,r,o){return y(this,void 0,void 0,function*(){const i=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(i){const t=yield this.token_new();return i.token=o.hash.encrypt(t),yield i.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=i.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,t){return y(this,void 0,void 0,function*(){const o=i.uniqueID(),s=yield this.create({ctx:e,body:{password:r.sha256(t+o),salt:o}});S.API_USER_HISTORY&&s&&(yield exports.UserHistory.create({password:r.sha256(t+s.id),user_id:s.id}))})}all(e){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{attributes:{exclude:["password","salt","token"]}},unlimited:!0})})}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.delete({ctx:e})})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}set(e,t,o){return y(this,void 0,void 0,function*(){if(S.API_USER_HISTORY&&o){const i=r.sha256(o+t);if(yield exports.UserHistory.count({where:{password:i}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED");yield exports.UserHistory.create({password:i,user_id:t}).catch(this.error)}const s=o?i.uniqueID():"";yield this.update({ctx:e,body:o?{password:r.sha256(o+s),salt:s}:{}})})}},u([e.Post("/avatar"),e.Middleware("auth"),e.Middleware("upload",e=>({count:1,field:"file",path:e.controller.path,types:["image/bmp","image/jpeg","image/png"],size:32})),c(0,e.Ctx()),c(1,e.Files()),c(2,v()),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,Array,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar",null),u([e.Delete("/avatar"),e.Middleware("auth"),c(0,e.Ctx()),c(1,v()),c(2,x()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar_del",null),u([e.Post("/password"),e.Middleware("auth"),e.Middleware("validation",{oldPassword:i.Validation.string().min(5).required(),newPassword:i.Validation.string().min(5).required(),confirmPassword:i.Validation.string().equal(i.Validation.ref("newPassword"))}),c(0,e.Ctx()),c(1,e.Body("oldPassword")),c(2,e.Body("newPassword")),c(3,v()),c(4,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"password",null),u([e.Get("/token"),e.Middleware("auth"),c(0,e.Ctx()),c(1,v()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,U]),g("design:returntype",Promise)],exports.UsersController.prototype,"token",null),u([e.Delete("/token/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_del",null),u([e.Get("/token/:id"),e.Middleware("auth"),e.Middleware("canCreate"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,U]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_get",null),u([e.Get("/token/renew/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,x()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object,U]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_renew",null),u([e.Post(),e.Middleware("auth"),e.Middleware("canCreate"),e.Middleware("validation",{name:i.Validation.string().required(),email:i.Validation.string().email().required(),username:i.Validation.string().min(4).required(),password:i.Validation.string().min(5).required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()}),c(0,e.Ctx()),c(1,e.Body("password")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.UsersController.prototype,"add",null),u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"all",null),u([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,v()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"del",null),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"get",null),u([e.Put("/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),e.Middleware("validation",{name:i.Validation.string().empty(),email:i.Validation.string().email().empty(),username:i.Validation.string().min(4).empty(),password:i.Validation.string().min(5).empty().filter(""),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("password")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.UsersController.prototype,"set",null),exports.UsersController=u([e.Controller("/users"),e.Extends(exports.ModelController),g("design:paramtypes",[])],exports.UsersController),exports.UsersGroupsController=class extends exports.ModelController{model(){return exports.UserGroup}all(e,t){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{user_id:t},include:[{model:exports.Group,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.group)})})}me(e,t){return y(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,r,o){return y(this,void 0,void 0,function*(){const s=yield exports.User.findByPk(t,{attributes:["id"]}).catch(this.error);if(!s)return e.notFound("RECORD NOT FOUND");if(yield exports.UserGroup.destroy(Object.assign({where:{user_id:s.id},individualHooks:!0},o)),r){let e=0;yield i.sleep(1e3);for(let t=0;t<r.length;t++)e=yield exports.Group.count({where:{id:r[t]}}),e&&(yield exports.UserGroup.create({user_id:s.id,group_id:r[t]},Object.assign({},o)))}e.success("OK")})}},u([e.Get("/:id/groups"),e.Middleware("auth"),e.Middleware("canRead","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),u([e.Get("/groups"),e.Middleware("auth"),e.Middleware("canRead","users"),c(0,e.Ctx()),c(1,v()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"me",null),u([e.Put("/:id/groups"),e.Middleware("auth"),e.Middleware("canUpdate","users"),e.Middleware("validation",{groups:i.Validation.array(i.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("groups")),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"set",null),exports.UsersGroupsController=u([e.Controller("/users"),e.Extends(exports.ModelController)],exports.UsersGroupsController);class k{static all(){return y(this,void 0,void 0,function*(){const e=yield exports.Configs.findAll().catch(k.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(k.error))||0)>0})}static error(e){f.error(e.message,"api.config",S.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(k.error))||[];return r?r.value:t})}static set(e,t,r){return y(this,void 0,void 0,function*(){var o;const i=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,[s]=(yield exports.Configs.findOrCreate(Object.assign({where:{key:e}},{user_id:i})).catch(k.error))||[];s&&(s.value=t,yield s.save().catch(k.error))})}}exports.Application=U,exports.Config=k,exports.ControllerBase=N,exports.ControllerKeys=b,exports.Env=S,exports.Logs=f,exports.Metadata=A,exports.Migrate=_,exports.Model=P,exports.ReqAudit=x,exports.ReqAuth=m,exports.ReqUser=v,exports.Store=D,exports.Token=w,exports.audit=h,exports.crt=R,exports.database=C,exports.hooks=E,exports.key=T;
|
|
7
|
+
"use strict";var e=require("@andrewcaires/express"),t=require("@andrewcaires/sequelize"),r=require("@andrewcaires/node"),o=require("dotenv"),i=require("@andrewcaires/utils.js"),s=require("sequelize"),n=require("ws"),d=require("fs"),a=require("express-session"),p=require("jsonwebtoken"),l=require("path");function u(e,t,r,o){var i,s=arguments.length,n=s<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--)(i=e[d])&&(n=(s<3?i(n):s>3?i(t,r,n):i(t,r))||n);return s>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(i,s){function n(e){try{a(o.next(e))}catch(e){s(e)}}function d(e){try{a(o.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(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;const h=e=>{var t,r,o,i,s,n,d,a,p;return{audit_client:null!==(t=e.ip())&&void 0!==t?t:"0.0.0.0",audit_href:(null===(r=null==e?void 0:e.req)||void 0===r?void 0:r.protocol)+"://"+(null===(o=null==e?void 0:e.req)||void 0===o?void 0:o.get("host"))+(null===(i=null==e?void 0:e.req)||void 0===i?void 0:i.originalUrl),audit_user_agent:null!==(n=null===(s=e.req)||void 0===s?void 0:s.headers["user-agent"])&&void 0!==n?n:"",audit_user_id:null!==(p=null===(a=null===(d=null==e?void 0:e.req)||void 0===d?void 0:d.user)||void 0===a?void 0:a.id)&&void 0!==p?p:null}},x=e.parameterFactory(({ctx:e})=>h(e)),m=e.parameterFactory(({ctx:e})=>e.req.auth),A=e.parameterFactory(({ctx:e})=>e.req.user);class v{static migrations(e){return r.Metadata(v.MIGRATE,e,{version:""})}}v.MIGRATE=Symbol("MIGRATE");const _=e=>t=>{v.migrations(t).version=e};o.config({quiet:!0});class E extends r.Env{}E.API_BASE_NAME=E.getString("API_BASE_NAME",""),E.API_BODYPARSER_STRICT=E.getBool("API_BODYPARSER_STRICT",!0),E.API_BODYPARSER_INFLATE=E.getBool("API_BODYPARSER_INFLATE",!0),E.API_BODYPARSER_LIMIT=E.getString("API_BODYPARSER_LIMIT","10mb"),E.API_BODYPARSER_TYPE=E.getString("API_BODYPARSER_TYPE","json"),E.API_CONSOLE_ERROR=E.getBool("API_CONSOLE_ERROR",!1),E.API_DB_DATABASE=E.getString("API_DB_DATABASE",""),E.API_DB_HOST=E.getString("API_DB_HOST","127.0.0.1"),E.API_DB_PASSWORD=E.getString("API_DB_PASSWORD",""),E.API_DB_PORT=E.getInt("API_DB_PORT",3306),E.API_DB_TYPE=E.getString("API_DB_TYPE",""),E.API_DB_USERNAME=E.getString("API_DB_USERNAME","root"),E.API_DB_LOG=E.getBool("API_DB_LOG",!1),E.API_DB_AUDIT=E.getBool("API_DB_AUDIT",!0),E.API_DB_PREFIX=E.getString("API_DB_PREFIX",""),E.API_DB_TIMEZONE=E.getString("API_DB_TIMEZONE","+00:00"),E.API_HTTP_CRT=E.getString("API_HTTP_CRT",""),E.API_HTTP_KEY=E.getString("API_HTTP_KEY",""),E.API_HTTP_PORT=E.getInt("API_HTTP_PORT",3e3),E.API_HTTP_PUBLIC=E.getString("API_HTTP_PUBLIC",""),E.API_HTTP_CROSS=E.getBool("API_HTTP_CROSS",!1),E.API_HTTP_HYBRID=E.getBool("API_HTTP_HYBRID",!1),E.API_HTTP_NOTFOUND=E.getString("API_HTTP_NOTFOUND",""),E.API_HTTP_PATH=E.getString("API_HTTP_PATH","/api"),E.API_HTTP_REDIRECT=E.getString("API_HTTP_REDIRECT",""),E.API_KEY_HASH=E.getString("API_KEY_HASH",""),E.API_KEY_HEADER=E.getString("API_KEY_HEADER","x-api-key"),E.API_MODEL_LIMIT=E.getInt("API_MODEL_LIMIT",10),E.API_MODEL_LIMIT_MAX=E.getInt("API_MODEL_LIMIT_MAX",500),E.API_SLEEP_AUTH=E.getMs("API_SLEEP_AUTH","2s"),E.API_SLEEP_FORGOT=E.getMs("API_SLEEP_FORGOT","5s"),E.API_SLEEP_REGISTRY=E.getMs("API_SLEEP_REGISTRY","5s"),E.API_SESSION_NAME=E.getString("API_SESSION_NAME","session.id"),E.API_SESSION_LIFETIME=E.getMs("API_SESSION_LIFETIME","1d"),E.API_SESSION_SECRET=E.getString("API_SESSION_SECRET","yoursecret"),E.API_TOKEN_CRT=E.getString("API_TOKEN_CRT",""),E.API_TOKEN_KEY=E.getString("API_TOKEN_KEY",""),E.API_TOKEN_FORGOT=E.getMs("API_TOKEN_LIFETIME","1d"),E.API_TOKEN_HEADER=E.getString("API_TOKEN_HEADER","authorization"),E.API_TOKEN_HEADER_KEY=E.getString("API_TOKEN_HEADER","bearer"),E.API_TOKEN_LIFETIME=E.getMs("API_TOKEN_LIFETIME","1d"),E.API_TOKEN_RENEW=E.getMs("API_TOKEN_RENEW","1d"),E.API_UPLOAD_COUNT=E.getInt("API_UPLOAD_COUNT",1),E.API_UPLOAD_FIELD=E.getString("API_UPLOAD_FIELD","upload"),E.API_UPLOAD_SIZE=E.getInt("API_UPLOAD_SIZE",2),E.API_UPLOAD_TEMP=E.getString("API_UPLOAD_TEMP","./temp"),E.API_USER_HISTORY=E.getBool("API_USER_HISTORY",!0),E.API_WEBSOCKET_START=E.getBool("API_WEBSOCKET_START",!1);const S=new t.Connection({type:E.API_DB_TYPE,database:E.API_DB_DATABASE,username:E.API_DB_USERNAME,password:E.API_DB_PASSWORD,hostname:E.API_DB_HOST,hostport:E.API_DB_PORT,logging:E.API_DB_LOG,prefix:E.API_DB_PREFIX,timezone:E.API_DB_TIMEZONE});class P extends t.Model{constructor(){super(...arguments),this._version=""}}const C=(e,t,r)=>{var o,i,s,n,d;return{type:e,model:null!==(o=null==t?void 0:t.getTableName())&&void 0!==o?o:null,client:null!==(i=null==r?void 0:r.audit_client)&&void 0!==i?i:null,href:null!==(s=null==r?void 0:r.audit_href)&&void 0!==s?s:null,user_agent:null!==(n=null==r?void 0:r.audit_user_agent)&&void 0!==n?n:null,user_id:null!==(d=null==r?void 0:r.audit_user_id)&&void 0!==d?d:null,state:!0}},O={afterCreate:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!E.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield exports.Audit.create(Object.assign(Object.assign({},C("CREATE",o,t)),{record:s?e.getDataValue(s):null,data:e.toJSON()})).catch(i.noop)}),afterUpdate:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!E.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null,n={},d=e.changed();d&&d.forEach(t=>n[t]=e.getDataValue(t)),yield exports.Audit.create(Object.assign(Object.assign({},C("UPDATE",o,t)),{record:s?e.getDataValue(s):null,data:n,previously:e.previous()})).catch(i.noop)}),afterDestroy:(e,t)=>y(void 0,void 0,void 0,function*(){var r;if(!E.API_DB_AUDIT)return;const o=i.isObject(e)?e.constructor:null,s=null!==(r=null==o?void 0:o.primaryKeyAttribute)&&void 0!==r?r:null;yield exports.Audit.create(Object.assign(Object.assign({},C("DELETE",o,t)),{record:s?e.getDataValue(s):null,data:e.toJSON()})).catch(i.noop)})};exports.Auth=class extends P{},u([t.Id(),g("design:type",Number)],exports.Auth.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Auth.prototype,"secret",void 0),u([t.FullDate(),g("design:type",Date)],exports.Auth.prototype,"logout",void 0),u([t.String(),g("design:type",t.String)],exports.Auth.prototype,"user_agent",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Auth.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Auth.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Auth.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Auth.prototype,"user_id",void 0),exports.Auth=u([t.Database(S),t.ModelName("auth"),_("4.2.0")],exports.Auth),exports.Register=class extends P{},u([t.Id(),g("design:type",Number)],exports.Register.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Register.prototype,"token",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Register.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Register.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Register.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Register.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Register.prototype,"user_id",void 0),exports.Register=u([t.Database(S),t.ModelName("register"),_("4.2.0")],exports.Register),exports.Group=class extends P{},u([t.Id(),g("design:type",Number)],exports.Group.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Group.prototype,"name",void 0),u([t.Text(),g("design:type",t.String)],exports.Group.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Group.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Group.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Group.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Group.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.UserGroup,"group_id"),g("design:type",Array)],exports.Group.prototype,"groups_routes",void 0),u([t.HasMany(()=>exports.UserGroup,"group_id"),g("design:type",Array)],exports.Group.prototype,"users_groups",void 0),exports.Group=u([t.Database(S),t.ModelName("group"),t.Hooks(O),_("4.2.0")],exports.Group),exports.UserGroup=class extends P{},u([t.CreatedAt,g("design:type",Date)],exports.UserGroup.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.Group),g("design:type",Number)],exports.UserGroup.prototype,"group_id",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.UserGroup.prototype,"user_id",void 0),exports.UserGroup=u([t.Database(S),t.ModelName("users_groups"),t.Hooks(O),_("4.2.0")],exports.UserGroup),exports.UserHistory=class extends P{},u([t.String(),g("design:type",t.String)],exports.UserHistory.prototype,"password",void 0),u([t.CreatedAt,g("design:type",Date)],exports.UserHistory.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.UserHistory.prototype,"user_id",void 0),exports.UserHistory=u([t.Database(S),t.ModelName("users_histories"),_("4.2.0")],exports.UserHistory),exports.User=class extends P{},u([t.Id(),g("design:type",Number)],exports.User.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"name",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"email",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"username",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"password",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"salt",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"token",void 0),u([t.String(),g("design:type",t.String)],exports.User.prototype,"avatar",void 0),u([t.DateOnly(),g("design:type",t.String)],exports.User.prototype,"date",void 0),u([t.Text(),g("design:type",t.String)],exports.User.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.User.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.User.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.User.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.User.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.Audit,"user_id"),g("design:type",Array)],exports.User.prototype,"audits",void 0),u([t.HasMany(()=>exports.Auth,"user_id"),g("design:type",Array)],exports.User.prototype,"auths",void 0),u([t.HasMany(()=>exports.Register,"user_id"),g("design:type",Array)],exports.User.prototype,"registers",void 0),u([t.HasMany(()=>exports.UserGroup,"user_id"),g("design:type",Array)],exports.User.prototype,"users_groups",void 0),u([t.HasMany(()=>exports.UserHistory,"user_id"),g("design:type",Array)],exports.User.prototype,"users_histories",void 0),exports.User=u([t.Database(S),t.ModelName("user"),t.DefaultScope({attributes:{exclude:["password","salt","token"]}}),t.Scopes({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),t.Hooks(O),_("4.2.0")],exports.User),exports.Audit=class extends P{},u([t.Id(),g("design:type",Number)],exports.Audit.prototype,"id",void 0),u([t.Enum("CREATE","DELETE","UPDATE"),g("design:type",t.String)],exports.Audit.prototype,"type",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"model",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"record",void 0),u([t.Json(),g("design:type",Object)],exports.Audit.prototype,"data",void 0),u([t.Json(),g("design:type",Object)],exports.Audit.prototype,"previously",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"client",void 0),u([t.Text(),g("design:type",t.String)],exports.Audit.prototype,"href",void 0),u([t.String(),g("design:type",t.String)],exports.Audit.prototype,"user_agent",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Audit.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Audit.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Audit.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Audit.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Audit.prototype,"user_id",void 0),exports.Audit=u([t.Database(S),t.ModelName("audit"),_("4.2.0")],exports.Audit),exports.Configs=class extends P{},u([t.String(),g("design:type",t.String)],exports.Configs.prototype,"key",void 0),u([t.String(),g("design:type",t.String)],exports.Configs.prototype,"value",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Configs.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Configs.prototype,"updated_at",void 0),exports.Configs=u([t.Database(S),t.ModelName("configs"),t.Hooks(O),_("4.2.0")],exports.Configs),exports.Forgot=class extends P{},u([t.Id(),g("design:type",Number)],exports.Forgot.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Forgot.prototype,"token",void 0),u([t.BigInt(),g("design:type",Number)],exports.Forgot.prototype,"timestamp",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Forgot.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Forgot.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Forgot.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Forgot.prototype,"deleted_at",void 0),u([t.BelongsTo(()=>exports.User),g("design:type",Number)],exports.Forgot.prototype,"user_id",void 0),exports.Forgot=u([t.Database(S),t.ModelName("forgot"),_("4.2.0")],exports.Forgot),exports.Permission=class extends P{},u([t.Id(),g("design:type",Number)],exports.Permission.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Permission.prototype,"name",void 0),u([t.String(),t.Unique(!0),g("design:type",t.String)],exports.Permission.prototype,"route",void 0),u([t.String(),g("design:type",t.String)],exports.Permission.prototype,"tag",void 0),u([t.Text(),g("design:type",t.String)],exports.Permission.prototype,"description",void 0),u([t.Boolean(),g("design:type",t.Boolean)],exports.Permission.prototype,"state",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Permission.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Permission.prototype,"updated_at",void 0),u([t.DeletedAt,g("design:type",Object)],exports.Permission.prototype,"deleted_at",void 0),u([t.HasMany(()=>exports.GroupPermission,"permission_id"),g("design:type",Array)],exports.Permission.prototype,"groups_permissions",void 0),exports.Permission=u([t.Database(S),t.ModelName("permission"),t.Hooks(O),_("4.3.1")],exports.Permission),exports.GroupPermission=class extends P{},u([t.CreatedAt,g("design:type",Date)],exports.GroupPermission.prototype,"created_at",void 0),u([t.BelongsTo(()=>exports.Group),g("design:type",Number)],exports.GroupPermission.prototype,"group_id",void 0),u([t.BelongsTo(()=>exports.Permission),g("design:type",Number)],exports.GroupPermission.prototype,"permission_id",void 0),exports.GroupPermission=u([t.Database(S),t.ModelName("groups_permissions"),t.Hooks(O),_("4.2.0")],exports.GroupPermission),exports.Log=class extends P{},u([t.Id(),g("design:type",Number)],exports.Log.prototype,"id",void 0),u([t.String(),g("design:type",t.String)],exports.Log.prototype,"type",void 0),u([t.String(),g("design:type",t.String)],exports.Log.prototype,"source",void 0),u([t.Text(),g("design:type",t.String)],exports.Log.prototype,"message",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Log.prototype,"created_at",void 0),exports.Log=u([t.Database(S),t.ModelName("log"),_("4.2.0")],exports.Log),exports.Migration=class extends P{},u([t.String(),g("design:type",t.String)],exports.Migration.prototype,"model",void 0),u([t.String(),g("design:type",t.String)],exports.Migration.prototype,"version",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Migration.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Migration.prototype,"updated_at",void 0),exports.Migration=u([t.Database(S),t.ModelName("migration"),_("4.2.0")],exports.Migration),exports.Session=class extends P{},u([t.String(),g("design:type",t.String)],exports.Session.prototype,"session",void 0),u([t.Text(),g("design:type",t.String)],exports.Session.prototype,"json",void 0),u([t.BigInt(),g("design:type",Number)],exports.Session.prototype,"expired",void 0),u([t.CreatedAt,g("design:type",Date)],exports.Session.prototype,"created_at",void 0),u([t.UpdatedAt,g("design:type",Date)],exports.Session.prototype,"updated_at",void 0),exports.Session=u([t.Database(S),t.ModelName("session"),_("4.2.0")],exports.Session);class I{static write(e,t,o){return y(this,void 0,void 0,function*(){yield I.writeRaw(r.LogColor.White,"",e,t,o)})}static error(e,t,o){return y(this,void 0,void 0,function*(){yield I.writeRaw(r.LogColor.Red,"error",e,t,o)})}static info(e,t,o){return y(this,void 0,void 0,function*(){yield I.writeRaw(r.LogColor.Cyan,"info",e,t,o)})}static success(e,t,o){return y(this,void 0,void 0,function*(){yield I.writeRaw(r.LogColor.Green,"success",e,t,o)})}static warning(e,t,o){return y(this,void 0,void 0,function*(){yield I.writeRaw(r.LogColor.Yellow,"warning",e,t,o)})}static writeRaw(e,t,o,i,s){return y(this,void 0,void 0,function*(){s&&r.Log.console(e,t,o),S&&(yield exports.Log.create({type:t,source:i,message:o}).catch(()=>null))})}}const f=e=>d.existsSync(e)?d.readFileSync(e):void 0,R={http:f(E.API_HTTP_CRT),token:f(E.API_TOKEN_CRT)},T={http:f(E.API_HTTP_KEY),token:f(E.API_TOKEN_KEY)};class D extends a.Store{constructor(){super(),this.all=e=>y(this,void 0,void 0,function*(){e=e||i.noop;const t=yield exports.Session.findAll({attributes:["session"],where:{expired:{[s.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(i.noop),e&&e()}),this.destroy=(e,t)=>y(this,void 0,void 0,function*(){yield exports.Session.destroy({where:{session:e}}).catch(i.noop),t&&t()}),this.expired=()=>y(this,void 0,void 0,function*(){yield exports.Session.destroy({where:{expired:{[s.Op.lt]:Date.now()}}}).catch(i.noop)}),this.get=(e,t)=>y(this,void 0,void 0,function*(){t=t||i.noop;const r=yield exports.Session.findOne({where:{session:e,expired:{[s.Op.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(i.noop),void t(null)}return void t(null,e)}t(null)}),this.length=e=>y(this,void 0,void 0,function*(){e&&e(null,(yield exports.Session.count().catch(i.noop))||0)}),this.set=(e,t,r)=>y(this,void 0,void 0,function*(){r=r||i.noop;const o=Date.now()+E.API_SESSION_LIFETIME,s=JSON.stringify(t),[n,d]=(yield exports.Session.findOrCreate({where:{session:e},defaults:{session:e,json:s,expired:o}}).catch(i.noop))||[];n&&(d||(n.json=s,n.expired=o,yield n.save().catch(i.noop))),r()}),this.loop=i.loop(this.expired,3e4),this.loop.start()}}class w{static create(e){return y(this,void 0,void 0,function*(){if(!T.token)return{error:"KEY NOT FOUND"};const{id:t}=e,r=i.uuidv4(),o=yield exports.Auth.create({secret:r,user_id:t}).catch(w.error);if(!o)return{error:"INTERNAL SERVER ERROR"};return{auth:o,token:p.sign({id:t,secret:r},T.token,w.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){let t="token";E.API_BASE_NAME&&(t=`${E.API_BASE_NAME}.${t}`),I.error(e.message,t,E.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:`${E.API_TOKEN_LIFETIME}ms`}}static renew(e){return y(this,void 0,void 0,function*(){if(!T.token)return{error:"KEY NOT FOUND"};const{error:t,decode:r}=w.verify(e,E.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(r){const{id:e,secret:t}=r;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(w.error);if(r){const o=yield exports.Auth.findOne({where:{secret:t,user_id:r.id}}).catch(w.error);if(o&&!o.logout){o.secret=i.uuidv4(),yield o.save().catch(w.error);return{auth:o,token:p.sign({id:e,secret:o.secret},T.token,w.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(w.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(w.error))||[];if(r)return{auth:r,user:o}}return{error:"ACCESS DENIED"}}const{error:o,decode:i}=w.verify(t);if(o)return{error:o};if(i){const{id:e,secret:t}=i;if(e&&t){const r=yield exports.User.findOne({where:{id:e,state:!0}}).catch(w.error);if(r){const e=yield exports.Auth.findOne({where:{secret:t,user_id:r.id}}).catch(w.error);if(e&&!e.logout)return{auth:e,user:r}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static verify(e,t){if(!R.token)return{error:"CERT NOT FOUND"};if(!e||e.split(".").length<3)return{error:"INVALID TOKEN"};try{return{decode:p.verify(e,R.token,{clockTolerance:t})}}catch(e){return{error:"INVALID TOKEN"}}}}class N extends e.Application{constructor(e){super(e,{cert:R.http,cross:E.API_HTTP_CROSS,hybrid:E.API_HTTP_HYBRID,json:{strict:E.API_BODYPARSER_STRICT,inflate:E.API_BODYPARSER_INFLATE,limit:E.API_BODYPARSER_LIMIT,type:E.API_BODYPARSER_TYPE},key:T.http,notfound:E.API_HTTP_NOTFOUND,path:E.API_HTTP_PATH,port:E.API_HTTP_PORT,public:E.API_HTTP_PUBLIC,redirect:E.API_HTTP_REDIRECT,session:{store:new D,name:E.API_SESSION_NAME,secret:E.API_SESSION_SECRET,cookie:{maxAge:E.API_SESSION_LIFETIME},genid:i.uuidv4}}),this.hash=new r.Hash(E.API_KEY_HASH)}error(e,t){E.API_BASE_NAME&&(t=t?`${E.API_BASE_NAME}.${t}`:E.API_BASE_NAME),I.error(e.message,t,E.API_CONSOLE_ERROR)}log(e,t){E.API_BASE_NAME&&(t=t?`${E.API_BASE_NAME}.${t}`:E.API_BASE_NAME),I.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return y(this,void 0,void 0,function*(){yield S.sync(),yield this.migrations(S),yield i.forEachSeries(this.controllers,e=>y(this,void 0,void 0,function*(){i.isFunction(e.sync)&&(yield e.sync(this))})),yield e.listen.call(this),E.API_WEBSOCKET_START&&this.server&&(this._webSocket=new n.WebSocketServer({server:this.server,verifyClient:(e,t)=>t(E.API_WEBSOCKET_START)}),this._webSocket.on("connection",(e,t)=>y(this,void 0,void 0,function*(){t.url||(t.url="");const r=t.url.length<=1?"":t.url.replace(/\//g,".");let o;e.on("message",i=>y(this,void 0,void 0,function*(){if(o)try{const s=JSON.parse(i);this.emit("ws.message"+r,{data:s,message:i,req:t,user:o,ws:e})}catch(s){this.emit("ws.message"+r,{erro:s,message:i,req:t,user:o,ws:e})}else{const{user:s}=yield w.user("",i.toString(),this);s&&(o=s,this.emit("ws.connection"+r,{req:t,user:o,ws:e}))}o||e.close()})),e.on("close",()=>{o&&this.emit("ws.close"+r,{user:o,ws:e})}),yield i.sleep(2e3),o||e.close()})))})}migrations(e){return y(this,void 0,void 0,function*(){const r=[];yield i.forEachSeries(Object.keys(e.models),t=>y(this,void 0,void 0,function*(){var o;const i=e.models[t],{version:s}=v.migrations(i);if(!s)return;const[n,d]=null!==(o=yield exports.Migration.findOrCreate({where:{model:i.tableName},defaults:{model:i.tableName,version:""}}).catch(this.error))&&void 0!==o?o:[];n&&(d||n.version!=s)&&(n.version=s,yield n.save().catch(this.error),r.push(i))})),r.length&&(yield t.migrate(e,r))})}websocket(){return this._webSocket}}class U extends i.EventEmitter{auth(e,t,r,o,i){return y(this,void 0,void 0,function*(){var s;const[n,d]=null!==(s=null==r?void 0:r.split(" "))&&void 0!==s?s:["",""];if(!d||n.toLowerCase()!=E.API_TOKEN_HEADER_KEY)return e.error("INVALID TOKEN");const{auth:a,error:p,user:l}=yield w.user(t,d,i);return p?e.error(p):a&&l?a.user_agent&&a.user_agent!=o?e.error("INVALID TOKEN"):(e.req.auth=a,e.req.user=l,void e.next()):e.error("INTERNAL SERVER ERROR")})}canCreate(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".create",r)})}canDelete(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".delete",r)})}canRead(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".read",r)})}canUpdate(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".update",r)})}error(e){let t="controller_base";E.API_BASE_NAME&&(t=`${E.API_BASE_NAME}.${t}`),I.error(e.message,t,E.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,r){return y(this,void 0,void 0,function*(){if(r){if((yield this.permissions(r,{route:t})).length>0)return e.next()}e.unauthorized("ACCESS DENIED")})}permissions(e,t){return y(this,void 0,void 0,function*(){var r;return null!==(r=yield exports.Permission.findAll({where:Object.assign(Object.assign({},null!=t?t:{}),{state:!0}),include:[{model:exports.GroupPermission,required:!0,include:[{model:exports.Group,required:!0,where:{state:!0},include:[{model:exports.UserGroup,required:!0,where:{user_id:e.id}}]}]}]}).catch(this.error))&&void 0!==r?r:[]})}session(e,t,r){return y(this,void 0,void 0,function*(){r.auth&&r.user&&(r.user_agent?r.user_agent!=t&&r.regenerate(i.noop):(r.user_agent=t,r.save(i.noop))),e.next()})}sync(){return y(this,void 0,void 0,function*(){})}upload(t,r){r.path||(r.path=E.API_UPLOAD_TEMP),r.size||(r.size=E.API_UPLOAD_SIZE),r.field||(r.field=E.API_UPLOAD_FIELD),e.Upload.middleware(t,r)}validation(e,t){return y(this,void 0,void 0,function*(){const{error:r,value:o}=yield i.Validation.object(t).parse().validateAsync(e.req.body);if(r)return e.validation(r);e.req.body=o,e.next()})}}u([c(0,e.Ctx()),c(1,e.Headers(E.API_KEY_HEADER)),c(2,e.Headers(E.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,N]),g("design:returntype",Promise)],U.prototype,"auth",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],U.prototype,"canCreate",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],U.prototype,"canDelete",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],U.prototype,"canRead",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],U.prototype,"canUpdate",null),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],U.prototype,"permission",null),u([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)],U.prototype,"session",null),u([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",void 0)],U.prototype,"upload",null),u([c(0,e.Ctx()),c(1,e.Argument()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],U.prototype,"validation",null);class b{}var M,F,B,L;b.ATTRIBUTES=Symbol("ATTRIBUTES"),b.PERMISSIONS=Symbol("PERMISSIONS"),exports.ModelController=class extends U{constructor(){super(...arguments),this[M]=[],this[F]=["create","read","update","delete"]}attributes(e){if(0==this[b.ATTRIBUTES].length&&(this[b.ATTRIBUTES]=Object.keys(this.model().getAttributes())),i.isArray(e))return e.length?e.map(e=>i.isString(e)&&-1!=this[b.ATTRIBUTES].indexOf(e)?e:void 0).filter(i.isString):this[b.ATTRIBUTES];const{exclude:t,include:r}=e,o=i.isUndefined(r)?this[b.ATTRIBUTES]:r.map(e=>i.isString(e)&&-1!=this[b.ATTRIBUTES].indexOf(e)?e:void 0).filter(i.isString),s=null!=t?t:[];return s.length?o.filter(e=>-1==s.indexOf(e)?e:void 0).filter(i.isString):o}create(t){return y(this,arguments,void 0,function*({ctx:t,options:r,body:o}){const i=yield this.model().create(Object.assign(Object.assign({},t.req.body),o||{}),Object.assign(Object.assign({},r||{}),h(t))).catch(this.error);if(i){const r=this.key();return t.prepare(e.Status.OK,{[r]:i.getDataValue(r)}),i}t.error("INTERNAL SERVER ERROR")})}delete(e){return y(this,arguments,void 0,function*({ctx:e,options:t}){const r=this.key(),{[r]:o}=e.req.params;if(!o)return e.error("INTERNAL SERVER ERROR"),0;const i=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[r]:o}),individualHooks:!0}),h(e))).catch(this.error);return i?(e.success("OK"),i):(e.notFound("RECORD NOT FOUND"),0)})}error(e){let t="controller_model";E.API_BASE_NAME&&(t=`${E.API_BASE_NAME}.${t}`),(null==e?void 0:e.sql)?I.error((null==e?void 0:e.message)+"\n"+(null==e?void 0:e.sql),t,E.API_CONSOLE_ERROR):super.error(e)}findAll(r){return y(this,arguments,void 0,function*({ctx:r,options:o,callback:n,scope:d,advanced:a,attributes:p,unlimited:l}){var u,c,g;const y=this.scope(d),h=Object.assign({},o||{}),{limit:x,offset:m,asc:A,desc:v,search:_,where:S}=r.req.query;if(i.isUndefined(h.limit)){const e=i.clamp(i.isString(x)?parseInt(x)||0:E.API_MODEL_LIMIT,-1,E.API_MODEL_LIMIT_MAX);h.limit=e>0?e:l?void 0:E.API_MODEL_LIMIT}if(i.isNumber(h.limit)&&(h.limit=h.limit>0?h.limit:void 0),i.isString(m)){const e=m&&parseInt(m)||0;h.offset=e>0?e:void 0}p=null!=p?p:this.attributes(null!==(u=null==h?void 0:h.attributes)&&void 0!==u?u:[]);const P=[],C=e=>p.indexOf(e)>=0;if(i.isString(A)&&A.length&&P.push(...A.split(";").filter(C).map(e=>[e,"ASC"])),i.isString(v)&&v.length&&P.push(...v.split(";").filter(C).map(e=>[e,"DESC"])),P.length&&(h.order=P),h.where=Object.assign({},h.where||{}),i.isString(S)&&(null==a||a)){const e=t.Where.parse(p,S);if(!i.isUndefined(e.error))return r.validation(e.error.join(", ")),{count:0,records:[]};h.where=Object.assign(Object.assign({},h.where),null!==(c=e.value)&&void 0!==c?c:{})}else{const e=[];p.forEach(t=>{i.isString(_)&&_.length&&e.push({[t]:{[s.Op.like]:`%${_}%`}})}),e.length&&(h.where=Object.assign(Object.assign({},h.where),{[s.Op.or]:[...e]}))}const O=y.count(Object.assign(Object.assign({},h),{distinct:!!h.include,col:this[b.ATTRIBUTES].length?this[b.ATTRIBUTES][0]:void 0})).catch(this.error),I=y.findAll(h).catch(this.error);yield Promise.allSettled([O,I]);const f=null!==(g=yield O)&&void 0!==g?g:0;let R=yield I;const T={count:f};return R?(R=n?yield n(R):R,(i.isNumber(null==o?void 0:o.limit)||0==f)&&(T.count=R.length),r.prepare(e.Status.OK,Object.assign(Object.assign({},T),{records:R})),Object.assign(Object.assign({},T),{records:R})):(r.error("INTERNAL SERVER ERROR"),Object.assign(Object.assign({},T),{records:[]}))})}findOne(t){return y(this,arguments,void 0,function*({ctx:t,options:r,callback:o,scope:i}){const s=this.key(),{[s]:n}=t.req.params,d=yield this.scope(i).findOne(Object.assign(Object.assign({},r||{}),{where:Object.assign(Object.assign({},(r||{}).where),{[s]: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")})}sync(){return y(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t={description:"",state:!0};yield i.forEachSeries(this[b.PERMISSIONS],r=>y(this,void 0,void 0,function*(){const o=`${e}.${r}`,s=i.upperCamelCase(e.replace(/_/g," ")," ");yield exports.Permission.findOrCreate({where:{route:o},defaults:Object.assign({name:`${s} ${i.upperCamelCase(r," ")}`,route:o,tag:s},t)})}))})}update(e){return y(this,arguments,void 0,function*({ctx:e,options:t,body:r}){var o;const i=this.key(),{[i]:s}=e.req.params,[n]=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),{[i]:s}),individualHooks:!0}),h(e))).catch(this.error))&&void 0!==o?o:[];return n?(e.success("OK"),!0):(e.success("RECORD NOT CHANGED"),!1)})}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}},M=b.ATTRIBUTES,F=b.PERMISSIONS,exports.ModelController=u([e.Extends(U)],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.findAll({ctx:e,options:{attributes:{exclude:["data","previously"]},where:o,order:[["created_at","DESC"]]},unlimited:!0})})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}},u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),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),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.AuditsController.prototype,"get",null),exports.AuditsController=u([e.Controller("/audits"),e.Extends(exports.ModelController)],exports.AuditsController),exports.AuthController=class extends U{login(e,t,o,n,d){return y(this,void 0,void 0,function*(){var a;yield i.sleep(E.API_SLEEP_AUTH);const p=yield exports.User.scope("password").findOne({where:{[s.Op.or]:[{email:o},{username:o}]}}).catch(this.error);if(n+=null!==(a=null==p?void 0:p.salt)&&void 0!==a?a:"",!p||p.password!=r.sha256(n))return e.notFound("INVALID USERNAME OR PASSWORD"),d.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const l=yield exports.Register.findOne({where:{state:!0,user_id:p.id}}).catch(this.error);if(l)return e.error("ACTIVATION REQUIRED"),d.emit("auth.activation",{ctx:e,register:l,user:p}),void this.emit("auth.activation",{ctx:e,register:l,user:p});if(!p.state)return e.notFound("INVALID USERNAME OR PASSWORD"),d.emit("auth.failure",{ctx:e,user:p}),void this.emit("auth.failure",{ctx:e,user:p});const{auth:u,error:c,token:g}=yield w.create(p);return c?(e.error(c),d.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):u&&g?(u.user_agent=t,yield u.save().catch(this.error),e.json({token:g}),d.emit("auth.login",{auth:u,ctx:e,user:p}),void this.emit("auth.login",{auth:u,ctx:e,user:p})):(e.error("INTERNAL SERVER ERROR"),d.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 w.destroy(t))return e.success("OK"),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:i,error:s,token:n}=yield w.renew(r);return s?e.error(s):i?(i.user_agent=t,yield i.save().catch(this.error),e.json({token:n}),o.emit("auth.renew",{auth:i,ctx:e}),void this.emit("auth.renew",{auth:i,ctx:e})):e.error("INTERNAL SERVER ERROR")})}user(e,t){return y(this,void 0,void 0,function*(){const r=yield this.permissions(t);if(!r)return e.error("INTERNAL SERVER ERROR");e.json(Object.assign(Object.assign({},i.denied(["username","date","description","state","created_at","updated_at","deleted_at"],t.toJSON())),{permissions:r.map(e=>e.route)}))})}},u([e.Post("/login"),e.Middleware("validation",{username:i.Validation.string().min(3).required(),password:i.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,N]),g("design:returntype",Promise)],exports.AuthController.prototype,"login",null),u([e.Get("/logout"),e.Middleware("auth"),c(0,e.Ctx()),c(1,m()),c(2,A()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.Auth,exports.User,N]),g("design:returntype",Promise)],exports.AuthController.prototype,"logout",null),u([e.Post("/renew"),e.Middleware("validation",{token:i.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,N]),g("design:returntype",Promise)],exports.AuthController.prototype,"renew",null),u([e.Get(),e.Middleware("auth"),c(0,e.Ctx()),c(1,A()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.AuthController.prototype,"user",null),exports.AuthController=u([e.Controller("/auth"),e.Extends(U)],exports.AuthController),exports.FilesController=class extends U{constructor(){super(...arguments),this[B]=["delete","download","edit","list","read","rename","upload","write"]}directory(){return E.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 r=l.join(this.directory(),t);if(!d.existsSync(r)||!d.statSync(r).isDirectory())return e.notFound("RECORD NOT FOUND");let o=[];return o=d.readdirSync(r),o=o.map(e=>this.info(l.join(r,e))),o=o.filter(i.isDef),Object.assign(Object.assign({},this.info(r)),{files:o})})}access(e,t,r){return y(this,void 0,void 0,function*(){yield this.permission(e,this.name()+"."+t,r)})}info(e){if(!d.existsSync(e))return null;const t=d.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"}sync(){return y(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t=i.upperCamelCase(e.replace(/_/g," ")," "),r={description:"",state:!0};yield i.forEachSeries(this[b.PERMISSIONS],o=>y(this,void 0,void 0,function*(){const s=`${e}.${o}`;yield exports.Permission.findOrCreate({where:{route:s},defaults:Object.assign({name:`${t} ${i.upperCamelCase(o," ")}`,route:s,tag:t},r)})}))})}},B=b.PERMISSIONS,u([e.Get("/path"),e.Get("/path/*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),u([c(0,e.Ctx()),c(1,e.Argument()),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.FilesController.prototype,"access",null),exports.FilesController=u([e.Controller("/files"),e.Extends(U)],exports.FilesController),exports.ForgotController=class extends U{check(e,t){return y(this,void 0,void 0,function*(){const r=yield this.find(t);if(!r||!r.user)return e.notFound("RECORD NOT FOUND");r.token=i.uniqueID(),yield r.save(),e.json({token:r.token})})}forgot(e,t,r){return y(this,void 0,void 0,function*(){yield i.sleep(E.API_SLEEP_FORGOT);const o=t,n=yield exports.User.findOne({where:{[s.Op.or]:[{email:o},{username:t}]}}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const d=i.uniqueID(),a=Date.now()+6e4*E.API_TOKEN_FORGOT,p=yield exports.Forgot.create({token:d,timestamp:a,state:!0,user_id:n.id});e.success("OK"),r.emit("forgot.send",{ctx:e,forgot:p,user:n}),this.emit("forgot.send",{ctx:e,forgot:p,user:n})})}reset(e,t,o,i){return y(this,void 0,void 0,function*(){const s=yield this.find(t);if(!s)return e.notFound("RECORD NOT FOUND");s.state=!1,yield s.save().catch(this.error),s.user.password=r.sha256(o),yield s.user.save().catch(this.error),e.success("OK"),i.emit("forgot.reset",{ctx:e,user:s.user}),this.emit("forgot.reset",{ctx:e,user:s.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)})}},u([e.Get("/check"),e.Middleware("validation",{token:i.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),u([e.Post(),e.Middleware("validation",{username:i.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,N]),g("design:returntype",Promise)],exports.ForgotController.prototype,"forgot",null),u([e.Post("/reset"),e.Middleware("validation",{token:i.Validation.string().required(),password:i.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,N]),g("design:returntype",Promise)],exports.ForgotController.prototype,"reset",null),exports.ForgotController=u([e.Controller("/forgot"),e.Extends(U)],exports.ForgotController),exports.CrudController=class extends exports.ModelController{constructor(){super(...arguments),this._crud={}}CrudArgumentsCreate(e){return{ctx:e}}CrudArgumentsFindAll(e){return{ctx:e}}CrudArgumentsFindOne(e){return{ctx:e}}CrudArgumentsDelete(e){return{ctx:e}}CrudArgumentsUpdate(e){return{ctx:e}}CrudValidationCreate(){return this._crud}CrudValidationUpdate(){return this._crud}add(e){return y(this,void 0,void 0,function*(){yield this.create(this.CrudArgumentsCreate(e))})}all(e){return y(this,void 0,void 0,function*(){yield this.findAll(this.CrudArgumentsFindAll(e))})}del(e){return y(this,void 0,void 0,function*(){yield this.delete(this.CrudArgumentsDelete(e))})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne(this.CrudArgumentsFindOne(e))})}set(e){return y(this,void 0,void 0,function*(){yield this.update(this.CrudArgumentsUpdate(e))})}validationCreate(e){return y(this,void 0,void 0,function*(){const t=this.CrudValidationCreate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}validationUpdate(e){return y(this,void 0,void 0,function*(){const t=this.CrudValidationUpdate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}},u([e.Post(),e.Middleware("auth"),e.Middleware("canCreate"),e.Middleware("validationCreate"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"add",null),u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"all",null),u([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"del",null),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"get",null),u([e.Put("/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),e.Middleware("validationUpdate"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"set",null),u([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationCreate",null),u([c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.CrudController.prototype,"validationUpdate",null),exports.CrudController=u([e.Extends(exports.ModelController)],exports.CrudController),exports.GroupsController=class extends exports.CrudController{constructor(){super(...arguments),this.schemaCreate={name:i.Validation.string().required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()},this.schemaUpdate={name:i.Validation.string().empty(),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}}model(){return exports.Group}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}},exports.GroupsController=u([e.Controller("/groups"),e.Extends(exports.CrudController)],exports.GroupsController),exports.GroupsPermissionsController=class extends exports.ModelController{model(){return exports.GroupPermission}all(e,t){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{group_id:t},include:[{model:exports.Permission,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.permission)})})}me(e,t){return y(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,r,o){return y(this,void 0,void 0,function*(){const s=yield exports.Group.findByPk(t,{attributes:["id"]}).catch(this.error);if(!s)return e.notFound("RECORD NOT FOUND");const n=s.id;if(yield exports.GroupPermission.destroy(Object.assign({where:{group_id:n},individualHooks:!0},o)),r){let e=0;yield i.sleep(1e3);for(let t=0;t<r.length;t++)e=yield exports.Permission.count({where:{id:r[t]}}),e&&(yield exports.GroupPermission.create({group_id:n,permission_id:r[t]},Object.assign({},o)))}e.success("OK")})}},u([e.Get("/:id/permissions"),e.Middleware("auth"),e.Middleware("canRead","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.GroupsPermissionsController.prototype,"all",null),u([e.Get("/permissions"),e.Middleware("auth"),e.Middleware("canRead","users"),c(0,e.Ctx()),c(1,A()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.GroupsPermissionsController.prototype,"me",null),u([e.Put("/:id/permissions"),e.Middleware("auth"),e.Middleware("canUpdate","groups"),e.Middleware("validation",{permissions:i.Validation.array(i.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("permissions")),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.GroupsPermissionsController.prototype,"set",null),exports.GroupsPermissionsController=u([e.Controller("/groups"),e.Extends(exports.ModelController)],exports.GroupsPermissionsController),exports.LogsController=class extends exports.ModelController{constructor(){super(...arguments),this[L]=["read"]}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.findAll({ctx:e,options:{where:o,order:[["created_at","DESC"]]},unlimited:!0})})}},L=b.PERMISSIONS,u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),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=u([e.Controller("/logs"),e.Extends(exports.ModelController)],exports.LogsController),exports.PermissionsController=class extends exports.CrudController{constructor(){super(...arguments),this.schemaCreate={name:i.Validation.string().required(),route:i.Validation.string().required(),tag:i.Validation.string().required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()},this.schemaUpdate={name:i.Validation.string().empty(),route:i.Validation.string().empty(),tag:i.Validation.string().empty(),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}}model(){return exports.Permission}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}},exports.PermissionsController=u([e.Controller("/permissions"),e.Extends(exports.CrudController)],exports.PermissionsController),exports.RegisterController=class extends U{register(e,t,o){return y(this,void 0,void 0,function*(){yield i.sleep(E.API_SLEEP_REGISTRY);const{name:n,date:d,email:a,username:p,password:l,confirm:u}=t,c=p||a,g=r.sha256(l);if(yield exports.User.count({where:{[s.Op.or]:[{email:a},{username:c}]}}).catch(this.error))return e.validation("INVALID EMAIL OR USERNAME");if(g!=r.sha256(u))return e.error("INVALID PASSWORD");const y=yield exports.User.create({name:n,email:a,username:c,password:g,avatar:"",date:d,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"),o.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("RECORD 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,i=yield exports.Register.findOne({where:{state:!0},include:[{model:exports.User,required:!0,where:{[s.Op.or]:[{email:o},{username:t}]}}]}).catch(this.error);if(!i)return e.notFound("RECORD NOT FOUND");e.success("OK"),r.emit("register.send",{ctx:e,register:i,user:i.user}),this.emit("register.send",{ctx:e,register:i,user:i.user})})}getId(){return y(this,void 0,void 0,function*(){const e=i.uuidv4();return(yield exports.Register.count({where:{token:e}}))?this.getId():e})}},u([e.Post(),e.Middleware("validation",{name:i.Validation.string().required(),date:i.Validation.date().required(),email:i.Validation.string().email().required(),username:i.Validation.string().min(4).empty(),password:i.Validation.string().min(5).required(),confirm:i.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,N]),g("design:returntype",Promise)],exports.RegisterController.prototype,"register",null),u([e.Post("/confirm"),e.Middleware("validation",{token:i.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,N]),g("design:returntype",Promise)],exports.RegisterController.prototype,"confirm",null),u([e.Post("/send"),e.Middleware("validation",{username:i.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,N]),g("design:returntype",Promise)],exports.RegisterController.prototype,"send",null),exports.RegisterController=u([e.Controller("/register"),e.Extends(U)],exports.RegisterController),exports.SetupController=class extends U{setup(e,t){return y(this,void 0,void 0,function*(){var o;if(yield exports.User.count())return e.success("OK");const s=i.uniqueID(),n=yield exports.User.create({name:"Admin",email:"admin@localhost",username:"admin",password:r.sha256("admin"+s),salt:s,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0},Object.assign({},t)),d=yield exports.Group.create(Object.assign({name:"Admin"},{description:"API CORE",state:!0}),Object.assign({},t));yield exports.UserGroup.create({user_id:n.id,group_id:d.id},Object.assign({},t));const a=null!==(o=yield exports.Permission.findAll({where:{state:!0}}).catch(this.error))&&void 0!==o?o:[];yield i.forEachSeries(a,e=>y(this,void 0,void 0,function*(){yield exports.GroupPermission.create({group_id:d.id,permission_id:e.id},Object.assign({},t))})),e.success("OK")})}},u([e.Get(),c(0,e.Ctx()),c(1,x()),g("design:type",Function),g("design:paramtypes",[e.Context,Object]),g("design:returntype",Promise)],exports.SetupController.prototype,"setup",null),exports.SetupController=u([e.Controller("/setup"),e.Extends(U)],exports.SetupController),exports.UsersController=class extends exports.ModelController{model(){return exports.User}constructor(){super(),this.path=E.API_HTTP_PUBLIC+"/avatar",E.API_HTTP_PUBLIC&&d.existsSync(E.API_HTTP_PUBLIC)&&!d.existsSync(this.path)&&d.mkdirSync(this.path)}avatar(e,t,r,o){return y(this,void 0,void 0,function*(){if(t.length){const i=t[0].filename||"";if(i){const t=this.path+"/"+r.avatar;if(d.existsSync(t)&&d.lstatSync(t).isFile()&&d.rmSync(t),r.avatar=i,yield r.save(Object.assign({},o)).catch(this.error))return e.success("OK")}}e.success("RECORD NOT CHANGED")})}avatar_del(e,t,r){return y(this,void 0,void 0,function*(){const o=this.path+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},r)).catch(this.error))&&d.existsSync(o)&&d.rmSync(o),e.success("OK")})}password(e,t,o,s,n){return y(this,void 0,void 0,function*(){var d;if(E.API_USER_HISTORY){if(yield exports.UserHistory.count({where:{password:r.sha256(o+s.id)}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED")}const a=yield this.scope("password").findOne({where:{id:s.id,state:!0}}).catch(this.error);return t+=null!==(d=null==a?void 0:a.salt)&&void 0!==d?d:"",a&&a.password==r.sha256(t)?(a.salt=i.uniqueID(),a.password=r.sha256(o+a.salt),(yield a.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("RECORD NOT CHANGED")):e.error("INVALID PASSWORD")})}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_del(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_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_renew(e,t,r,o){return y(this,void 0,void 0,function*(){const i=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(i){const t=yield this.token_new();return i.token=o.hash.encrypt(t),yield i.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=i.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,t){return y(this,void 0,void 0,function*(){const o=i.uniqueID(),s=yield this.create({ctx:e,body:{password:r.sha256(t+o),salt:o}});E.API_USER_HISTORY&&s&&(yield exports.UserHistory.create({password:r.sha256(t+s.id),user_id:s.id}))})}all(e){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{attributes:{exclude:["password","salt","token"]}},unlimited:!0})})}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.delete({ctx:e})})}get(e){return y(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}set(e,t,o){return y(this,void 0,void 0,function*(){if(E.API_USER_HISTORY&&o){const i=r.sha256(o+t);if(yield exports.UserHistory.count({where:{password:i}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED");yield exports.UserHistory.create({password:i,user_id:t}).catch(this.error)}const s=o?i.uniqueID():"";yield this.update({ctx:e,body:o?{password:r.sha256(o+s),salt:s}:{}})})}},u([e.Post("/avatar"),e.Middleware("auth"),e.Middleware("upload",e=>({count:1,field:"file",path:e.controller.path,types:["image/bmp","image/jpeg","image/png"],size:32})),c(0,e.Ctx()),c(1,e.Files()),c(2,A()),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,Array,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar",null),u([e.Delete("/avatar"),e.Middleware("auth"),c(0,e.Ctx()),c(1,A()),c(2,x()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"avatar_del",null),u([e.Post("/password"),e.Middleware("auth"),e.Middleware("validation",{oldPassword:i.Validation.string().min(5).required(),newPassword:i.Validation.string().min(5).required(),confirmPassword:i.Validation.string().equal(i.Validation.ref("newPassword"))}),c(0,e.Ctx()),c(1,e.Body("oldPassword")),c(2,e.Body("newPassword")),c(3,A()),c(4,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,String,exports.User,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"password",null),u([e.Get("/token"),e.Middleware("auth"),c(0,e.Ctx()),c(1,A()),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User,N]),g("design:returntype",Promise)],exports.UsersController.prototype,"token",null),u([e.Delete("/token/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_del",null),u([e.Get("/token/:id"),e.Middleware("auth"),e.Middleware("canCreate"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,N]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_get",null),u([e.Get("/token/renew/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,x()),c(3,e.App()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Object,N]),g("design:returntype",Promise)],exports.UsersController.prototype,"token_renew",null),u([e.Post(),e.Middleware("auth"),e.Middleware("canCreate"),e.Middleware("validation",{name:i.Validation.string().required(),email:i.Validation.string().email().required(),username:i.Validation.string().min(4).required(),password:i.Validation.string().min(5).required(),description:i.Validation.string().empty(""),state:i.Validation.boolean().parse().required()}),c(0,e.Ctx()),c(1,e.Body("password")),g("design:type",Function),g("design:paramtypes",[e.Context,String]),g("design:returntype",Promise)],exports.UsersController.prototype,"add",null),u([e.Get(),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"all",null),u([e.Delete("/:id"),e.Middleware("auth"),e.Middleware("canDelete"),c(0,e.Ctx()),c(1,e.Params("id")),c(2,A()),g("design:type",Function),g("design:paramtypes",[e.Context,String,exports.User]),g("design:returntype",Promise)],exports.UsersController.prototype,"del",null),u([e.Get("/:id"),e.Middleware("auth"),e.Middleware("canRead"),c(0,e.Ctx()),g("design:type",Function),g("design:paramtypes",[e.Context]),g("design:returntype",Promise)],exports.UsersController.prototype,"get",null),u([e.Put("/:id"),e.Middleware("auth"),e.Middleware("canUpdate"),e.Middleware("validation",{name:i.Validation.string().empty(),email:i.Validation.string().email().empty(),username:i.Validation.string().min(4).empty(),password:i.Validation.string().min(5).empty().filter(""),description:i.Validation.string().empty(),state:i.Validation.boolean().parse().empty()}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("password")),g("design:type",Function),g("design:paramtypes",[e.Context,String,String]),g("design:returntype",Promise)],exports.UsersController.prototype,"set",null),exports.UsersController=u([e.Controller("/users"),e.Extends(exports.ModelController),g("design:paramtypes",[])],exports.UsersController),exports.UsersGroupsController=class extends exports.ModelController{model(){return exports.UserGroup}all(e,t){return y(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{user_id:t},include:[{model:exports.Group,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.group)})})}me(e,t){return y(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,r,o){return y(this,void 0,void 0,function*(){const s=yield exports.User.findByPk(t,{attributes:["id"]}).catch(this.error);if(!s)return e.notFound("RECORD NOT FOUND");if(yield exports.UserGroup.destroy(Object.assign({where:{user_id:s.id},individualHooks:!0},o)),r){let e=0;yield i.sleep(1e3);for(let t=0;t<r.length;t++)e=yield exports.Group.count({where:{id:r[t]}}),e&&(yield exports.UserGroup.create({user_id:s.id,group_id:r[t]},Object.assign({},o)))}e.success("OK")})}},u([e.Get("/:id/groups"),e.Middleware("auth"),e.Middleware("canRead","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),u([e.Get("/groups"),e.Middleware("auth"),e.Middleware("canRead","users"),c(0,e.Ctx()),c(1,A()),g("design:type",Function),g("design:paramtypes",[e.Context,exports.User]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"me",null),u([e.Put("/:id/groups"),e.Middleware("auth"),e.Middleware("canUpdate","users"),e.Middleware("validation",{groups:i.Validation.array(i.Validation.number().parse())}),c(0,e.Ctx()),c(1,e.Params("id")),c(2,e.Body("groups")),c(3,x()),g("design:type",Function),g("design:paramtypes",[e.Context,String,Array,Object]),g("design:returntype",Promise)],exports.UsersGroupsController.prototype,"set",null),exports.UsersGroupsController=u([e.Controller("/users"),e.Extends(exports.ModelController)],exports.UsersGroupsController);class k{static all(){return y(this,void 0,void 0,function*(){const e=yield exports.Configs.findAll().catch(k.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(k.error))||0)>0})}static error(e){let t="config";E.API_BASE_NAME&&(t=`${E.API_BASE_NAME}.${t}`),I.error(e.message,t,E.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(k.error))||[];return r?r.value:t})}static set(e,t,r){return y(this,void 0,void 0,function*(){var o;const i=null!==(o=null==r?void 0:r.id)&&void 0!==o?o:null,[s]=(yield exports.Configs.findOrCreate(Object.assign({where:{key:e}},{user_id:i})).catch(k.error))||[];s&&(s.value=t,yield s.save().catch(k.error))})}}exports.Application=N,exports.Config=k,exports.ControllerBase=U,exports.ControllerKeys=b,exports.Env=E,exports.Logs=I,exports.Metadata=v,exports.Migrate=_,exports.Model=P,exports.ReqAudit=x,exports.ReqAuth=m,exports.ReqUser=A,exports.Store=D,exports.Token=w,exports.audit=h,exports.crt=R,exports.database=S,exports.hooks=O,exports.key=T;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.3.
|
|
2
|
+
* @andrewcaires/api v4.3.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
@@ -427,11 +427,12 @@ declare class Config {
|
|
|
427
427
|
declare const database: Connection;
|
|
428
428
|
|
|
429
429
|
declare class Env extends Env$1 {
|
|
430
|
-
static readonly
|
|
430
|
+
static readonly API_BASE_NAME: string;
|
|
431
431
|
static readonly API_BODYPARSER_STRICT: boolean;
|
|
432
432
|
static readonly API_BODYPARSER_INFLATE: boolean;
|
|
433
433
|
static readonly API_BODYPARSER_LIMIT: string;
|
|
434
434
|
static readonly API_BODYPARSER_TYPE: string;
|
|
435
|
+
static readonly API_CONSOLE_ERROR: boolean;
|
|
435
436
|
static readonly API_DB_DATABASE: string;
|
|
436
437
|
static readonly API_DB_HOST: string;
|
|
437
438
|
static readonly API_DB_PASSWORD: string;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @andrewcaires/api v4.3.
|
|
2
|
+
* @andrewcaires/api v4.3.3
|
|
3
3
|
* Simple api for small applications using express, jsonwebtoken, sequelize and websocket
|
|
4
4
|
* (c) 2025 Andrew Caires
|
|
5
5
|
* @license: MIT
|
|
6
6
|
*/
|
|
7
|
-
import{parameterFactory as e,Application as t,Ctx as i,Headers as r,App as n,Context as s,Argument as o,Session as d,Upload as a,Extends as u,Status as p,Get as c,Middleware as l,Query as y,Controller as g,Post as h,Body as v,Delete as m,Put as _,Params as O,Files as E}from"@andrewcaires/express";import{Connection as f,Model as A,Id as I,String as P,FullDate as R,CreatedAt as S,UpdatedAt as T,DeletedAt as D,BelongsTo as N,Database as b,ModelName as w,Boolean as C,Text as F,HasMany as x,Hooks as j,DateOnly as k,DefaultScope as L,Scopes as U,Enum as B,Json as H,BigInt as K,Unique as q,migrate as M,Where as Y}from"@andrewcaires/sequelize";import{Metadata as V,Env as G,LogColor as W,Log as z,Hash as $,sha256 as J}from"@andrewcaires/node";import{config as X}from"dotenv";import{isObject as Z,noop as Q,loop as ee,uuidv4 as te,forEachSeries as ie,isFunction as re,sleep as ne,EventEmitter as se,Validation as oe,isArray as de,isString as ae,isUndefined as ue,clamp as pe,isNumber as ce,upperCamelCase as le,denied as ye,isDef as ge,uniqueID as he}from"@andrewcaires/utils.js";import{Op as ve}from"sequelize";import{WebSocketServer as me}from"ws";import{readFileSync as _e,existsSync as Oe,statSync as Ee,readdirSync as fe,mkdirSync as Ae,lstatSync as Ie,rmSync as Pe}from"fs";import{Store as Re}from"express-session";import Se from"jsonwebtoken";import{join as Te}from"path";function De(e,t,i,r){var n,s=arguments.length,o=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,r);else for(var d=e.length-1;d>=0;d--)(n=e[d])&&(o=(s<3?n(o):s>3?n(t,i,o):n(t,i))||o);return s>3&&o&&Object.defineProperty(t,i,o),o}function Ne(e,t){return function(i,r){t(i,r,e)}}function be(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function we(e,t,i,r){return new(i||(i=Promise))(function(n,s){function o(e){try{a(r.next(e))}catch(e){s(e)}}function d(e){try{a(r.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,d)}a((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const Ce=e=>{var t,i,r,n,s,o,d,a,u;return{audit_client:null!==(t=e.ip())&&void 0!==t?t:"0.0.0.0",audit_href:(null===(i=null==e?void 0:e.req)||void 0===i?void 0:i.protocol)+"://"+(null===(r=null==e?void 0:e.req)||void 0===r?void 0:r.get("host"))+(null===(n=null==e?void 0:e.req)||void 0===n?void 0:n.originalUrl),audit_user_agent:null!==(o=null===(s=e.req)||void 0===s?void 0:s.headers["user-agent"])&&void 0!==o?o:"",audit_user_id:null!==(u=null===(a=null===(d=null==e?void 0:e.req)||void 0===d?void 0:d.user)||void 0===a?void 0:a.id)&&void 0!==u?u:null}},Fe=e(({ctx:e})=>Ce(e)),xe=e(({ctx:e})=>e.req.auth),je=e(({ctx:e})=>e.req.user);class ke{static migrations(e){return V(ke.MIGRATE,e,{version:""})}}ke.MIGRATE=Symbol();const Le=e=>t=>{ke.migrations(t).version=e};X({quiet:!0});class Ue extends G{}Ue.API_CONSOLE_ERROR=Ue.getBool("API_CONSOLE_ERROR",!1),Ue.API_BODYPARSER_STRICT=Ue.getBool("API_BODYPARSER_STRICT",!0),Ue.API_BODYPARSER_INFLATE=Ue.getBool("API_BODYPARSER_INFLATE",!0),Ue.API_BODYPARSER_LIMIT=Ue.getString("API_BODYPARSER_LIMIT","10mb"),Ue.API_BODYPARSER_TYPE=Ue.getString("API_BODYPARSER_TYPE","json"),Ue.API_DB_DATABASE=Ue.getString("API_DB_DATABASE",""),Ue.API_DB_HOST=Ue.getString("API_DB_HOST","127.0.0.1"),Ue.API_DB_PASSWORD=Ue.getString("API_DB_PASSWORD",""),Ue.API_DB_PORT=Ue.getInt("API_DB_PORT",3306),Ue.API_DB_TYPE=Ue.getString("API_DB_TYPE",""),Ue.API_DB_USERNAME=Ue.getString("API_DB_USERNAME","root"),Ue.API_DB_LOG=Ue.getBool("API_DB_LOG",!1),Ue.API_DB_AUDIT=Ue.getBool("API_DB_AUDIT",!0),Ue.API_DB_PREFIX=Ue.getString("API_DB_PREFIX",""),Ue.API_DB_TIMEZONE=Ue.getString("API_DB_TIMEZONE","+00:00"),Ue.API_HTTP_CRT=Ue.getString("API_HTTP_CRT",""),Ue.API_HTTP_KEY=Ue.getString("API_HTTP_KEY",""),Ue.API_HTTP_PORT=Ue.getInt("API_HTTP_PORT",3e3),Ue.API_HTTP_PUBLIC=Ue.getString("API_HTTP_PUBLIC",""),Ue.API_HTTP_CROSS=Ue.getBool("API_HTTP_CROSS",!1),Ue.API_HTTP_HYBRID=Ue.getBool("API_HTTP_HYBRID",!1),Ue.API_HTTP_NOTFOUND=Ue.getString("API_HTTP_NOTFOUND",""),Ue.API_HTTP_PATH=Ue.getString("API_HTTP_PATH","/api"),Ue.API_HTTP_REDIRECT=Ue.getString("API_HTTP_REDIRECT",""),Ue.API_KEY_HASH=Ue.getString("API_KEY_HASH",""),Ue.API_KEY_HEADER=Ue.getString("API_KEY_HEADER","x-api-key"),Ue.API_MODEL_LIMIT=Ue.getInt("API_MODEL_LIMIT",10),Ue.API_MODEL_LIMIT_MAX=Ue.getInt("API_MODEL_LIMIT_MAX",500),Ue.API_SLEEP_AUTH=Ue.getMs("API_SLEEP_AUTH","2s"),Ue.API_SLEEP_FORGOT=Ue.getMs("API_SLEEP_FORGOT","5s"),Ue.API_SLEEP_REGISTRY=Ue.getMs("API_SLEEP_REGISTRY","5s"),Ue.API_SESSION_NAME=Ue.getString("API_SESSION_NAME","session.id"),Ue.API_SESSION_LIFETIME=Ue.getMs("API_SESSION_LIFETIME","1d"),Ue.API_SESSION_SECRET=Ue.getString("API_SESSION_SECRET","yoursecret"),Ue.API_TOKEN_CRT=Ue.getString("API_TOKEN_CRT",""),Ue.API_TOKEN_KEY=Ue.getString("API_TOKEN_KEY",""),Ue.API_TOKEN_FORGOT=Ue.getMs("API_TOKEN_LIFETIME","1d"),Ue.API_TOKEN_HEADER=Ue.getString("API_TOKEN_HEADER","authorization"),Ue.API_TOKEN_HEADER_KEY=Ue.getString("API_TOKEN_HEADER","bearer"),Ue.API_TOKEN_LIFETIME=Ue.getMs("API_TOKEN_LIFETIME","1d"),Ue.API_TOKEN_RENEW=Ue.getMs("API_TOKEN_RENEW","1d"),Ue.API_UPLOAD_COUNT=Ue.getInt("API_UPLOAD_COUNT",1),Ue.API_UPLOAD_FIELD=Ue.getString("API_UPLOAD_FIELD","upload"),Ue.API_UPLOAD_SIZE=Ue.getInt("API_UPLOAD_SIZE",2),Ue.API_UPLOAD_TEMP=Ue.getString("API_UPLOAD_TEMP","./temp"),Ue.API_USER_HISTORY=Ue.getBool("API_USER_HISTORY",!0),Ue.API_WEBSOCKET_START=Ue.getBool("API_WEBSOCKET_START",!1);const Be=new f({type:Ue.API_DB_TYPE,database:Ue.API_DB_DATABASE,username:Ue.API_DB_USERNAME,password:Ue.API_DB_PASSWORD,hostname:Ue.API_DB_HOST,hostport:Ue.API_DB_PORT,logging:Ue.API_DB_LOG,prefix:Ue.API_DB_PREFIX,timezone:Ue.API_DB_TIMEZONE});class He extends A{constructor(){super(...arguments),this._version=""}}const Ke=(e,t,i)=>{var r,n,s,o,d;return{type:e,model:null!==(r=null==t?void 0:t.getTableName())&&void 0!==r?r:null,client:null!==(n=null==i?void 0:i.audit_client)&&void 0!==n?n:null,href:null!==(s=null==i?void 0:i.audit_href)&&void 0!==s?s:null,user_agent:null!==(o=null==i?void 0:i.audit_user_agent)&&void 0!==o?o:null,user_id:null!==(d=null==i?void 0:i.audit_user_id)&&void 0!==d?d:null,state:!0}},qe={afterCreate:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Ue.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null;yield $e.create(Object.assign(Object.assign({},Ke("CREATE",r,t)),{record:n?e.getDataValue(n):null,data:e.toJSON()})).catch(Q)}),afterUpdate:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Ue.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null,s={},o=e.changed();o&&o.forEach(t=>s[t]=e.getDataValue(t)),yield $e.create(Object.assign(Object.assign({},Ke("UPDATE",r,t)),{record:n?e.getDataValue(n):null,data:s,previously:e.previous()})).catch(Q)}),afterDestroy:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Ue.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null;yield $e.create(Object.assign(Object.assign({},Ke("DELETE",r,t)),{record:n?e.getDataValue(n):null,data:e.toJSON()})).catch(Q)})};let Me=class extends He{};De([I(),be("design:type",Number)],Me.prototype,"id",void 0),De([P(),be("design:type",P)],Me.prototype,"secret",void 0),De([R(),be("design:type",Date)],Me.prototype,"logout",void 0),De([P(),be("design:type",P)],Me.prototype,"user_agent",void 0),De([S,be("design:type",Date)],Me.prototype,"created_at",void 0),De([T,be("design:type",Date)],Me.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Me.prototype,"deleted_at",void 0),De([N(()=>ze),be("design:type",Number)],Me.prototype,"user_id",void 0),Me=De([b(Be),w("auth"),Le("4.2.0")],Me);let Ye=class extends He{};De([I(),be("design:type",Number)],Ye.prototype,"id",void 0),De([P(),be("design:type",P)],Ye.prototype,"token",void 0),De([C(),be("design:type",C)],Ye.prototype,"state",void 0),De([S,be("design:type",Date)],Ye.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ye.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ye.prototype,"deleted_at",void 0),De([N(()=>ze),be("design:type",Number)],Ye.prototype,"user_id",void 0),Ye=De([b(Be),w("register"),Le("4.2.0")],Ye);let Ve=class extends He{};De([I(),be("design:type",Number)],Ve.prototype,"id",void 0),De([P(),be("design:type",P)],Ve.prototype,"name",void 0),De([F(),be("design:type",P)],Ve.prototype,"description",void 0),De([C(),be("design:type",C)],Ve.prototype,"state",void 0),De([S,be("design:type",Date)],Ve.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ve.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ve.prototype,"deleted_at",void 0),De([x(()=>Ge,"group_id"),be("design:type",Array)],Ve.prototype,"groups_routes",void 0),De([x(()=>Ge,"group_id"),be("design:type",Array)],Ve.prototype,"users_groups",void 0),Ve=De([b(Be),w("group"),j(qe),Le("4.2.0")],Ve);let Ge=class extends He{};De([S,be("design:type",Date)],Ge.prototype,"created_at",void 0),De([N(()=>Ve),be("design:type",Number)],Ge.prototype,"group_id",void 0),De([N(()=>ze),be("design:type",Number)],Ge.prototype,"user_id",void 0),Ge=De([b(Be),w("users_groups"),j(qe),Le("4.2.0")],Ge);let We=class extends He{};De([P(),be("design:type",P)],We.prototype,"password",void 0),De([S,be("design:type",Date)],We.prototype,"created_at",void 0),De([N(()=>ze),be("design:type",Number)],We.prototype,"user_id",void 0),We=De([b(Be),w("users_histories"),Le("4.2.0")],We);let ze=class extends He{};De([I(),be("design:type",Number)],ze.prototype,"id",void 0),De([P(),be("design:type",P)],ze.prototype,"name",void 0),De([P(),be("design:type",P)],ze.prototype,"email",void 0),De([P(),be("design:type",P)],ze.prototype,"username",void 0),De([P(),be("design:type",P)],ze.prototype,"password",void 0),De([P(),be("design:type",P)],ze.prototype,"salt",void 0),De([P(),be("design:type",P)],ze.prototype,"token",void 0),De([P(),be("design:type",P)],ze.prototype,"avatar",void 0),De([k(),be("design:type",P)],ze.prototype,"date",void 0),De([F(),be("design:type",P)],ze.prototype,"description",void 0),De([C(),be("design:type",C)],ze.prototype,"state",void 0),De([S,be("design:type",Date)],ze.prototype,"created_at",void 0),De([T,be("design:type",Date)],ze.prototype,"updated_at",void 0),De([D,be("design:type",Object)],ze.prototype,"deleted_at",void 0),De([x(()=>$e,"user_id"),be("design:type",Array)],ze.prototype,"audits",void 0),De([x(()=>Me,"user_id"),be("design:type",Array)],ze.prototype,"auths",void 0),De([x(()=>Ye,"user_id"),be("design:type",Array)],ze.prototype,"registers",void 0),De([x(()=>Ge,"user_id"),be("design:type",Array)],ze.prototype,"users_groups",void 0),De([x(()=>We,"user_id"),be("design:type",Array)],ze.prototype,"users_histories",void 0),ze=De([b(Be),w("user"),L({attributes:{exclude:["password","salt","token"]}}),U({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),j(qe),Le("4.2.0")],ze);let $e=class extends He{};De([I(),be("design:type",Number)],$e.prototype,"id",void 0),De([B("CREATE","DELETE","UPDATE"),be("design:type",P)],$e.prototype,"type",void 0),De([P(),be("design:type",P)],$e.prototype,"model",void 0),De([P(),be("design:type",P)],$e.prototype,"record",void 0),De([H(),be("design:type",Object)],$e.prototype,"data",void 0),De([H(),be("design:type",Object)],$e.prototype,"previously",void 0),De([P(),be("design:type",P)],$e.prototype,"client",void 0),De([F(),be("design:type",P)],$e.prototype,"href",void 0),De([P(),be("design:type",P)],$e.prototype,"user_agent",void 0),De([C(),be("design:type",C)],$e.prototype,"state",void 0),De([S,be("design:type",Date)],$e.prototype,"created_at",void 0),De([T,be("design:type",Date)],$e.prototype,"updated_at",void 0),De([D,be("design:type",Object)],$e.prototype,"deleted_at",void 0),De([N(()=>ze),be("design:type",Number)],$e.prototype,"user_id",void 0),$e=De([b(Be),w("audit"),Le("4.2.0")],$e);let Je=class extends He{};De([P(),be("design:type",P)],Je.prototype,"key",void 0),De([P(),be("design:type",P)],Je.prototype,"value",void 0),De([S,be("design:type",Date)],Je.prototype,"created_at",void 0),De([T,be("design:type",Date)],Je.prototype,"updated_at",void 0),Je=De([b(Be),w("configs"),j(qe),Le("4.2.0")],Je);let Xe=class extends He{};De([I(),be("design:type",Number)],Xe.prototype,"id",void 0),De([P(),be("design:type",P)],Xe.prototype,"token",void 0),De([K(),be("design:type",Number)],Xe.prototype,"timestamp",void 0),De([C(),be("design:type",C)],Xe.prototype,"state",void 0),De([S,be("design:type",Date)],Xe.prototype,"created_at",void 0),De([T,be("design:type",Date)],Xe.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Xe.prototype,"deleted_at",void 0),De([N(()=>ze),be("design:type",Number)],Xe.prototype,"user_id",void 0),Xe=De([b(Be),w("forgot"),Le("4.2.0")],Xe);let Ze=class extends He{};De([I(),be("design:type",Number)],Ze.prototype,"id",void 0),De([P(),be("design:type",P)],Ze.prototype,"name",void 0),De([P(),q(!0),be("design:type",P)],Ze.prototype,"route",void 0),De([P(),be("design:type",P)],Ze.prototype,"tag",void 0),De([F(),be("design:type",P)],Ze.prototype,"description",void 0),De([C(),be("design:type",C)],Ze.prototype,"state",void 0),De([S,be("design:type",Date)],Ze.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ze.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ze.prototype,"deleted_at",void 0),De([x(()=>Qe,"permission_id"),be("design:type",Array)],Ze.prototype,"groups_permissions",void 0),Ze=De([b(Be),w("permission"),j(qe),Le("4.3.1")],Ze);let Qe=class extends He{};De([S,be("design:type",Date)],Qe.prototype,"created_at",void 0),De([N(()=>Ve),be("design:type",Number)],Qe.prototype,"group_id",void 0),De([N(()=>Ze),be("design:type",Number)],Qe.prototype,"permission_id",void 0),Qe=De([b(Be),w("groups_permissions"),j(qe),Le("4.2.0")],Qe);let et=class extends He{};De([I(),be("design:type",Number)],et.prototype,"id",void 0),De([P(),be("design:type",P)],et.prototype,"type",void 0),De([P(),be("design:type",P)],et.prototype,"source",void 0),De([F(),be("design:type",P)],et.prototype,"message",void 0),De([S,be("design:type",Date)],et.prototype,"created_at",void 0),et=De([b(Be),w("log"),Le("4.2.0")],et);let tt=class extends He{};De([P(),be("design:type",P)],tt.prototype,"model",void 0),De([P(),be("design:type",P)],tt.prototype,"version",void 0),De([S,be("design:type",Date)],tt.prototype,"created_at",void 0),De([T,be("design:type",Date)],tt.prototype,"updated_at",void 0),tt=De([b(Be),w("migration"),Le("4.2.0")],tt);let it=class extends He{};De([P(),be("design:type",P)],it.prototype,"session",void 0),De([F(),be("design:type",P)],it.prototype,"json",void 0),De([K(),be("design:type",Number)],it.prototype,"expired",void 0),De([S,be("design:type",Date)],it.prototype,"created_at",void 0),De([T,be("design:type",Date)],it.prototype,"updated_at",void 0),it=De([b(Be),w("session"),Le("4.2.0")],it);class rt{static write(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(W.White,"",e,t,i)})}static error(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(W.Red,"error",e,t,i)})}static info(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(W.Cyan,"info",e,t,i)})}static success(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(W.Green,"success",e,t,i)})}static warning(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(W.Yellow,"warning",e,t,i)})}static writeRaw(e,t,i,r,n){return we(this,void 0,void 0,function*(){n&&z.console(e,t,i),Be&&(yield et.create({type:t,source:r,message:i}).catch(()=>null))})}}const nt=e=>Oe(e)?_e(e):void 0,st={http:nt(Ue.API_HTTP_CRT),token:nt(Ue.API_TOKEN_CRT)},ot={http:nt(Ue.API_HTTP_KEY),token:nt(Ue.API_TOKEN_KEY)};class dt extends Re{constructor(){super(),this.all=e=>we(this,void 0,void 0,function*(){e=e||Q;const t=yield it.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=>we(this,void 0,void 0,function*(){yield it.destroy().catch(Q),e&&e()}),this.destroy=(e,t)=>we(this,void 0,void 0,function*(){yield it.destroy({where:{session:e}}).catch(Q),t&&t()}),this.expired=()=>we(this,void 0,void 0,function*(){yield it.destroy({where:{expired:{[ve.lt]:Date.now()}}}).catch(Q)}),this.get=(e,t)=>we(this,void 0,void 0,function*(){t=t||Q;const i=yield it.findOne({where:{session:e,expired:{[ve.gte]:Date.now()}}}).catch(e=>(t(e),null));if(i){const e=JSON.parse(i.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield i.destroy().catch(Q),void t(null)}return void t(null,e)}t(null)}),this.length=e=>we(this,void 0,void 0,function*(){e&&e(null,(yield it.count().catch(Q))||0)}),this.set=(e,t,i)=>we(this,void 0,void 0,function*(){i=i||Q;const r=Date.now()+Ue.API_SESSION_LIFETIME,n=JSON.stringify(t),[s,o]=(yield it.findOrCreate({where:{session:e},defaults:{session:e,json:n,expired:r}}).catch(Q))||[];s&&(o||(s.json=n,s.expired=r,yield s.save().catch(Q))),i()}),this.loop=ee(this.expired,3e4),this.loop.start()}}class at{static create(e){return we(this,void 0,void 0,function*(){if(!ot.token)return{error:"KEY NOT FOUND"};const{id:t}=e,i=te(),r=yield Me.create({secret:i,user_id:t}).catch(at.error);if(!r)return{error:"INTERNAL SERVER ERROR"};return{auth:r,token:Se.sign({id:t,secret:i},ot.token,at.options())}})}static destroy(e){return we(this,void 0,void 0,function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)})}static error(e){rt.error(e.message,"api.token",Ue.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:`${Ue.API_TOKEN_LIFETIME}ms`}}static renew(e){return we(this,void 0,void 0,function*(){if(!ot.token)return{error:"KEY NOT FOUND"};const{error:t,decode:i}=at.verify(e,Ue.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(i){const{id:e,secret:t}=i;if(e&&t){const i=yield ze.findOne({where:{id:e,state:!0}}).catch(at.error);if(i){const r=yield Me.findOne({where:{secret:t,user_id:i.id}}).catch(at.error);if(r&&!r.logout){r.secret=te(),yield r.save().catch(at.error);return{auth:r,token:Se.sign({id:e,secret:r.secret},ot.token,at.options())}}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static user(e,t,i){return we(this,void 0,void 0,function*(){if(e){t=i.hash.encrypt(e);const r=yield ze.findOne({where:{token:t,state:!0}}).catch(at.error);if(r){const t=e.replace(/(-[\w]{4})/g,"-****"),[i]=(yield Me.findOrCreate({where:{secret:t,user_id:r.id},defaults:{secret:t,user_id:r.id}}).catch(at.error))||[];if(i)return{auth:i,user:r}}return{error:"ACCESS DENIED"}}const{error:r,decode:n}=at.verify(t);if(r)return{error:r};if(n){const{id:e,secret:t}=n;if(e&&t){const i=yield ze.findOne({where:{id:e,state:!0}}).catch(at.error);if(i){const e=yield Me.findOne({where:{secret:t,user_id:i.id}}).catch(at.error);if(e&&!e.logout)return{auth:e,user:i}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static verify(e,t){if(!st.token)return{error:"CERT NOT FOUND"};if(!e||e.split(".").length<3)return{error:"INVALID TOKEN"};try{return{decode:Se.verify(e,st.token,{clockTolerance:t})}}catch(e){return{error:"INVALID TOKEN"}}}}class ut extends t{constructor(e){super(e,{cert:st.http,cross:Ue.API_HTTP_CROSS,hybrid:Ue.API_HTTP_HYBRID,json:{strict:Ue.API_BODYPARSER_STRICT,inflate:Ue.API_BODYPARSER_INFLATE,limit:Ue.API_BODYPARSER_LIMIT,type:Ue.API_BODYPARSER_TYPE},key:ot.http,notfound:Ue.API_HTTP_NOTFOUND,path:Ue.API_HTTP_PATH,port:Ue.API_HTTP_PORT,public:Ue.API_HTTP_PUBLIC,redirect:Ue.API_HTTP_REDIRECT,session:{store:new dt,name:Ue.API_SESSION_NAME,secret:Ue.API_SESSION_SECRET,cookie:{maxAge:Ue.API_SESSION_LIFETIME},genid:te}}),this.hash=new $(Ue.API_KEY_HASH)}error(e,t){rt.error(e.message,t,Ue.API_CONSOLE_ERROR)}log(e,t){rt.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return we(this,void 0,void 0,function*(){yield Be.sync(),yield this.migrations(Be),yield ie(this.controllers,e=>we(this,void 0,void 0,function*(){re(e.sync)&&(yield e.sync(this))})),yield e.listen.call(this),Ue.API_WEBSOCKET_START&&this.server&&(this._webSocket=new me({server:this.server,verifyClient:(e,t)=>t(Ue.API_WEBSOCKET_START)}),this._webSocket.on("connection",(e,t)=>we(this,void 0,void 0,function*(){t.url||(t.url="");const i=t.url.length<=1?"":t.url.replace(/\//g,".");let r;e.on("message",n=>we(this,void 0,void 0,function*(){if(r)try{const s=JSON.parse(n);this.emit("ws.message"+i,{data:s,message:n,req:t,user:r,ws:e})}catch(s){this.emit("ws.message"+i,{erro:s,message:n,req:t,user:r,ws:e})}else{const{user:s}=yield at.user("",n.toString(),this);s&&(r=s,this.emit("ws.connection"+i,{req:t,user:r,ws:e}))}r||e.close()})),e.on("close",()=>{r&&this.emit("ws.close"+i,{user:r,ws:e})}),yield ne(2e3),r||e.close()})))})}migrations(e){return we(this,void 0,void 0,function*(){const t=[];yield ie(Object.keys(e.models),i=>we(this,void 0,void 0,function*(){var r;const n=e.models[i],{version:s}=ke.migrations(n);if(!s)return;const[o,d]=null!==(r=yield tt.findOrCreate({where:{model:n.tableName},defaults:{model:n.tableName,version:""}}).catch(this.error))&&void 0!==r?r:[];o&&(d||o.version!=s)&&(o.version=s,yield o.save().catch(this.error),t.push(n))})),t.length&&(yield M(e,t))})}websocket(){return this._webSocket}}class pt extends se{auth(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;const[o,d]=null!==(s=null==i?void 0:i.split(" "))&&void 0!==s?s:["",""];if(!d||o.toLowerCase()!=Ue.API_TOKEN_HEADER_KEY)return e.error("INVALID TOKEN");const{auth:a,error:u,user:p}=yield at.user(t,d,n);return u?e.error(u):a&&p?a.user_agent&&a.user_agent!=r?e.error("INVALID TOKEN"):(e.req.auth=a,e.req.user=p,void e.next()):e.error("INTERNAL SERVER ERROR")})}canCreate(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".create",i)})}canDelete(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".delete",i)})}canRead(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".read",i)})}canUpdate(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".update",i)})}error(e){rt.error(e.message,"api.controller",Ue.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,i){return we(this,void 0,void 0,function*(){if(i){if((yield this.permissions(i,{route:t})).length>0)return e.next()}e.unauthorized("ACCESS DENIED")})}permissions(e,t){return we(this,void 0,void 0,function*(){var i;return null!==(i=yield Ze.findAll({where:Object.assign(Object.assign({},null!=t?t:{}),{state:!0}),include:[{model:Qe,required:!0,include:[{model:Ve,required:!0,where:{state:!0},include:[{model:Ge,required:!0,where:{user_id:e.id}}]}]}]}).catch(this.error))&&void 0!==i?i:[]})}session(e,t,i){return we(this,void 0,void 0,function*(){i.auth&&i.user&&(i.user_agent?i.user_agent!=t&&i.regenerate(Q):(i.user_agent=t,i.save(Q))),e.next()})}sync(){return we(this,void 0,void 0,function*(){})}upload(e,t){t.path||(t.path=Ue.API_UPLOAD_TEMP),t.size||(t.size=Ue.API_UPLOAD_SIZE),t.field||(t.field=Ue.API_UPLOAD_FIELD),a.middleware(e,t)}validation(e,t){return we(this,void 0,void 0,function*(){const{error:i,value:r}=yield oe.object(t).parse().validateAsync(e.req.body);if(i)return e.validation(i);e.req.body=r,e.next()})}}De([Ne(0,i()),Ne(1,r(Ue.API_KEY_HEADER)),Ne(2,r(Ue.API_TOKEN_HEADER)),Ne(3,r("user-agent")),Ne(4,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,String,ut]),be("design:returntype",Promise)],pt.prototype,"auth",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],pt.prototype,"canCreate",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],pt.prototype,"canDelete",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],pt.prototype,"canRead",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],pt.prototype,"canUpdate",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],pt.prototype,"permission",null),De([Ne(0,i()),Ne(1,r("user-agent")),Ne(2,d()),be("design:type",Function),be("design:paramtypes",[s,String,Object]),be("design:returntype",Promise)],pt.prototype,"session",null),De([Ne(0,i()),Ne(1,o()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",void 0)],pt.prototype,"upload",null),De([Ne(0,i()),Ne(1,o()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",Promise)],pt.prototype,"validation",null);class ct{}var lt,yt;ct.ATTRIBUTES=Symbol("ATTRIBUTES"),ct.PERMISSIONS=Symbol("PERMISSIONS");let gt=class extends pt{constructor(){super(...arguments),this[lt]=[],this[yt]=["create","read","update","delete"]}attributes(e){if(0==this[ct.ATTRIBUTES].length&&(this[ct.ATTRIBUTES]=Object.keys(this.model().getAttributes())),de(e))return e.length?e.map(e=>ae(e)&&-1!=this[ct.ATTRIBUTES].indexOf(e)?e:void 0).filter(ae):this[ct.ATTRIBUTES];const{exclude:t,include:i}=e,r=ue(i)?this[ct.ATTRIBUTES]:i.map(e=>ae(e)&&-1!=this[ct.ATTRIBUTES].indexOf(e)?e:void 0).filter(ae),n=null!=t?t:[];return n.length?r.filter(e=>-1==n.indexOf(e)?e:void 0).filter(ae):r}create(e){return we(this,arguments,void 0,function*({ctx:e,options:t,body:i}){const r=yield this.model().create(Object.assign(Object.assign({},e.req.body),i||{}),Object.assign(Object.assign({},t||{}),Ce(e))).catch(this.error);if(r){const t=this.key();return e.prepare(p.OK,{[t]:r.getDataValue(t)}),r}e.error("INTERNAL SERVER ERROR")})}delete(e){return we(this,arguments,void 0,function*({ctx:e,options:t}){const i=this.key(),{[i]:r}=e.req.params;if(!r)return e.error("INTERNAL SERVER ERROR"),0;const n=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[i]:r}),individualHooks:!0}),Ce(e))).catch(this.error);return n?(e.success("OK"),n):(e.notFound("RECORD NOT FOUND"),0)})}error(e){(null==e?void 0:e.sql)?rt.error((null==e?void 0:e.message)+"\n"+(null==e?void 0:e.sql),"api.controller.sql",Ue.API_CONSOLE_ERROR):super.error(e)}findAll(e){return we(this,arguments,void 0,function*({ctx:e,options:t,callback:i,scope:r,advanced:n,attributes:s,unlimited:o}){var d,a,u;const c=this.scope(r),l=Object.assign({},t||{}),{limit:y,offset:g,asc:h,desc:v,search:m,where:_}=e.req.query;if(ue(l.limit)){const e=pe(ae(y)?parseInt(y)||0:Ue.API_MODEL_LIMIT,-1,Ue.API_MODEL_LIMIT_MAX);l.limit=e>0?e:o?void 0:Ue.API_MODEL_LIMIT}if(ce(l.limit)&&(l.limit=l.limit>0?l.limit:void 0),ae(g)){const e=g&&parseInt(g)||0;l.offset=e>0?e:void 0}s=null!=s?s:this.attributes(null!==(d=null==l?void 0:l.attributes)&&void 0!==d?d:[]);const O=[],E=e=>s.indexOf(e)>=0;if(ae(h)&&h.length&&O.push(...h.split(";").filter(E).map(e=>[e,"ASC"])),ae(v)&&v.length&&O.push(...v.split(";").filter(E).map(e=>[e,"DESC"])),O.length&&(l.order=O),l.where=Object.assign({},l.where||{}),ae(_)&&(null==n||n)){const t=Y.parse(s,_);if(!ue(t.error))return e.validation(t.error.join(", ")),{count:0,records:[]};l.where=Object.assign(Object.assign({},l.where),null!==(a=t.value)&&void 0!==a?a:{})}else{const e=[];s.forEach(t=>{ae(m)&&m.length&&e.push({[t]:{[ve.like]:`%${m}%`}})}),e.length&&(l.where=Object.assign(Object.assign({},l.where),{[ve.or]:[...e]}))}const f=c.count(Object.assign(Object.assign({},l),{distinct:!!l.include,col:this[ct.ATTRIBUTES].length?this[ct.ATTRIBUTES][0]:void 0})).catch(this.error),A=c.findAll(l).catch(this.error);yield Promise.allSettled([f,A]);const I=null!==(u=yield f)&&void 0!==u?u:0;let P=yield A;const R={count:I};return P?(P=i?yield i(P):P,(ce(null==t?void 0:t.limit)||0==I)&&(R.count=P.length),e.prepare(p.OK,Object.assign(Object.assign({},R),{records:P})),Object.assign(Object.assign({},R),{records:P})):(e.error("INTERNAL SERVER ERROR"),Object.assign(Object.assign({},R),{records:[]}))})}findOne(e){return we(this,arguments,void 0,function*({ctx:e,options:t,callback:i,scope:r}){const n=this.key(),{[n]:s}=e.req.params,o=yield this.scope(r).findOne(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:s})})).catch(this.error);return o?(e.prepare(p.OK,i?yield i(o):o.toJSON()),o):null===o?e.notFound("RECORD NOT FOUND"):void e.error("INTERNAL SERVER ERROR")})}sync(){return we(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t={description:"",state:!0};yield ie(this[ct.PERMISSIONS],i=>we(this,void 0,void 0,function*(){const r=`${e}.${i}`,n=le(e.replace(/_/g," ")," ");yield Ze.findOrCreate({where:{route:r},defaults:Object.assign({name:`${n} ${le(i," ")}`,route:r,tag:n},t)})}))})}update(e){return we(this,arguments,void 0,function*({ctx:e,options:t,body:i}){var r;const n=this.key(),{[n]:s}=e.req.params,[o]=null!==(r=yield this.model().update(Object.assign(Object.assign({},e.req.body),i||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:s}),individualHooks:!0}),Ce(e))).catch(this.error))&&void 0!==r?r:[];return o?(e.success("OK"),!0):(e.success("RECORD NOT CHANGED"),!1)})}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}};lt=ct.ATTRIBUTES,yt=ct.PERMISSIONS,gt=De([u(pt)],gt);let ht=class extends gt{model(){return $e}all(e,t,i){return we(this,void 0,void 0,function*(){const r={};t&&(r.type=t),i&&(r.table=i),yield this.findAll({ctx:e,options:{attributes:{exclude:["data","previously"]},where:r,order:[["created_at","DESC"]]},unlimited:!0})})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}};De([c(),l("auth"),l("canRead"),Ne(0,i()),Ne(1,y("type")),Ne(2,y("table")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],ht.prototype,"all",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],ht.prototype,"get",null),ht=De([g("/audits"),u(gt)],ht);let vt=class extends pt{login(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;yield ne(Ue.API_SLEEP_AUTH);const o=yield ze.scope("password").findOne({where:{[ve.or]:[{email:i},{username:i}]}}).catch(this.error);if(r+=null!==(s=null==o?void 0:o.salt)&&void 0!==s?s:"",!o||o.password!=J(r))return e.notFound("INVALID USERNAME OR PASSWORD"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const d=yield Ye.findOne({where:{state:!0,user_id:o.id}}).catch(this.error);if(d)return e.error("ACTIVATION REQUIRED"),n.emit("auth.activation",{ctx:e,register:d,user:o}),void this.emit("auth.activation",{ctx:e,register:d,user:o});if(!o.state)return e.notFound("INVALID USERNAME OR PASSWORD"),n.emit("auth.failure",{ctx:e,user:o}),void this.emit("auth.failure",{ctx:e,user:o});const{auth:a,error:u,token:p}=yield at.create(o);return u?(e.error(u),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):a&&p?(a.user_agent=t,yield a.save().catch(this.error),e.json({token:p}),n.emit("auth.login",{auth:a,ctx:e,user:o}),void this.emit("auth.login",{auth:a,ctx:e,user:o})):(e.error("INTERNAL SERVER ERROR"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))})}logout(e,t,i,r){return we(this,void 0,void 0,function*(){if(yield at.destroy(t))return e.success("OK"),r.emit("auth.logout",{auth:t,ctx:e,user:i}),void this.emit("auth.logout",{auth:t,ctx:e,user:i});e.unauthorized("ACCESS DENIED")})}renew(e,t,i,r){return we(this,void 0,void 0,function*(){const{auth:n,error:s,token:o}=yield at.renew(i);return s?e.error(s):n?(n.user_agent=t,yield n.save().catch(this.error),e.json({token:o}),r.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 we(this,void 0,void 0,function*(){const i=yield this.permissions(t);if(!i)return e.error("INTERNAL SERVER ERROR");e.json(Object.assign(Object.assign({},ye(["username","date","description","state","created_at","updated_at","deleted_at"],t.toJSON())),{permissions:i.map(e=>e.route)}))})}};var mt;De([h("/login"),l("validation",{username:oe.string().min(3).required(),password:oe.string().min(5).required()}),Ne(0,i()),Ne(1,r("user-agent")),Ne(2,v("username")),Ne(3,v("password")),Ne(4,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,String,ut]),be("design:returntype",Promise)],vt.prototype,"login",null),De([c("/logout"),l("auth"),Ne(0,i()),Ne(1,xe()),Ne(2,je()),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,Me,ze,ut]),be("design:returntype",Promise)],vt.prototype,"logout",null),De([h("/renew"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,r("user-agent")),Ne(2,v("token")),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,ut]),be("design:returntype",Promise)],vt.prototype,"renew",null),De([c(),l("auth"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,ze]),be("design:returntype",Promise)],vt.prototype,"user",null),vt=De([g("/auth"),u(pt)],vt);let _t=class extends pt{constructor(){super(...arguments),this[mt]=["delete","download","edit","list","read","rename","upload","write"]}directory(){return Ue.API_HTTP_PUBLIC||"./"}files(e){return we(this,void 0,void 0,function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const i=Te(this.directory(),t);if(!Oe(i)||!Ee(i).isDirectory())return e.notFound("RECORD NOT FOUND");let r=[];return r=fe(i),r=r.map(e=>this.info(Te(i,e))),r=r.filter(ge),Object.assign(Object.assign({},this.info(i)),{files:r})})}access(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,this.name()+"."+t,i)})}info(e){if(!Oe(e))return null;const t=Ee(e),i=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const r=t.isDirectory();return{name:i,path:e.replace(/^\/\//,"/"),size:t.size,extension:r?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:r,symlink:t.isSymbolicLink()}}name(){return"files"}sync(){return we(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t=le(e.replace(/_/g," ")," "),i={description:"",state:!0};yield ie(this[ct.PERMISSIONS],r=>we(this,void 0,void 0,function*(){const n=`${e}.${r}`;yield Ze.findOrCreate({where:{route:n},defaults:Object.assign({name:`${t} ${le(r," ")}`,route:n,tag:t},i)})}))})}};mt=ct.PERMISSIONS,De([c("/path"),c("/path/*path"),l("auth"),l("access","list"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],_t.prototype,"files",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],_t.prototype,"access",null),_t=De([g("/files"),u(pt)],_t);let Ot=class extends pt{check(e,t){return we(this,void 0,void 0,function*(){const i=yield this.find(t);if(!i||!i.user)return e.notFound("RECORD NOT FOUND");i.token=he(),yield i.save(),e.json({token:i.token})})}forgot(e,t,i){return we(this,void 0,void 0,function*(){yield ne(Ue.API_SLEEP_FORGOT);const r=t,n=yield ze.findOne({where:{[ve.or]:[{email:r},{username:t}]}}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const s=he(),o=Date.now()+6e4*Ue.API_TOKEN_FORGOT,d=yield Xe.create({token:s,timestamp:o,state:!0,user_id:n.id});e.success("OK"),i.emit("forgot.send",{ctx:e,forgot:d,user:n}),this.emit("forgot.send",{ctx:e,forgot:d,user:n})})}reset(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield this.find(t);if(!n)return e.notFound("RECORD NOT FOUND");n.state=!1,yield n.save().catch(this.error),n.user.password=J(i),yield n.user.save().catch(this.error),e.success("OK"),r.emit("forgot.reset",{ctx:e,user:n.user}),this.emit("forgot.reset",{ctx:e,user:n.user})})}find(e){return we(this,void 0,void 0,function*(){return yield Xe.findOne({where:{token:e,state:!0},include:[{model:ze,required:!0}]}).catch(this.error)})}};De([c("/check"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,v("token")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Ot.prototype,"check",null),De([h(),l("validation",{username:oe.string().min(4).required()}),Ne(0,i()),Ne(1,v("username")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],Ot.prototype,"forgot",null),De([h("/reset"),l("validation",{token:oe.string().required(),password:oe.string().min(5).required()}),Ne(0,i()),Ne(1,v("token")),Ne(2,v("password")),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,ut]),be("design:returntype",Promise)],Ot.prototype,"reset",null),Ot=De([g("/forgot"),u(pt)],Ot);let Et=class extends gt{constructor(){super(...arguments),this._crud={}}CrudArgumentsCreate(e){return{ctx:e}}CrudArgumentsFindAll(e){return{ctx:e}}CrudArgumentsFindOne(e){return{ctx:e}}CrudArgumentsDelete(e){return{ctx:e}}CrudArgumentsUpdate(e){return{ctx:e}}CrudValidationCreate(){return this._crud}CrudValidationUpdate(){return this._crud}add(e){return we(this,void 0,void 0,function*(){yield this.create(this.CrudArgumentsCreate(e))})}all(e){return we(this,void 0,void 0,function*(){yield this.findAll(this.CrudArgumentsFindAll(e))})}del(e){return we(this,void 0,void 0,function*(){yield this.delete(this.CrudArgumentsDelete(e))})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne(this.CrudArgumentsFindOne(e))})}set(e){return we(this,void 0,void 0,function*(){yield this.update(this.CrudArgumentsUpdate(e))})}validationCreate(e){return we(this,void 0,void 0,function*(){const t=this.CrudValidationCreate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}validationUpdate(e){return we(this,void 0,void 0,function*(){const t=this.CrudValidationUpdate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}};De([h(),l("auth"),l("canCreate"),l("validationCreate"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"add",null),De([c(),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"all",null),De([m("/:id"),l("auth"),l("canDelete"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"del",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"get",null),De([_("/:id"),l("auth"),l("canUpdate"),l("validationUpdate"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"set",null),De([Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"validationCreate",null),De([Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Et.prototype,"validationUpdate",null),Et=De([u(gt)],Et);let ft=class extends Et{constructor(){super(...arguments),this.schemaCreate={name:oe.string().required(),description:oe.string().empty(""),state:oe.boolean().parse().required()},this.schemaUpdate={name:oe.string().empty(),description:oe.string().empty(),state:oe.boolean().parse().empty()}}model(){return Ve}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}};ft=De([g("/groups"),u(Et)],ft);let At=class extends gt{model(){return Qe}all(e,t){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{group_id:t},include:[{model:Ze,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.permission)})})}me(e,t){return we(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield Ve.findByPk(t,{attributes:["id"]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const s=n.id;if(yield Qe.destroy(Object.assign({where:{group_id:s},individualHooks:!0},r)),i){let e=0;yield ne(1e3);for(let t=0;t<i.length;t++)e=yield Ze.count({where:{id:i[t]}}),e&&(yield Qe.create({group_id:s,permission_id:i[t]},Object.assign({},r)))}e.success("OK")})}};var It;De([c("/:id/permissions"),l("auth"),l("canRead","groups"),Ne(0,i()),Ne(1,O("id")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],At.prototype,"all",null),De([c("/permissions"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,ze]),be("design:returntype",Promise)],At.prototype,"me",null),De([_("/:id/permissions"),l("auth"),l("canUpdate","groups"),l("validation",{permissions:oe.array(oe.number().parse())}),Ne(0,i()),Ne(1,O("id")),Ne(2,v("permissions")),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Array,Object]),be("design:returntype",Promise)],At.prototype,"set",null),At=De([g("/groups"),u(gt)],At);let Pt=class extends gt{constructor(){super(...arguments),this[It]=["read"]}model(){return et}all(e,t,i){return we(this,void 0,void 0,function*(){const r={};t&&(r.type=t),i&&(r.source=i),yield this.findAll({ctx:e,options:{where:r,order:[["created_at","DESC"]]},unlimited:!0})})}};It=ct.PERMISSIONS,De([c(),l("auth"),l("canRead"),Ne(0,i()),Ne(1,y("type")),Ne(2,y("source")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],Pt.prototype,"all",null),Pt=De([g("/logs"),u(gt)],Pt);let Rt=class extends Et{constructor(){super(...arguments),this.schemaCreate={name:oe.string().required(),route:oe.string().required(),tag:oe.string().required(),description:oe.string().empty(""),state:oe.boolean().parse().required()},this.schemaUpdate={name:oe.string().empty(),route:oe.string().empty(),tag:oe.string().empty(),description:oe.string().empty(),state:oe.boolean().parse().empty()}}model(){return Ze}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}};Rt=De([g("/permissions"),u(Et)],Rt);let St=class extends pt{register(e,t,i){return we(this,void 0,void 0,function*(){yield ne(Ue.API_SLEEP_REGISTRY);const{name:r,date:n,email:s,username:o,password:d,confirm:a}=t,u=o||s,p=J(d);if(yield ze.count({where:{[ve.or]:[{email:s},{username:u}]}}).catch(this.error))return e.validation("INVALID EMAIL OR USERNAME");if(p!=J(a))return e.error("INVALID PASSWORD");const c=yield ze.create({name:r,email:s,username:u,password:p,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!c)return e.error("INTERNAL SERVER ERROR");const l=yield Ye.create({token:yield this.getId(),user_id:c.id,state:!0}).catch(this.error);if(!l)return yield c.destroy().catch(this.error),e.error("INTERNAL SERVER ERROR");e.success("OK"),i.emit("register.user",{ctx:e,register:l,user:c}),this.emit("register.user",{ctx:e,register:l,user:c})})}confirm(e,t,i){return we(this,void 0,void 0,function*(){const r=yield Ye.findOne({where:{token:t,state:!0},include:[{model:ze,required:!0}]}).catch(this.error);if(!r)return e.notFound("RECORD NOT FOUND");r.state=!1,yield r.save().catch(this.error),r.user.state=!0,yield r.user.save().catch(this.error),e.success("OK"),i.emit("register.confirm",{ctx:e,register:r,user:r.user}),this.emit("register.confirm",{ctx:e,register:r,user:r.user})})}send(e,t,i){return we(this,void 0,void 0,function*(){const r=t,n=yield Ye.findOne({where:{state:!0},include:[{model:ze,required:!0,where:{[ve.or]:[{email:r},{username:t}]}}]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");e.success("OK"),i.emit("register.send",{ctx:e,register:n,user:n.user}),this.emit("register.send",{ctx:e,register:n,user:n.user})})}getId(){return we(this,void 0,void 0,function*(){const e=te();return(yield Ye.count({where:{token:e}}))?this.getId():e})}};De([h(),l("validation",{name:oe.string().required(),date:oe.date().required(),email:oe.string().email().required(),username:oe.string().min(4).empty(),password:oe.string().min(5).required(),confirm:oe.string().min(5).required()}),Ne(0,i()),Ne(1,v()),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,Object,ut]),be("design:returntype",Promise)],St.prototype,"register",null),De([h("/confirm"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,v("token")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],St.prototype,"confirm",null),De([h("/send"),l("validation",{username:oe.string().min(4).required()}),Ne(0,i()),Ne(1,v("username")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],St.prototype,"send",null),St=De([g("/register"),u(pt)],St);let Tt=class extends pt{setup(e,t){return we(this,void 0,void 0,function*(){var i;if(yield ze.count())return e.success("OK");const r=he(),n=yield ze.create({name:"Admin",email:"admin@localhost",username:"admin",password:J("admin"+r),salt:r,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0},Object.assign({},t)),s=yield Ve.create(Object.assign({name:"Admin"},{description:"API CORE",state:!0}),Object.assign({},t));yield Ge.create({user_id:n.id,group_id:s.id},Object.assign({},t));const o=null!==(i=yield Ze.findAll({where:{state:!0}}).catch(this.error))&&void 0!==i?i:[];yield ie(o,e=>we(this,void 0,void 0,function*(){yield Qe.create({group_id:s.id,permission_id:e.id},Object.assign({},t))})),e.success("OK")})}};De([c(),Ne(0,i()),Ne(1,Fe()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",Promise)],Tt.prototype,"setup",null),Tt=De([g("/setup"),u(pt)],Tt);let Dt=class extends gt{model(){return ze}constructor(){super(),this.path=Ue.API_HTTP_PUBLIC+"/avatar",Ue.API_HTTP_PUBLIC&&Oe(Ue.API_HTTP_PUBLIC)&&!Oe(this.path)&&Ae(this.path)}avatar(e,t,i,r){return we(this,void 0,void 0,function*(){if(t.length){const n=t[0].filename||"";if(n){const t=this.path+"/"+i.avatar;if(Oe(t)&&Ie(t).isFile()&&Pe(t),i.avatar=n,yield i.save(Object.assign({},r)).catch(this.error))return e.success("OK")}}e.success("RECORD NOT CHANGED")})}avatar_del(e,t,i){return we(this,void 0,void 0,function*(){const r=this.path+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},i)).catch(this.error))&&Oe(r)&&Pe(r),e.success("OK")})}password(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;if(Ue.API_USER_HISTORY){if(yield We.count({where:{password:J(i+r.id)}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED")}const o=yield this.scope("password").findOne({where:{id:r.id,state:!0}}).catch(this.error);return t+=null!==(s=null==o?void 0:o.salt)&&void 0!==s?s:"",o&&o.password==J(t)?(o.salt=he(),o.password=J(i+o.salt),(yield o.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("RECORD NOT CHANGED")):e.error("INVALID PASSWORD")})}token(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(r)return e.json({token:i.hash.decrypt(r.token)});e.notFound("RECORD NOT FOUND")})}token_del(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(r)return r.token="",yield r.save(Object.assign({},i)).catch(this.error),e.success("OK");e.notFound("RECORD NOT FOUND")})}token_get(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(r)return e.json({token:i.hash.decrypt(r.token)});e.notFound("RECORD NOT FOUND")})}token_renew(e,t,i,r){return we(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=r.hash.encrypt(t),yield n.save(Object.assign({},i)).catch(this.error),e.json({token:t})}e.notFound("RECORD NOT FOUND")})}token_new(){return we(this,void 0,void 0,function*(){var e;const t=te();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){return we(this,void 0,void 0,function*(){const i=he(),r=yield this.create({ctx:e,body:{password:J(t+i),salt:i}});Ue.API_USER_HISTORY&&r&&(yield We.create({password:J(t+r.id),user_id:r.id}))})}all(e){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{attributes:{exclude:["password","salt","token"]}},unlimited:!0})})}del(e,t,i){return we(this,void 0,void 0,function*(){if(i.id.toString()==t)return e.notFound("RECORD NOT FOUND");yield this.delete({ctx:e})})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}set(e,t,i){return we(this,void 0,void 0,function*(){if(Ue.API_USER_HISTORY&&i){const r=J(i+t);if(yield We.count({where:{password:r}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED");yield We.create({password:r,user_id:t}).catch(this.error)}const r=i?he():"";yield this.update({ctx:e,body:i?{password:J(i+r),salt:r}:{}})})}};De([h("/avatar"),l("auth"),l("upload",e=>({count:1,field:"file",path:e.controller.path,types:["image/bmp","image/jpeg","image/png"],size:32})),Ne(0,i()),Ne(1,E()),Ne(2,je()),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,Array,ze,Object]),be("design:returntype",Promise)],Dt.prototype,"avatar",null),De([m("/avatar"),l("auth"),Ne(0,i()),Ne(1,je()),Ne(2,Fe()),be("design:type",Function),be("design:paramtypes",[s,ze,Object]),be("design:returntype",Promise)],Dt.prototype,"avatar_del",null),De([h("/password"),l("auth"),l("validation",{oldPassword:oe.string().min(5).required(),newPassword:oe.string().min(5).required(),confirmPassword:oe.string().equal(oe.ref("newPassword"))}),Ne(0,i()),Ne(1,v("oldPassword")),Ne(2,v("newPassword")),Ne(3,je()),Ne(4,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,String,ze,Object]),be("design:returntype",Promise)],Dt.prototype,"password",null),De([c("/token"),l("auth"),Ne(0,i()),Ne(1,je()),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,ze,ut]),be("design:returntype",Promise)],Dt.prototype,"token",null),De([m("/token/:id"),l("auth"),l("canDelete"),Ne(0,i()),Ne(1,O("id")),Ne(2,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Object]),be("design:returntype",Promise)],Dt.prototype,"token_del",null),De([c("/token/:id"),l("auth"),l("canCreate"),Ne(0,i()),Ne(1,O("id")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],Dt.prototype,"token_get",null),De([c("/token/renew/:id"),l("auth"),l("canUpdate"),Ne(0,i()),Ne(1,O("id")),Ne(2,Fe()),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,Object,ut]),be("design:returntype",Promise)],Dt.prototype,"token_renew",null),De([h(),l("auth"),l("canCreate"),l("validation",{name:oe.string().required(),email:oe.string().email().required(),username:oe.string().min(4).required(),password:oe.string().min(5).required(),description:oe.string().empty(""),state:oe.boolean().parse().required()}),Ne(0,i()),Ne(1,v("password")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Dt.prototype,"add",null),De([c(),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Dt.prototype,"all",null),De([m("/:id"),l("auth"),l("canDelete"),Ne(0,i()),Ne(1,O("id")),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,ze]),be("design:returntype",Promise)],Dt.prototype,"del",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Dt.prototype,"get",null),De([_("/:id"),l("auth"),l("canUpdate"),l("validation",{name:oe.string().empty(),email:oe.string().email().empty(),username:oe.string().min(4).empty(),password:oe.string().min(5).empty().filter(""),description:oe.string().empty(),state:oe.boolean().parse().empty()}),Ne(0,i()),Ne(1,O("id")),Ne(2,v("password")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],Dt.prototype,"set",null),Dt=De([g("/users"),u(gt),be("design:paramtypes",[])],Dt);let Nt=class extends gt{model(){return Ge}all(e,t){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{user_id:t},include:[{model:Ve,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.group)})})}me(e,t){return we(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield ze.findByPk(t,{attributes:["id"]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");if(yield Ge.destroy(Object.assign({where:{user_id:n.id},individualHooks:!0},r)),i){let e=0;yield ne(1e3);for(let t=0;t<i.length;t++)e=yield Ve.count({where:{id:i[t]}}),e&&(yield Ge.create({user_id:n.id,group_id:i[t]},Object.assign({},r)))}e.success("OK")})}};De([c("/:id/groups"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,O("id")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Nt.prototype,"all",null),De([c("/groups"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,ze]),be("design:returntype",Promise)],Nt.prototype,"me",null),De([_("/:id/groups"),l("auth"),l("canUpdate","users"),l("validation",{groups:oe.array(oe.number().parse())}),Ne(0,i()),Ne(1,O("id")),Ne(2,v("groups")),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Array,Object]),be("design:returntype",Promise)],Nt.prototype,"set",null),Nt=De([g("/users"),u(gt)],Nt);class bt{static all(){return we(this,void 0,void 0,function*(){const e=yield Je.findAll().catch(bt.error),t={};return e&&e.forEach(e=>t[e.key]=e.value),t})}static del(e,t){return we(this,void 0,void 0,function*(){var i;const r=null!==(i=null==t?void 0:t.id)&&void 0!==i?i:null;return((yield Je.destroy(Object.assign({where:{key:e},individualHooks:!0},{user_id:r})).catch(bt.error))||0)>0})}static error(e){rt.error(e.message,"api.config",Ue.API_CONSOLE_ERROR)}static get(e){return we(this,arguments,void 0,function*(e,t=""){const[i]=(yield Je.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(bt.error))||[];return i?i.value:t})}static set(e,t,i){return we(this,void 0,void 0,function*(){var r;const n=null!==(r=null==i?void 0:i.id)&&void 0!==r?r:null,[s]=(yield Je.findOrCreate(Object.assign({where:{key:e}},{user_id:n})).catch(bt.error))||[];s&&(s.value=t,yield s.save().catch(bt.error))})}}export{ut as Application,$e as Audit,ht as AuditsController,Me as Auth,vt as AuthController,bt as Config,Je as Configs,pt as ControllerBase,ct as ControllerKeys,Et as CrudController,Ue as Env,_t as FilesController,Xe as Forgot,Ot as ForgotController,Ve as Group,Qe as GroupPermission,ft as GroupsController,At as GroupsPermissionsController,et as Log,rt as Logs,Pt as LogsController,ke as Metadata,Le as Migrate,tt as Migration,He as Model,gt as ModelController,Ze as Permission,Rt as PermissionsController,Ye as Register,St as RegisterController,Fe as ReqAudit,xe as ReqAuth,je as ReqUser,it as Session,Tt as SetupController,dt as Store,at as Token,ze as User,Ge as UserGroup,We as UserHistory,Dt as UsersController,Nt as UsersGroupsController,Ce as audit,st as crt,Be as database,qe as hooks,ot as key};
|
|
7
|
+
import{parameterFactory as e,Application as t,Ctx as i,Headers as r,App as n,Context as s,Argument as o,Session as d,Upload as a,Extends as u,Status as p,Get as c,Middleware as l,Query as y,Controller as g,Post as h,Body as v,Delete as _,Put as m,Params as E,Files as A}from"@andrewcaires/express";import{Connection as O,Model as I,Id as P,String as f,FullDate as R,CreatedAt as S,UpdatedAt as T,DeletedAt as D,BelongsTo as N,Database as b,ModelName as w,Boolean as C,Text as F,HasMany as x,Hooks as j,DateOnly as k,DefaultScope as L,Scopes as B,Enum as U,Json as M,BigInt as H,Unique as K,migrate as q,Where as Y}from"@andrewcaires/sequelize";import{Metadata as V,Env as $,LogColor as G,Log as W,Hash as z,sha256 as J}from"@andrewcaires/node";import{config as X}from"dotenv";import{isObject as Z,noop as Q,loop as ee,uuidv4 as te,forEachSeries as ie,isFunction as re,sleep as ne,EventEmitter as se,Validation as oe,isArray as de,isString as ae,isUndefined as ue,clamp as pe,isNumber as ce,upperCamelCase as le,denied as ye,isDef as ge,uniqueID as he}from"@andrewcaires/utils.js";import{Op as ve}from"sequelize";import{WebSocketServer as _e}from"ws";import{readFileSync as me,existsSync as Ee,statSync as Ae,readdirSync as Oe,mkdirSync as Ie,lstatSync as Pe,rmSync as fe}from"fs";import{Store as Re}from"express-session";import Se from"jsonwebtoken";import{join as Te}from"path";function De(e,t,i,r){var n,s=arguments.length,o=s<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,i,r);else for(var d=e.length-1;d>=0;d--)(n=e[d])&&(o=(s<3?n(o):s>3?n(t,i,o):n(t,i))||o);return s>3&&o&&Object.defineProperty(t,i,o),o}function Ne(e,t){return function(i,r){t(i,r,e)}}function be(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function we(e,t,i,r){return new(i||(i=Promise))(function(n,s){function o(e){try{a(r.next(e))}catch(e){s(e)}}function d(e){try{a(r.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,d)}a((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const Ce=e=>{var t,i,r,n,s,o,d,a,u;return{audit_client:null!==(t=e.ip())&&void 0!==t?t:"0.0.0.0",audit_href:(null===(i=null==e?void 0:e.req)||void 0===i?void 0:i.protocol)+"://"+(null===(r=null==e?void 0:e.req)||void 0===r?void 0:r.get("host"))+(null===(n=null==e?void 0:e.req)||void 0===n?void 0:n.originalUrl),audit_user_agent:null!==(o=null===(s=e.req)||void 0===s?void 0:s.headers["user-agent"])&&void 0!==o?o:"",audit_user_id:null!==(u=null===(a=null===(d=null==e?void 0:e.req)||void 0===d?void 0:d.user)||void 0===a?void 0:a.id)&&void 0!==u?u:null}},Fe=e(({ctx:e})=>Ce(e)),xe=e(({ctx:e})=>e.req.auth),je=e(({ctx:e})=>e.req.user);class ke{static migrations(e){return V(ke.MIGRATE,e,{version:""})}}ke.MIGRATE=Symbol("MIGRATE");const Le=e=>t=>{ke.migrations(t).version=e};X({quiet:!0});class Be extends ${}Be.API_BASE_NAME=Be.getString("API_BASE_NAME",""),Be.API_BODYPARSER_STRICT=Be.getBool("API_BODYPARSER_STRICT",!0),Be.API_BODYPARSER_INFLATE=Be.getBool("API_BODYPARSER_INFLATE",!0),Be.API_BODYPARSER_LIMIT=Be.getString("API_BODYPARSER_LIMIT","10mb"),Be.API_BODYPARSER_TYPE=Be.getString("API_BODYPARSER_TYPE","json"),Be.API_CONSOLE_ERROR=Be.getBool("API_CONSOLE_ERROR",!1),Be.API_DB_DATABASE=Be.getString("API_DB_DATABASE",""),Be.API_DB_HOST=Be.getString("API_DB_HOST","127.0.0.1"),Be.API_DB_PASSWORD=Be.getString("API_DB_PASSWORD",""),Be.API_DB_PORT=Be.getInt("API_DB_PORT",3306),Be.API_DB_TYPE=Be.getString("API_DB_TYPE",""),Be.API_DB_USERNAME=Be.getString("API_DB_USERNAME","root"),Be.API_DB_LOG=Be.getBool("API_DB_LOG",!1),Be.API_DB_AUDIT=Be.getBool("API_DB_AUDIT",!0),Be.API_DB_PREFIX=Be.getString("API_DB_PREFIX",""),Be.API_DB_TIMEZONE=Be.getString("API_DB_TIMEZONE","+00:00"),Be.API_HTTP_CRT=Be.getString("API_HTTP_CRT",""),Be.API_HTTP_KEY=Be.getString("API_HTTP_KEY",""),Be.API_HTTP_PORT=Be.getInt("API_HTTP_PORT",3e3),Be.API_HTTP_PUBLIC=Be.getString("API_HTTP_PUBLIC",""),Be.API_HTTP_CROSS=Be.getBool("API_HTTP_CROSS",!1),Be.API_HTTP_HYBRID=Be.getBool("API_HTTP_HYBRID",!1),Be.API_HTTP_NOTFOUND=Be.getString("API_HTTP_NOTFOUND",""),Be.API_HTTP_PATH=Be.getString("API_HTTP_PATH","/api"),Be.API_HTTP_REDIRECT=Be.getString("API_HTTP_REDIRECT",""),Be.API_KEY_HASH=Be.getString("API_KEY_HASH",""),Be.API_KEY_HEADER=Be.getString("API_KEY_HEADER","x-api-key"),Be.API_MODEL_LIMIT=Be.getInt("API_MODEL_LIMIT",10),Be.API_MODEL_LIMIT_MAX=Be.getInt("API_MODEL_LIMIT_MAX",500),Be.API_SLEEP_AUTH=Be.getMs("API_SLEEP_AUTH","2s"),Be.API_SLEEP_FORGOT=Be.getMs("API_SLEEP_FORGOT","5s"),Be.API_SLEEP_REGISTRY=Be.getMs("API_SLEEP_REGISTRY","5s"),Be.API_SESSION_NAME=Be.getString("API_SESSION_NAME","session.id"),Be.API_SESSION_LIFETIME=Be.getMs("API_SESSION_LIFETIME","1d"),Be.API_SESSION_SECRET=Be.getString("API_SESSION_SECRET","yoursecret"),Be.API_TOKEN_CRT=Be.getString("API_TOKEN_CRT",""),Be.API_TOKEN_KEY=Be.getString("API_TOKEN_KEY",""),Be.API_TOKEN_FORGOT=Be.getMs("API_TOKEN_LIFETIME","1d"),Be.API_TOKEN_HEADER=Be.getString("API_TOKEN_HEADER","authorization"),Be.API_TOKEN_HEADER_KEY=Be.getString("API_TOKEN_HEADER","bearer"),Be.API_TOKEN_LIFETIME=Be.getMs("API_TOKEN_LIFETIME","1d"),Be.API_TOKEN_RENEW=Be.getMs("API_TOKEN_RENEW","1d"),Be.API_UPLOAD_COUNT=Be.getInt("API_UPLOAD_COUNT",1),Be.API_UPLOAD_FIELD=Be.getString("API_UPLOAD_FIELD","upload"),Be.API_UPLOAD_SIZE=Be.getInt("API_UPLOAD_SIZE",2),Be.API_UPLOAD_TEMP=Be.getString("API_UPLOAD_TEMP","./temp"),Be.API_USER_HISTORY=Be.getBool("API_USER_HISTORY",!0),Be.API_WEBSOCKET_START=Be.getBool("API_WEBSOCKET_START",!1);const Ue=new O({type:Be.API_DB_TYPE,database:Be.API_DB_DATABASE,username:Be.API_DB_USERNAME,password:Be.API_DB_PASSWORD,hostname:Be.API_DB_HOST,hostport:Be.API_DB_PORT,logging:Be.API_DB_LOG,prefix:Be.API_DB_PREFIX,timezone:Be.API_DB_TIMEZONE});class Me extends I{constructor(){super(...arguments),this._version=""}}const He=(e,t,i)=>{var r,n,s,o,d;return{type:e,model:null!==(r=null==t?void 0:t.getTableName())&&void 0!==r?r:null,client:null!==(n=null==i?void 0:i.audit_client)&&void 0!==n?n:null,href:null!==(s=null==i?void 0:i.audit_href)&&void 0!==s?s:null,user_agent:null!==(o=null==i?void 0:i.audit_user_agent)&&void 0!==o?o:null,user_id:null!==(d=null==i?void 0:i.audit_user_id)&&void 0!==d?d:null,state:!0}},Ke={afterCreate:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Be.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null;yield ze.create(Object.assign(Object.assign({},He("CREATE",r,t)),{record:n?e.getDataValue(n):null,data:e.toJSON()})).catch(Q)}),afterUpdate:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Be.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null,s={},o=e.changed();o&&o.forEach(t=>s[t]=e.getDataValue(t)),yield ze.create(Object.assign(Object.assign({},He("UPDATE",r,t)),{record:n?e.getDataValue(n):null,data:s,previously:e.previous()})).catch(Q)}),afterDestroy:(e,t)=>we(void 0,void 0,void 0,function*(){var i;if(!Be.API_DB_AUDIT)return;const r=Z(e)?e.constructor:null,n=null!==(i=null==r?void 0:r.primaryKeyAttribute)&&void 0!==i?i:null;yield ze.create(Object.assign(Object.assign({},He("DELETE",r,t)),{record:n?e.getDataValue(n):null,data:e.toJSON()})).catch(Q)})};let qe=class extends Me{};De([P(),be("design:type",Number)],qe.prototype,"id",void 0),De([f(),be("design:type",f)],qe.prototype,"secret",void 0),De([R(),be("design:type",Date)],qe.prototype,"logout",void 0),De([f(),be("design:type",f)],qe.prototype,"user_agent",void 0),De([S,be("design:type",Date)],qe.prototype,"created_at",void 0),De([T,be("design:type",Date)],qe.prototype,"updated_at",void 0),De([D,be("design:type",Object)],qe.prototype,"deleted_at",void 0),De([N(()=>We),be("design:type",Number)],qe.prototype,"user_id",void 0),qe=De([b(Ue),w("auth"),Le("4.2.0")],qe);let Ye=class extends Me{};De([P(),be("design:type",Number)],Ye.prototype,"id",void 0),De([f(),be("design:type",f)],Ye.prototype,"token",void 0),De([C(),be("design:type",C)],Ye.prototype,"state",void 0),De([S,be("design:type",Date)],Ye.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ye.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ye.prototype,"deleted_at",void 0),De([N(()=>We),be("design:type",Number)],Ye.prototype,"user_id",void 0),Ye=De([b(Ue),w("register"),Le("4.2.0")],Ye);let Ve=class extends Me{};De([P(),be("design:type",Number)],Ve.prototype,"id",void 0),De([f(),be("design:type",f)],Ve.prototype,"name",void 0),De([F(),be("design:type",f)],Ve.prototype,"description",void 0),De([C(),be("design:type",C)],Ve.prototype,"state",void 0),De([S,be("design:type",Date)],Ve.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ve.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ve.prototype,"deleted_at",void 0),De([x(()=>$e,"group_id"),be("design:type",Array)],Ve.prototype,"groups_routes",void 0),De([x(()=>$e,"group_id"),be("design:type",Array)],Ve.prototype,"users_groups",void 0),Ve=De([b(Ue),w("group"),j(Ke),Le("4.2.0")],Ve);let $e=class extends Me{};De([S,be("design:type",Date)],$e.prototype,"created_at",void 0),De([N(()=>Ve),be("design:type",Number)],$e.prototype,"group_id",void 0),De([N(()=>We),be("design:type",Number)],$e.prototype,"user_id",void 0),$e=De([b(Ue),w("users_groups"),j(Ke),Le("4.2.0")],$e);let Ge=class extends Me{};De([f(),be("design:type",f)],Ge.prototype,"password",void 0),De([S,be("design:type",Date)],Ge.prototype,"created_at",void 0),De([N(()=>We),be("design:type",Number)],Ge.prototype,"user_id",void 0),Ge=De([b(Ue),w("users_histories"),Le("4.2.0")],Ge);let We=class extends Me{};De([P(),be("design:type",Number)],We.prototype,"id",void 0),De([f(),be("design:type",f)],We.prototype,"name",void 0),De([f(),be("design:type",f)],We.prototype,"email",void 0),De([f(),be("design:type",f)],We.prototype,"username",void 0),De([f(),be("design:type",f)],We.prototype,"password",void 0),De([f(),be("design:type",f)],We.prototype,"salt",void 0),De([f(),be("design:type",f)],We.prototype,"token",void 0),De([f(),be("design:type",f)],We.prototype,"avatar",void 0),De([k(),be("design:type",f)],We.prototype,"date",void 0),De([F(),be("design:type",f)],We.prototype,"description",void 0),De([C(),be("design:type",C)],We.prototype,"state",void 0),De([S,be("design:type",Date)],We.prototype,"created_at",void 0),De([T,be("design:type",Date)],We.prototype,"updated_at",void 0),De([D,be("design:type",Object)],We.prototype,"deleted_at",void 0),De([x(()=>ze,"user_id"),be("design:type",Array)],We.prototype,"audits",void 0),De([x(()=>qe,"user_id"),be("design:type",Array)],We.prototype,"auths",void 0),De([x(()=>Ye,"user_id"),be("design:type",Array)],We.prototype,"registers",void 0),De([x(()=>$e,"user_id"),be("design:type",Array)],We.prototype,"users_groups",void 0),De([x(()=>Ge,"user_id"),be("design:type",Array)],We.prototype,"users_histories",void 0),We=De([b(Ue),w("user"),L({attributes:{exclude:["password","salt","token"]}}),B({password:{attributes:{exclude:["token"]}},token:{attributes:{exclude:["password","salt"]}}}),j(Ke),Le("4.2.0")],We);let ze=class extends Me{};De([P(),be("design:type",Number)],ze.prototype,"id",void 0),De([U("CREATE","DELETE","UPDATE"),be("design:type",f)],ze.prototype,"type",void 0),De([f(),be("design:type",f)],ze.prototype,"model",void 0),De([f(),be("design:type",f)],ze.prototype,"record",void 0),De([M(),be("design:type",Object)],ze.prototype,"data",void 0),De([M(),be("design:type",Object)],ze.prototype,"previously",void 0),De([f(),be("design:type",f)],ze.prototype,"client",void 0),De([F(),be("design:type",f)],ze.prototype,"href",void 0),De([f(),be("design:type",f)],ze.prototype,"user_agent",void 0),De([C(),be("design:type",C)],ze.prototype,"state",void 0),De([S,be("design:type",Date)],ze.prototype,"created_at",void 0),De([T,be("design:type",Date)],ze.prototype,"updated_at",void 0),De([D,be("design:type",Object)],ze.prototype,"deleted_at",void 0),De([N(()=>We),be("design:type",Number)],ze.prototype,"user_id",void 0),ze=De([b(Ue),w("audit"),Le("4.2.0")],ze);let Je=class extends Me{};De([f(),be("design:type",f)],Je.prototype,"key",void 0),De([f(),be("design:type",f)],Je.prototype,"value",void 0),De([S,be("design:type",Date)],Je.prototype,"created_at",void 0),De([T,be("design:type",Date)],Je.prototype,"updated_at",void 0),Je=De([b(Ue),w("configs"),j(Ke),Le("4.2.0")],Je);let Xe=class extends Me{};De([P(),be("design:type",Number)],Xe.prototype,"id",void 0),De([f(),be("design:type",f)],Xe.prototype,"token",void 0),De([H(),be("design:type",Number)],Xe.prototype,"timestamp",void 0),De([C(),be("design:type",C)],Xe.prototype,"state",void 0),De([S,be("design:type",Date)],Xe.prototype,"created_at",void 0),De([T,be("design:type",Date)],Xe.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Xe.prototype,"deleted_at",void 0),De([N(()=>We),be("design:type",Number)],Xe.prototype,"user_id",void 0),Xe=De([b(Ue),w("forgot"),Le("4.2.0")],Xe);let Ze=class extends Me{};De([P(),be("design:type",Number)],Ze.prototype,"id",void 0),De([f(),be("design:type",f)],Ze.prototype,"name",void 0),De([f(),K(!0),be("design:type",f)],Ze.prototype,"route",void 0),De([f(),be("design:type",f)],Ze.prototype,"tag",void 0),De([F(),be("design:type",f)],Ze.prototype,"description",void 0),De([C(),be("design:type",C)],Ze.prototype,"state",void 0),De([S,be("design:type",Date)],Ze.prototype,"created_at",void 0),De([T,be("design:type",Date)],Ze.prototype,"updated_at",void 0),De([D,be("design:type",Object)],Ze.prototype,"deleted_at",void 0),De([x(()=>Qe,"permission_id"),be("design:type",Array)],Ze.prototype,"groups_permissions",void 0),Ze=De([b(Ue),w("permission"),j(Ke),Le("4.3.1")],Ze);let Qe=class extends Me{};De([S,be("design:type",Date)],Qe.prototype,"created_at",void 0),De([N(()=>Ve),be("design:type",Number)],Qe.prototype,"group_id",void 0),De([N(()=>Ze),be("design:type",Number)],Qe.prototype,"permission_id",void 0),Qe=De([b(Ue),w("groups_permissions"),j(Ke),Le("4.2.0")],Qe);let et=class extends Me{};De([P(),be("design:type",Number)],et.prototype,"id",void 0),De([f(),be("design:type",f)],et.prototype,"type",void 0),De([f(),be("design:type",f)],et.prototype,"source",void 0),De([F(),be("design:type",f)],et.prototype,"message",void 0),De([S,be("design:type",Date)],et.prototype,"created_at",void 0),et=De([b(Ue),w("log"),Le("4.2.0")],et);let tt=class extends Me{};De([f(),be("design:type",f)],tt.prototype,"model",void 0),De([f(),be("design:type",f)],tt.prototype,"version",void 0),De([S,be("design:type",Date)],tt.prototype,"created_at",void 0),De([T,be("design:type",Date)],tt.prototype,"updated_at",void 0),tt=De([b(Ue),w("migration"),Le("4.2.0")],tt);let it=class extends Me{};De([f(),be("design:type",f)],it.prototype,"session",void 0),De([F(),be("design:type",f)],it.prototype,"json",void 0),De([H(),be("design:type",Number)],it.prototype,"expired",void 0),De([S,be("design:type",Date)],it.prototype,"created_at",void 0),De([T,be("design:type",Date)],it.prototype,"updated_at",void 0),it=De([b(Ue),w("session"),Le("4.2.0")],it);class rt{static write(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(G.White,"",e,t,i)})}static error(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(G.Red,"error",e,t,i)})}static info(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(G.Cyan,"info",e,t,i)})}static success(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(G.Green,"success",e,t,i)})}static warning(e,t,i){return we(this,void 0,void 0,function*(){yield rt.writeRaw(G.Yellow,"warning",e,t,i)})}static writeRaw(e,t,i,r,n){return we(this,void 0,void 0,function*(){n&&W.console(e,t,i),Ue&&(yield et.create({type:t,source:r,message:i}).catch(()=>null))})}}const nt=e=>Ee(e)?me(e):void 0,st={http:nt(Be.API_HTTP_CRT),token:nt(Be.API_TOKEN_CRT)},ot={http:nt(Be.API_HTTP_KEY),token:nt(Be.API_TOKEN_KEY)};class dt extends Re{constructor(){super(),this.all=e=>we(this,void 0,void 0,function*(){e=e||Q;const t=yield it.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=>we(this,void 0,void 0,function*(){yield it.destroy().catch(Q),e&&e()}),this.destroy=(e,t)=>we(this,void 0,void 0,function*(){yield it.destroy({where:{session:e}}).catch(Q),t&&t()}),this.expired=()=>we(this,void 0,void 0,function*(){yield it.destroy({where:{expired:{[ve.lt]:Date.now()}}}).catch(Q)}),this.get=(e,t)=>we(this,void 0,void 0,function*(){t=t||Q;const i=yield it.findOne({where:{session:e,expired:{[ve.gte]:Date.now()}}}).catch(e=>(t(e),null));if(i){const e=JSON.parse(i.json);if(e.cookie){if(new Date(e.cookie.expires).getTime()<=Date.now())return yield i.destroy().catch(Q),void t(null)}return void t(null,e)}t(null)}),this.length=e=>we(this,void 0,void 0,function*(){e&&e(null,(yield it.count().catch(Q))||0)}),this.set=(e,t,i)=>we(this,void 0,void 0,function*(){i=i||Q;const r=Date.now()+Be.API_SESSION_LIFETIME,n=JSON.stringify(t),[s,o]=(yield it.findOrCreate({where:{session:e},defaults:{session:e,json:n,expired:r}}).catch(Q))||[];s&&(o||(s.json=n,s.expired=r,yield s.save().catch(Q))),i()}),this.loop=ee(this.expired,3e4),this.loop.start()}}class at{static create(e){return we(this,void 0,void 0,function*(){if(!ot.token)return{error:"KEY NOT FOUND"};const{id:t}=e,i=te(),r=yield qe.create({secret:i,user_id:t}).catch(at.error);if(!r)return{error:"INTERNAL SERVER ERROR"};return{auth:r,token:Se.sign({id:t,secret:i},ot.token,at.options())}})}static destroy(e){return we(this,void 0,void 0,function*(){return!(!e||e.logout)&&(e.logout=new Date,yield e.save(),!0)})}static error(e){let t="token";Be.API_BASE_NAME&&(t=`${Be.API_BASE_NAME}.${t}`),rt.error(e.message,t,Be.API_CONSOLE_ERROR)}static options(){return{algorithm:"RS256",expiresIn:`${Be.API_TOKEN_LIFETIME}ms`}}static renew(e){return we(this,void 0,void 0,function*(){if(!ot.token)return{error:"KEY NOT FOUND"};const{error:t,decode:i}=at.verify(e,Be.API_TOKEN_RENEW/1e3);if(t)return{error:t};if(i){const{id:e,secret:t}=i;if(e&&t){const i=yield We.findOne({where:{id:e,state:!0}}).catch(at.error);if(i){const r=yield qe.findOne({where:{secret:t,user_id:i.id}}).catch(at.error);if(r&&!r.logout){r.secret=te(),yield r.save().catch(at.error);return{auth:r,token:Se.sign({id:e,secret:r.secret},ot.token,at.options())}}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static user(e,t,i){return we(this,void 0,void 0,function*(){if(e){t=i.hash.encrypt(e);const r=yield We.findOne({where:{token:t,state:!0}}).catch(at.error);if(r){const t=e.replace(/(-[\w]{4})/g,"-****"),[i]=(yield qe.findOrCreate({where:{secret:t,user_id:r.id},defaults:{secret:t,user_id:r.id}}).catch(at.error))||[];if(i)return{auth:i,user:r}}return{error:"ACCESS DENIED"}}const{error:r,decode:n}=at.verify(t);if(r)return{error:r};if(n){const{id:e,secret:t}=n;if(e&&t){const i=yield We.findOne({where:{id:e,state:!0}}).catch(at.error);if(i){const e=yield qe.findOne({where:{secret:t,user_id:i.id}}).catch(at.error);if(e&&!e.logout)return{auth:e,user:i}}return{error:"ACCESS DENIED"}}}return{error:"INVALID TOKEN"}})}static verify(e,t){if(!st.token)return{error:"CERT NOT FOUND"};if(!e||e.split(".").length<3)return{error:"INVALID TOKEN"};try{return{decode:Se.verify(e,st.token,{clockTolerance:t})}}catch(e){return{error:"INVALID TOKEN"}}}}class ut extends t{constructor(e){super(e,{cert:st.http,cross:Be.API_HTTP_CROSS,hybrid:Be.API_HTTP_HYBRID,json:{strict:Be.API_BODYPARSER_STRICT,inflate:Be.API_BODYPARSER_INFLATE,limit:Be.API_BODYPARSER_LIMIT,type:Be.API_BODYPARSER_TYPE},key:ot.http,notfound:Be.API_HTTP_NOTFOUND,path:Be.API_HTTP_PATH,port:Be.API_HTTP_PORT,public:Be.API_HTTP_PUBLIC,redirect:Be.API_HTTP_REDIRECT,session:{store:new dt,name:Be.API_SESSION_NAME,secret:Be.API_SESSION_SECRET,cookie:{maxAge:Be.API_SESSION_LIFETIME},genid:te}}),this.hash=new z(Be.API_KEY_HASH)}error(e,t){Be.API_BASE_NAME&&(t=t?`${Be.API_BASE_NAME}.${t}`:Be.API_BASE_NAME),rt.error(e.message,t,Be.API_CONSOLE_ERROR)}log(e,t){Be.API_BASE_NAME&&(t=t?`${Be.API_BASE_NAME}.${t}`:Be.API_BASE_NAME),rt.info(e,t,!0)}listen(){const e=Object.create(null,{listen:{get:()=>super.listen}});return we(this,void 0,void 0,function*(){yield Ue.sync(),yield this.migrations(Ue),yield ie(this.controllers,e=>we(this,void 0,void 0,function*(){re(e.sync)&&(yield e.sync(this))})),yield e.listen.call(this),Be.API_WEBSOCKET_START&&this.server&&(this._webSocket=new _e({server:this.server,verifyClient:(e,t)=>t(Be.API_WEBSOCKET_START)}),this._webSocket.on("connection",(e,t)=>we(this,void 0,void 0,function*(){t.url||(t.url="");const i=t.url.length<=1?"":t.url.replace(/\//g,".");let r;e.on("message",n=>we(this,void 0,void 0,function*(){if(r)try{const s=JSON.parse(n);this.emit("ws.message"+i,{data:s,message:n,req:t,user:r,ws:e})}catch(s){this.emit("ws.message"+i,{erro:s,message:n,req:t,user:r,ws:e})}else{const{user:s}=yield at.user("",n.toString(),this);s&&(r=s,this.emit("ws.connection"+i,{req:t,user:r,ws:e}))}r||e.close()})),e.on("close",()=>{r&&this.emit("ws.close"+i,{user:r,ws:e})}),yield ne(2e3),r||e.close()})))})}migrations(e){return we(this,void 0,void 0,function*(){const t=[];yield ie(Object.keys(e.models),i=>we(this,void 0,void 0,function*(){var r;const n=e.models[i],{version:s}=ke.migrations(n);if(!s)return;const[o,d]=null!==(r=yield tt.findOrCreate({where:{model:n.tableName},defaults:{model:n.tableName,version:""}}).catch(this.error))&&void 0!==r?r:[];o&&(d||o.version!=s)&&(o.version=s,yield o.save().catch(this.error),t.push(n))})),t.length&&(yield q(e,t))})}websocket(){return this._webSocket}}class pt extends se{auth(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;const[o,d]=null!==(s=null==i?void 0:i.split(" "))&&void 0!==s?s:["",""];if(!d||o.toLowerCase()!=Be.API_TOKEN_HEADER_KEY)return e.error("INVALID TOKEN");const{auth:a,error:u,user:p}=yield at.user(t,d,n);return u?e.error(u):a&&p?a.user_agent&&a.user_agent!=r?e.error("INVALID TOKEN"):(e.req.auth=a,e.req.user=p,void e.next()):e.error("INTERNAL SERVER ERROR")})}canCreate(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".create",i)})}canDelete(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".delete",i)})}canRead(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".read",i)})}canUpdate(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,(t||this.name())+".update",i)})}error(e){let t="controller_base";Be.API_BASE_NAME&&(t=`${Be.API_BASE_NAME}.${t}`),rt.error(e.message,t,Be.API_CONSOLE_ERROR)}name(){return"api"}permission(e,t,i){return we(this,void 0,void 0,function*(){if(i){if((yield this.permissions(i,{route:t})).length>0)return e.next()}e.unauthorized("ACCESS DENIED")})}permissions(e,t){return we(this,void 0,void 0,function*(){var i;return null!==(i=yield Ze.findAll({where:Object.assign(Object.assign({},null!=t?t:{}),{state:!0}),include:[{model:Qe,required:!0,include:[{model:Ve,required:!0,where:{state:!0},include:[{model:$e,required:!0,where:{user_id:e.id}}]}]}]}).catch(this.error))&&void 0!==i?i:[]})}session(e,t,i){return we(this,void 0,void 0,function*(){i.auth&&i.user&&(i.user_agent?i.user_agent!=t&&i.regenerate(Q):(i.user_agent=t,i.save(Q))),e.next()})}sync(){return we(this,void 0,void 0,function*(){})}upload(e,t){t.path||(t.path=Be.API_UPLOAD_TEMP),t.size||(t.size=Be.API_UPLOAD_SIZE),t.field||(t.field=Be.API_UPLOAD_FIELD),a.middleware(e,t)}validation(e,t){return we(this,void 0,void 0,function*(){const{error:i,value:r}=yield oe.object(t).parse().validateAsync(e.req.body);if(i)return e.validation(i);e.req.body=r,e.next()})}}De([Ne(0,i()),Ne(1,r(Be.API_KEY_HEADER)),Ne(2,r(Be.API_TOKEN_HEADER)),Ne(3,r("user-agent")),Ne(4,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,String,ut]),be("design:returntype",Promise)],pt.prototype,"auth",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],pt.prototype,"canCreate",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],pt.prototype,"canDelete",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],pt.prototype,"canRead",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],pt.prototype,"canUpdate",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],pt.prototype,"permission",null),De([Ne(0,i()),Ne(1,r("user-agent")),Ne(2,d()),be("design:type",Function),be("design:paramtypes",[s,String,Object]),be("design:returntype",Promise)],pt.prototype,"session",null),De([Ne(0,i()),Ne(1,o()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",void 0)],pt.prototype,"upload",null),De([Ne(0,i()),Ne(1,o()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",Promise)],pt.prototype,"validation",null);class ct{}var lt,yt;ct.ATTRIBUTES=Symbol("ATTRIBUTES"),ct.PERMISSIONS=Symbol("PERMISSIONS");let gt=class extends pt{constructor(){super(...arguments),this[lt]=[],this[yt]=["create","read","update","delete"]}attributes(e){if(0==this[ct.ATTRIBUTES].length&&(this[ct.ATTRIBUTES]=Object.keys(this.model().getAttributes())),de(e))return e.length?e.map(e=>ae(e)&&-1!=this[ct.ATTRIBUTES].indexOf(e)?e:void 0).filter(ae):this[ct.ATTRIBUTES];const{exclude:t,include:i}=e,r=ue(i)?this[ct.ATTRIBUTES]:i.map(e=>ae(e)&&-1!=this[ct.ATTRIBUTES].indexOf(e)?e:void 0).filter(ae),n=null!=t?t:[];return n.length?r.filter(e=>-1==n.indexOf(e)?e:void 0).filter(ae):r}create(e){return we(this,arguments,void 0,function*({ctx:e,options:t,body:i}){const r=yield this.model().create(Object.assign(Object.assign({},e.req.body),i||{}),Object.assign(Object.assign({},t||{}),Ce(e))).catch(this.error);if(r){const t=this.key();return e.prepare(p.OK,{[t]:r.getDataValue(t)}),r}e.error("INTERNAL SERVER ERROR")})}delete(e){return we(this,arguments,void 0,function*({ctx:e,options:t}){const i=this.key(),{[i]:r}=e.req.params;if(!r)return e.error("INTERNAL SERVER ERROR"),0;const n=yield this.model().destroy(Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[i]:r}),individualHooks:!0}),Ce(e))).catch(this.error);return n?(e.success("OK"),n):(e.notFound("RECORD NOT FOUND"),0)})}error(e){let t="controller_model";Be.API_BASE_NAME&&(t=`${Be.API_BASE_NAME}.${t}`),(null==e?void 0:e.sql)?rt.error((null==e?void 0:e.message)+"\n"+(null==e?void 0:e.sql),t,Be.API_CONSOLE_ERROR):super.error(e)}findAll(e){return we(this,arguments,void 0,function*({ctx:e,options:t,callback:i,scope:r,advanced:n,attributes:s,unlimited:o}){var d,a,u;const c=this.scope(r),l=Object.assign({},t||{}),{limit:y,offset:g,asc:h,desc:v,search:_,where:m}=e.req.query;if(ue(l.limit)){const e=pe(ae(y)?parseInt(y)||0:Be.API_MODEL_LIMIT,-1,Be.API_MODEL_LIMIT_MAX);l.limit=e>0?e:o?void 0:Be.API_MODEL_LIMIT}if(ce(l.limit)&&(l.limit=l.limit>0?l.limit:void 0),ae(g)){const e=g&&parseInt(g)||0;l.offset=e>0?e:void 0}s=null!=s?s:this.attributes(null!==(d=null==l?void 0:l.attributes)&&void 0!==d?d:[]);const E=[],A=e=>s.indexOf(e)>=0;if(ae(h)&&h.length&&E.push(...h.split(";").filter(A).map(e=>[e,"ASC"])),ae(v)&&v.length&&E.push(...v.split(";").filter(A).map(e=>[e,"DESC"])),E.length&&(l.order=E),l.where=Object.assign({},l.where||{}),ae(m)&&(null==n||n)){const t=Y.parse(s,m);if(!ue(t.error))return e.validation(t.error.join(", ")),{count:0,records:[]};l.where=Object.assign(Object.assign({},l.where),null!==(a=t.value)&&void 0!==a?a:{})}else{const e=[];s.forEach(t=>{ae(_)&&_.length&&e.push({[t]:{[ve.like]:`%${_}%`}})}),e.length&&(l.where=Object.assign(Object.assign({},l.where),{[ve.or]:[...e]}))}const O=c.count(Object.assign(Object.assign({},l),{distinct:!!l.include,col:this[ct.ATTRIBUTES].length?this[ct.ATTRIBUTES][0]:void 0})).catch(this.error),I=c.findAll(l).catch(this.error);yield Promise.allSettled([O,I]);const P=null!==(u=yield O)&&void 0!==u?u:0;let f=yield I;const R={count:P};return f?(f=i?yield i(f):f,(ce(null==t?void 0:t.limit)||0==P)&&(R.count=f.length),e.prepare(p.OK,Object.assign(Object.assign({},R),{records:f})),Object.assign(Object.assign({},R),{records:f})):(e.error("INTERNAL SERVER ERROR"),Object.assign(Object.assign({},R),{records:[]}))})}findOne(e){return we(this,arguments,void 0,function*({ctx:e,options:t,callback:i,scope:r}){const n=this.key(),{[n]:s}=e.req.params,o=yield this.scope(r).findOne(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:s})})).catch(this.error);return o?(e.prepare(p.OK,i?yield i(o):o.toJSON()),o):null===o?e.notFound("RECORD NOT FOUND"):void e.error("INTERNAL SERVER ERROR")})}sync(){return we(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t={description:"",state:!0};yield ie(this[ct.PERMISSIONS],i=>we(this,void 0,void 0,function*(){const r=`${e}.${i}`,n=le(e.replace(/_/g," ")," ");yield Ze.findOrCreate({where:{route:r},defaults:Object.assign({name:`${n} ${le(i," ")}`,route:r,tag:n},t)})}))})}update(e){return we(this,arguments,void 0,function*({ctx:e,options:t,body:i}){var r;const n=this.key(),{[n]:s}=e.req.params,[o]=null!==(r=yield this.model().update(Object.assign(Object.assign({},e.req.body),i||{}),Object.assign(Object.assign(Object.assign({},t||{}),{where:Object.assign(Object.assign({},(t||{}).where),{[n]:s}),individualHooks:!0}),Ce(e))).catch(this.error))&&void 0!==r?r:[];return o?(e.success("OK"),!0):(e.success("RECORD NOT CHANGED"),!1)})}key(){return this.model().primaryKeyAttribute}name(){return this.model().tableName}scope(e){return e?this.model().scope(e):this.model()}};lt=ct.ATTRIBUTES,yt=ct.PERMISSIONS,gt=De([u(pt)],gt);let ht=class extends gt{model(){return ze}all(e,t,i){return we(this,void 0,void 0,function*(){const r={};t&&(r.type=t),i&&(r.table=i),yield this.findAll({ctx:e,options:{attributes:{exclude:["data","previously"]},where:r,order:[["created_at","DESC"]]},unlimited:!0})})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}};De([c(),l("auth"),l("canRead"),Ne(0,i()),Ne(1,y("type")),Ne(2,y("table")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],ht.prototype,"all",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],ht.prototype,"get",null),ht=De([g("/audits"),u(gt)],ht);let vt=class extends pt{login(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;yield ne(Be.API_SLEEP_AUTH);const o=yield We.scope("password").findOne({where:{[ve.or]:[{email:i},{username:i}]}}).catch(this.error);if(r+=null!==(s=null==o?void 0:o.salt)&&void 0!==s?s:"",!o||o.password!=J(r))return e.notFound("INVALID USERNAME OR PASSWORD"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e});const d=yield Ye.findOne({where:{state:!0,user_id:o.id}}).catch(this.error);if(d)return e.error("ACTIVATION REQUIRED"),n.emit("auth.activation",{ctx:e,register:d,user:o}),void this.emit("auth.activation",{ctx:e,register:d,user:o});if(!o.state)return e.notFound("INVALID USERNAME OR PASSWORD"),n.emit("auth.failure",{ctx:e,user:o}),void this.emit("auth.failure",{ctx:e,user:o});const{auth:a,error:u,token:p}=yield at.create(o);return u?(e.error(u),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e})):a&&p?(a.user_agent=t,yield a.save().catch(this.error),e.json({token:p}),n.emit("auth.login",{auth:a,ctx:e,user:o}),void this.emit("auth.login",{auth:a,ctx:e,user:o})):(e.error("INTERNAL SERVER ERROR"),n.emit("auth.failure",{ctx:e}),void this.emit("auth.failure",{ctx:e}))})}logout(e,t,i,r){return we(this,void 0,void 0,function*(){if(yield at.destroy(t))return e.success("OK"),r.emit("auth.logout",{auth:t,ctx:e,user:i}),void this.emit("auth.logout",{auth:t,ctx:e,user:i});e.unauthorized("ACCESS DENIED")})}renew(e,t,i,r){return we(this,void 0,void 0,function*(){const{auth:n,error:s,token:o}=yield at.renew(i);return s?e.error(s):n?(n.user_agent=t,yield n.save().catch(this.error),e.json({token:o}),r.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 we(this,void 0,void 0,function*(){const i=yield this.permissions(t);if(!i)return e.error("INTERNAL SERVER ERROR");e.json(Object.assign(Object.assign({},ye(["username","date","description","state","created_at","updated_at","deleted_at"],t.toJSON())),{permissions:i.map(e=>e.route)}))})}};var _t;De([h("/login"),l("validation",{username:oe.string().min(3).required(),password:oe.string().min(5).required()}),Ne(0,i()),Ne(1,r("user-agent")),Ne(2,v("username")),Ne(3,v("password")),Ne(4,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,String,ut]),be("design:returntype",Promise)],vt.prototype,"login",null),De([c("/logout"),l("auth"),Ne(0,i()),Ne(1,xe()),Ne(2,je()),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,qe,We,ut]),be("design:returntype",Promise)],vt.prototype,"logout",null),De([h("/renew"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,r("user-agent")),Ne(2,v("token")),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,ut]),be("design:returntype",Promise)],vt.prototype,"renew",null),De([c(),l("auth"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,We]),be("design:returntype",Promise)],vt.prototype,"user",null),vt=De([g("/auth"),u(pt)],vt);let mt=class extends pt{constructor(){super(...arguments),this[_t]=["delete","download","edit","list","read","rename","upload","write"]}directory(){return Be.API_HTTP_PUBLIC||"./"}files(e){return we(this,void 0,void 0,function*(){let{path:t}=e.req;t=t.replace(/(^\/path(\/)?)|([\\.]{1,2}\/)/g,"");const i=Te(this.directory(),t);if(!Ee(i)||!Ae(i).isDirectory())return e.notFound("RECORD NOT FOUND");let r=[];return r=Oe(i),r=r.map(e=>this.info(Te(i,e))),r=r.filter(ge),Object.assign(Object.assign({},this.info(i)),{files:r})})}access(e,t,i){return we(this,void 0,void 0,function*(){yield this.permission(e,this.name()+"."+t,i)})}info(e){if(!Ee(e))return null;const t=Ae(e),i=e.split("/").pop();e=e.replace(this.directory(),"/").replace(/^\/\//,"/");const r=t.isDirectory();return{name:i,path:e.replace(/^\/\//,"/"),size:t.size,extension:r?"":"."+e.split(".").pop(),created:t.birthtime,modified:t.mtime,directory:r,symlink:t.isSymbolicLink()}}name(){return"files"}sync(){return we(this,void 0,void 0,function*(){const e=this.name().toLowerCase(),t=le(e.replace(/_/g," ")," "),i={description:"",state:!0};yield ie(this[ct.PERMISSIONS],r=>we(this,void 0,void 0,function*(){const n=`${e}.${r}`;yield Ze.findOrCreate({where:{route:n},defaults:Object.assign({name:`${t} ${le(r," ")}`,route:n,tag:t},i)})}))})}};_t=ct.PERMISSIONS,De([c("/path"),c("/path/*path"),l("auth"),l("access","list"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],mt.prototype,"files",null),De([Ne(0,i()),Ne(1,o()),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],mt.prototype,"access",null),mt=De([g("/files"),u(pt)],mt);let Et=class extends pt{check(e,t){return we(this,void 0,void 0,function*(){const i=yield this.find(t);if(!i||!i.user)return e.notFound("RECORD NOT FOUND");i.token=he(),yield i.save(),e.json({token:i.token})})}forgot(e,t,i){return we(this,void 0,void 0,function*(){yield ne(Be.API_SLEEP_FORGOT);const r=t,n=yield We.findOne({where:{[ve.or]:[{email:r},{username:t}]}}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const s=he(),o=Date.now()+6e4*Be.API_TOKEN_FORGOT,d=yield Xe.create({token:s,timestamp:o,state:!0,user_id:n.id});e.success("OK"),i.emit("forgot.send",{ctx:e,forgot:d,user:n}),this.emit("forgot.send",{ctx:e,forgot:d,user:n})})}reset(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield this.find(t);if(!n)return e.notFound("RECORD NOT FOUND");n.state=!1,yield n.save().catch(this.error),n.user.password=J(i),yield n.user.save().catch(this.error),e.success("OK"),r.emit("forgot.reset",{ctx:e,user:n.user}),this.emit("forgot.reset",{ctx:e,user:n.user})})}find(e){return we(this,void 0,void 0,function*(){return yield Xe.findOne({where:{token:e,state:!0},include:[{model:We,required:!0}]}).catch(this.error)})}};De([c("/check"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,v("token")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Et.prototype,"check",null),De([h(),l("validation",{username:oe.string().min(4).required()}),Ne(0,i()),Ne(1,v("username")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],Et.prototype,"forgot",null),De([h("/reset"),l("validation",{token:oe.string().required(),password:oe.string().min(5).required()}),Ne(0,i()),Ne(1,v("token")),Ne(2,v("password")),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,String,ut]),be("design:returntype",Promise)],Et.prototype,"reset",null),Et=De([g("/forgot"),u(pt)],Et);let At=class extends gt{constructor(){super(...arguments),this._crud={}}CrudArgumentsCreate(e){return{ctx:e}}CrudArgumentsFindAll(e){return{ctx:e}}CrudArgumentsFindOne(e){return{ctx:e}}CrudArgumentsDelete(e){return{ctx:e}}CrudArgumentsUpdate(e){return{ctx:e}}CrudValidationCreate(){return this._crud}CrudValidationUpdate(){return this._crud}add(e){return we(this,void 0,void 0,function*(){yield this.create(this.CrudArgumentsCreate(e))})}all(e){return we(this,void 0,void 0,function*(){yield this.findAll(this.CrudArgumentsFindAll(e))})}del(e){return we(this,void 0,void 0,function*(){yield this.delete(this.CrudArgumentsDelete(e))})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne(this.CrudArgumentsFindOne(e))})}set(e){return we(this,void 0,void 0,function*(){yield this.update(this.CrudArgumentsUpdate(e))})}validationCreate(e){return we(this,void 0,void 0,function*(){const t=this.CrudValidationCreate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}validationUpdate(e){return we(this,void 0,void 0,function*(){const t=this.CrudValidationUpdate();if(t==this._crud)return e.error("INTERNAL SERVER ERROR");yield this.validation(e,t)})}};De([h(),l("auth"),l("canCreate"),l("validationCreate"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"add",null),De([c(),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"all",null),De([_("/:id"),l("auth"),l("canDelete"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"del",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"get",null),De([m("/:id"),l("auth"),l("canUpdate"),l("validationUpdate"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"set",null),De([Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"validationCreate",null),De([Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],At.prototype,"validationUpdate",null),At=De([u(gt)],At);let Ot=class extends At{constructor(){super(...arguments),this.schemaCreate={name:oe.string().required(),description:oe.string().empty(""),state:oe.boolean().parse().required()},this.schemaUpdate={name:oe.string().empty(),description:oe.string().empty(),state:oe.boolean().parse().empty()}}model(){return Ve}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}};Ot=De([g("/groups"),u(At)],Ot);let It=class extends gt{model(){return Qe}all(e,t){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{group_id:t},include:[{model:Ze,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.permission)})})}me(e,t){return we(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield Ve.findByPk(t,{attributes:["id"]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");const s=n.id;if(yield Qe.destroy(Object.assign({where:{group_id:s},individualHooks:!0},r)),i){let e=0;yield ne(1e3);for(let t=0;t<i.length;t++)e=yield Ze.count({where:{id:i[t]}}),e&&(yield Qe.create({group_id:s,permission_id:i[t]},Object.assign({},r)))}e.success("OK")})}};var Pt;De([c("/:id/permissions"),l("auth"),l("canRead","groups"),Ne(0,i()),Ne(1,E("id")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],It.prototype,"all",null),De([c("/permissions"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,We]),be("design:returntype",Promise)],It.prototype,"me",null),De([m("/:id/permissions"),l("auth"),l("canUpdate","groups"),l("validation",{permissions:oe.array(oe.number().parse())}),Ne(0,i()),Ne(1,E("id")),Ne(2,v("permissions")),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Array,Object]),be("design:returntype",Promise)],It.prototype,"set",null),It=De([g("/groups"),u(gt)],It);let ft=class extends gt{constructor(){super(...arguments),this[Pt]=["read"]}model(){return et}all(e,t,i){return we(this,void 0,void 0,function*(){const r={};t&&(r.type=t),i&&(r.source=i),yield this.findAll({ctx:e,options:{where:r,order:[["created_at","DESC"]]},unlimited:!0})})}};Pt=ct.PERMISSIONS,De([c(),l("auth"),l("canRead"),Ne(0,i()),Ne(1,y("type")),Ne(2,y("source")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],ft.prototype,"all",null),ft=De([g("/logs"),u(gt)],ft);let Rt=class extends At{constructor(){super(...arguments),this.schemaCreate={name:oe.string().required(),route:oe.string().required(),tag:oe.string().required(),description:oe.string().empty(""),state:oe.boolean().parse().required()},this.schemaUpdate={name:oe.string().empty(),route:oe.string().empty(),tag:oe.string().empty(),description:oe.string().empty(),state:oe.boolean().parse().empty()}}model(){return Ze}CrudArgumentsFindAll(e){return{ctx:e,unlimited:!0}}CrudValidationCreate(){return this.schemaCreate}CrudValidationUpdate(){return this.schemaUpdate}};Rt=De([g("/permissions"),u(At)],Rt);let St=class extends pt{register(e,t,i){return we(this,void 0,void 0,function*(){yield ne(Be.API_SLEEP_REGISTRY);const{name:r,date:n,email:s,username:o,password:d,confirm:a}=t,u=o||s,p=J(d);if(yield We.count({where:{[ve.or]:[{email:s},{username:u}]}}).catch(this.error))return e.validation("INVALID EMAIL OR USERNAME");if(p!=J(a))return e.error("INVALID PASSWORD");const c=yield We.create({name:r,email:s,username:u,password:p,avatar:"",date:n,description:"",state:!1}).catch(this.error);if(!c)return e.error("INTERNAL SERVER ERROR");const l=yield Ye.create({token:yield this.getId(),user_id:c.id,state:!0}).catch(this.error);if(!l)return yield c.destroy().catch(this.error),e.error("INTERNAL SERVER ERROR");e.success("OK"),i.emit("register.user",{ctx:e,register:l,user:c}),this.emit("register.user",{ctx:e,register:l,user:c})})}confirm(e,t,i){return we(this,void 0,void 0,function*(){const r=yield Ye.findOne({where:{token:t,state:!0},include:[{model:We,required:!0}]}).catch(this.error);if(!r)return e.notFound("RECORD NOT FOUND");r.state=!1,yield r.save().catch(this.error),r.user.state=!0,yield r.user.save().catch(this.error),e.success("OK"),i.emit("register.confirm",{ctx:e,register:r,user:r.user}),this.emit("register.confirm",{ctx:e,register:r,user:r.user})})}send(e,t,i){return we(this,void 0,void 0,function*(){const r=t,n=yield Ye.findOne({where:{state:!0},include:[{model:We,required:!0,where:{[ve.or]:[{email:r},{username:t}]}}]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");e.success("OK"),i.emit("register.send",{ctx:e,register:n,user:n.user}),this.emit("register.send",{ctx:e,register:n,user:n.user})})}getId(){return we(this,void 0,void 0,function*(){const e=te();return(yield Ye.count({where:{token:e}}))?this.getId():e})}};De([h(),l("validation",{name:oe.string().required(),date:oe.date().required(),email:oe.string().email().required(),username:oe.string().min(4).empty(),password:oe.string().min(5).required(),confirm:oe.string().min(5).required()}),Ne(0,i()),Ne(1,v()),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,Object,ut]),be("design:returntype",Promise)],St.prototype,"register",null),De([h("/confirm"),l("validation",{token:oe.string().required()}),Ne(0,i()),Ne(1,v("token")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],St.prototype,"confirm",null),De([h("/send"),l("validation",{username:oe.string().min(4).required()}),Ne(0,i()),Ne(1,v("username")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],St.prototype,"send",null),St=De([g("/register"),u(pt)],St);let Tt=class extends pt{setup(e,t){return we(this,void 0,void 0,function*(){var i;if(yield We.count())return e.success("OK");const r=he(),n=yield We.create({name:"Admin",email:"admin@localhost",username:"admin",password:J("admin"+r),salt:r,token:"",avatar:"",date:new Date,description:"DEFAULT",state:!0},Object.assign({},t)),s=yield Ve.create(Object.assign({name:"Admin"},{description:"API CORE",state:!0}),Object.assign({},t));yield $e.create({user_id:n.id,group_id:s.id},Object.assign({},t));const o=null!==(i=yield Ze.findAll({where:{state:!0}}).catch(this.error))&&void 0!==i?i:[];yield ie(o,e=>we(this,void 0,void 0,function*(){yield Qe.create({group_id:s.id,permission_id:e.id},Object.assign({},t))})),e.success("OK")})}};De([c(),Ne(0,i()),Ne(1,Fe()),be("design:type",Function),be("design:paramtypes",[s,Object]),be("design:returntype",Promise)],Tt.prototype,"setup",null),Tt=De([g("/setup"),u(pt)],Tt);let Dt=class extends gt{model(){return We}constructor(){super(),this.path=Be.API_HTTP_PUBLIC+"/avatar",Be.API_HTTP_PUBLIC&&Ee(Be.API_HTTP_PUBLIC)&&!Ee(this.path)&&Ie(this.path)}avatar(e,t,i,r){return we(this,void 0,void 0,function*(){if(t.length){const n=t[0].filename||"";if(n){const t=this.path+"/"+i.avatar;if(Ee(t)&&Pe(t).isFile()&&fe(t),i.avatar=n,yield i.save(Object.assign({},r)).catch(this.error))return e.success("OK")}}e.success("RECORD NOT CHANGED")})}avatar_del(e,t,i){return we(this,void 0,void 0,function*(){const r=this.path+"/"+t.avatar;t.avatar="",(yield t.save(Object.assign({},i)).catch(this.error))&&Ee(r)&&fe(r),e.success("OK")})}password(e,t,i,r,n){return we(this,void 0,void 0,function*(){var s;if(Be.API_USER_HISTORY){if(yield Ge.count({where:{password:J(i+r.id)}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED")}const o=yield this.scope("password").findOne({where:{id:r.id,state:!0}}).catch(this.error);return t+=null!==(s=null==o?void 0:o.salt)&&void 0!==s?s:"",o&&o.password==J(t)?(o.salt=he(),o.password=J(i+o.salt),(yield o.save(Object.assign({},n)).catch(this.error))?e.success("OK"):void e.success("RECORD NOT CHANGED")):e.error("INVALID PASSWORD")})}token(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.model().findOne({attributes:["token"],where:{id:t.id}}).catch(this.error);if(r)return e.json({token:i.hash.decrypt(r.token)});e.notFound("RECORD NOT FOUND")})}token_del(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.model().findOne({attributes:["id","token"],where:{id:t}}).catch(this.error);if(r)return r.token="",yield r.save(Object.assign({},i)).catch(this.error),e.success("OK");e.notFound("RECORD NOT FOUND")})}token_get(e,t,i){return we(this,void 0,void 0,function*(){const r=yield this.scope("token").findOne({where:{id:t}}).catch(this.error);if(r)return e.json({token:i.hash.decrypt(r.token)});e.notFound("RECORD NOT FOUND")})}token_renew(e,t,i,r){return we(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=r.hash.encrypt(t),yield n.save(Object.assign({},i)).catch(this.error),e.json({token:t})}e.notFound("RECORD NOT FOUND")})}token_new(){return we(this,void 0,void 0,function*(){var e;const t=te();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){return we(this,void 0,void 0,function*(){const i=he(),r=yield this.create({ctx:e,body:{password:J(t+i),salt:i}});Be.API_USER_HISTORY&&r&&(yield Ge.create({password:J(t+r.id),user_id:r.id}))})}all(e){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{attributes:{exclude:["password","salt","token"]}},unlimited:!0})})}del(e,t,i){return we(this,void 0,void 0,function*(){if(i.id.toString()==t)return e.notFound("RECORD NOT FOUND");yield this.delete({ctx:e})})}get(e){return we(this,void 0,void 0,function*(){yield this.findOne({ctx:e})})}set(e,t,i){return we(this,void 0,void 0,function*(){if(Be.API_USER_HISTORY&&i){const r=J(i+t);if(yield Ge.count({where:{password:r}}).catch(this.error))return e.error("PASSWORD PREVIOUSLY REGISTERED");yield Ge.create({password:r,user_id:t}).catch(this.error)}const r=i?he():"";yield this.update({ctx:e,body:i?{password:J(i+r),salt:r}:{}})})}};De([h("/avatar"),l("auth"),l("upload",e=>({count:1,field:"file",path:e.controller.path,types:["image/bmp","image/jpeg","image/png"],size:32})),Ne(0,i()),Ne(1,A()),Ne(2,je()),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,Array,We,Object]),be("design:returntype",Promise)],Dt.prototype,"avatar",null),De([_("/avatar"),l("auth"),Ne(0,i()),Ne(1,je()),Ne(2,Fe()),be("design:type",Function),be("design:paramtypes",[s,We,Object]),be("design:returntype",Promise)],Dt.prototype,"avatar_del",null),De([h("/password"),l("auth"),l("validation",{oldPassword:oe.string().min(5).required(),newPassword:oe.string().min(5).required(),confirmPassword:oe.string().equal(oe.ref("newPassword"))}),Ne(0,i()),Ne(1,v("oldPassword")),Ne(2,v("newPassword")),Ne(3,je()),Ne(4,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,String,We,Object]),be("design:returntype",Promise)],Dt.prototype,"password",null),De([c("/token"),l("auth"),Ne(0,i()),Ne(1,je()),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,We,ut]),be("design:returntype",Promise)],Dt.prototype,"token",null),De([_("/token/:id"),l("auth"),l("canDelete"),Ne(0,i()),Ne(1,E("id")),Ne(2,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Object]),be("design:returntype",Promise)],Dt.prototype,"token_del",null),De([c("/token/:id"),l("auth"),l("canCreate"),Ne(0,i()),Ne(1,E("id")),Ne(2,n()),be("design:type",Function),be("design:paramtypes",[s,String,ut]),be("design:returntype",Promise)],Dt.prototype,"token_get",null),De([c("/token/renew/:id"),l("auth"),l("canUpdate"),Ne(0,i()),Ne(1,E("id")),Ne(2,Fe()),Ne(3,n()),be("design:type",Function),be("design:paramtypes",[s,String,Object,ut]),be("design:returntype",Promise)],Dt.prototype,"token_renew",null),De([h(),l("auth"),l("canCreate"),l("validation",{name:oe.string().required(),email:oe.string().email().required(),username:oe.string().min(4).required(),password:oe.string().min(5).required(),description:oe.string().empty(""),state:oe.boolean().parse().required()}),Ne(0,i()),Ne(1,v("password")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Dt.prototype,"add",null),De([c(),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Dt.prototype,"all",null),De([_("/:id"),l("auth"),l("canDelete"),Ne(0,i()),Ne(1,E("id")),Ne(2,je()),be("design:type",Function),be("design:paramtypes",[s,String,We]),be("design:returntype",Promise)],Dt.prototype,"del",null),De([c("/:id"),l("auth"),l("canRead"),Ne(0,i()),be("design:type",Function),be("design:paramtypes",[s]),be("design:returntype",Promise)],Dt.prototype,"get",null),De([m("/:id"),l("auth"),l("canUpdate"),l("validation",{name:oe.string().empty(),email:oe.string().email().empty(),username:oe.string().min(4).empty(),password:oe.string().min(5).empty().filter(""),description:oe.string().empty(),state:oe.boolean().parse().empty()}),Ne(0,i()),Ne(1,E("id")),Ne(2,v("password")),be("design:type",Function),be("design:paramtypes",[s,String,String]),be("design:returntype",Promise)],Dt.prototype,"set",null),Dt=De([g("/users"),u(gt),be("design:paramtypes",[])],Dt);let Nt=class extends gt{model(){return $e}all(e,t){return we(this,void 0,void 0,function*(){yield this.findAll({ctx:e,options:{where:{user_id:t},include:[{model:Ve,required:!0}]},unlimited:!0,callback:e=>e.map(e=>e.group)})})}me(e,t){return we(this,void 0,void 0,function*(){yield this.all(e,t.id.toString())})}set(e,t,i,r){return we(this,void 0,void 0,function*(){const n=yield We.findByPk(t,{attributes:["id"]}).catch(this.error);if(!n)return e.notFound("RECORD NOT FOUND");if(yield $e.destroy(Object.assign({where:{user_id:n.id},individualHooks:!0},r)),i){let e=0;yield ne(1e3);for(let t=0;t<i.length;t++)e=yield Ve.count({where:{id:i[t]}}),e&&(yield $e.create({user_id:n.id,group_id:i[t]},Object.assign({},r)))}e.success("OK")})}};De([c("/:id/groups"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,E("id")),be("design:type",Function),be("design:paramtypes",[s,String]),be("design:returntype",Promise)],Nt.prototype,"all",null),De([c("/groups"),l("auth"),l("canRead","users"),Ne(0,i()),Ne(1,je()),be("design:type",Function),be("design:paramtypes",[s,We]),be("design:returntype",Promise)],Nt.prototype,"me",null),De([m("/:id/groups"),l("auth"),l("canUpdate","users"),l("validation",{groups:oe.array(oe.number().parse())}),Ne(0,i()),Ne(1,E("id")),Ne(2,v("groups")),Ne(3,Fe()),be("design:type",Function),be("design:paramtypes",[s,String,Array,Object]),be("design:returntype",Promise)],Nt.prototype,"set",null),Nt=De([g("/users"),u(gt)],Nt);class bt{static all(){return we(this,void 0,void 0,function*(){const e=yield Je.findAll().catch(bt.error),t={};return e&&e.forEach(e=>t[e.key]=e.value),t})}static del(e,t){return we(this,void 0,void 0,function*(){var i;const r=null!==(i=null==t?void 0:t.id)&&void 0!==i?i:null;return((yield Je.destroy(Object.assign({where:{key:e},individualHooks:!0},{user_id:r})).catch(bt.error))||0)>0})}static error(e){let t="config";Be.API_BASE_NAME&&(t=`${Be.API_BASE_NAME}.${t}`),rt.error(e.message,t,Be.API_CONSOLE_ERROR)}static get(e){return we(this,arguments,void 0,function*(e,t=""){const[i]=(yield Je.findOrCreate({where:{key:e},defaults:{key:e,value:t}}).catch(bt.error))||[];return i?i.value:t})}static set(e,t,i){return we(this,void 0,void 0,function*(){var r;const n=null!==(r=null==i?void 0:i.id)&&void 0!==r?r:null,[s]=(yield Je.findOrCreate(Object.assign({where:{key:e}},{user_id:n})).catch(bt.error))||[];s&&(s.value=t,yield s.save().catch(bt.error))})}}export{ut as Application,ze as Audit,ht as AuditsController,qe as Auth,vt as AuthController,bt as Config,Je as Configs,pt as ControllerBase,ct as ControllerKeys,At as CrudController,Be as Env,mt as FilesController,Xe as Forgot,Et as ForgotController,Ve as Group,Qe as GroupPermission,Ot as GroupsController,It as GroupsPermissionsController,et as Log,rt as Logs,ft as LogsController,ke as Metadata,Le as Migrate,tt as Migration,Me as Model,gt as ModelController,Ze as Permission,Rt as PermissionsController,Ye as Register,St as RegisterController,Fe as ReqAudit,xe as ReqAuth,je as ReqUser,it as Session,Tt as SetupController,dt as Store,at as Token,We as User,$e as UserGroup,Ge as UserHistory,Dt as UsersController,Nt as UsersGroupsController,Ce as audit,st as crt,Ue as database,Ke as hooks,ot as key};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@andrewcaires/api",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.3",
|
|
4
4
|
"description": "Simple api for small applications using express, jsonwebtoken, sequelize and websocket",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@andrewcaires/sequelize": "^1.2.2",
|
|
52
52
|
"@andrewcaires/utils.js": "^0.4.9",
|
|
53
53
|
"cors": "^2.8.5",
|
|
54
|
-
"dotenv": "^17.0
|
|
54
|
+
"dotenv": "^17.2.0",
|
|
55
55
|
"express-session": "^1.18.1",
|
|
56
56
|
"jsonwebtoken": "^9.0.2",
|
|
57
57
|
"tsx": "^4.20.3",
|
|
@@ -64,13 +64,13 @@
|
|
|
64
64
|
"@types/cors": "^2.8.19",
|
|
65
65
|
"@types/express-session": "^1.18.2",
|
|
66
66
|
"@types/jsonwebtoken": "^9.0.10",
|
|
67
|
-
"@types/node": "^24.0.
|
|
67
|
+
"@types/node": "^24.0.13",
|
|
68
68
|
"@types/ws": "^8.18.1",
|
|
69
69
|
"eslint": "^9.30.1",
|
|
70
70
|
"mariadb": "^3.4.4",
|
|
71
|
-
"rollup": "^4.44.
|
|
71
|
+
"rollup": "^4.44.2",
|
|
72
72
|
"rollup-plugin-dts": "^6.2.1",
|
|
73
73
|
"tslib": "^2.8.1",
|
|
74
|
-
"typescript-eslint": "^8.
|
|
74
|
+
"typescript-eslint": "^8.36.0"
|
|
75
75
|
}
|
|
76
76
|
}
|