@clairejs/server 3.12.4 → 3.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Change Log
2
2
 
3
+ #### 3.12.5
4
+
5
+ - add missing file copy endpoint in file manage controller
6
+
3
7
  #### 3.12.4
4
8
 
5
9
  - fix uri handling in ModelRepository
@@ -5,6 +5,7 @@ export declare class FileManageController extends AbstractHttpController {
5
5
  readonly fileService: AbstractFileService;
6
6
  constructor(fileService: AbstractFileService);
7
7
  moveFile(body: MoveFileRequest): Promise<import("../http/common/HttpResponse").HttpResponse<unknown>>;
8
+ copyFile(body: MoveFileRequest): Promise<import("../http/common/HttpResponse").HttpResponse<unknown>>;
8
9
  removeFile(body: RemoveFileRequest): Promise<import("../http/common/HttpResponse").HttpResponse<unknown>>;
9
10
  getFileAccessUrl(queries: GetFileAccessUrlRequest): Promise<import("../http/common/HttpResponse").HttpResponse<{
10
11
  urls: string[];
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- !function webpackUniversalModuleDefinition(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(global,(()=>(()=>{"use strict";var e={9025:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileOperation=void 0,function(e){e.GET="getObject",e.PUT="putObject",e.DELETE="deleteObject"}(t.FileOperation||(t.FileOperation={}))},4638:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractPrincipalResolver=void 0;t.AbstractPrincipalResolver=class AbstractPrincipalResolver{}},1820:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},137:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExitCode=void 0,t.ExitCode={SIGTERM_INTERUPTION:-1,SIGINT_INTERUPTION:-2,UNCAUGHT_EXCEPTION:-3,UNHANDLED_REJECTION:-4}},4435:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},4972:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getEndpointId=void 0;t.getEndpointId=e=>`${e.httpMethod}:${e.mount}`},1870:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7540:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7380:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FileManageController=void 0;const a=i(2318),l=i(8903),d=i(6004),c=i(2417),u=i(7179),h=i(7724);let p=class FileManageController extends d.AbstractHttpController{constructor(e){super(null),this.fileService=e}moveFile(e){return s(this,void 0,void 0,(function*(){return yield this.fileService.moveObject(e.operations),l.ResponseBuilder.success()}))}removeFile(e){return s(this,void 0,void 0,(function*(){return yield this.fileService.removeObject(e.uris),l.ResponseBuilder.success()}))}getFileAccessUrl(e){return s(this,void 0,void 0,(function*(){const t=yield this.fileService.getAccessUrls(e.uris,e.public);return l.ResponseBuilder.json({urls:t}).get()}))}getFileInfo(e){return s(this,void 0,void 0,(function*(){const t={fileInfos:(yield this.fileService.getFileSize(e.uris)).map((e=>({fileSizeBytes:e})))};return l.ResponseBuilder.json(t).get()}))}};n([(0,c.Post)("/file/move"),r(0,(0,c.Body)()),o("design:type",Function),o("design:paramtypes",[h.MoveFileRequest]),o("design:returntype",Promise)],p.prototype,"moveFile",null),n([(0,c.Post)("/file/remove"),r(0,(0,c.Body)()),o("design:type",Function),o("design:paramtypes",[h.RemoveFileRequest]),o("design:returntype",Promise)],p.prototype,"removeFile",null),n([(0,c.Get)("/file"),(0,c.ApiResponse)(h.GetFileAccessUrlResponse),r(0,(0,c.Queries)()),o("design:type",Function),o("design:paramtypes",[h.GetFileAccessUrlRequest]),o("design:returntype",Promise)],p.prototype,"getFileAccessUrl",null),n([(0,c.Get)("/file/info"),(0,c.ApiResponse)(h.GetFileInfoResponse),r(0,(0,c.Queries)()),o("design:type",Function),o("design:paramtypes",[h.GetFileInfoRequest]),o("design:returntype",Promise)],p.prototype,"getFileInfo",null),p=n([(0,a.Injectable)(),o("design:paramtypes",[u.AbstractFileService])],p),t.FileManageController=p},8037:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileUploadController=void 0;const l=i(2318),d=a(i(7325)),c=i(9025),u=i(8903),h=i(6004),p=i(2417),f=i(7179),v=i(7724),delay=e=>new Promise((t=>setTimeout(t,e)));let y=class FileUploadController extends h.AbstractHttpController{constructor(e,t){super(null),this.fileService=e,this.allowedUploadExtensions=t}getUploadUrlForTempUri(e){return s(this,void 0,void 0,(function*(){const getPutUrl=()=>s(this,void 0,void 0,(function*(){return(yield this.fileService.getPresignedUrl(c.FileOperation.PUT,[e]))[0]})),getDeleteUrl=()=>s(this,void 0,void 0,(function*(){return(yield this.fileService.getPresignedUrl(c.FileOperation.DELETE,[e]))[0]}));let t={objectKey:e,putPresignedUrl:yield getPutUrl(),deletePresignedUrl:yield getDeleteUrl()};for(;t.putPresignedUrl.endsWith("/");)yield delay(1e3),t.putPresignedUrl=yield getPutUrl();for(;t.deletePresignedUrl.endsWith("/");)yield delay(1e3),t.deletePresignedUrl=yield getDeleteUrl();return t}))}getUploadUrl(e){var t;return s(this,void 0,void 0,(function*(){const i=null===(t=e.extension)||void 0===t?void 0:t.toLowerCase();if(i&&!this.allowedUploadExtensions.includes(i))throw l.ErrorBuilder.error(l.Errors.VALIDATION_ERROR,"Not allowed file extension");const n=yield this.getUploadUrlForTempUri(`tmp/${d.default.generate({length:64})}${i?`.${i}`:""}`);return u.ResponseBuilder.json(n).get()}))}getMultipleUploadUrls(e){return s(this,void 0,void 0,(function*(){if(e.extensions.some((e=>!this.allowedUploadExtensions.includes(e))))throw l.ErrorBuilder.error(l.Errors.VALIDATION_ERROR,"Not allowed file extension");const t=yield Promise.all(e.extensions.map((e=>this.getUploadUrlForTempUri(`tmp/${d.default.generate({length:64})}${e?`.${e}`:""}`))));return u.ResponseBuilder.json({files:t}).get()}))}};n([(0,p.Get)("/upload-url"),(0,p.ApiResponse)(v.GetUploadUrlResponseBody),r(0,(0,p.Queries)()),o("design:type",Function),o("design:paramtypes",[v.GetUploadUrlQueries]),o("design:returntype",Promise)],y.prototype,"getUploadUrl",null),n([(0,p.Get)("/upload-urls"),(0,p.ApiResponse)(v.GetMultipleUploadResponseBody),r(0,(0,p.Queries)()),o("design:type",Function),o("design:paramtypes",[v.GetMultipleUploadUrlsQueries]),o("design:returntype",Promise)],y.prototype,"getMultipleUploadUrls",null),y=n([(0,l.Injectable)(),o("design:paramtypes",[f.AbstractFileService,Array])],y),t.FileUploadController=y},4768:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.ApiInfoResponse=t.Permission=void 0;const r=i(2318);let s=class Permission{};n([(0,r.Field)({description:"Id of the permission",isRequired:!0}),o("design:type",String)],s.prototype,"id",void 0),n([(0,r.Field)({description:"Description of the permission"}),o("design:type",String)],s.prototype,"description",void 0),n([(0,r.Field)({description:"Display name of the permission",isRequired:!0}),o("design:type",String)],s.prototype,"name",void 0),n([(0,r.Field)({description:"Whether this permission has public access",isRequired:!0}),o("design:type",Boolean)],s.prototype,"openAccess",void 0),n([(0,r.Field)({description:"Whether this permission require tfa",isRequired:!0}),o("design:type",Boolean)],s.prototype,"tfaRequired",void 0),n([(0,r.Field)({description:"Name of the permission group",isRequired:!0}),o("design:type",String)],s.prototype,"permissionGroup",void 0),n([(0,r.Field)({description:"The configurable access condition of this permission",isRequired:!0,vectorProps:{},elementDto:(0,r.getObjectMetadata)(r.AccessConditionMetadata)}),o("design:type",Array)],s.prototype,"accessConditions",void 0),n([(0,r.Field)({description:"Whether this permission does not allow data modification",isRequired:!0}),o("design:type",Boolean)],s.prototype,"readOnly",void 0),n([(0,r.Field)(Object.assign({description:"Http method used to call the API",isRequired:!0},(0,r.Enum)(r.HttpMethod))),o("design:type",String)],s.prototype,"method",void 0),n([(0,r.Field)({description:"Http Mount point of the API",isRequired:!0}),o("design:type",String)],s.prototype,"mount",void 0),n([(0,r.Field)({description:"Validation dto of request param"}),o("design:type",Object)],s.prototype,"paramDto",void 0),n([(0,r.Field)({description:"Validation dto of request queries"}),o("design:type",Object)],s.prototype,"queryDto",void 0),n([(0,r.Field)({description:"Validation dto of request body (for POST / PUT)"}),o("design:type",Object)],s.prototype,"bodyDto",void 0),n([(0,r.Field)({description:"Validation dto of response body"}),o("design:type",Object)],s.prototype,"responseDto",void 0),s=n([(0,r.Data)()],s),t.Permission=s;let a=class ApiInfoResponse{};n([(0,r.Field)({description:"All permissions of the service",isRequired:!0,elementDto:(0,r.getObjectMetadata)(s),vectorProps:{elementDataType:r.DataType.OBJECT}}),o("design:type",Array)],a.prototype,"permissions",void 0),a=n([(0,r.Data)()],a),t.ApiInfoResponse=a},2345:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UserVerificationMethod=t.CacheOperation=void 0,function(e){e.GET="get",e.KEYS="keys",e.HGET="hget",e.HKEYS="hkeys",e.FLUSH="flush"}(t.CacheOperation||(t.CacheOperation={})),function(e){e.SMS_OTP="SMS",e.VOICE_OTP="VOICE",e.MANUAL_OTP="MANUAL"}(t.UserVerificationMethod||(t.UserVerificationMethod={}))},7724:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.GetFileInfoResponse=t.FileInfo=t.GetFileInfoRequest=t.GetFileAccessUrlResponse=t.GetFileAccessUrlRequest=t.RemoveFileRequest=t.MoveFileRequest=t.MoveOperation=t.GetMultipleUploadResponseBody=t.GetMultipleUploadUrlsQueries=t.GetUploadUrlResponseBody=t.GetUploadUrlQueries=void 0;const r=i(2318);let s=class GetUploadUrlQueries{};n([(0,r.Field)({description:"Extension of the file to be uploaded (without dot)"}),o("design:type",String)],s.prototype,"extension",void 0),s=n([(0,r.Data)()],s),t.GetUploadUrlQueries=s;let a=class GetUploadUrlResponseBody{};n([(0,r.Field)({description:"Object key of file that store in the server",isRequired:!0}),o("design:type",String)],a.prototype,"objectKey",void 0),n([(0,r.Field)({description:"Presigned URl to put the file to server"}),o("design:type",String)],a.prototype,"putPresignedUrl",void 0),n([(0,r.Field)({description:"Presigned URL to remove the temporary file from server",isRequired:!0}),o("design:type",String)],a.prototype,"deletePresignedUrl",void 0),a=n([(0,r.Data)()],a),t.GetUploadUrlResponseBody=a;let l=class GetMultipleUploadUrlsQueries{};n([(0,r.Field)({description:"Extensions of those files",isRequired:!0,vectorProps:{allowDuplicated:!0}}),o("design:type",Array)],l.prototype,"extensions",void 0),l=n([(0,r.Data)({relaxed:!0})],l),t.GetMultipleUploadUrlsQueries=l;class GetMultipleUploadResponseBody{}n([(0,r.Field)(Object.assign({description:"Upload urls for files",vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(a))),o("design:type",Array)],GetMultipleUploadResponseBody.prototype,"files",void 0),t.GetMultipleUploadResponseBody=GetMultipleUploadResponseBody;let d=class MoveOperation{};n([(0,r.Field)({description:"Source of move operation",isRequired:!0}),o("design:type",String)],d.prototype,"fromURI",void 0),n([(0,r.Field)({description:"Destination of move operation",isRequired:!0}),o("design:type",String)],d.prototype,"toURI",void 0),d=n([(0,r.Data)()],d),t.MoveOperation=d;let c=class MoveFileRequest{};n([(0,r.Field)(Object.assign({description:"All move operations",isRequired:!0,vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(d))),o("design:type",Array)],c.prototype,"operations",void 0),c=n([(0,r.Data)()],c),t.MoveFileRequest=c;let u=class RemoveFileRequest{};n([(0,r.Field)({description:"File URIs to remove",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],u.prototype,"uris",void 0),u=n([(0,r.Data)()],u),t.RemoveFileRequest=u;let h=class GetFileAccessUrlRequest{};n([(0,r.Field)({description:"All URIs to get access link",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],h.prototype,"uris",void 0),n([(0,r.Field)({description:"Whether to get public or private link",isRequired:!0}),o("design:type",Boolean)],h.prototype,"public",void 0),h=n([(0,r.Data)({relaxed:!0})],h),t.GetFileAccessUrlRequest=h;let p=class GetFileAccessUrlResponse{};n([(0,r.Field)({description:"File access URLs",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],p.prototype,"urls",void 0),p=n([(0,r.Data)()],p),t.GetFileAccessUrlResponse=p;let f=class GetFileInfoRequest{};n([(0,r.Field)({description:"File URIs to get info",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],f.prototype,"uris",void 0),f=n([(0,r.Data)({relaxed:!0})],f),t.GetFileInfoRequest=f;let v=class FileInfo{};n([(0,r.Field)({description:"Size of file in bytes",isRequired:!0}),o("design:type",Number)],v.prototype,"fileSizeBytes",void 0),v=n([(0,r.Data)()],v),t.FileInfo=v;let y=class GetFileInfoResponse{};n([(0,r.Field)(Object.assign({description:"File infos",isRequired:!0,vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(v))),o("design:type",Array)],y.prototype,"fileInfos",void 0),y=n([(0,r.Data)()],y),t.GetFileInfoResponse=y},730:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.SystemSetting=void 0;const r=i(2318);let s=class SystemSetting extends r.AbstractModel{};n([(0,r.Column)({description:"Key of system setting",unique:{},textLength:255,isRequired:!0,isSymbol:!0}),o("design:type",String)],s.prototype,"key",void 0),n([(0,r.Column)({description:"Value of system setting",textLength:4095,isRequired:!0}),o("design:type",String)],s.prototype,"value",void 0),s=n([(0,r.Model)()],s),t.SystemSetting=s},859:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpAuthorizationProvider=void 0;t.AbstractHttpAuthorizationProvider=class AbstractHttpAuthorizationProvider{}},2085:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRbacAuthProvider=void 0;const o=i(2318),r=i(859),s=i(4972);class AbstractRbacAuthProvider extends r.AbstractHttpAuthorizationProvider{constructor(e,t,i){super(),this.authDataResolver=e,this.principalResolver=t,this.logger=i}getPrincipalResolver(){return this.principalResolver}resolvePrincipal(e){return this.principalResolver.resolvePrincipal(this.authDataResolver(e))}authorize(e,t,i){return n(this,void 0,void 0,(function*(){if(i.endpointMetadata.openAccess)return;const n=yield this.getRbacCache();if(!n)throw o.ErrorBuilder.error(o.Errors.SYSTEM_ERROR,"Cannot read rbac cache");let r=[];if(e){const t=yield this.getRolesOfPrincipal(e);r=(n.roles||[]).filter((e=>!!t.find((t=>t===e.roleId))))}else r=(n.roles||[]).filter((e=>e.isAnonymousRole));if(!r.length)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,"No role attached");if(r.find((e=>e.isSuperRole)))return;const a=(n.rolePolicies||[]).filter((e=>!!r.find((t=>t.roleId===e.roleId)))),l=(n.policies||[]).filter((e=>!!a.find((t=>t.policyId===e.policyId)))),d=(n.policyPermissions||[]).filter((e=>!!l.find((t=>t.policyId===e.policyId)))),c=(n.policyPermissionConditions||[]).filter((e=>!!d.find((t=>t.id===e.policyPermissionId)))),u=d.filter((e=>e.permission===(0,s.getEndpointId)(i.endpoint)));if(!u.length)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,`Not permitted: ${(0,s.getEndpointId)(i.endpoint)}`);let h=!1;for(const e of u){const n=c.filter((t=>t.policyPermissionId===e.id));if(n.length){let e=!0;const r=(0,o.getServiceProvider)().getInjector(),s=(i.endpointMetadata.accessConditions||[]).map((e=>r.resolve(e)));yield r.initInstances();for(const i of n){const n=s.find((e=>e.getConditionMetadata().name===i.conditionName));if(n){try{const o=yield n.resolveConditionValue(t),r=JSON.parse(i.conditionValue);e=yield n.validate(o,r)}catch(t){e=!1}if(!e){this.logger.debug(`Condition check failed: condition ${i.conditionName}`);break}}}h=e}else h=!0;if(h)break}if(!h)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,"Condition check failed")}))}}t.AbstractRbacAuthProvider=AbstractRbacAuthProvider},531:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.RedisRbacAuthProvider=void 0;const o=i(2085);class RedisRbacAuthProvider extends o.AbstractRbacAuthProvider{constructor(e,t,i,n,o,r,s,a=3e4){super(n,o,s),this.serviceIdResolver=e,this.rbacChannel=t,this.principalChannel=i,this.authDataResolver=n,this.principalResolver=o,this.cacheService=r,this.logger=s,this.redisDataRetentionDurationMs=a,this.lastRbacFetchTimestamp=0,this.principalCache={},this.serviceId=""}getRbacCache(){return n(this,void 0,void 0,(function*(){if(this.lastRbacFetchTimestamp+this.redisDataRetentionDurationMs<Date.now()){this.serviceId||(this.serviceId=yield this.serviceIdResolver());const e=yield this.cacheService.hget(this.rbacChannel,this.serviceId);this.rbacCache=e,this.lastRbacFetchTimestamp=Date.now()}return this.rbacCache}))}getRolesOfPrincipal(e){return n(this,void 0,void 0,(function*(){const t=String(e.id);let i=this.principalCache[t];if(!i||i.lastFetchTimestamp+this.redisDataRetentionDurationMs<Date.now()){const e=yield this.cacheService.hget(this.principalChannel,t),n=e?"string"==typeof e?JSON.parse(e):e:[];i={lastFetchTimestamp:Date.now(),roles:n},this.principalCache[t]=i}return i.roles}))}}t.RedisRbacAuthProvider=RedisRbacAuthProvider},7825:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SocketRbacAuthProvider=void 0;const s=i(2318),a=i(2085),l=i(4638);let d=class SocketRbacAuthProvider extends a.AbstractRbacAuthProvider{constructor(e,t,i,n,o,r){super(i,n,o),this.rbacCacheChannel=e,this.principalCacheChannel=t,this.authDataResolver=i,this.principalResolver=n,this.logger=o,this.socketProvider=r,this.idResolvers=[]}exit(){var e;null===(e=this.socket)||void 0===e||e.close()}init(){return r(this,void 0,void 0,(function*(){this.socket=yield this.socketProvider(),this.socket.onMessage(((e,t)=>{switch(t){case this.rbacCacheChannel:this.rbacCache=e;break;case this.principalCacheChannel:const{principalId:t,roleIds:i}=e,n=this.idResolvers.find((e=>e.principalId===t));if(n){for(const e of n.resolvers)e(i);n.resolvers=[]}}})),this.socket.joinChannels([this.rbacCacheChannel,this.principalCacheChannel])}))}getRbacCache(){return r(this,void 0,void 0,(function*(){return this.rbacCache}))}getRolesOfPrincipal(e){return r(this,void 0,void 0,(function*(){return new Promise((t=>{var i;let n=this.idResolvers.find((t=>t.principalId===e.id));n||(n={principalId:e.id,resolvers:[]},this.idResolvers.push(n)),n.resolvers.length||null===(i=this.socket)||void 0===i||i.send(e.id,this.principalCacheChannel),n.resolvers.push(t)}))}))}};d=n([(0,s.Initable)(),o("design:paramtypes",[String,String,Function,l.AbstractPrincipalResolver,s.AbstractLogger,Function])],d),t.SocketRbacAuthProvider=d},9837:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1532:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HttpRequest=void 0;const n=i(2318);t.HttpRequest=class HttpRequest{constructor(e,t){this.valueHolder={},this.method=e.method,this.pathName=e.pathName,this.headers=e.headers||{},this.cookies=e.cookies||{},this.hash=e.hash||"",this.params=e.params||{},(null==t?void 0:t.paramsValidationDto)&&(this.params=(0,n.validateData)(this.params,null==t?void 0:t.paramsValidationDto)),this.query=e.query||{},(null==t?void 0:t.queriesValidationDto)&&(this.query=(0,n.validateData)(this.jsonParsing(this.query,t.queriesValidationDto),t.queriesValidationDto)),this.body=e.body||{},t&&(t.httpMethod===n.HttpMethod.POST||t.httpMethod===n.HttpMethod.PUT)&&(null==t?void 0:t.bodyValidationDto)&&(this.body=(0,n.validateData)(this.body||{},t.bodyValidationDto,!1))}jsonParsing(e,t){const i=Object.assign({},e);for(const o of t.fields)try{(void 0!==e[o.name]||o.isRequired)&&(i[o.name]=JSON.parse(e[o.name]))}catch(e){throw n.ErrorBuilder.error(n.Errors.VALIDATION_ERROR,`JSON parsing failed for field ${o.name}`)}return i}getAuthInfo(){return this.authInfo}setAuthInfo(e){this.authInfo=e}getHeaders(){return this.headers}getMethod(){return this.method}getHash(){return this.hash}getPathName(){return this.pathName}getValue(e){return this.valueHolder[e]}setValue(e,t){this.valueHolder[e]=t}getParams(){return this.params}getQuery(){return this.query}getCookies(){return this.cookies}getBody(){return this.body}}},8903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ResponseBuilder=t.HttpResponse=void 0;class HttpResponse{constructor(){this.headers={},this.cookies={}}}t.HttpResponse=HttpResponse;class ResponseBuilder{constructor(){this.response=new HttpResponse}status(e){return this.response.code=e,this}header(e,t){return this.response.headers[e]=t,this}cookie(e,t,i){return this.response.cookies[e]={value:t,options:i},this}get(){return this.response}static json(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="application/json",t}static html(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="text/html; charset=UTF-8",t}static binary(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="application/octet-stream",t}static success(){const e=new ResponseBuilder;return e.response.code=200,e.response}static notFound(e){const t=new ResponseBuilder;return t.response.code=404,t.response.value=e,t.response}static accessDenied(e){const t=new ResponseBuilder;return t.response.code=400,t.response.value=e,t.response}}t.ResponseBuilder=ResponseBuilder},6004:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpController=void 0;const o=i(2318),r=i(7756);t.AbstractHttpController=class AbstractHttpController{constructor(e){this.databaseAdapter=e}createTransaction(){return n(this,void 0,void 0,(function*(){if(!this.databaseAdapter)throw o.ErrorBuilder.systemError("Transaction factory not injected to this controller");return this.databaseAdapter.createTransaction()}))}getCurrentTransaction(){return n(this,void 0,void 0,(function*(){return(0,r.getTransactionFromContext)(this)}))}getEndpointMetadata(){const e=(0,o.getObjectMetadata)(this.constructor);return e?e.fields.filter((e=>{return!!(t=e).httpMethod||void 0!==t.openAccess||!!t.accessConditions;var t})).map((t=>Object.assign(Object.assign({},t),{permissionGroup:e.permissionGroup}))):[]}}},225:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpMiddleware=void 0;t.AbstractHttpMiddleware=class AbstractHttpMiddleware{}},767:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpRequestHandler=void 0;const o=i(2318),r=i(4972),s=i(6004);t.AbstractHttpRequestHandler=class AbstractHttpRequestHandler{constructor(e,t){this.mountPoint=e,this.logger=t}resolverMountPoint(e,t){if(!e)return"";const i=[];return i.push(...t),i.reduce(((e,t)=>`${e}/${t}`),"").replace(/(\/)\/+/g,"$1")}getMountedEndpointInfo(){var e,t,i;return n(this,void 0,void 0,(function*(){if(!this.mountedEndpointInfo){const n=[],a=(0,o.getServiceProvider)().getInjector(),l=a.resolveMultiple(s.AbstractHttpController);yield a.initInstances();for(const e of l){const t=(0,o.getObjectMetadata)(e.constructor),i=e.getEndpointMetadata();for(const r of i){const i={mount:r.httpMethod===o.SocketMethod.MESSAGE?r.url:this.resolverMountPoint(t,[this.mountPoint||"/",r.url]),httpMethod:r.httpMethod,controller:e,handlerFunctionName:r.name};n.push({endpointMetadata:r,endpoint:i})}}const d=[];for(const o of n){const n=d.find((e=>e.endpoint.mount===o.endpoint.mount&&e.endpoint.httpMethod===o.endpoint.httpMethod));n?null===(e=this.logger)||void 0===e||e.warn(`Implicit overriding endpoint: ${(0,r.getEndpointId)(n.endpoint)} of ${null===(t=n.endpoint.controller)||void 0===t?void 0:t.constructor.name}:${n.endpoint.handlerFunctionName}`,`Ignore ${(0,r.getEndpointId)(o.endpoint)} of ${null===(i=o.endpoint.controller)||void 0===i?void 0:i.constructor.name}:${o.endpoint.handlerFunctionName}`):d.push(o)}this.mountedEndpointInfo=d}return this.mountedEndpointInfo}))}}},7282:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.CrudHttpController=void 0;const a=i(2318),l=i(7756),d=i(1071),c=i(1532),u=i(2417),h=i(6004),p=i(859),f=i(8903),v=i(3198),y=i(4192);class CrudHttpController extends h.AbstractHttpController{constructor(e,t,i){super(i),this.model=e,this.crudRepository=t,this.databaseAdapter=i,this.modelMetadata=(0,a.getObjectMetadata)(e)}getMountedUrl(){return`/${this.model.name.toLowerCase()}`}getAuthProvider(){return s(this,void 0,void 0,(function*(){if(void 0===this.authProvider){const e=(0,a.getServiceProvider)().getInjector();this.authProvider=e.resolveOptional(p.AbstractHttpAuthorizationProvider)||null,yield e.initInstances()}return this.authProvider}))}createManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.POST,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.createMany.name,e.displayName="createMany"+this.model.name,e.bodyValidationDto=(0,a.getCreateManyBodyValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getCreateManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>e.getBody().records))],e.params={0:{source:"raw"}},e}getManyEndpointMetadata(){const e={};return e.httpMethod=a.HttpMethod.GET,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.getMany.name,e.displayName="getAll"+this.model.name,e.queriesValidationDto=(0,a.getGetManyQueryValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getGetManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields])),(0,d.FilterModelFieldAccessCondition)(this.model,(e=>e.getQuery().projection)),v.MaximumQueryLimit],e.params={0:{source:"raw"}},e}updateManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.PUT,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.updateMany.name,e.displayName="update"+this.model.name,e.queriesValidationDto=(0,a.getUpdateManyQueryValidator)(this.modelMetadata),e.bodyValidationDto=(0,a.getUpdateManyBodyValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getUpdateManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,d.FilterModelFieldAccessCondition)(this.model,(e=>{const t=e.getBody().update;return t?Object.keys((0,a.leanData)(t)):[]})),(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields]),"dto_field_validation_query"),(0,y.DtoFieldValidation)(this.model,(e=>[e.getBody().update]),"dto_field_validation_body")],e.params={0:{source:"raw"}},e}deleteManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.DEL,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.deleteMany.name,e.displayName="delete"+this.model.name,e.queriesValidationDto=(0,a.getUpdateManyQueryValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getUpdateManyResponseValidator)(this.modelMetadata),e.params={0:{source:"raw"}},e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields]))],e}getEndpointMetadata(){var e,t,i,n;let o=super.getEndpointMetadata();const r=[];(null===(e=this.modelMetadata.ignoreCrud)||void 0===e?void 0:e.includes(a.HttpMethod.GET))?o=o.filter((e=>e.name!==CrudHttpController.prototype.getMany.name)):r.push(this.getManyEndpointMetadata()),(null===(t=this.modelMetadata.ignoreCrud)||void 0===t?void 0:t.includes(a.HttpMethod.POST))?o=o.filter((e=>e.name!==CrudHttpController.prototype.createMany.name)):r.push(this.createManyEndpoinMetadata()),(null===(i=this.modelMetadata.ignoreCrud)||void 0===i?void 0:i.includes(a.HttpMethod.PUT))?o=o.filter((e=>e.name!==CrudHttpController.prototype.updateMany.name)):r.push(this.updateManyEndpoinMetadata()),(null===(n=this.modelMetadata.ignoreCrud)||void 0===n?void 0:n.includes(a.HttpMethod.DEL))?o=o.filter((e=>e.name!==CrudHttpController.prototype.deleteMany.name)):r.push(this.deleteManyEndpoinMetadata());for(const e of r){const t=o.findIndex((t=>t.httpMethod===e.httpMethod&&t.url===e.url||t.name===e.name&&(!t.httpMethod||!t.url)));t>=0?o[t]=Object.assign(Object.assign(Object.assign({},e),o[t]),{accessConditions:[...e.accessConditions||[],...o[t].accessConditions||[]]}):o.push(e)}return o}createMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.getAuthProvider(),n=i&&(yield i.resolvePrincipal(e)),o=yield this.crudRepository.createMany({principal:n,body:e.getBody(),tx:t});return f.ResponseBuilder.json(o).get()}))}getMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.crudRepository.getMany({queries:e.getQuery(),queryProvider:this.databaseAdapter});return f.ResponseBuilder.json(t).get()}))}updateMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.getAuthProvider(),n=i&&(yield i.resolvePrincipal(e)),o=yield this.crudRepository.updateMany({principal:n,queries:e.getQuery(),body:e.getBody(),tx:t});return f.ResponseBuilder.json(o).get()}))}deleteMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.crudRepository.deleteMany({queries:e.getQuery(),tx:t});return f.ResponseBuilder.json({modified:i.modified.map((e=>e.id)).map((e=>({id:e})))}).get()}))}}n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Create records of this table."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"createMany",null),n([(0,u.AccessCondition)([]),(0,u.ApiDescription)("Get records of this table."),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"getMany",null),n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Find and update records which match search condition."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"updateMany",null),n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Find and remove records which match search condition."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"deleteMany",null),t.CrudHttpController=CrudHttpController},5879:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultHttpRequestHandler=void 0;const a=i(2318),l=s(i(9215)),d=i(99),c=s(i(9103)),u=i(8903),h=i(1532),p=i(859),f=i(767),v=i(6721),y=i(225),g=s(i(7325));let m=class DefaultHttpRequestHandler extends f.AbstractHttpRequestHandler{constructor(e,t){super("",e),this.logger=e,this.authorizationProvider=t,this._middleware=null}accessControl(e,t){return r(this,void 0,void 0,(function*(){if(e.endpointMetadata.httpMethod!==a.SocketMethod.MESSAGE){const i=yield this.authorizationProvider.resolvePrincipal(t);if(t.setAuthInfo(i),!e.endpointMetadata.openAccess&&(yield this.authorizationProvider.authorize(i,t,e),e.endpointMetadata.tfaRequired&&!(null==i?void 0:i.hasTfa)))throw a.ErrorBuilder.error(v.Errors.TFA_REQUIRED)}}))}handleRequest(e,t){return r(this,void 0,void 0,(function*(){yield this.accessControl(e,t);const i=Object.values(e.endpointMetadata.params||{}).map((e=>{switch(e.source){case"body":return t.getBody();case"params":return t.getParams();case"queries":return t.getQuery();case"headers":return t.getHeaders();case"raw":return t}})),n=yield e.endpoint.controller[e.endpointMetadata.name](...i);return e.endpointMetadata.responseValidationDto&&(n.value=(0,a.stripData)(n.value,e.endpointMetadata.responseValidationDto)),n}))}exit(){}getResponse(e){return r(this,void 0,void 0,(function*(){let t=new u.HttpResponse;const i=e.method,n=(0,l.default)({url:e.fullPath});let o={};const r=(yield this.getMountedEndpointInfo()).find((e=>{const t=e.endpointMetadata.httpMethod===i&&(0,d.match)(e.endpointMetadata.url,{decode:decodeURIComponent})(n.pathname||"/");return!!t&&(o=t,!0)}));if(!r)throw this.logger.debug(e),a.ErrorBuilder.error(v.Errors.NOT_FOUND,"Handler not found");const s=new h.HttpRequest({method:i,headers:e.headers,pathName:n.pathname||"",hash:n.hash||"",query:c.default.parse(decodeURIComponent(n.search||"")),params:o.params,body:e.body,cookies:e.cookies},r.endpointMetadata),p=yield this.getMiddleware();for(const e of p){if(!(yield e.intercept(s,t)))return t}const f=yield this.handleRequest(r,s);return f.code=f.code||t.code||200,f.value=f.value||t.value,f.headers=Object.assign(Object.assign({},t.headers),f.headers),f.cookies=Object.assign(Object.assign({},t.cookies),f.cookies),f}))}handle(e){return r(this,void 0,void 0,(function*(){const t=g.default.generate();this.logger.info(`===== HANDLING REQUEST: ${t} - ${e.method}:${e.fullPath}`);try{const i=yield this.getResponse(e);if(!(i&&i instanceof u.HttpResponse))throw a.ErrorBuilder.systemError(`Invalid response value returned, required instance of ${u.HttpResponse.name}, found ${i?null==i?void 0:i.constructor.name:i}`);return this.logger.info(`===== REQUEST SUCCESS: ${t} - ${e.method}:${e.fullPath}`),i}catch(i){this.logger.error(i);const n=u.ResponseBuilder.json({name:i.name,message:i.message}).status([v.Errors.ACCESS_DENIED,v.Errors.AUTHENTICATION_ERROR,v.Errors.SESSION_EXPIRED].includes(i.name)?401:[v.Errors.SYSTEM_ERROR,v.Errors.CANNOT_LOCK].includes(i.name)?500:400).get();return this.logger.info(`===== REQUEST FAILED: ${t} - ${e.method}:${e.fullPath}, code: ${n.code}`,n.value),n}}))}getMiddleware(){return r(this,void 0,void 0,(function*(){if(null===this._middleware){const e=(0,a.getServiceProvider)().getInjector();this._middleware=e.resolveMultiple(y.AbstractHttpMiddleware),yield e.initInstances()}return this._middleware}))}};m=n([(0,a.Injectable)(),o("design:paramtypes",[a.AbstractLogger,p.AbstractHttpAuthorizationProvider])],m),t.DefaultHttpRequestHandler=m},2417:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CurrentUser=t.UriMapper=t.Raw=t.Socket=t.Headers=t.Queries=t.Params=t.Body=t.AccessCondition=t.TfaRequired=t.OpenAccess=t.ApiResponse=t.Head=t.Get=t.Del=t.Put=t.Post=t.Endpoint=t.ApiDescription=t.Controller=void 0;const n=i(2318);t.Controller=e=>t=>{(0,n.getServiceProvider)().register(t,"singleton");(0,n.initObjectMetadata)(t.prototype).permissionGroup=null==e?void 0:e.permissionGroup};t.ApiDescription=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).description=e};t.Endpoint=e=>(t,i)=>{const o=(0,n.initFieldMetadata)(t,i);o.httpMethod=e.method,o.url=e.url||"/"};const HttpMethodDecoratorFactory=e=>i=>(n,o,r)=>(0,t.Endpoint)({method:e,url:i})(n,o);t.Post=HttpMethodDecoratorFactory(n.HttpMethod.POST),t.Put=HttpMethodDecoratorFactory(n.HttpMethod.PUT),t.Del=HttpMethodDecoratorFactory(n.HttpMethod.DEL),t.Get=HttpMethodDecoratorFactory(n.HttpMethod.GET),t.Head=HttpMethodDecoratorFactory(n.HttpMethod.HEAD);t.ApiResponse=e=>(t,i,o)=>{const r=(0,n.initFieldMetadata)(t,i);e===String?r.responseValidationDto={id:"",primitiveType:n.DataType.STRING,fields:[]}:e===Number?r.responseValidationDto={id:"",primitiveType:n.DataType.NUMBER,fields:[]}:e===Boolean?r.responseValidationDto={id:"",primitiveType:n.DataType.BOOLEAN,fields:[]}:r.responseValidationDto=(0,n.getObjectMetadata)(e)};t.OpenAccess=()=>(e,t)=>{(0,n.initFieldMetadata)(e,t).openAccess=!0};t.TfaRequired=()=>(e,t)=>{(0,n.initFieldMetadata)(e,t).tfaRequired=!0};t.AccessCondition=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).accessConditions=e};const RequestDeco=e=>(t,i,o)=>{const r=(0,n.initFieldMetadata)(t,i),s=Reflect.getMetadata("design:paramtypes",t,i)||[];switch(e){case"body":r.bodyValidationDto=(0,n.getObjectMetadata)(s[o]);break;case"params":r.paramsValidationDto=(0,n.getObjectMetadata)(s[o]);break;case"queries":r.queriesValidationDto=(0,n.getObjectMetadata)(s[o])}r.params||(r.params={}),r.params[o]={source:e,diClass:s[o]}};t.Body=()=>RequestDeco("body");t.Params=()=>RequestDeco("params");t.Queries=()=>RequestDeco("queries");t.Headers=()=>RequestDeco("headers");t.Socket=()=>RequestDeco("socket");t.Raw=()=>RequestDeco("raw");t.UriMapper=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).uriMapper=e};t.CurrentUser=e=>(t,i)=>{const o=(0,n.initFieldMetadata)(t,i);o.userResolver=e,o.serverValue=!0}},6507:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractFileUploadHandler=void 0;t.AbstractFileUploadHandler=class AbstractFileUploadHandler{}},4839:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FileUploadHandler=void 0;const s=i(2318),a=i(7179),l=i(6507);let d=class FileUploadHandler extends l.AbstractFileUploadHandler{constructor(e){super(),this.fileService=e}moveFile(e,t){return r(this,void 0,void 0,(function*(){yield this.fileService.moveObject([{fromURI:e,toURI:t}])}))}copyFile(e,t){return r(this,void 0,void 0,(function*(){yield this.fileService.copyObject([{fromURI:e,toURI:t}])}))}removeFile(e){return r(this,void 0,void 0,(function*(){yield this.fileService.removeObject([e])}))}resolvePublicUrl(e){return r(this,void 0,void 0,(function*(){return(yield this.fileService.getAccessUrls([e],!0))[0]}))}resolvePrivateUrl(e){return r(this,void 0,void 0,(function*(){return(yield this.fileService.getAccessUrls([e],!1))[0]}))}};d=n([(0,s.Injectable)(),o("design:paramtypes",[a.AbstractFileService])],d),t.FileUploadHandler=d},5232:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},5048:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRepository=void 0;const o=i(2318);t.AbstractRepository=class AbstractRepository{constructor(e){this.model=e,this.modelMetadata=(0,o.getObjectMetadata)(this.model)}beforeCreating(e,t){return n(this,void 0,void 0,(function*(){for(const i of t)for(const t of this.modelMetadata.fields)t.userResolver&&e&&(i[t.name]=t.userResolver(e))}))}project(e,t){return t?e.map((e=>t.reduce(((t,i)=>Object.assign(t,{[i]:e[i]})),{}))):e}}},9073:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DtoRepository=t.MultipleMap=t.SingleMap=void 0;const o=i(2318),r=i(5048),s=i(3355);t.SingleMap=(e,t,i,n,o)=>({multiple:!1,modelClass:e,forwardOps:t,forwardMapping:e=>{const t=i(e[0]||{});return t&&[t]},rootMapping:e=>{const t=e&&e[0];return n(t)},nestedMapping:o});t.MultipleMap=(e,t,i,n,o)=>({multiple:!0,modelClass:e,forwardOps:t,forwardMapping:i,rootMapping:n,nestedMapping:o});class DtoRepository extends r.AbstractRepository{constructor(e,t){super(e),this.model=e,this.dissolver=t}getMapValue(e,t,i,r,s){return n(this,void 0,void 0,(function*(){for(const n of i){const i=yield t(n);let a=r?yield r(n,n.forwardMapping(i),i):n.forwardMapping(i);if(n.nestedMapping&&a)for(const i of a)yield this.getMapValue(e,t,n.nestedMapping(i),r,s);s&&(a=yield s(n,n.forwardMapping(i),i));const l=n.rootMapping(a);(0,o.deepMerge)(e,l)}}))}createMany({principal:e,body:t,tx:i}){return n(this,void 0,void 0,(function*(){const r=[];yield this.beforeCreating(e,t.records);for(const a of t.records)yield this.getMapValue(a,(e=>n(this,void 0,void 0,(function*(){const t=new s.ModelRepository(e.modelClass);return(yield t.getMany({ops:e.forwardOps(),queryProvider:i})).records}))),this.dissolver(a),((t,r,a)=>n(this,void 0,void 0,(function*(){if(!r)return[];const n=new s.ModelRepository(t.modelClass),l=t.forwardOps();if(t.multiple){yield n.deleteMany({ops:l,tx:i});return(yield n.createMany({principal:e,body:{records:r},tx:i})).records}{const s=r[0];if(!s)return[];if(0===a.length){return(yield n.createMany({principal:e,body:{records:r},tx:i})).records}if(1===a.length){const t=yield n.updateMany({principal:e,ops:l,body:{update:s},tx:i});return[Object.assign(Object.assign(Object.assign({},a[0]),s),t.modified[0])]}throw o.ErrorBuilder.validationError(`Found multiple record when creating ${t.modelClass.name}`)}})))),r.push(a);return{records:r}}))}updateMany({principal:e,queries:t,ops:i,body:r,tx:a}){var l;return n(this,void 0,void 0,(function*(){if(!(null===(l=null==t?void 0:t.fields)||void 0===l?void 0:l.id)||1!==t.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const d=Object.assign(Object.assign({},r.update),{id:t.fields.id[0]});yield this.beforeCreating(e,[d]),yield this.getMapValue(d,(e=>n(this,void 0,void 0,(function*(){const t=new s.ModelRepository(e.modelClass);return(yield t.getMany({ops:e.forwardOps(i),queryProvider:a})).records}))),this.dissolver(d),((t,o,r)=>n(this,void 0,void 0,(function*(){if(!o)return[];const n=new s.ModelRepository(t.modelClass),l=t.forwardOps(i);if(t.multiple){yield n.deleteMany({ops:l,tx:a});return(yield n.createMany({principal:e,body:{records:o},tx:a})).records}{const t=o[0];return t?0==r.length?[]:(r.length>1?(yield n.deleteMany({ops:l,tx:a}),yield n.createMany({principal:e,body:{records:[t]},tx:a})):yield n.updateMany({principal:e,ops:l,body:{update:t},tx:a}),r.map((e=>Object.assign(Object.assign({},e),t)))):[]}}))));let c=["id"];return t.returning&&(c=[...c,...Object.keys(r.update).filter((e=>void 0!==r.update[e]))]),{modified:d.id?this.project([d],c):[]}}))}getMany({queries:e,ops:t,queryProvider:i}){var r;return n(this,void 0,void 0,(function*(){if(!(null===(r=null==e?void 0:e.fields)||void 0===r?void 0:r.id)||1!==e.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const a={id:e.fields.id[0]};return yield this.getMapValue(a,(()=>n(this,void 0,void 0,(function*(){return[]}))),this.dissolver(a),(e=>n(this,void 0,void 0,(function*(){const n=new s.ModelRepository(e.modelClass);return(yield n.getMany({ops:e.forwardOps(t),queryProvider:i})).records})))),a.id?{records:this.project([a],e.projection),total:1}:{records:[],total:0}}))}deleteMany({queries:e,ops:t,tx:i}){var r;return n(this,void 0,void 0,(function*(){if(!(null===(r=null==e?void 0:e.fields)||void 0===r?void 0:r.id)||1!==e.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const a={id:e.fields.id[0]};return yield this.getMapValue(a,(()=>n(this,void 0,void 0,(function*(){return[]}))),this.dissolver(a),void 0,(o=>n(this,void 0,void 0,(function*(){const n=new s.ModelRepository(o.modelClass),r=o.forwardOps(t);return(yield n.deleteMany({queries:{returning:null==e?void 0:e.returning},ops:r,tx:i})).modified})))),{modified:a.id?[a]:[]}}))}}t.DtoRepository=DtoRepository},8023:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},3355:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ModelRepository=void 0;const o=i(2318),r=i(7756),s=i(6507),a=i(5048),l=i(2552),d=i(5481);class ModelRepository extends a.AbstractRepository{constructor(e){super(e),this.model=e}getNestedQueries(e){return this.modelMetadata.fields.filter((e=>e.hasMany)).filter((t=>(null==e?void 0:e.fields)&&e.fields[t.name])).map((t=>{const i=t.hasMany.relationDto,n=this.getRequestQueryConditionFromQuery(null==e?void 0:e.fields[t.name],Object.assign(Object.assign({},i),{fields:i.fields.filter((e=>{var i;return e.name!==(null===(i=t.hasMany)||void 0===i?void 0:i.column)}))}));return{modelId:t.hasMany.relationDto.id,targetField:t.hasMany.column,queries:n.length?{_and:n}:{}}}))}getUploadHandler(){return n(this,void 0,void 0,(function*(){if(void 0===this.fileUploadHandler){const e=(0,o.getServiceProvider)().getInjector();this.fileUploadHandler=e.resolveOptional(s.AbstractFileUploadHandler)||null,yield e.initInstances()}return this.fileUploadHandler}))}getRequestQueryConditionFromQuery(e,t){var i;const n=[];for(const s of(0,r.getDirectFields)(t)){const r=`${t.id}.${s.name}`,a=e[s.name];if(void 0!==a)if(s.pk||s.fk||s.isSymbol)n.push({_in:{[r]:a}});else if(s.enum)n.push({_in:{[r]:a}});else switch(s.dataType){case o.DataType.STRING:if(s.searchable){const e={[(null==s?void 0:s.searchable.caseSensitive)?(null==s?void 0:s.searchable.accentSensitive)?"_sub":"_usub":(null===(i=null==s?void 0:s.searchable)||void 0===i?void 0:i.accentSensitive)?"_isub":"_iusub"]:{[r]:a}};n.push(e)}else n.push({_eq:{[r]:a}});break;case o.DataType.NUMBER:const e=new o.RangeQueryDto;Object.assign(e,a),e.min&&(e.minExclusive?n.push({_gt:{[r]:e.min}}):n.push({_gte:{[r]:e.min}})),e.max&&(e.maxExclusive?n.push({_lt:{[r]:e.max}}):n.push({_lte:{[r]:e.max}}));break;case o.DataType.BOOLEAN:n.push({_eq:{[r]:a}})}}return n}uriHandling(e){var t,i;return n(this,void 0,void 0,(function*(){const r=[],s=yield this.getUploadHandler(),a=[],uriHandler=(e,t,i,o)=>n(this,void 0,void 0,(function*(){const n=yield t(e,i);n&&(yield s.copyFile(e,n),o(n))}));if(s)for(const n of this.modelMetadata.fields)for(const s of e)if(n.uriMapper){const e=s[n.name];if(!e)continue;(null===(t=n.mimeProps)||void 0===t?void 0:t.keepOnRemove)||r.push(e),a.push(uriHandler(e,n.uriMapper,(0,o.getSystemLocale)(),(e=>s[n.name]=e)))}else if(n.multiLocaleColumn){const e=this.modelMetadata.fields.find((e=>e.name===n.multiLocaleColumn));if((null==e?void 0:e.uriMapper)&&s[n.name]){const t=Object.keys(s[n.name]).map((e=>[e,s[n.name][e]]));for(const o of t)(null===(i=e.mimeProps)||void 0===i?void 0:i.keepOnRemove)||r.push(o[1]),a.push(uriHandler(o[1],e.uriMapper,o[0],(e=>s[n.name][o[0]]=e)))}}return yield Promise.all(a),()=>n(this,void 0,void 0,(function*(){s&&(yield Promise.all(r.map((e=>s.removeFile(e)))))}))}))}beforeReturning(e){return n(this,void 0,void 0,(function*(){const t=yield this.getUploadHandler();if(!t)return;const i=[];for(const o of e)for(const e of this.modelMetadata.fields)if(e.uriMapper){if(!o[e.name])continue;i.push((()=>n(this,void 0,void 0,(function*(){var i;o[e.name]=(null===(i=e.mimeProps)||void 0===i?void 0:i.public)?yield t.resolvePublicUrl(o[e.name]):yield t.resolvePrivateUrl(o[e.name])})))())}else if(e.multiLocaleColumn){const r=this.modelMetadata.fields.find((t=>t.name===e.multiLocaleColumn));if(null==r?void 0:r.uriMapper){const s=o[e.name];if(!s)continue;for(const e of Object.keys(s))i.push((()=>n(this,void 0,void 0,(function*(){var i;s[e]=(null===(i=r.mimeProps)||void 0===i?void 0:i.public)?yield t.resolvePublicUrl(s[e]):yield t.resolvePrivateUrl(s[e])})))())}}yield Promise.all(i)}))}createMany({principal:e,body:t,tx:i}){var s;return n(this,void 0,void 0,(function*(){const n=t.records;if(!n.length)return{records:[]};const a=(0,r.getDirectFields)(this.modelMetadata),c=a.filter((e=>!!e.multiLocaleColumn)),u=yield this.uriHandling(n),h=(0,o.getSystemLocale)();if(h)for(const e of n)for(const t of c)e[t.name]&&(e[t.multiLocaleColumn]=e[t.name][h]);const p=n.map(((e,t)=>c.filter((t=>!!e[t.name])).map((e=>({recordIndex:t,field:e.name,entryObject:{}}))))).flatMap((e=>e)),f=yield i.use(d.LocaleEntry).createMany(p.map((e=>e.entryObject))),v=n.map((e=>c.filter((t=>!!e[t.name])).map((t=>e[t.name])))).flatMap((e=>e)).map(((e,t)=>Object.keys(e).map((i=>({localeCode:i,entryId:f[t].id,translation:e[i]}))))).flatMap((e=>e));yield i.use(l.LocaleTranslation).createMany(v),t.records=n.map(((e,t)=>a.reduce(((i,n)=>{let o=e[n.name];if(n.multiLocaleColumn){const e=p.findIndex((e=>e.recordIndex===t&&e.field===n.name));e>=0&&(o=f[e].id)}return Object.assign(i,void 0!==o?{[n.name]:o}:{})}),{}))),yield this.beforeCreating(e,t.records);let y=t.records.length?yield i.use(this.model).createMany(t.records):[];yield this.beforeReturning(y);const g=this.modelMetadata.fields.filter((e=>!e.multiLocaleColumn&&(e.pk||e.serverValue||e.mimeProps))).map((e=>e.name));y=this.project(y,g);const m=this.modelMetadata.fields.filter((e=>!!e.hasMany));for(const r of m){const a=y.flatMap(((e,t)=>{var i;const o=n[t][r.name];return o?((null===(i=r.hasMany)||void 0===i?void 0:i.single)?[o]:o).map((t=>Object.assign(Object.assign({},t),{[r.hasMany.column]:e.id}))):[]}));if(a.length){const n=new ModelRepository((0,o.getModelById)(r.hasMany.relationDto.id));t.records=a;const l=yield n.createMany({principal:e,body:t,tx:i});for(let e=0;e<l.records.length;e++)a[e]=Object.assign(Object.assign({},a[e]),l.records[e]);for(let e=0;e<y.length;e++){const t=[];for(let i=0;i<a.length;i++)a[i][r.hasMany.column]===y[e].id&&t.push(l.records[e]);y[e]=Object.assign(Object.assign({},y[e]),{[r.name]:(null===(s=r.hasMany)||void 0===s?void 0:s.single)?t[0]:t})}}}return yield u(),{records:y}}))}updateMany({principal:e,ops:t,queries:i,body:s,tx:a}){var c,u;return n(this,void 0,void 0,(function*(){const n=t||[],h=this.modelMetadata.fields.filter((e=>!!e.hasMany)),p=(0,o.getSystemLocale)(),f=(0,r.getDirectFields)(this.modelMetadata).filter((e=>!e.multiLocaleColumn&&(void 0!==s.update[e.name]||e.isMultiLocale&&!!p))),v=(0,o.leanData)(f.reduce(((e,t)=>Object.assign(e,{[t.name]:s.update[t.name]})),{}))||{},y=Object.keys(s.update),g=this.modelMetadata.fields.filter((e=>y.includes(e.name)&&e.multiLocaleColumn)),m=yield this.uriHandling([s.update]);if(p)for(const e of g)if(s.update[e.name]){const t=s.update[e.name][p];void 0!==t&&(v[e.multiLocaleColumn]=t)}if(null==i?void 0:i.fields){const e=this.getRequestQueryConditionFromQuery(i.fields,this.modelMetadata);e.length&&n.push(...e)}const b=n.length?{_and:[...n]}:{},S=this.getNestedQueries(i);let M=[];if(S.length){const e=yield a.use(this.model).getMany(b,{projection:["id"]},S);M=e.records.map((e=>e.id)),M.length&&f.length&&(yield a.use(this.model).updateMany({_in:{id:M}},v,!1))}else if(f.length)M=yield a.use(this.model).updateMany(b,v,!0);else{const e=yield a.use(this.model).getMany(b,{projection:["id"]});M=e.records.map((e=>e.id))}const R=M.map((e=>Object.assign(Object.assign({},v),{id:e})));if(g.length){const e=yield a.use(this.model).getRecords({_in:{id:M}},{projection:["id",...g.map((e=>e.name))]}),t=e.map((e=>g.filter((t=>!e[t.name])).map((t=>({recordId:e.id,field:t.name}))))).flatMap((e=>e)),i=t.length?yield a.use(d.LocaleEntry).createMany(t.map((()=>({})))):[],n=[];i.forEach(((i,o)=>{const r=t[o],s=e.find((e=>e.id===r.recordId));if(s){s[r.field]=i.id;let e=n.find((e=>e.id===s.id));e||(e={id:s.id},n.push(e)),e[r.field]=i.id}})),yield Promise.all(n.map((e=>a.use(this.model).updateOne(e))));const o=[];for(const t of g){const i=s.update[t.name],n=Object.keys(i||{}).filter((e=>e!==p));n.length&&o.push(...e.map((e=>n.map((n=>({entryId:e[t.name],langCode:n,translation:i[n]}))))).flatMap((e=>e)))}o.length&&(yield a.use(l.LocaleTranslation).deleteMany({_or:o.map((e=>({_eq:{entryId:e.entryId,localeCode:e.langCode}})))}),yield a.use(l.LocaleTranslation).createMany(o.map((e=>({entryId:e.entryId,localeCode:e.langCode,translation:e.translation})))))}yield this.beforeReturning(R);for(const t of h){const i=s.update[t.name];if(void 0===i||!M.length)continue;if(M.length>1)throw o.ErrorBuilder.systemError(`Multiple records found while updating @HasMany field: ${t.name}`);const n=R.find((e=>e.id===M[0])),r=(0,o.getModelById)(t.hasMany.relationDto.id),l=a.use(r),d=(yield l.getRecords({_eq:{[t.hasMany.column]:n.id}},{limit:(null===(c=t.hasMany)||void 0===c?void 0:c.single)?1:void 0})).map((e=>e.id)),h=i.map((e=>e.id)).filter((e=>!!e)),p=d.filter((e=>!h.includes(e))),f=i.filter((e=>!e.id)).map((e=>Object.assign(Object.assign({},e),{[t.hasMany.column]:n.id}))),v=i.filter((e=>!!e.id));p.length&&(yield l.deleteMany({_in:{id:p}}));const y=new ModelRepository(r),g=yield y.createMany({principal:e,body:{records:f},tx:a});yield Promise.all(v.filter((e=>Object.keys(e).length>1)).map((t=>y.updateMany({principal:e,ops:[{_eq:{id:t.id}}],tx:a,body:{update:(0,o.leanData)(Object.assign(Object.assign({},t),{id:void 0}))}}))));const m=f.map(((e,t)=>Object.assign(Object.assign({},e),g.records[t]))).concat(v);n[t.name]=(null===(u=t.hasMany)||void 0===u?void 0:u.single)?m[0]:m}let j=["id"];return(null==i?void 0:i.returning)&&(j=[...j,...Object.keys(s.update).filter((e=>void 0!==s.update[e]))]),yield m(),{modified:this.project(R,j)}}))}getMany({queries:e,ops:t,queryProvider:i}){var r;return n(this,void 0,void 0,(function*(){const n=t||[];if((null==e?void 0:e.fields)&&n.push(...this.getRequestQueryConditionFromQuery(e.fields,this.modelMetadata)),null==e?void 0:e.search){const t=this.modelMetadata.fields.filter((e=>e.searchable)).map((t=>({_iusub:{[t.name]:e.search}})));t.length&&n.push({_or:t})}const s=this.modelMetadata.fields.filter((t=>t.isMultiLocale&&(!(null==e?void 0:e.projection)||e.projection.includes(t.name)))),a=this.modelMetadata.fields.filter((e=>s.find((t=>t.name===e.multiLocaleColumn)))),d=(null==e?void 0:e.projection)&&[...e.projection.filter((e=>!this.modelMetadata.fields.find((t=>t.name===e&&!!t.hasMany)))),...a.map((e=>e.name))],c=yield i.use(this.model).getMany(n.length?{_and:n}:{},{limit:null==e?void 0:e.limit,page:null==e?void 0:e.page,projection:d,order:"random"===(null==e?void 0:e.order)?e.order:null===(r=null==e?void 0:e.order)||void 0===r?void 0:r.map((e=>{const t=Object.keys(e).find((t=>!!e[t]));return[t,e[t]]}))},this.getNestedQueries(e)),u=c.records.map((e=>e.id)),h=c.records.map((e=>a.map((t=>e[t.name])))).flatMap((e=>e)).filter((e=>e)),p=(0,o.getSystemLocale)(),f=h.length?(null==e?void 0:e.locale)?e.locale.toLowerCase()!==p?yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:h},_eq:{localeCode:e.locale}},{projection:["entryId","localeCode","translation"]}):[]:yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:h}},{projection:["entryId","localeCode","translation"]}):[];for(const t of c.records)for(const i of a)if(null==e?void 0:e.locale){const n=f.find((n=>n.localeCode===e.locale&&n.entryId===t[i.name]));n&&(t[i.multiLocaleColumn]=n.translation)}else{const e=f.filter((e=>e.entryId===t[i.name]));e.length?t[i.name]=e.reduce(((e,t)=>Object.assign(e,{[t.localeCode]:t.translation})),{}):t[i.name]={}}for(const t of this.modelMetadata.fields){if(!t.hasMany||(null==e?void 0:e.projection)&&!e.projection.includes(t.name))continue;const n=(0,o.getModelById)(t.hasMany.relationDto.id),r=new ModelRepository(n),s=u.length?yield r.getMany({queries:{fields:{[t.hasMany.column]:u},limit:t.hasMany.single?1:0},queryProvider:i}):{records:[]};for(const e of c.records){const i=s.records.filter((i=>i[t.hasMany.column]===e.id));e[t.name]=t.hasMany.single?i[0]:i}}return yield this.beforeReturning(c.records),{total:c.total,records:this.project(c.records,(null==e?void 0:e.projection)&&[...e.projection,...e.locale?[]:d||[]].reduce(o.uniqueReducer,[]))}}))}deleteMany({queries:e,ops:t,tx:i}){var o,r;return n(this,void 0,void 0,(function*(){let n=t||[];if(null==e?void 0:e.fields){const t=this.getRequestQueryConditionFromQuery(e.fields,this.modelMetadata);t.length&&n.push(...t)}const s=n.length?{_and:[...n,...t||[]]}:{},a=this.getNestedQueries(e);let c=[];const u=this.modelMetadata.fields.filter((e=>e.uriMapper)),h=this.modelMetadata.fields.filter((e=>e.multiLocaleColumn));if(a.length||h.length||u.length){const e=yield i.use(this.model).getRecords(s,{projection:["id",...[...h,...u].map((e=>e.name))]},a);yield i.use(this.model).deleteMany({_in:{id:e.map((e=>e.id))}});const t=[];for(const i of e)for(const e of u)i[e.name]&&!(null===(o=e.mimeProps)||void 0===o?void 0:o.keepOnRemove)&&t.push(i[e.name]);const n=[];for(const t of e)for(const e of h){const i=this.modelMetadata.fields.find((t=>t.name===e.name));(null==i?void 0:i.uriMapper)&&!(null===(r=i.mimeProps)||void 0===r?void 0:r.keepOnRemove)&&t[i.name]&&n.push(t[i.name])}if(n.length){const e=yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:n}},{projection:["translation"]});for(const i of e)i.translation&&t.push(i.translation)}const p=e.map((e=>h.map((t=>e[t.name])))).flatMap((e=>e)).filter((e=>!!e));if(p.length&&(yield i.use(d.LocaleEntry).deleteMany({_in:{id:p}})),t.length){const e=yield this.getUploadHandler();e&&(yield Promise.all(t.map((t=>e.removeFile(t)))))}c=e}else c=yield i.use(this.model).deleteMany(s,null==e?void 0:e.returning);return{modified:c}}))}}t.ModelRepository=ModelRepository},2255:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractAccessCondition=void 0;t.AbstractAccessCondition=class AbstractAccessCondition{}},4192:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DtoFieldValidation=void 0;const r=i(2318),s=i(2255);t.DtoFieldValidation=(e,t,i)=>{let a=class _ extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return t(e)}))}getConditionMetadata(){return{name:i||"dto_field_condition",valueType:r.AccessConditionValueType.DTO,valueConstraint:JSON.stringify((0,r.getObjectMetadata)(e))}}validate(e,t){return o(this,void 0,void 0,(function*(){try{for(const i of e)(0,r.validateData)(i,t);return!0}catch(e){return!1}}))}};return a=n([(0,r.Register)()],a),a}},1071:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FilterModelFieldAccessCondition=void 0;const r=i(2318),s=i(2255);t.FilterModelFieldAccessCondition=(e,t)=>{let i=class _ extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return t(e)}))}getConditionMetadata(){return{name:"filter_model_field",valueType:r.AccessConditionValueType.CHOICES,valueConstraint:(0,r.getObjectMetadata)(e).fields.map((e=>e.name))}}validate(e,t){return o(this,void 0,void 0,(function*(){return!!e&&e.every((e=>t.includes(e)))}))}};return i=n([(0,r.Register)()],i),i}},3198:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.MaximumQueryLimit=void 0;const r=i(2318),s=i(2255);let a=class MaximumQueryLimit extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){let t=e.getQuery().limit;return t&&(t=parseInt(t)),t||0}))}validate(e,t){return o(this,void 0,void 0,(function*(){return e>0&&e<=t}))}getConditionMetadata(){return{name:"maximum_query_limit",valueType:r.AccessConditionValueType.NUMBER,valueConstraint:JSON.stringify({min:1})}}};a=n([(0,r.Register)()],a),t.MaximumQueryLimit=a},7493:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},341:function(e,t,i){var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,o)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(9025),t),o(i(4638),t),o(i(1820),t),o(i(1870),t),o(i(4972),t),o(i(4435),t),o(i(7540),t),o(i(8903),t),o(i(2417),t),o(i(1532),t),o(i(5879),t),o(i(6004),t),o(i(7282),t),o(i(767),t),o(i(225),t),o(i(7493),t),o(i(2255),t),o(i(1071),t),o(i(3198),t),o(i(4192),t),o(i(859),t),o(i(2085),t),o(i(531),t),o(i(7825),t),o(i(9837),t),o(i(3355),t),o(i(9073),t),o(i(8023),t),o(i(5048),t),o(i(5530),t),o(i(2841),t),o(i(7152),t),o(i(8577),t),o(i(2665),t),o(i(9990),t),o(i(6507),t),o(i(4839),t),o(i(5232),t),o(i(5572),t),o(i(10),t),o(i(5481),t),o(i(2552),t),o(i(889),t),o(i(5537),t),o(i(226),t),o(i(8836),t),o(i(9627),t),o(i(6721),t),o(i(7014),t),o(i(5761),t),o(i(7179),t),o(i(8659),t),o(i(4487),t),o(i(7120),t),o(i(7143),t),o(i(1689),t),o(i(1787),t),o(i(3016),t),o(i(7380),t),o(i(8037),t),o(i(730),t),o(i(4768),t),o(i(2345),t),o(i(7724),t),o(i(1556),t),o(i(2363),t),o(i(4683),t),o(i(9527),t),o(i(3376),t),o(i(5033),t),o(i(523),t)},4683:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobController=void 0;const n=i(2318);t.AbstractJobController=class AbstractJobController{getAllJobs(){const e=(0,n.getObjectMetadata)(this.constructor);return(null==e?void 0:e.jobs)||[]}}},523:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobRepository=void 0;t.AbstractJobRepository=class AbstractJobRepository{}},9527:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobScheduler=void 0;const o=i(2318),r=i(4683);t.AbstractJobScheduler=class AbstractJobScheduler{constructor(e){this.logger=e,this._jobs=null}getAvailableJobInfo(){return n(this,void 0,void 0,(function*(){if(null===this._jobs){const e=(0,o.getServiceProvider)().getInjector(),t=e.resolveMultiple(r.AbstractJobController);yield e.initInstances(),this._jobs=t.flatMap((e=>e.getAllJobs().map((t=>Object.assign(Object.assign({},t),{handlerFn:e[t.handlerName].bind(e)})))))}return this._jobs}))}scheduleJobAt(e){return this.scheduleJob(e)}executeJob(e){return n(this,void 0,void 0,(function*(){const t=(yield this.getAvailableJobInfo()).find((t=>t.jobName===e.jobName));t&&(yield t.handlerFn(...e.params||[])),t&&!e.at||(yield this.removeJob(e.jobId),this.logger.info(t?`Remove one-time job ${e.jobName} at timestamp ${e.at}`:`Remove not found job: ${e.jobName}`))}))}}},3376:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AwsJobScheduler=void 0;const a=i(2318),l=i(9336),d=s(i(1495)),c=i(9527),u=i(2363),gcdBetween=(e,t)=>{const i=e>t?e:t,n=e>t?t:e;if(i<=0||n<=0)return 1;if(i%n==0)return n;{const e=Math.trunc(i/n);return gcdBetween(n,i-n*e)}},gcdOf=(e,t)=>t.length?gcdOf(gcdBetween(e,t[0]),t.slice(1)):e,getWaitExpression=e=>`Wait ${e} seconds`;let h=class AwsJobScheduler extends c.AbstractJobScheduler{constructor(e,t,i,n,o,r,s="default",a="claire-aws-job-",c="one-minute-step-function-trigger"){super(e),this.logger=e,this.redisServerUrl=t,this.uniqueIdKey=i,this.apiLambdaFunctionArn=n,this.stepFunctionName=o,this.iamRoleArn=r,this.eventBusName=s,this.jobNamePrefix=a,this.oneMinuteRule=c,this.eventbridge=new l.EventBridge,this.stepfunctions=new l.StepFunctions({apiVersion:"2016-11-23"}),this.redisClient=new d.default(this.redisServerUrl)}init(){return r(this,void 0,void 0,(function*(){}))}exit(){this.redisClient.quit()}handleInterval(e){return r(this,void 0,void 0,(function*(){this.logger.debug("Handle interval",e,typeof e);const t=(yield this.getAvailableJobInfo()).filter((t=>t.interval&&e%t.interval==0));yield Promise.all(t.map((e=>this.executeJob(Object.assign(Object.assign({},e),{jobId:e.jobName})))))}))}handleCron(e){return r(this,void 0,void 0,(function*(){this.logger.debug("Handle cron",e),yield this.executeJob(e)}))}generateCronFromTimestamp(e){const t=new Date(e);return[t.getUTCMinutes(),t.getUTCHours(),t.getUTCDate(),t.getUTCMonth(),"?",t.getUTCFullYear()].join(" ")}isActiveScheduler(){return!1}getAllScheduledJobs(){return r(this,void 0,void 0,(function*(){const e=yield this.getAvailableJobInfo(),t=yield this.eventbridge.listRules({EventBusName:this.eventBusName,NamePrefix:this.jobNamePrefix}).promise();return(yield Promise.all((t.Rules||[]).map((e=>r(this,void 0,void 0,(function*(){var t;const i=e.Name,n=null===(t=(yield this.eventbridge.listTargetsByRule({EventBusName:this.eventBusName,Rule:i}).promise()).Targets)||void 0===t?void 0:t.find((e=>e.Id===i));if(!n||!n.Input)return;return JSON.parse(n.Input).requestContext.cronScheduler.data})))))).filter((e=>!!e)).concat(e.filter((e=>e.interval)).map((e=>Object.assign(Object.assign({},e),{jobId:e.jobName}))))}))}scheduleJob(e){return r(this,void 0,void 0,(function*(){if(this.logger.debug("Scheduling job: ",e),e.cron||e.at){const t=yield this.redisClient.incr(this.uniqueIdKey),i=`${this.jobNamePrefix}${t}`,n=e.cron?`${e.cron} *`:this.generateCronFromTimestamp(e.at);return this.logger.debug("Cron expression",n),yield this.eventbridge.putRule({Name:i,Description:`${e.jobName} - ${e.cron||e.at}`,EventBusName:this.eventBusName,ScheduleExpression:`cron(${n})`,State:"ENABLED"}).promise(),yield this.eventbridge.putTargets({Rule:i,Targets:[{Arn:this.apiLambdaFunctionArn,Id:i,Input:JSON.stringify({requestContext:{cronScheduler:{data:Object.assign(Object.assign({},e),{jobId:i})}}})}]}).promise(),i}if(e.interval)return e.jobName;throw a.ErrorBuilder.systemError(`Job does not have time config: ${e.jobName}`)}))}syncJobs(){return r(this,void 0,void 0,(function*(){this.logger.debug("Checking interval scheduler"),yield this.checkIntervalScheduler();const e=yield this.getAllScheduledJobs(),t=yield this.getAvailableJobInfo(),i=e.filter((e=>!t.find((t=>t.jobName===e.jobName))));for(const e of i)this.logger.info(`Removing stale job: ${e.jobName} of id: ${e.jobId}`),yield this.removeJob(e.jobId);i.length&&this.logger.info(`Cleaned up: ${i.length} stale jobs`),this.logger.debug("Remove scheduled cron jobs");const n=e.filter((e=>e.cron));yield Promise.all(n.map((e=>this.removeJob(e.jobId))));const o=t.filter((e=>e.cron||e.interval));this.logger.debug("Scheduling cron & interval jobs");for(const e of o)yield this.scheduleJob({jobName:e.jobName,cron:e.cron,interval:e.interval})}))}removeJob(e){return r(this,void 0,void 0,(function*(){yield this.eventbridge.removeTargets({EventBusName:this.eventBusName,Rule:e,Ids:[e]}).promise(),yield this.eventbridge.deleteRule({EventBusName:this.eventBusName,Name:e}).promise()}))}checkIntervalScheduler(){var e,t;return r(this,void 0,void 0,(function*(){const i=(yield this.getAvailableJobInfo()).filter((e=>e.interval)),n=i.map((e=>e.interval)),[o,r]=((e,t)=>{let i=u.JobInterval.EVERY_30S;t.length&&(i=gcdOf(t[0],t.slice(1)),i<u.JobInterval.EVERY_5S&&(i=u.JobInterval.EVERY_5S));const n=Math.trunc(60/i),o=[];for(let e=0;e<n;e++)o.push(e*i);return[i,`\n {\n "StartAt": "Create items",\n "States": {\n "Create items": {\n "Type": "Pass",\n "Next": "Loop",\n "Result": ${JSON.stringify(o)}\n },\n "Loop": {\n "Type": "Map",\n "End": true,\n "Iterator": {\n "StartAt": "${getWaitExpression(i)}",\n "States": {\n "${getWaitExpression(i)}": {\n "Type": "Wait",\n "Seconds": ${i},\n "Next": "Convert time to request object"\n },\n "Convert time to request object": {\n "Type": "Pass",\n "Next": "Lambda Invoke",\n "Result": {\n "requestContext": {\n "intervalScheduler": {\n "time": "$"\n }\n }\n }\n },\n "Lambda Invoke": {\n "Type": "Task",\n "Resource": "arn:aws:states:::lambda:invoke",\n "Parameters": {\n "Payload.$": "$",\n "FunctionName": "${e}:$LATEST"\n },\n "End": true,\n "OutputPath": "$.Payload"\n }\n }\n },\n "MaxConcurrency": 1\n }\n },\n "Comment": "One minute loop to trigger lambda function"\n }\n `]})(this.apiLambdaFunctionArn,n);this.logger.debug("Listing all state machines");const s=yield this.stepfunctions.listStateMachines({}).promise();let a=null===(e=s.stateMachines.find((e=>e.name.includes(this.stepFunctionName))))||void 0===e?void 0:e.stateMachineArn,l=a;if(a){(yield this.stepfunctions.describeStateMachine({stateMachineArn:a}).promise()).definition.includes(getWaitExpression(o))||(this.logger.debug("Step function definition changed, create new state machine"),l="")}const d=`${this.stepFunctionName}-${o}`;if(!l){this.logger.debug(`Create new step function with interval ${o} seconds`);l=(yield this.stepfunctions.createStateMachine({definition:r,name:d,roleArn:this.iamRoleArn,type:"EXPRESS"}).promise()).stateMachineArn}this.logger.debug("Step function ARNs old / new",a,l),this.logger.debug("Getting one minute rule");const c=yield this.eventbridge.listRules({EventBusName:this.eventBusName,NamePrefix:this.oneMinuteRule}).promise(),h=null===(t=c.Rules)||void 0===t?void 0:t.find((e=>e.Name==this.oneMinuteRule));h||(this.logger.debug("Create new one minute rule"),yield this.eventbridge.putRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule,Description:"One minute trigger function for step function",ScheduleExpression:"rate(1 minute)",State:"ENABLED"}).promise()),this.logger.debug("Adding step function state machine as target"),l!==a&&(a&&(this.logger.debug("Removing old target",a),yield this.eventbridge.removeTargets({EventBusName:this.eventBusName,Rule:this.oneMinuteRule,Ids:[this.stepFunctionName]}).promise(),this.logger.debug("Removing old state machine function"),yield this.stepfunctions.deleteStateMachine({stateMachineArn:a}).promise()),this.logger.debug("Adding new target",l),yield this.eventbridge.putTargets({Rule:this.oneMinuteRule,Targets:[{Arn:l,Id:this.stepFunctionName,RoleArn:this.iamRoleArn}]}).promise()),!i.length&&(null==h?void 0:h.State)?(this.logger.info("No interval job found, disable one minute rule"),yield this.eventbridge.disableRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule}).promise()):(this.logger.info("Interval job found, enable one minute rule"),yield this.eventbridge.enableRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule}).promise())}))}};h=n([(0,a.Initable)(),o("design:paramtypes",[a.AbstractLogger,String,String,String,String,String,Object,Object,Object])],h),t.AwsJobScheduler=h},5033:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalJobScheduler=void 0;const a=i(2318),l=s(i(1495)),d=s(i(9896)),c=s(i(7344)),u=i(9527),h=i(523),p=i(9512);var f;!function(e){e.SCHEDULE_JOB="SCHEDULE_JOB",e.REMOVE_JOB="REMOVE_JOB",e.SYNC_JOB="SYNC_JOB",e.NOTIFY="NOTIFY"}(f||(f={}));let v=class LocalJobScheduler extends u.AbstractJobScheduler{constructor(e,t,i,n,o,r,s,a=30){super(e),this.logger=e,this.jobRepo=t,this.redisServerUrl=i,this.lockMutexKey=n,this.holdMutexKey=o,this.uniqueIdKey=r,this.multiClientChannel=s,this.keyRetentionDurationSecond=a,this.intervals=[],this.isActive=!1,this.notifyResolver={},this.jobHolder={},this.redisClient=new l.default(this.redisServerUrl),this.subscribeClient=this.redisClient.duplicate()}sendJob(e,t,i){this.subscribeClient.publish(this.multiClientChannel,JSON.stringify({type:e,messageId:t,data:i}))}processMessage(e,t,i){return r(this,void 0,void 0,(function*(){switch(e){case f.SYNC_JOB:yield this.syncJobs(),this.sendJob(f.NOTIFY,t);break;case f.NOTIFY:const n=this.notifyResolver[t];if(!n)return;n(i);break;case f.SCHEDULE_JOB:if(!this.isActive)return;const o=i,r=yield this.scheduleJobAt(o);this.sendJob(f.NOTIFY,t,r);break;case f.REMOVE_JOB:if(!this.isActive)return;const s=i;yield this.removeJob(s),this.sendJob(f.NOTIFY,t);break;default:this.logger.error(`Not recognize message type ${e}`)}}))}extendMutexKey(){return r(this,void 0,void 0,(function*(){this.redisClient&&(yield this.redisClient.setex(this.holdMutexKey,this.keyRetentionDurationSecond,1),this.logger.debug("Scheduler extends mutex key"))}))}init(){return r(this,void 0,void 0,(function*(){this.logger.debug("LocalJobScheduler init"),this.logger.debug("Listening on multi client channel"),this.redisClient.on("message",((e,t)=>{if(e===this.multiClientChannel){const e=JSON.parse(t);this.processMessage(e.type,e.messageId,e.data).catch((t=>this.logger.error(`Fail to process message, ${e}`,t)))}})),yield this.subscribeClient.subscribe(this.multiClientChannel),this.logger.debug("Try to claim active scheduler");const e=new d.default([this.redisClient]);try{const t=yield e.acquire([this.lockMutexKey],this.keyRetentionDurationSecond);this.isActive=!0,yield this.extendMutexKey(),yield t.release(),this.logger.debug("Being active scheduler"),this.mutexHoldInterval=setInterval((()=>{this.extendMutexKey()}),Math.trunc(1e3*this.keyRetentionDurationSecond/2)+1)}catch(e){this.logger.info("Failed to lock mutex key, ignore",e)}}))}exit(){this.mutexHoldInterval&&(0,p.clearInterval)(this.mutexHoldInterval),this.redisClient.quit(),this.subscribeClient.quit();for(const e of this.intervals)(0,p.clearInterval)(e);this.logger.debug("LocalJobScheduler exit")}isActiveScheduler(){return this.isActive}getAllScheduledJobs(){return r(this,void 0,void 0,(function*(){return Object.values(this.jobHolder).filter((e=>!!(null==e?void 0:e.jobInfo))).map((e=>null==e?void 0:e.jobInfo))}))}syncJobs(){return r(this,void 0,void 0,(function*(){if(!this.isActive){const e=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((t=>{this.notifyResolver[e]=t,this.sendJob(f.SYNC_JOB,e)}))}{const e=yield this.getAvailableJobInfo();for(const t of e)(t.cron||t.interval)&&(yield this.scheduleJob(t));const t=yield this.jobRepo.getJobs();for(const e of t)yield this.scheduleJob(e)}}))}scheduleJob(e){return r(this,void 0,void 0,(function*(){if(this.isActive){if(e.at){const t=yield this.jobRepo.saveJob({jobName:e.jobName,params:e.params,at:e.at}),i=Object.assign(Object.assign({},e),{jobId:t}),n=setTimeout((()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}),new Date(e.at).getTime()-Date.now());return this.jobHolder[t]={jobCanceler:()=>(0,p.clearTimeout)(n),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}if(e.interval){const t=e.jobName,i=Object.assign(Object.assign({},e),{jobId:t}),n=setInterval((()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}),e.interval);return this.jobHolder[t]={jobCanceler:()=>(0,p.clearInterval)(n),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}if(e.cron){const t=e.jobName,i=Object.assign(Object.assign({},e),{jobId:t}),n=c.default.scheduleJob(e.cron,(()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}));return this.jobHolder[t]={jobCanceler:()=>n.cancel(),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}throw a.ErrorBuilder.systemError(`Job does not have time config: ${e.jobName}`)}{const t=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((i=>{this.notifyResolver[t]=i,this.sendJob(f.SCHEDULE_JOB,t,e)}))}}))}removeJob(e){return r(this,void 0,void 0,(function*(){if(this.isActive){const t=this.jobHolder[e];return t&&(t.jobCanceler(),this.jobHolder[e]=void 0),void(yield this.jobRepo.removeJobById(e))}{const t=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((i=>{this.notifyResolver[t]=i,this.sendJob(f.REMOVE_JOB,t,e)}))}}))}};v=n([(0,a.Initable)(),o("design:paramtypes",[a.AbstractLogger,h.AbstractJobRepository,String,String,String,String,String,Number])],v),t.LocalJobScheduler=v},1556:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CustomJob=t.CronJob=t.IntervalJob=void 0;const n=i(2318);t.IntervalJob=(e,t)=>(i,o)=>{const r=(0,n.initObjectMetadata)(i);r.jobs||(r.jobs=[]),r.jobs.push({jobName:e,interval:t,handlerName:o})};t.CronJob=(e,t)=>(i,o)=>{const r=(0,n.initObjectMetadata)(i);if(r.jobs||(r.jobs=[]),5!==t.split(" ").length)throw n.ErrorBuilder.systemError("Invalid cron expression, expect minute / hour / day / month / day-of-week");r.jobs.push({jobName:e,cron:t,handlerName:o})};t.CustomJob=e=>(t,i)=>{const o=(0,n.initObjectMetadata)(t);o.jobs||(o.jobs=[]),o.jobs.push({jobName:e,handlerName:i})}},2363:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.JobInterval=t.CRON_REQUEST_METHOD=t.INTERVAL_REQUEST_METHOD=void 0,t.INTERVAL_REQUEST_METHOD="interval",t.CRON_REQUEST_METHOD="cron",function(e){e[e.EVERY_5S=5]="EVERY_5S",e[e.EVERY_10S=10]="EVERY_10S",e[e.EVERY_15S=15]="EVERY_15S",e[e.EVERY_20S=20]="EVERY_20S",e[e.EVERY_30S=30]="EVERY_30S"}(t.JobInterval||(t.JobInterval={}))},5572:function(e,t,i){var n,o=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},r=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileLogMedium=void 0;const l=a(i(7147)),d=a(i(1017)),c=i(2318);let u=n=class FileLogMedium{constructor(e){const t=e.separated?n.levels.map((t=>d.default.join(e.destination,t+".log"))):[e.destination];this.destination=t.map((e=>(l.default.existsSync(d.default.dirname(e))||l.default.mkdirSync(d.default.dirname(e),{recursive:!0}),l.default.openSync(e,"a")))),this.separated=!!e.separated}init(){return s(this,void 0,void 0,(function*(){}))}exit(){this.destination.forEach((e=>l.default.closeSync(e)))}write(e,t){const i=this.separated?this.destination[n.levels.indexOf(e)]:0;l.default.appendFileSync(i,t)}};u.levels=Object.values(c.LogLevel),u=n=o([(0,c.Initable)(),r("design:paramtypes",[Object])],u),t.FileLogMedium=u},5761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractCacheService=void 0;t.AbstractCacheService=class AbstractCacheService{}},7179:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractFileService=void 0;t.AbstractFileService=class AbstractFileService{}},4487:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SesMailService=t.LocalMailService=t.AbstractMailService=void 0;const l=i(2318),d=i(9336),c=a(i(7147)),u=a(i(1017));class AbstractMailService{}t.AbstractMailService=AbstractMailService;let h=class LocalMailService extends AbstractMailService{constructor(e){super(),this.config=e,c.default.existsSync(this.config.LOCAL_MAIL_FOLDER)||c.default.mkdirSync(this.config.LOCAL_MAIL_FOLDER,{recursive:!0})}send(e){return s(this,void 0,void 0,(function*(){const t=u.default.join(this.config.LOCAL_MAIL_FOLDER,`${Date.now()}.txt`);c.default.writeFileSync(t,`\nFrom: ${e.sender}\n\nTo: ${e.receivers.join(", ")}\n\nCc: ${(e.cc||[]).join(", ")}\n\nBcc: ${(e.bcc||[]).join(", ")}\n\n\nSubject: ${e.subject}\n\nContent: ${e.contentType}\n\n${e.content}\n `)}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalMailService=h;let p=class SesMailService extends AbstractMailService{constructor(e,t){super(),this.config=e,this.logger=t,this.emailClient=new d.SES({apiVersion:"2010-12-01",region:this.config.SES_REGION})}send(e){return s(this,void 0,void 0,(function*(){try{const t={Destination:{BccAddresses:e.bcc,CcAddresses:e.cc,ToAddresses:e.receivers},Message:{Body:{},Subject:{Charset:"UTF-8",Data:e.subject}},Source:e.sender};"html"===e.contentType?t.Message.Body.Html={Charset:"UTF-8",Data:e.content}:"text"===e.contentType&&(t.Message.Body.Text={Charset:"UTF-8",Data:e.content}),yield this.emailClient.sendEmail(t).promise()}catch(e){throw this.logger.error(e),l.ErrorBuilder.systemError("Cannot send email")}}))}};p=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],p),t.SesMailService=p},7014:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractService=void 0;const o=i(7756);t.AbstractService=class AbstractService{constructor(e){this.databaseAdapter=e}createTransaction(){return this.databaseAdapter.createTransaction()}getCurrentTransaction(){return n(this,void 0,void 0,(function*(){return(0,o.getTransactionFromContext)(this)}))}}},7120:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TwilioSmsService=t.LocalSmsService=t.AbstractSmsService=void 0;const l=i(2318),d=a(i(1017)),c=a(i(7202)),u=a(i(7147));class AbstractSmsService{}t.AbstractSmsService=AbstractSmsService;let h=class LocalSmsService extends AbstractSmsService{constructor(e){super(),this.config=e,u.default.existsSync(this.config.LOCAL_SMS_FOLDER)||u.default.mkdirSync(this.config.LOCAL_SMS_FOLDER,{recursive:!0})}exit(){return 0}send(e,t,i){return s(this,void 0,void 0,(function*(){const n=d.default.join(this.config.LOCAL_SMS_FOLDER,`${Date.now()}`);u.default.writeFileSync(n,`${e}-${t}: ${i}\n`)}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalSmsService=h;let p=class TwilioSmsService extends AbstractSmsService{constructor(e,t){if(super(),this.config=e,this.logger=t,!this.config.TWILIO_ACCOUNT_SID)throw l.ErrorBuilder.forConfigNotFound("TWILIO_ACCOUNT_SID");if(!this.config.TWILIO_AUTH_TOKEN)throw l.ErrorBuilder.forConfigNotFound("TWILIO_AUTH_TOKEN");this.client=(0,c.default)(this.config.TWILIO_ACCOUNT_SID,this.config.TWILIO_AUTH_TOKEN)}exit(){return 0}send(e,t,i){return s(this,void 0,void 0,(function*(){const n=yield this.client.messages.create({body:i,from:e,to:t});this.logger.debug(`Message sent from: ${e} to: ${t} with id: ${n.sid}`)}))}};p=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],p),t.TwilioSmsService=p},1689:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalFileService=void 0;const l=i(2318),d=a(i(2167)),c=i(9025),u=i(7179);let h=class LocalFileService extends u.AbstractFileService{constructor(e){super(),this.config=e}getFileSize(e){return s(this,void 0,void 0,(function*(){return Promise.all(e.map((e=>s(this,void 0,void 0,(function*(){var t;return(null===(t=(yield d.default.head(`${this.config.FILE_SERVER_URL}/info?objectKey="/${e}"`)).data)||void 0===t?void 0:t.size)||0})))))}))}getAccessUrls(e,t){return s(this,void 0,void 0,(function*(){return e.map((e=>`${this.config.FILE_SERVER_URL}/${e}`))}))}getPresignedUrl(e,t){return s(this,void 0,void 0,(function*(){return e===c.FileOperation.GET?this.getAccessUrls(t,!0):t.map((e=>`${this.config.FILE_SERVER_URL}/?objectKey="/${e}"`))}))}moveObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.post(`${this.config.FILE_SERVER_URL}/`,{from:e.fromURI,to:e.toURI}))))}))}copyObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.post(`${this.config.FILE_SERVER_URL}/`,{from:e.fromURI,to:e.toURI,copy:!0}))))}))}removeObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.delete(`${this.config.FILE_SERVER_URL}/?objectKey="/${e}"`))))}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalFileService=h},3016:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ProxyFileService=void 0;const s=i(2318),a=i(1801),l=i(7179);let d=class ProxyFileService extends l.AbstractFileService{constructor(e,t){super(),this.fileServiceHttpClient=e,this.publicFileServerEndpoint=t}getFileSize(e){return r(this,void 0,void 0,(function*(){return(yield this.fileServiceHttpClient.get(`/file/info?${(0,a.stringifyQueries)({uris:e})}`)).fileInfos.map((e=>e.fileSizeBytes))}))}getAccessUrls(e,t){return r(this,void 0,void 0,(function*(){if(t&&this.publicFileServerEndpoint)return e.map((e=>this.publicFileServerEndpoint+"/"+e));return(yield this.fileServiceHttpClient.get(`/file?${(0,a.stringifyQueries)({uris:e,public:t})}`)).urls}))}getPresignedUrl(e,t){return r(this,void 0,void 0,(function*(){throw s.ErrorBuilder.error(s.Errors.SYSTEM_ERROR,"Not supported operation")}))}moveObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/move",{operations:e})}))}copyObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/copy",{operations:e})}))}removeObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/remove",{uris:e})}))}};d=n([(0,s.Injectable)(),o("design:paramtypes",[a.AbstractHttpClient,String])],d),t.ProxyFileService=d},7143:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RedisCacheService=void 0;const l=i(2318),d=a(i(9896)),c=a(i(1495)),u=i(5761);class RedisTransaction{constructor(e){this.multi=e}hset(e,t,i){this.multi.hset(e,t,JSON.stringify(i))}set(e,t){this.multi.set(e,JSON.stringify(t))}del(e){this.multi.del(e)}hdel(e,t){this.multi.hdel(e,t)}exec(){return s(this,void 0,void 0,(function*(){return yield this.multi.exec()}))}}let h=class RedisCacheService extends u.AbstractCacheService{constructor(e,t){super(),this.config=e,this.logger=t}get redisClient(){if(!this._redisClient)throw l.ErrorBuilder.error(l.Errors.SYSTEM_ERROR,"Redis client not ready");return this._redisClient}createTransaction(){return new RedisTransaction(this.redisClient.multi())}init(){return s(this,void 0,void 0,(function*(){this._redisClient=new c.default(this.config.REDIS_SERVER)}))}exit(){return this.redisClient.disconnect(),this._redisClient=void 0,0}flush(){return s(this,void 0,void 0,(function*(){yield this.redisClient.flushall()}))}hkeys(e){return s(this,void 0,void 0,(function*(){return yield this.redisClient.hkeys(e)}))}del(e){return s(this,void 0,void 0,(function*(){yield this.redisClient.del(e)}))}hdel(e,t){return s(this,void 0,void 0,(function*(){yield this.redisClient.hdel(e,t)}))}hget(e,t){return s(this,void 0,void 0,(function*(){const i=yield this.redisClient.hget(e,t);return i?JSON.parse(i):void 0}))}hset(e,t,i){return s(this,void 0,void 0,(function*(){yield this.redisClient.hset(e,t,JSON.stringify(i))}))}get(e){return s(this,void 0,void 0,(function*(){const t=yield this.redisClient.get(e);return t?JSON.parse(t):void 0}))}set(e,t,i){return s(this,void 0,void 0,(function*(){i&&i>0?yield this.redisClient.setex(e,i,JSON.stringify(t)):yield this.redisClient.set(e,JSON.stringify(t))}))}lock(e,t,i){return s(this,void 0,void 0,(function*(){const n=new d.default([this.redisClient],{retryCount:i?1:0,retryDelay:i});try{const i=yield n.acquire([e],t);return{unlock:()=>s(this,void 0,void 0,(function*(){yield i.release()}))}}catch(t){throw l.ErrorBuilder.error(l.Errors.CANNOT_LOCK,`Cannot lock resource ${e}`)}}))}};h=n([(0,l.Initable)(),(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],h),t.RedisCacheService=h},1787:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.S3FileService=void 0;const a=i(2318),l=i(9336),d=i(7179);let c=class S3FileService extends d.AbstractFileService{constructor(e,t){super(),this.config=e,this.logger=t,this.s3Client=new l.S3({signatureVersion:"v4",region:this.config.S3_BUCKET_REGION}),this.cloudfrontSigner=new l.CloudFront.Signer(this.config.CLOUD_FRONT_PUBLIC_KEY_ID,Buffer.from(this.config.CLOUD_FRONT_PRIVATE_KEY_BASE64,"base64").toString())}getFileSize(e){return s(this,void 0,void 0,(function*(){return yield Promise.all(e.map((e=>this.getSingleFileSize(e))))}))}getAccessUrls(e,t){return s(this,void 0,void 0,(function*(){return e.map((e=>this.getSingleAccessUrl(e,t)))}))}getPresignedUrl(e,t){return s(this,void 0,void 0,(function*(){return t.map((t=>this.getSinglePresignedUrl(e,t)))}))}moveObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.moveSingleObject(e.fromURI,e.toURI))))}))}copyObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.copySingleObject(e.fromURI,e.toURI))))}))}removeObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.removeSingleObject(e))))}))}getSingleFileSize(e){return s(this,void 0,void 0,(function*(){return(yield this.s3Client.headObject({Key:e,Bucket:this.config.S3_BUCKET_NAME}).promise().then((e=>e.ContentLength)))||0}))}getSinglePresignedUrl(e,t){return this.cloudfrontSigner.getSignedUrl({url:`${this.config.CLOUD_FRONT_PUBLIC_DOMAIN}/${t}`,expires:Date.now()+36e5})}copySingleObject(e,t){return s(this,void 0,void 0,(function*(){try{yield this.s3Client.copyObject({Bucket:this.config.S3_BUCKET_NAME,CopySource:`/${this.config.S3_BUCKET_NAME}/${e}`,Key:t}).promise()}catch(e){throw this.logger.error(e),e}}))}moveSingleObject(e,t){return s(this,void 0,void 0,(function*(){try{yield this.copySingleObject(e,t),yield this.removeSingleObject(e)}catch(e){throw this.logger.error(e),e}}))}getSingleAccessUrl(e,t){const i=`${this.config.CLOUD_FRONT_PUBLIC_DOMAIN}/${e}`;return t?i:this.cloudfrontSigner.getSignedUrl({url:i,expires:Date.now()+1e3*this.config.PRESIGNED_URL_EXPIRATION_S})}removeSingleObject(e){return s(this,void 0,void 0,(function*(){yield this.s3Client.deleteObject({Bucket:this.config.S3_BUCKET_NAME,Key:e}).promise()}))}};c=n([(0,a.Injectable)(),r(0,(0,a.Inject)(a.Configuration)),o("design:paramtypes",[Object,a.AbstractLogger])],c),t.S3FileService=c},8659:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SystemService=void 0;const s=i(2318),a=i(7756),l=i(5761),d=i(7014),c=i(2345),u=i(730),h=i(767),p=i(5530),f=i(4972);let v=class SystemService extends d.AbstractService{constructor(e,t){super(t),this.cacheService=e,this.databaseAdapter=t}getApiInfo(){return r(this,void 0,void 0,(function*(){const e=(0,s.getServiceProvider)().getInjector(),t=e.resolveOptional(h.AbstractHttpRequestHandler),i=e.resolveOptional(p.AbstractServerSocketManager);yield e.initInstances();return{permissions:[...t?yield t.getMountedEndpointInfo():[],...i?yield i.getMountedEndpointInfo():[]].map((t=>{var i;return{id:(0,f.getEndpointId)(t.endpoint),description:t.endpointMetadata.description,name:t.endpointMetadata.displayName||t.endpointMetadata.name,openAccess:!!t.endpointMetadata.openAccess,permissionGroup:t.endpointMetadata.permissionGroup||"",accessConditions:(null===(i=t.endpointMetadata.accessConditions)||void 0===i?void 0:i.map((t=>e.resolve(t).getConditionMetadata())))||[],readOnly:t.endpointMetadata.httpMethod===s.HttpMethod.GET,tfaRequired:!!t.endpointMetadata.tfaRequired,method:t.endpointMetadata.httpMethod,mount:t.endpoint.mount||"",paramDto:t.endpointMetadata.paramsValidationDto,queryDto:t.endpointMetadata.queriesValidationDto,bodyDto:t.endpointMetadata.bodyValidationDto,responseDto:t.endpointMetadata.responseValidationDto}}))}}))}getCacheValue(e,t){return r(this,void 0,void 0,(function*(){switch(e){case c.CacheOperation.GET:return this.cacheService.get(t[0]);case c.CacheOperation.HGET:return this.cacheService.hget(t[0],t[1]);case c.CacheOperation.KEYS:return this.cacheService.hkeys(t[0]);case c.CacheOperation.FLUSH:return this.cacheService.flush();default:throw s.ErrorBuilder.error(s.Errors.NOT_FOUND,"Not supported cache operation")}}))}getSystemSettings(e){return r(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield t.use(u.SystemSetting).getRecords(),n={};return i.forEach((e=>{n[e.key]=JSON.parse(e.value)})),(0,s.validateData)(n,(0,s.getObjectMetadata)(e))}))}updateSystemSetting(e){return r(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=Object.keys(e).filter((t=>void 0!==e[t])).map((t=>({key:t,value:JSON.stringify(e[t])})));yield t.use(u.SystemSetting).deleteMany({_in:{key:i.map((e=>e.key))}}),yield t.use(u.SystemSetting).createMany(i)}))}};n([(0,a.Transactional)(a.PropagationMode.INHERIT_OR_CREATE),o("design:type",Function),o("design:paramtypes",[Object]),o("design:returntype",Promise)],v.prototype,"getSystemSettings",null),n([(0,a.Transactional)(a.PropagationMode.INHERIT_OR_CREATE),o("design:type",Function),o("design:paramtypes",[Object]),o("design:returntype",Promise)],v.prototype,"updateSystemSetting",null),v=n([(0,s.Injectable)(),o("design:paramtypes",[l.AbstractCacheService,a.AbstractDatabaseAdapter])],v),t.SystemService=v},6862:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractServerSocket=void 0;const o=i(2318);t.AbstractServerSocket=class AbstractServerSocket{constructor(e){this.socketInfo=e}getId(){return this.socketInfo.id}getAuthInfo(){return this.socketInfo.authInfo}send(e,t){return n(this,void 0,void 0,(function*(){t?this.socketInfo.channels.find((e=>e.name===t&&e.serverToClientAllowed))&&(yield this.sendRaw({type:o.MessageType.PLAIN,data:{message:e,channel:t}})):yield this.sendRaw({type:o.MessageType.PLAIN,data:{message:e}})}))}sendRaw(e){return n(this,void 0,void 0,(function*(){yield this.physicSend(e)}))}removeChannels(e){this.socketInfo.channels=this.socketInfo.channels.filter((t=>!e.includes(t.name)))}addChannels(e){this.socketInfo.channels.push(...e)}getChannelsInfo(){return this.socketInfo.channels}}},5530:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractServerSocketManager=void 0;const s=i(2318),a=r(i(1495)),l=i(9990),d=i(2665),c=i(2255),u=i(1532),h="x-socket-action",p="read",f="write";let v=class SocketReadCondition extends c.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return e.getHeaders()["x-socket-action"]===p}))}validate(e){return o(this,void 0,void 0,(function*(){return!!e}))}getConditionMetadata(){return{name:"disable_write",description:"Disable send message to channel",valueType:s.AccessConditionValueType.BOOLEAN}}};v=n([(0,s.Register)()],v);let y=class SocketWriteCondition extends c.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return e.getHeaders()["x-socket-action"]===f}))}validate(e){return o(this,void 0,void 0,(function*(){return!!e}))}getConditionMetadata(){return{name:"disable_read",description:"Disable receive message from channel",valueType:s.AccessConditionValueType.BOOLEAN}}};y=n([(0,s.Register)()],y);t.AbstractServerSocketManager=class AbstractServerSocketManager{constructor(e,t,i,n,o){this.requireAuthentication=e,this.logger=t,this.redisServerUrl=i,this.authProvider=n,this.authResolver=o,this._connectionHandler=null,this.redisClient=new a.default(this.redisServerUrl)}getUniqueChannelPrefix(){return"CHANNEL:"}getSocketInfoHashKey(){return"__SOCKET_INFO__"}getConnectionHandler(){return o(this,void 0,void 0,(function*(){if(null===this._connectionHandler){const e=(0,s.getServiceProvider)().getInjector();this._connectionHandler=e.resolveOptional(l.AbstractSocketConnectionHandler),yield e.initInstances()}return this._connectionHandler}))}formatBroadcastData(e,t){return{type:s.MessageType.PLAIN,data:{channel:e,message:t}}}getUniqueChannelName(e){return`${this.getUniqueChannelPrefix()}${e}`}getSocketIdsOfChannel(e){return o(this,void 0,void 0,(function*(){return(yield this.redisClient.smembers(this.getUniqueChannelName(e)))||[]}))}addSocketToChannel(e,t){return o(this,void 0,void 0,(function*(){const i=yield this.getById(e);return i&&(i.addChannels(t),yield Promise.all(t.map((t=>this.redisClient.sadd(this.getUniqueChannelName(t.name),e)))),yield i.saveSocketInfo()),i}))}removeSocketFromChannel(e,t,i=!0){return o(this,void 0,void 0,(function*(){if(!t.length)return;const n=yield this.getById(e);n&&(n.removeChannels(t),yield Promise.all(t.map((t=>this.redisClient.srem(this.getUniqueChannelName(t),e)))),i&&(yield n.saveSocketInfo()))}))}removeSocket(e,t=!0){return o(this,void 0,void 0,(function*(){const t=yield this.getById(e);t&&(this.logger.debug("Remove from all channels"),yield this.removeSocketFromChannel(e,t.getChannelsInfo().map((e=>e.name)),!1)),this.logger.debug("Remove from redis"),yield this.redisClient.hdel(this.getSocketInfoHashKey(),e)}))}handle(e){var t;return o(this,void 0,void 0,(function*(){this.logger.debug("Handle socket data",e);const i=yield this.getConnectionHandler();switch(e.method){case s.SocketMethod.CONNECT:{this.logger.debug("Socket connection attempt",e);const i=this.authResolver(null===(t=e.data)||void 0===t?void 0:t.queries),n=yield this.authProvider.getPrincipalResolver().resolvePrincipal(i);if(!n&&this.requireAuthentication)throw s.ErrorBuilder.error(s.Errors.AUTHENTICATION_ERROR);yield this.addSocket({id:e.socketId,authInfo:n,channels:[],createdAt:Date.now()},e.data);break}case s.SocketMethod.DISCONNECT:{this.logger.debug("Socket disconnect",e);const t=yield this.getById(e.socketId);if(t){const e=yield this.getMountedEndpointInfo();this.logger.debug("Notify channels");for(const i of t.getChannelsInfo()){const n=e.find((e=>e.endpointMetadata.url===i.name));n&&n.endpoint.controller.onChannelLeave(t)}this.logger.debug("Calling disconnection handler"),null==i||i.onSocketDisconnect(t),this.logger.debug("Removing socket"),yield this.removeSocket(t.getId(),!1)}break}case s.SocketMethod.MESSAGE:{this.logger.debug("Socket message",e);const t=e.data;let n=yield this.getById(e.socketId);if(n)switch(t.type){case s.MessageType.READY:yield n.sendRaw({type:s.MessageType.READY,data:""}),yield null==i?void 0:i.onSocketConnect(n);break;case s.MessageType.PING_PONG:yield n.sendRaw({type:s.MessageType.PING_PONG,data:t.data});break;case s.MessageType.CHANNEL_JOIN:{const e=t.data,i=[],o=[];for(const t of e){let e=!1,r=!1;const a=(yield this.getMountedEndpointInfo()).find((e=>e.endpointMetadata.url===t));if(a){try{const e=new u.HttpRequest({method:s.SocketMethod.MESSAGE,pathName:t,headers:{[h]:p}},a.endpointMetadata);yield this.authProvider.authorize(n.getAuthInfo(),e,a),r=!0}catch(e){this.logger.debug("Error in read authorize",e)}try{const i=new u.HttpRequest({method:s.SocketMethod.MESSAGE,pathName:t,headers:{[h]:f}},a.endpointMetadata);yield this.authProvider.authorize(n.getAuthInfo(),i,a),e=!0}catch(e){this.logger.debug("Error in write authorize",e)}(e||r)&&(this.logger.debug("Adding channel info",t,e,r),i.push({name:t,clientToServerAllowed:e,serverToClientAllowed:r}),o.push(a))}}n=yield this.addSocketToChannel(n.getId(),i),n?yield Promise.all([n.sendRaw({type:s.MessageType.CHANNEL_JOIN,data:i.map((e=>e.name))}),...o.map((e=>e.endpoint.controller.onChannelJoin(n)))]):this.logger.debug("Socket not found after addSocketToChannel")}break;case s.MessageType.CHANNEL_LEAVE:{const e=t.data,i=yield this.getMountedEndpointInfo();Promise.all(e.map((e=>()=>{const t=i.find((t=>t.endpointMetadata.url===e));if(t)return t.endpoint.controller.onChannelLeave(n)}))),yield this.removeSocketFromChannel(n.getId(),e)}break;case s.MessageType.PLAIN:{const e=t.data.channel,o=t.data.message;if(e){if(n.getChannelsInfo().find((t=>t.name===e&&t.clientToServerAllowed))){const t=(yield this.getMountedEndpointInfo()).find((t=>t.endpointMetadata.url===e));if(t){!1!==(yield t.endpoint.controller.onMessage(n,o))&&(this.logger.debug("broadcasting to channel",e,o),this.broadcastToChannel(e,o))}}}else yield null==i?void 0:i.onMessage(n,o)}break;default:this.logger.debug("Invalid message format",t)}else this.logger.debug("Socket not found",e.socketId);break}default:return}}))}getMountedEndpointInfo(){return o(this,void 0,void 0,(function*(){if(!this.mountedEndpointInfo){const e=(0,s.getServiceProvider)().getInjector(),t=e.resolveMultiple(d.AbstractSocketController);yield e.initInstances(),this.mountedEndpointInfo=t.map((e=>({endpoint:{httpMethod:s.SocketMethod.MESSAGE,mount:e.channel,controller:e,handlerFunctionName:e.onMessage.name},endpointMetadata:{httpMethod:s.SocketMethod.MESSAGE,description:"Send / Receive message to / from channel",dataType:s.DataType.OBJECT,url:e.channel,name:e.channel,accessConditions:[v,y]}})))}return this.mountedEndpointInfo}))}}},9990:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSocketConnectionHandler=void 0;t.AbstractSocketConnectionHandler=class AbstractSocketConnectionHandler{}},2665:function(e,t){var i=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSocketController=void 0;t.AbstractSocketController=class AbstractSocketController{constructor(e){this.channel=e}onChannelJoin(e){return i(this,void 0,void 0,(function*(){}))}onChannelLeave(e){return i(this,void 0,void 0,(function*(){}))}onMessage(e,t){return i(this,void 0,void 0,(function*(){}))}}},7152:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AwsSocketManager=void 0;const a=i(2318),l=s(i(9336)),d=i(767),c=i(5530),u=i(6862),h=i(859);class ApiGatewaySocket extends u.AbstractServerSocket{constructor(e,t,i,n,o,r){super(i),this.socketManager=e,this.logger=t,this.socketInfo=i,this.apiGateway=n,this.socketNamespace=o,this.redisClient=r}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.redisClient.hset(this.socketNamespace,this.socketInfo.id,JSON.stringify(this.socketInfo))}))}physicSend(e){return r(this,void 0,void 0,(function*(){this.logger.debug("aws socket physic send",e),yield this.socketManager.physicSend(this.getId(),e)}))}disconnect(e){return r(this,void 0,void 0,(function*(){e&&(yield this.physicSend(e)),yield this.socketManager.removeSocket(this.getId())}))}serialize(){return JSON.stringify(this.socketInfo)}}let p=class AwsSocketManager extends c.AbstractServerSocketManager{constructor(e,t,i,n,o,r,s,a){super(e,a,n,r,s),this.authenticationRequired=e,this.region=t,this.socketDomainUrl=i,this.redisServerUrl=n,this.httpRequestHandler=o,this.authorizationProvider=r,this.authResolver=s,this.logger=a,this.apiGatewayManagement=new l.default.ApiGatewayManagementApi({region:t,apiVersion:"2018-11-29",endpoint:i})}init(){return r(this,void 0,void 0,(function*(){this.logger.info("AwsSocketManager init")}))}exit(){this.redisClient.disconnect(),this.logger.info("AwsSocketManager exit")}removeSocketFromRedis(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.hdel(this.getSocketInfoHashKey(),e)}))}physicSend(e,t){return r(this,void 0,void 0,(function*(){try{this.logger.debug(`Socket ${e} sending`,t),yield this.apiGatewayManagement.postToConnection({ConnectionId:e,Data:JSON.stringify(t)}).promise()}catch(t){throw this.logger.debug(`Socket ${e} post error`,t),410===t.statusCode&&(this.logger.debug(`Disconnect & remove stale socket ${e}`),yield this.removeSocket(e,!1),this.logger.debug(`Socket removed ${e}`)),t}}))}configure(e){this.logger.debug("Aws socket manager configure")}getSocketsByChannel(e){return r(this,void 0,void 0,(function*(){const t=yield this.getSocketIdsOfChannel(e);if(!t.length)return[];return(yield this.redisClient.hmget(this.getSocketInfoHashKey(),...t)).filter((e=>!!e)).map((e=>this.getSocketBySerialized(e)))}))}broadcastToChannel(e,t){return r(this,void 0,void 0,(function*(){const i=yield this.getSocketIdsOfChannel(e);if(i.length){const n=this.formatBroadcastData(e,t);i.map((e=>this.physicSend(e,n).catch((t=>this.logger.error(`Cannot send to socket ${e}`,t)))))}}))}addSocket(e,t){return r(this,void 0,void 0,(function*(){const t=new ApiGatewaySocket(this,this.logger,e,this.apiGatewayManagement,this.getSocketInfoHashKey(),this.redisClient);return yield t.saveSocketInfo(),t}))}removeSocket(e,t=!0){const i=Object.create(null,{removeSocket:{get:()=>super.removeSocket}});return r(this,void 0,void 0,(function*(){this.logger.debug(`Aws socket manager remove socket: ${e}, ${t}`),yield i.removeSocket.call(this,e,t),this.logger.debug("Super remove ok"),t&&this.apiGatewayManagement.deleteConnection({ConnectionId:e}).promise().catch((e=>this.logger.error("Cannot physic remove aws socket",e)))}))}getSocketBySerialized(e){return new ApiGatewaySocket(this,this.logger,JSON.parse(e),this.apiGatewayManagement,this.getSocketInfoHashKey(),this.redisClient)}getById(e){return r(this,void 0,void 0,(function*(){const t=yield this.redisClient.hget(this.getSocketInfoHashKey(),e);if(t)return this.logger.debug("Serialized aws socket",t),this.getSocketBySerialized(t);this.logger.error("Cannot find socket with id: "+e)}))}};p=n([(0,a.Initable)(),o("design:paramtypes",[Boolean,String,String,String,d.AbstractHttpRequestHandler,h.AbstractHttpAuthorizationProvider,Function,a.AbstractLogger])],p),t.AwsSocketManager=p},8577:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},2841:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalSocketManager=void 0;const a=i(2318),l=s(i(5352)),d=s(i(9215)),c=s(i(9103)),u=i(5530),h=i(6862),p=i(859);var f;!function(e){e.SEND="SEND",e.CLOSE="CLOSE",e.SAVE="SAVE"}(f||(f={}));class RedisSocket extends h.AbstractServerSocket{constructor(e,t,i){super(i),this.socketChannelName=e,this.redisClient=t,this.socketInfo=i}physicSend(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.SEND,data:e}))}))}disconnect(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.CLOSE,data:e}))}))}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.SAVE,data:this.socketInfo}))}))}}class ExpressSocket extends h.AbstractServerSocket{constructor(e,t,i,n,o){super(n),this.socketManager=e,this.logger=t,this.socket=i,this.socketInfo=n,this.infoSaver=o}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.infoSaver(this.socketInfo)}))}physicSend(e){return r(this,void 0,void 0,(function*(){this.socket.send(JSON.stringify(e))}))}disconnect(e){return r(this,void 0,void 0,(function*(){this.socket.close(1e3,e&&JSON.stringify(e)),yield this.socketManager.removeSocket(this.getId())}))}}let v=class LocalSocketManager extends u.AbstractServerSocketManager{constructor(e,t,i,n,o){super(e,i,t,n,o),this.authenticationRequired=e,this.redisServerUrl=t,this.logger=i,this.authProvider=n,this.authResolver=o,this.allSockets=[],this.subscribedChannels=[],this.subClient=this.redisClient.duplicate(),this.channelSubClient=this.redisClient.duplicate(),this.sendClient=this.redisClient.duplicate()}init(){return r(this,void 0,void 0,(function*(){this.logger.info("LocalSocketManager init"),this.channelSubClient.on("message",((e,t)=>{this.logger.debug("channelSubClient: ",t,e),this.channelMessageListenner(t,e)})),this.subClient.on("message",((e,t)=>{this.logger.debug("subClient: ",t,e),this.socketMessageListener(t,e)}))}))}exit(){this.sendClient.disconnect(),this.subClient.disconnect(),this.channelSubClient.disconnect(),this.redisClient.disconnect(),this.logger.info("LocalSocketManager exit")}channelMessageListenner(e,t){this.logger.debug("Receiving message from channel",t,e);const i=JSON.parse(e);i.type===a.MessageType.PLAIN&&this.allSockets.forEach((e=>{e.send(i.data.message,i.data.channel)}))}socketMessageListener(e,t){this.logger.debug("Receiving message from remote socket channel",t,e);const i=t.substring(this.getSocketChannelKeyPrefix().length),n=this.allSockets.find((e=>e.getId()===i));if(n){const t=JSON.parse(e);switch(t.type){case f.SEND:n.physicSend(t.data);break;case f.SAVE:n.socketInfo.channels=t.data,n.saveSocketInfo();break;case f.CLOSE:n.disconnect(t.data);break;default:this.logger.debug("Invalid remote command",t)}}}getUniqueDataChannelName(e){return`CHANNEL_DATA:${e}`}getSocketChannelKeyPrefix(){return"SOCKET_CHANNEL:"}getSocketChannelKey(e){return`${this.getSocketChannelKeyPrefix()}${e}`}broadcastToChannel(e,t){return r(this,void 0,void 0,(function*(){const i=this.formatBroadcastData(e,t);yield this.redisClient.publish(this.getUniqueDataChannelName(e),JSON.stringify(i))}))}addSocketToChannel(e,t){const i=Object.create(null,{addSocketToChannel:{get:()=>super.addSocketToChannel}});return r(this,void 0,void 0,(function*(){const n=yield i.addSocketToChannel.call(this,e,t),o=t.map((e=>e.name)).filter((e=>!this.subscribedChannels.includes(e)));return o.length&&(yield Promise.all(o.map((e=>this.channelSubClient.subscribe(this.getUniqueDataChannelName(e))))),this.subscribedChannels.push(...o)),n}))}removeSocketFromChannel(e,t,i=!0){const n=Object.create(null,{removeSocketFromChannel:{get:()=>super.removeSocketFromChannel}});return r(this,void 0,void 0,(function*(){yield n.removeSocketFromChannel.call(this,e,t,i),yield Promise.all(t.map((e=>this.channelSubClient.unsubscribe(this.getUniqueChannelName(e))))),this.subscribedChannels=this.subscribedChannels.filter((e=>!t.includes(e)))}))}addSocket(e,{socket:t}){return r(this,void 0,void 0,(function*(){const i=new ExpressSocket(this,this.logger,t,e,(e=>r(this,void 0,void 0,(function*(){yield this.redisClient.hset(this.getSocketInfoHashKey(),e.id,JSON.stringify(e))})))),n=this.getSocketChannelKey(e.id);return yield this.subClient.subscribe(n),this.allSockets.push(i),i}))}removeSocket(e,t=!0){const i=Object.create(null,{removeSocket:{get:()=>super.removeSocket}});return r(this,void 0,void 0,(function*(){yield i.removeSocket.call(this,e,t);const n=this.getSocketChannelKey(e);yield this.subClient.unsubscribe(n),this.allSockets=this.allSockets.filter((t=>t.getId()!==e))}))}getById(e){return r(this,void 0,void 0,(function*(){let t=this.allSockets.find((t=>t.getId()===e));if(!t){const i=yield new Promise((t=>this.redisClient.hget(this.getSocketInfoHashKey(),e).then((e=>t(e?JSON.parse(e):void 0))).catch((e=>{this.logger.error(e),t(void 0)}))));i&&(t=new RedisSocket(this.getSocketChannelKey(e),this.sendClient,i))}return t}))}getSocketsByChannel(e){return r(this,void 0,void 0,(function*(){const t=yield this.getSocketIdsOfChannel(e);return(yield Promise.all(t.map((e=>this.getById(e))))).filter((e=>!!e))}))}configure(e){if(!e)return;this.logger.debug("Local socket manager configure");new l.default.Server({server:e}).on("connection",((e,t)=>{const i=t.headers["sec-websocket-key"];let n=!1,o=[];const r=(0,d.default)({url:t.url}),s=c.default.parse(decodeURIComponent(r.search||""));this.handle({method:a.SocketMethod.CONNECT,socketId:i,data:{queries:s,socket:e}}).then((()=>{n=!0;for(const e of o)this.handle(e).catch((e=>{this.logger.error(e)}))})).catch((t=>{o=[],e.close(1e3,`${t.name}:${t.message}`)})),e.onmessage=e=>{const t={method:a.SocketMethod.MESSAGE,socketId:i,data:e.data&&JSON.parse(e.data)};n?this.handle(t).catch((e=>{this.logger.error(e)})):o.push(t)},e.onclose=()=>{this.handle({method:a.SocketMethod.DISCONNECT,socketId:i}).catch((e=>{this.logger.error(e)}))}}))}};v=n([(0,a.Initable)(),o("design:paramtypes",[Boolean,String,a.AbstractLogger,p.AbstractHttpAuthorizationProvider,Function])],v),t.LocalSocketManager=v},5537:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClaireServer=void 0;const o=i(2318),r=i(137),s=i(4972);class ClaireServer extends o.ClaireApp{constructor(e,t,i){super(),this.logger=e,this.httpRequestHandler=t,this.socketManager=i,this.booted=!1}init(){return n(this,void 0,void 0,(function*(){if(this.booted)return;const e=[];if(this.httpRequestHandler){const t=yield this.httpRequestHandler.getMountedEndpointInfo();e.push(...t)}if(this.socketManager){const t=yield this.socketManager.getMountedEndpointInfo();e.push(...t)}for(const t of e)this.logger.info(`Mounting: ${(0,s.getEndpointId)(t.endpoint)}`);(0,o.getGlobalStore)().mountedEndpointInfo=e,this.logger.debug("Claire server initing"),this.logger.debug("Setting up exception handlers"),process.on("SIGTERM",(()=>(this.logger.warn("SIGTERM interrupt signal"),this.stop(r.ExitCode.SIGTERM_INTERUPTION)))),process.on("SIGINT",(()=>(this.logger.warn("SIGINT interrupt signal"),this.stop(r.ExitCode.SIGTERM_INTERUPTION)))),process.on("uncaughtException",(e=>{this.logger.error("uncaughtException",e.name,e.stack)})),process.on("unhandledRejection",(e=>{this.logger.error("unhandledRejection",e.name,e.stack)})),this.booted=!0}))}exit(){super.exit()}stop(e){this.logger.debug("Server is shutting down"),this.exit(),process.exit(e)}}t.ClaireServer=ClaireServer},226:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExpressWrapper=void 0;const r=i(2318),s=o(i(6860)),a=o(i(3685)),l=o(i(9710)),d=o(i(6674)),c=i(5530),u=i(767),h=o(i(3582));t.ExpressWrapper=class ExpressWrapper{constructor(e,t){this.injector=(0,r.getServiceProvider)().getInjector(),this.server=e,this.config=t,this.logger=this.injector.resolve(r.AbstractLogger),this.socketManager=this.injector.resolveOptional(c.AbstractServerSocketManager),this.httpRequestHandler=this.injector.resolveOptional(u.AbstractHttpRequestHandler)}close(){var e;null===(e=this.httpServer)||void 0===e||e.close(),this.server.exit()}listen(e){var t,i,o,c;return n(this,void 0,void 0,(function*(){yield this.server.init(),yield this.injector.initInstances();const u=(0,s.default)(),p=a.default.createServer(u);null===(t=this.socketManager)||void 0===t||t.configure(p),(null===(i=this.httpRequestHandler)||void 0===i?void 0:i.corsConfig)&&u.use((0,h.default)({allowedHeaders:this.httpRequestHandler.corsConfig.headers,credentials:this.httpRequestHandler.corsConfig.credentials,origin:this.httpRequestHandler.corsConfig.origins,methods:this.httpRequestHandler.corsConfig.methods}));const f=1024*((null===(c=null===(o=this.config)||void 0===o?void 0:o.requestSetting)||void 0===c?void 0:c.maxBodySizeKB)||10240);return u.use((0,l.default)()),u.use(s.default.json({limit:f})),u.use(s.default.urlencoded({extended:!1,limit:f})),u.use((0,d.default)()),u.use(((e,t,i)=>{e.files&&(e.body||(e.body={}),Object.keys(e.files).forEach((t=>{e.body[t]=e.files[t]}))),i()})),u.use(s.default.raw({limit:f,type:e=>!["application/json","application/x-www-form-urlencoded"].find((t=>{var i;return null===(i=e.headers["content-type"])||void 0===i?void 0:i.includes(t)}))})),u.all("*",((e,t)=>{(()=>n(this,void 0,void 0,(function*(){if(!!e.headers["x-amzn-apigateway-api-id"]){if(!this.socketManager)throw r.ErrorBuilder.systemError("Socket manager not found");const i={socketId:e.body.connectionId,data:e.body.data,method:e.body.type.toLowerCase()};if(i.method===r.SocketMethod.CONNECT){const t=e.body.data.querystring,n=t.substring(1,t.length-1).split(",").map((e=>e.trim().split("="))).reduce(((e,t)=>Object.assign(e,{[t[0]]:t[1]})),{});i.data={queries:n}}yield this.socketManager.handle(i).then((()=>{t.status(200).send()})).catch((e=>{this.logger.debug("Handle error",e),t.status(400).json({name:e.name,message:e.message})}))}else{if(!this.httpRequestHandler)throw r.ErrorBuilder.systemError("Http request handler not found");const i={fullPath:e.url,method:e.method.toLowerCase(),headers:e.headers,body:e.body,cookies:e.cookies},n=yield this.httpRequestHandler.handle(i);n.headers&&Object.keys(n.headers).forEach((e=>{t.set(e,n.headers[e])})),n.cookies&&Object.keys(n.cookies).forEach((e=>{t.cookie(e,n.cookies[e].value,n.cookies[e].options||{})})),t.status(n.code||200).send(n.value)}})))().catch((e=>{this.logger.error(e),t.status(400).json({name:e.name,message:e.message})}))})),new Promise(((t,i)=>{this.httpServer=p.listen(e,t).on("error",i)}))}))}}},8836:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.LambdaWrapper=void 0;const o=i(2318),r=i(767),s=i(3376),a=i(2363),l=i(5530),d=i(6721),toApiGatewayFormat=e=>({statusCode:e.code||200,body:e.value&&JSON.stringify(e.value),headers:e.headers,cookies:Object.keys(e.cookies||{}).map((t=>{var i,n,o,r,s,a,l,d,c,u,h;const p=e.cookies[t];let f=`${t}=${p.value}`;return(null===(i=p.options)||void 0===i?void 0:i.maxAge)&&(f+=`; MaxAge=${p.options.maxAge}`),(null===(n=p.options)||void 0===n?void 0:n.expires)&&(f+=`; Expires=${p.options.expires.toUTCString()}`),(null===(o=p.options)||void 0===o?void 0:o.httpOnly)&&(f+="; HttpOnly"),(null===(r=p.options)||void 0===r?void 0:r.path)&&(f+=`; Path=${null===(s=p.options)||void 0===s?void 0:s.path}`),(null===(a=p.options)||void 0===a?void 0:a.domain)&&(f+=`; Domain=${null===(l=p.options)||void 0===l?void 0:l.domain}`),(null===(d=p.options)||void 0===d?void 0:d.secure)&&(f+="; Secure"),(null===(c=p.options)||void 0===c?void 0:c.sameSite)&&("boolean"==typeof(null===(u=p.options)||void 0===u?void 0:u.sameSite)?f+="; SameSite":f+=`; SameSite=${null===(h=p.options)||void 0===h?void 0:h.sameSite}`),f}))});t.LambdaWrapper=class LambdaWrapper{constructor(e,t,i){this.serverFactory=e,this.requestMapper=t,this.config=i,this.requestMapper=t,this.handler=this.handler.bind(this),this.injector=(0,o.getServiceProvider)().getInjector(),this.logger=this.injector.resolve(o.AbstractLogger),this.socketManager=this.injector.resolveOptional(l.AbstractServerSocketManager),this.httpRequestHandler=this.injector.resolveOptional(r.AbstractHttpRequestHandler),this.jobScheduler=this.injector.resolveOptional(s.AwsJobScheduler)}bootServer(){var e;return n(this,void 0,void 0,(function*(){return this._server||(this._server=yield this.serverFactory(),yield this.injector.initInstances(),null===(e=this.socketManager)||void 0===e||e.configure(),yield this._server.init()),this._server}))}handler(e){var t,i,r,s;return n(this,void 0,void 0,(function*(){yield this.bootServer();const n=this.requestMapper(e);if(!n)return toApiGatewayFormat({code:400,value:"Cannot resolve event",headers:{},cookies:{}});const l=((e,t)=>{const i={};return(null==t?void 0:t.credentials)&&(i["Access-Control-Allow-Credentials"]="true"),(null==t?void 0:t.headers)&&(i["Access-Control-Allow-Headers"]="string"==typeof t.headers?t.headers:t.headers.join(", ")),(null==t?void 0:t.methods)&&(i["Access-Control-Allow-Methods"]="string"==typeof t.methods?t.methods:t.methods.join(", ")),(null==t?void 0:t.origins)&&(i["Access-Control-Allow-Origin"]="string"==typeof t.origins?t.origins:t.origins.find((t=>e.match(t)))?e:""),i})((null===(t=n.headers)||void 0===t?void 0:t.origin)||"",null===(i=this.httpRequestHandler)||void 0===i?void 0:i.corsConfig);if(n.method===o.HttpMethod.OPTIONS)return toApiGatewayFormat({code:200,headers:l,cookies:{}});if(n.method===a.INTERVAL_REQUEST_METHOD)return yield null===(r=this.jobScheduler)||void 0===r?void 0:r.handleInterval(n.body),toApiGatewayFormat({code:200,headers:l,cookies:{}});if(n.method===a.CRON_REQUEST_METHOD)return yield null===(s=this.jobScheduler)||void 0===s?void 0:s.handleCron(n.body),toApiGatewayFormat({code:200,headers:l,cookies:{}});try{if(Object.values(o.HttpMethod).includes(n.method)){if(!this.httpRequestHandler)throw o.ErrorBuilder.error(d.Errors.SYSTEM_ERROR,"Http request handler not found");const e={fullPath:n.rawPath,method:n.method,headers:n.headers,cookies:n.cookies,body:n.body},t=yield this.httpRequestHandler.handle(e);return toApiGatewayFormat(Object.assign(Object.assign({},t),{headers:Object.assign(Object.assign({},l),t.headers)}))}if(!Object.values(o.SocketMethod).includes(n.method))throw o.ErrorBuilder.error(d.Errors.HTTP_REQUEST_ERROR,"Not allow request method: "+n.method);{if(!this.socketManager)throw o.ErrorBuilder.error(d.Errors.SYSTEM_ERROR,"Socket manager not found");const e={socketId:n.rawPath,method:n.method,data:n.body};yield this.socketManager.handle(e)}return toApiGatewayFormat({code:200,headers:l,cookies:{}})}catch(e){return toApiGatewayFormat({code:400,value:{name:e.name,message:e.message},headers:l,cookies:{}})}}))}}},9627:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6721:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Errors=void 0;const n=i(2318);t.Errors=Object.assign(Object.assign({},n.Errors),{TFA_REQUIRED:"TFA_REQUIRED"})},889:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.lambdaRequestMapper=void 0;const n=i(2318),o=i(2363),parseCookie=e=>{let t={};for(const i of e){const e=i.split("=");e[0]&&e[1]&&(t[e[0]]=e[1])}return t};t.lambdaRequestMapper=e=>{if(e.requestContext.eventType){const t=e.requestContext.eventType.toLowerCase(),i=e.body&&JSON.parse(e.body);return{method:t,rawPath:e.requestContext.connectionId,body:t===n.SocketMethod.CONNECT?{queries:e.queryStringParameters}:i}}return e.requestContext.intervalScheduler?{method:o.INTERVAL_REQUEST_METHOD,rawPath:"",body:e.requestContext.intervalScheduler.time}:e.requestContext.cronScheduler?{method:o.CRON_REQUEST_METHOD,rawPath:"",body:e.requestContext.cronScheduler.data}:{method:e.requestContext.http.method.toLowerCase(),rawPath:`${e.rawPath}?${e.rawQueryString}`,body:e.body&&JSON.parse(e.body),headers:e.headers,cookies:parseCookie(e.cookies||[])}}},5481:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleEntry=void 0;const o=i(2318);let r=class LocaleEntry extends o.AbstractModel{};r=n([(0,o.Model)()],r),t.LocaleEntry=r},2552:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleTranslation=void 0;const r=i(2318),s=i(5481),a="translation_unique";let l=class LocaleTranslation extends r.AbstractModel{};n([(0,r.Column)(Object.assign(Object.assign({description:"Id of the locale",isRequired:!0},(0,r.FK)({model:s.LocaleEntry,cascade:"delete"})),{unique:{groupName:a}})),o("design:type",Number)],l.prototype,"entryId",void 0),n([(0,r.Column)({description:"Code of locale",isRequired:!0,unique:{groupName:a},textLength:3}),o("design:type",String)],l.prototype,"localeCode",void 0),n([(0,r.Column)({description:"Translation of locale",isRequired:!0}),o("design:type",String)],l.prototype,"translation",void 0),l=n([(0,r.Model)()],l),t.LocaleTranslation=l},10:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleOf=void 0;const n=i(2318),o=i(5481);t.LocaleOf=e=>(t,i)=>{const r=(0,n.initFieldMetadata)(t,i);r.multiLocaleColumn=e,r.fk=(0,n.FK)({model:o.LocaleEntry,cascade:"nullify"}).fk,r.dataType=n.DataType.NUMBER;(0,n.initFieldMetadata)(t,e).isMultiLocale=!0}},1801:e=>{e.exports=require("@clairejs/client")},2318:e=>{e.exports=require("@clairejs/core")},7756:e=>{e.exports=require("@clairejs/orm")},9336:e=>{e.exports=require("aws-sdk")},2167:e=>{e.exports=require("axios")},9710:e=>{e.exports=require("cookie-parser")},3582:e=>{e.exports=require("cors")},6860:e=>{e.exports=require("express")},6674:e=>{e.exports=require("express-fileupload")},1495:e=>{e.exports=require("ioredis")},7344:e=>{e.exports=require("node-schedule")},9215:e=>{e.exports=require("parseurl")},99:e=>{e.exports=require("path-to-regexp")},9103:e=>{e.exports=require("query-string")},7325:e=>{e.exports=require("randomstring")},9896:e=>{e.exports=require("redlock")},7202:e=>{e.exports=require("twilio")},5352:e=>{e.exports=require("ws")},7147:e=>{e.exports=require("fs")},3685:e=>{e.exports=require("http")},1017:e=>{e.exports=require("path")},9512:e=>{e.exports=require("timers")}},t={};var i=function __webpack_require__(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,__webpack_require__),o.exports}(341);return i})()));
1
+ !function webpackUniversalModuleDefinition(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var n in i)("object"==typeof exports?exports:e)[n]=i[n]}}(global,(()=>(()=>{"use strict";var e={9025:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileOperation=void 0,function(e){e.GET="getObject",e.PUT="putObject",e.DELETE="deleteObject"}(t.FileOperation||(t.FileOperation={}))},4638:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractPrincipalResolver=void 0;t.AbstractPrincipalResolver=class AbstractPrincipalResolver{}},1820:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},137:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ExitCode=void 0,t.ExitCode={SIGTERM_INTERUPTION:-1,SIGINT_INTERUPTION:-2,UNCAUGHT_EXCEPTION:-3,UNHANDLED_REJECTION:-4}},4435:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},4972:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getEndpointId=void 0;t.getEndpointId=e=>`${e.httpMethod}:${e.mount}`},1870:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7540:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},7380:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FileManageController=void 0;const a=i(2318),l=i(8903),d=i(6004),c=i(2417),u=i(7179),h=i(7724);let p=class FileManageController extends d.AbstractHttpController{constructor(e){super(null),this.fileService=e}moveFile(e){return s(this,void 0,void 0,(function*(){return yield this.fileService.moveObject(e.operations),l.ResponseBuilder.success()}))}copyFile(e){return s(this,void 0,void 0,(function*(){return yield this.fileService.copyObject(e.operations),l.ResponseBuilder.success()}))}removeFile(e){return s(this,void 0,void 0,(function*(){return yield this.fileService.removeObject(e.uris),l.ResponseBuilder.success()}))}getFileAccessUrl(e){return s(this,void 0,void 0,(function*(){const t=yield this.fileService.getAccessUrls(e.uris,e.public);return l.ResponseBuilder.json({urls:t}).get()}))}getFileInfo(e){return s(this,void 0,void 0,(function*(){const t={fileInfos:(yield this.fileService.getFileSize(e.uris)).map((e=>({fileSizeBytes:e})))};return l.ResponseBuilder.json(t).get()}))}};n([(0,c.Post)("/file/move"),r(0,(0,c.Body)()),o("design:type",Function),o("design:paramtypes",[h.MoveFileRequest]),o("design:returntype",Promise)],p.prototype,"moveFile",null),n([(0,c.Post)("/file/copy"),r(0,(0,c.Body)()),o("design:type",Function),o("design:paramtypes",[h.MoveFileRequest]),o("design:returntype",Promise)],p.prototype,"copyFile",null),n([(0,c.Post)("/file/remove"),r(0,(0,c.Body)()),o("design:type",Function),o("design:paramtypes",[h.RemoveFileRequest]),o("design:returntype",Promise)],p.prototype,"removeFile",null),n([(0,c.Get)("/file"),(0,c.ApiResponse)(h.GetFileAccessUrlResponse),r(0,(0,c.Queries)()),o("design:type",Function),o("design:paramtypes",[h.GetFileAccessUrlRequest]),o("design:returntype",Promise)],p.prototype,"getFileAccessUrl",null),n([(0,c.Get)("/file/info"),(0,c.ApiResponse)(h.GetFileInfoResponse),r(0,(0,c.Queries)()),o("design:type",Function),o("design:paramtypes",[h.GetFileInfoRequest]),o("design:returntype",Promise)],p.prototype,"getFileInfo",null),p=n([(0,a.Injectable)(),o("design:paramtypes",[u.AbstractFileService])],p),t.FileManageController=p},8037:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileUploadController=void 0;const l=i(2318),d=a(i(7325)),c=i(9025),u=i(8903),h=i(6004),p=i(2417),f=i(7179),v=i(7724),delay=e=>new Promise((t=>setTimeout(t,e)));let y=class FileUploadController extends h.AbstractHttpController{constructor(e,t){super(null),this.fileService=e,this.allowedUploadExtensions=t}getUploadUrlForTempUri(e){return s(this,void 0,void 0,(function*(){const getPutUrl=()=>s(this,void 0,void 0,(function*(){return(yield this.fileService.getPresignedUrl(c.FileOperation.PUT,[e]))[0]})),getDeleteUrl=()=>s(this,void 0,void 0,(function*(){return(yield this.fileService.getPresignedUrl(c.FileOperation.DELETE,[e]))[0]}));let t={objectKey:e,putPresignedUrl:yield getPutUrl(),deletePresignedUrl:yield getDeleteUrl()};for(;t.putPresignedUrl.endsWith("/");)yield delay(1e3),t.putPresignedUrl=yield getPutUrl();for(;t.deletePresignedUrl.endsWith("/");)yield delay(1e3),t.deletePresignedUrl=yield getDeleteUrl();return t}))}getUploadUrl(e){var t;return s(this,void 0,void 0,(function*(){const i=null===(t=e.extension)||void 0===t?void 0:t.toLowerCase();if(i&&!this.allowedUploadExtensions.includes(i))throw l.ErrorBuilder.error(l.Errors.VALIDATION_ERROR,"Not allowed file extension");const n=yield this.getUploadUrlForTempUri(`tmp/${d.default.generate({length:64})}${i?`.${i}`:""}`);return u.ResponseBuilder.json(n).get()}))}getMultipleUploadUrls(e){return s(this,void 0,void 0,(function*(){if(e.extensions.some((e=>!this.allowedUploadExtensions.includes(e))))throw l.ErrorBuilder.error(l.Errors.VALIDATION_ERROR,"Not allowed file extension");const t=yield Promise.all(e.extensions.map((e=>this.getUploadUrlForTempUri(`tmp/${d.default.generate({length:64})}${e?`.${e}`:""}`))));return u.ResponseBuilder.json({files:t}).get()}))}};n([(0,p.Get)("/upload-url"),(0,p.ApiResponse)(v.GetUploadUrlResponseBody),r(0,(0,p.Queries)()),o("design:type",Function),o("design:paramtypes",[v.GetUploadUrlQueries]),o("design:returntype",Promise)],y.prototype,"getUploadUrl",null),n([(0,p.Get)("/upload-urls"),(0,p.ApiResponse)(v.GetMultipleUploadResponseBody),r(0,(0,p.Queries)()),o("design:type",Function),o("design:paramtypes",[v.GetMultipleUploadUrlsQueries]),o("design:returntype",Promise)],y.prototype,"getMultipleUploadUrls",null),y=n([(0,l.Injectable)(),o("design:paramtypes",[f.AbstractFileService,Array])],y),t.FileUploadController=y},4768:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.ApiInfoResponse=t.Permission=void 0;const r=i(2318);let s=class Permission{};n([(0,r.Field)({description:"Id of the permission",isRequired:!0}),o("design:type",String)],s.prototype,"id",void 0),n([(0,r.Field)({description:"Description of the permission"}),o("design:type",String)],s.prototype,"description",void 0),n([(0,r.Field)({description:"Display name of the permission",isRequired:!0}),o("design:type",String)],s.prototype,"name",void 0),n([(0,r.Field)({description:"Whether this permission has public access",isRequired:!0}),o("design:type",Boolean)],s.prototype,"openAccess",void 0),n([(0,r.Field)({description:"Whether this permission require tfa",isRequired:!0}),o("design:type",Boolean)],s.prototype,"tfaRequired",void 0),n([(0,r.Field)({description:"Name of the permission group",isRequired:!0}),o("design:type",String)],s.prototype,"permissionGroup",void 0),n([(0,r.Field)({description:"The configurable access condition of this permission",isRequired:!0,vectorProps:{},elementDto:(0,r.getObjectMetadata)(r.AccessConditionMetadata)}),o("design:type",Array)],s.prototype,"accessConditions",void 0),n([(0,r.Field)({description:"Whether this permission does not allow data modification",isRequired:!0}),o("design:type",Boolean)],s.prototype,"readOnly",void 0),n([(0,r.Field)(Object.assign({description:"Http method used to call the API",isRequired:!0},(0,r.Enum)(r.HttpMethod))),o("design:type",String)],s.prototype,"method",void 0),n([(0,r.Field)({description:"Http Mount point of the API",isRequired:!0}),o("design:type",String)],s.prototype,"mount",void 0),n([(0,r.Field)({description:"Validation dto of request param"}),o("design:type",Object)],s.prototype,"paramDto",void 0),n([(0,r.Field)({description:"Validation dto of request queries"}),o("design:type",Object)],s.prototype,"queryDto",void 0),n([(0,r.Field)({description:"Validation dto of request body (for POST / PUT)"}),o("design:type",Object)],s.prototype,"bodyDto",void 0),n([(0,r.Field)({description:"Validation dto of response body"}),o("design:type",Object)],s.prototype,"responseDto",void 0),s=n([(0,r.Data)()],s),t.Permission=s;let a=class ApiInfoResponse{};n([(0,r.Field)({description:"All permissions of the service",isRequired:!0,elementDto:(0,r.getObjectMetadata)(s),vectorProps:{elementDataType:r.DataType.OBJECT}}),o("design:type",Array)],a.prototype,"permissions",void 0),a=n([(0,r.Data)()],a),t.ApiInfoResponse=a},2345:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UserVerificationMethod=t.CacheOperation=void 0,function(e){e.GET="get",e.KEYS="keys",e.HGET="hget",e.HKEYS="hkeys",e.FLUSH="flush"}(t.CacheOperation||(t.CacheOperation={})),function(e){e.SMS_OTP="SMS",e.VOICE_OTP="VOICE",e.MANUAL_OTP="MANUAL"}(t.UserVerificationMethod||(t.UserVerificationMethod={}))},7724:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.GetFileInfoResponse=t.FileInfo=t.GetFileInfoRequest=t.GetFileAccessUrlResponse=t.GetFileAccessUrlRequest=t.RemoveFileRequest=t.MoveFileRequest=t.MoveOperation=t.GetMultipleUploadResponseBody=t.GetMultipleUploadUrlsQueries=t.GetUploadUrlResponseBody=t.GetUploadUrlQueries=void 0;const r=i(2318);let s=class GetUploadUrlQueries{};n([(0,r.Field)({description:"Extension of the file to be uploaded (without dot)"}),o("design:type",String)],s.prototype,"extension",void 0),s=n([(0,r.Data)()],s),t.GetUploadUrlQueries=s;let a=class GetUploadUrlResponseBody{};n([(0,r.Field)({description:"Object key of file that store in the server",isRequired:!0}),o("design:type",String)],a.prototype,"objectKey",void 0),n([(0,r.Field)({description:"Presigned URl to put the file to server"}),o("design:type",String)],a.prototype,"putPresignedUrl",void 0),n([(0,r.Field)({description:"Presigned URL to remove the temporary file from server",isRequired:!0}),o("design:type",String)],a.prototype,"deletePresignedUrl",void 0),a=n([(0,r.Data)()],a),t.GetUploadUrlResponseBody=a;let l=class GetMultipleUploadUrlsQueries{};n([(0,r.Field)({description:"Extensions of those files",isRequired:!0,vectorProps:{allowDuplicated:!0}}),o("design:type",Array)],l.prototype,"extensions",void 0),l=n([(0,r.Data)({relaxed:!0})],l),t.GetMultipleUploadUrlsQueries=l;class GetMultipleUploadResponseBody{}n([(0,r.Field)(Object.assign({description:"Upload urls for files",vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(a))),o("design:type",Array)],GetMultipleUploadResponseBody.prototype,"files",void 0),t.GetMultipleUploadResponseBody=GetMultipleUploadResponseBody;let d=class MoveOperation{};n([(0,r.Field)({description:"Source of move operation",isRequired:!0}),o("design:type",String)],d.prototype,"fromURI",void 0),n([(0,r.Field)({description:"Destination of move operation",isRequired:!0}),o("design:type",String)],d.prototype,"toURI",void 0),d=n([(0,r.Data)()],d),t.MoveOperation=d;let c=class MoveFileRequest{};n([(0,r.Field)(Object.assign({description:"All move operations",isRequired:!0,vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(d))),o("design:type",Array)],c.prototype,"operations",void 0),c=n([(0,r.Data)()],c),t.MoveFileRequest=c;let u=class RemoveFileRequest{};n([(0,r.Field)({description:"File URIs to remove",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],u.prototype,"uris",void 0),u=n([(0,r.Data)()],u),t.RemoveFileRequest=u;let h=class GetFileAccessUrlRequest{};n([(0,r.Field)({description:"All URIs to get access link",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],h.prototype,"uris",void 0),n([(0,r.Field)({description:"Whether to get public or private link",isRequired:!0}),o("design:type",Boolean)],h.prototype,"public",void 0),h=n([(0,r.Data)({relaxed:!0})],h),t.GetFileAccessUrlRequest=h;let p=class GetFileAccessUrlResponse{};n([(0,r.Field)({description:"File access URLs",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],p.prototype,"urls",void 0),p=n([(0,r.Data)()],p),t.GetFileAccessUrlResponse=p;let f=class GetFileInfoRequest{};n([(0,r.Field)({description:"File URIs to get info",isRequired:!0,vectorProps:{elementDataType:r.DataType.STRING}}),o("design:type",Array)],f.prototype,"uris",void 0),f=n([(0,r.Data)({relaxed:!0})],f),t.GetFileInfoRequest=f;let v=class FileInfo{};n([(0,r.Field)({description:"Size of file in bytes",isRequired:!0}),o("design:type",Number)],v.prototype,"fileSizeBytes",void 0),v=n([(0,r.Data)()],v),t.FileInfo=v;let y=class GetFileInfoResponse{};n([(0,r.Field)(Object.assign({description:"File infos",isRequired:!0,vectorProps:{elementDataType:r.DataType.OBJECT}},(0,r.ElementDto)(v))),o("design:type",Array)],y.prototype,"fileInfos",void 0),y=n([(0,r.Data)()],y),t.GetFileInfoResponse=y},730:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.SystemSetting=void 0;const r=i(2318);let s=class SystemSetting extends r.AbstractModel{};n([(0,r.Column)({description:"Key of system setting",unique:{},textLength:255,isRequired:!0,isSymbol:!0}),o("design:type",String)],s.prototype,"key",void 0),n([(0,r.Column)({description:"Value of system setting",textLength:4095,isRequired:!0}),o("design:type",String)],s.prototype,"value",void 0),s=n([(0,r.Model)()],s),t.SystemSetting=s},859:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpAuthorizationProvider=void 0;t.AbstractHttpAuthorizationProvider=class AbstractHttpAuthorizationProvider{}},2085:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRbacAuthProvider=void 0;const o=i(2318),r=i(859),s=i(4972);class AbstractRbacAuthProvider extends r.AbstractHttpAuthorizationProvider{constructor(e,t,i){super(),this.authDataResolver=e,this.principalResolver=t,this.logger=i}getPrincipalResolver(){return this.principalResolver}resolvePrincipal(e){return this.principalResolver.resolvePrincipal(this.authDataResolver(e))}authorize(e,t,i){return n(this,void 0,void 0,(function*(){if(i.endpointMetadata.openAccess)return;const n=yield this.getRbacCache();if(!n)throw o.ErrorBuilder.error(o.Errors.SYSTEM_ERROR,"Cannot read rbac cache");let r=[];if(e){const t=yield this.getRolesOfPrincipal(e);r=(n.roles||[]).filter((e=>!!t.find((t=>t===e.roleId))))}else r=(n.roles||[]).filter((e=>e.isAnonymousRole));if(!r.length)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,"No role attached");if(r.find((e=>e.isSuperRole)))return;const a=(n.rolePolicies||[]).filter((e=>!!r.find((t=>t.roleId===e.roleId)))),l=(n.policies||[]).filter((e=>!!a.find((t=>t.policyId===e.policyId)))),d=(n.policyPermissions||[]).filter((e=>!!l.find((t=>t.policyId===e.policyId)))),c=(n.policyPermissionConditions||[]).filter((e=>!!d.find((t=>t.id===e.policyPermissionId)))),u=d.filter((e=>e.permission===(0,s.getEndpointId)(i.endpoint)));if(!u.length)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,`Not permitted: ${(0,s.getEndpointId)(i.endpoint)}`);let h=!1;for(const e of u){const n=c.filter((t=>t.policyPermissionId===e.id));if(n.length){let e=!0;const r=(0,o.getServiceProvider)().getInjector(),s=(i.endpointMetadata.accessConditions||[]).map((e=>r.resolve(e)));yield r.initInstances();for(const i of n){const n=s.find((e=>e.getConditionMetadata().name===i.conditionName));if(n){try{const o=yield n.resolveConditionValue(t),r=JSON.parse(i.conditionValue);e=yield n.validate(o,r)}catch(t){e=!1}if(!e){this.logger.debug(`Condition check failed: condition ${i.conditionName}`);break}}}h=e}else h=!0;if(h)break}if(!h)throw o.ErrorBuilder.error(o.Errors.ACCESS_DENIED,"Condition check failed")}))}}t.AbstractRbacAuthProvider=AbstractRbacAuthProvider},531:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.RedisRbacAuthProvider=void 0;const o=i(2085);class RedisRbacAuthProvider extends o.AbstractRbacAuthProvider{constructor(e,t,i,n,o,r,s,a=3e4){super(n,o,s),this.serviceIdResolver=e,this.rbacChannel=t,this.principalChannel=i,this.authDataResolver=n,this.principalResolver=o,this.cacheService=r,this.logger=s,this.redisDataRetentionDurationMs=a,this.lastRbacFetchTimestamp=0,this.principalCache={},this.serviceId=""}getRbacCache(){return n(this,void 0,void 0,(function*(){if(this.lastRbacFetchTimestamp+this.redisDataRetentionDurationMs<Date.now()){this.serviceId||(this.serviceId=yield this.serviceIdResolver());const e=yield this.cacheService.hget(this.rbacChannel,this.serviceId);this.rbacCache=e,this.lastRbacFetchTimestamp=Date.now()}return this.rbacCache}))}getRolesOfPrincipal(e){return n(this,void 0,void 0,(function*(){const t=String(e.id);let i=this.principalCache[t];if(!i||i.lastFetchTimestamp+this.redisDataRetentionDurationMs<Date.now()){const e=yield this.cacheService.hget(this.principalChannel,t),n=e?"string"==typeof e?JSON.parse(e):e:[];i={lastFetchTimestamp:Date.now(),roles:n},this.principalCache[t]=i}return i.roles}))}}t.RedisRbacAuthProvider=RedisRbacAuthProvider},7825:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SocketRbacAuthProvider=void 0;const s=i(2318),a=i(2085),l=i(4638);let d=class SocketRbacAuthProvider extends a.AbstractRbacAuthProvider{constructor(e,t,i,n,o,r){super(i,n,o),this.rbacCacheChannel=e,this.principalCacheChannel=t,this.authDataResolver=i,this.principalResolver=n,this.logger=o,this.socketProvider=r,this.idResolvers=[]}exit(){var e;null===(e=this.socket)||void 0===e||e.close()}init(){return r(this,void 0,void 0,(function*(){this.socket=yield this.socketProvider(),this.socket.onMessage(((e,t)=>{switch(t){case this.rbacCacheChannel:this.rbacCache=e;break;case this.principalCacheChannel:const{principalId:t,roleIds:i}=e,n=this.idResolvers.find((e=>e.principalId===t));if(n){for(const e of n.resolvers)e(i);n.resolvers=[]}}})),this.socket.joinChannels([this.rbacCacheChannel,this.principalCacheChannel])}))}getRbacCache(){return r(this,void 0,void 0,(function*(){return this.rbacCache}))}getRolesOfPrincipal(e){return r(this,void 0,void 0,(function*(){return new Promise((t=>{var i;let n=this.idResolvers.find((t=>t.principalId===e.id));n||(n={principalId:e.id,resolvers:[]},this.idResolvers.push(n)),n.resolvers.length||null===(i=this.socket)||void 0===i||i.send(e.id,this.principalCacheChannel),n.resolvers.push(t)}))}))}};d=n([(0,s.Initable)(),o("design:paramtypes",[String,String,Function,l.AbstractPrincipalResolver,s.AbstractLogger,Function])],d),t.SocketRbacAuthProvider=d},9837:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},1532:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HttpRequest=void 0;const n=i(2318);t.HttpRequest=class HttpRequest{constructor(e,t){this.valueHolder={},this.method=e.method,this.pathName=e.pathName,this.headers=e.headers||{},this.cookies=e.cookies||{},this.hash=e.hash||"",this.params=e.params||{},(null==t?void 0:t.paramsValidationDto)&&(this.params=(0,n.validateData)(this.params,null==t?void 0:t.paramsValidationDto)),this.query=e.query||{},(null==t?void 0:t.queriesValidationDto)&&(this.query=(0,n.validateData)(this.jsonParsing(this.query,t.queriesValidationDto),t.queriesValidationDto)),this.body=e.body||{},t&&(t.httpMethod===n.HttpMethod.POST||t.httpMethod===n.HttpMethod.PUT)&&(null==t?void 0:t.bodyValidationDto)&&(this.body=(0,n.validateData)(this.body||{},t.bodyValidationDto,!1))}jsonParsing(e,t){const i=Object.assign({},e);for(const o of t.fields)try{(void 0!==e[o.name]||o.isRequired)&&(i[o.name]=JSON.parse(e[o.name]))}catch(e){throw n.ErrorBuilder.error(n.Errors.VALIDATION_ERROR,`JSON parsing failed for field ${o.name}`)}return i}getAuthInfo(){return this.authInfo}setAuthInfo(e){this.authInfo=e}getHeaders(){return this.headers}getMethod(){return this.method}getHash(){return this.hash}getPathName(){return this.pathName}getValue(e){return this.valueHolder[e]}setValue(e,t){this.valueHolder[e]=t}getParams(){return this.params}getQuery(){return this.query}getCookies(){return this.cookies}getBody(){return this.body}}},8903:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ResponseBuilder=t.HttpResponse=void 0;class HttpResponse{constructor(){this.headers={},this.cookies={}}}t.HttpResponse=HttpResponse;class ResponseBuilder{constructor(){this.response=new HttpResponse}status(e){return this.response.code=e,this}header(e,t){return this.response.headers[e]=t,this}cookie(e,t,i){return this.response.cookies[e]={value:t,options:i},this}get(){return this.response}static json(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="application/json",t}static html(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="text/html; charset=UTF-8",t}static binary(e){const t=new ResponseBuilder;return t.response.value=e,t.response.headers["Content-Type"]="application/octet-stream",t}static success(){const e=new ResponseBuilder;return e.response.code=200,e.response}static notFound(e){const t=new ResponseBuilder;return t.response.code=404,t.response.value=e,t.response}static accessDenied(e){const t=new ResponseBuilder;return t.response.code=400,t.response.value=e,t.response}}t.ResponseBuilder=ResponseBuilder},6004:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpController=void 0;const o=i(2318),r=i(7756);t.AbstractHttpController=class AbstractHttpController{constructor(e){this.databaseAdapter=e}createTransaction(){return n(this,void 0,void 0,(function*(){if(!this.databaseAdapter)throw o.ErrorBuilder.systemError("Transaction factory not injected to this controller");return this.databaseAdapter.createTransaction()}))}getCurrentTransaction(){return n(this,void 0,void 0,(function*(){return(0,r.getTransactionFromContext)(this)}))}getEndpointMetadata(){const e=(0,o.getObjectMetadata)(this.constructor);return e?e.fields.filter((e=>{return!!(t=e).httpMethod||void 0!==t.openAccess||!!t.accessConditions;var t})).map((t=>Object.assign(Object.assign({},t),{permissionGroup:e.permissionGroup}))):[]}}},225:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpMiddleware=void 0;t.AbstractHttpMiddleware=class AbstractHttpMiddleware{}},767:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpRequestHandler=void 0;const o=i(2318),r=i(4972),s=i(6004);t.AbstractHttpRequestHandler=class AbstractHttpRequestHandler{constructor(e,t){this.mountPoint=e,this.logger=t}resolverMountPoint(e,t){if(!e)return"";const i=[];return i.push(...t),i.reduce(((e,t)=>`${e}/${t}`),"").replace(/(\/)\/+/g,"$1")}getMountedEndpointInfo(){var e,t,i;return n(this,void 0,void 0,(function*(){if(!this.mountedEndpointInfo){const n=[],a=(0,o.getServiceProvider)().getInjector(),l=a.resolveMultiple(s.AbstractHttpController);yield a.initInstances();for(const e of l){const t=(0,o.getObjectMetadata)(e.constructor),i=e.getEndpointMetadata();for(const r of i){const i={mount:r.httpMethod===o.SocketMethod.MESSAGE?r.url:this.resolverMountPoint(t,[this.mountPoint||"/",r.url]),httpMethod:r.httpMethod,controller:e,handlerFunctionName:r.name};n.push({endpointMetadata:r,endpoint:i})}}const d=[];for(const o of n){const n=d.find((e=>e.endpoint.mount===o.endpoint.mount&&e.endpoint.httpMethod===o.endpoint.httpMethod));n?null===(e=this.logger)||void 0===e||e.warn(`Implicit overriding endpoint: ${(0,r.getEndpointId)(n.endpoint)} of ${null===(t=n.endpoint.controller)||void 0===t?void 0:t.constructor.name}:${n.endpoint.handlerFunctionName}`,`Ignore ${(0,r.getEndpointId)(o.endpoint)} of ${null===(i=o.endpoint.controller)||void 0===i?void 0:i.constructor.name}:${o.endpoint.handlerFunctionName}`):d.push(o)}this.mountedEndpointInfo=d}return this.mountedEndpointInfo}))}}},7282:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.CrudHttpController=void 0;const a=i(2318),l=i(7756),d=i(1071),c=i(1532),u=i(2417),h=i(6004),p=i(859),f=i(8903),v=i(3198),y=i(4192);class CrudHttpController extends h.AbstractHttpController{constructor(e,t,i){super(i),this.model=e,this.crudRepository=t,this.databaseAdapter=i,this.modelMetadata=(0,a.getObjectMetadata)(e)}getMountedUrl(){return`/${this.model.name.toLowerCase()}`}getAuthProvider(){return s(this,void 0,void 0,(function*(){if(void 0===this.authProvider){const e=(0,a.getServiceProvider)().getInjector();this.authProvider=e.resolveOptional(p.AbstractHttpAuthorizationProvider)||null,yield e.initInstances()}return this.authProvider}))}createManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.POST,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.createMany.name,e.displayName="createMany"+this.model.name,e.bodyValidationDto=(0,a.getCreateManyBodyValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getCreateManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>e.getBody().records))],e.params={0:{source:"raw"}},e}getManyEndpointMetadata(){const e={};return e.httpMethod=a.HttpMethod.GET,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.getMany.name,e.displayName="getAll"+this.model.name,e.queriesValidationDto=(0,a.getGetManyQueryValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getGetManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields])),(0,d.FilterModelFieldAccessCondition)(this.model,(e=>e.getQuery().projection)),v.MaximumQueryLimit],e.params={0:{source:"raw"}},e}updateManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.PUT,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.updateMany.name,e.displayName="update"+this.model.name,e.queriesValidationDto=(0,a.getUpdateManyQueryValidator)(this.modelMetadata),e.bodyValidationDto=(0,a.getUpdateManyBodyValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getUpdateManyResponseValidator)(this.modelMetadata),e.accessConditions=[(0,d.FilterModelFieldAccessCondition)(this.model,(e=>{const t=e.getBody().update;return t?Object.keys((0,a.leanData)(t)):[]})),(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields]),"dto_field_validation_query"),(0,y.DtoFieldValidation)(this.model,(e=>[e.getBody().update]),"dto_field_validation_body")],e.params={0:{source:"raw"}},e}deleteManyEndpoinMetadata(){const e={};return e.httpMethod=a.HttpMethod.DEL,e.url=this.getMountedUrl(),e.name=CrudHttpController.prototype.deleteMany.name,e.displayName="delete"+this.model.name,e.queriesValidationDto=(0,a.getUpdateManyQueryValidator)(this.modelMetadata),e.responseValidationDto=(0,a.getUpdateManyResponseValidator)(this.modelMetadata),e.params={0:{source:"raw"}},e.accessConditions=[(0,y.DtoFieldValidation)(this.model,(e=>[e.getQuery().fields]))],e}getEndpointMetadata(){var e,t,i,n;let o=super.getEndpointMetadata();const r=[];(null===(e=this.modelMetadata.ignoreCrud)||void 0===e?void 0:e.includes(a.HttpMethod.GET))?o=o.filter((e=>e.name!==CrudHttpController.prototype.getMany.name)):r.push(this.getManyEndpointMetadata()),(null===(t=this.modelMetadata.ignoreCrud)||void 0===t?void 0:t.includes(a.HttpMethod.POST))?o=o.filter((e=>e.name!==CrudHttpController.prototype.createMany.name)):r.push(this.createManyEndpoinMetadata()),(null===(i=this.modelMetadata.ignoreCrud)||void 0===i?void 0:i.includes(a.HttpMethod.PUT))?o=o.filter((e=>e.name!==CrudHttpController.prototype.updateMany.name)):r.push(this.updateManyEndpoinMetadata()),(null===(n=this.modelMetadata.ignoreCrud)||void 0===n?void 0:n.includes(a.HttpMethod.DEL))?o=o.filter((e=>e.name!==CrudHttpController.prototype.deleteMany.name)):r.push(this.deleteManyEndpoinMetadata());for(const e of r){const t=o.findIndex((t=>t.httpMethod===e.httpMethod&&t.url===e.url||t.name===e.name&&(!t.httpMethod||!t.url)));t>=0?o[t]=Object.assign(Object.assign(Object.assign({},e),o[t]),{accessConditions:[...e.accessConditions||[],...o[t].accessConditions||[]]}):o.push(e)}return o}createMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.getAuthProvider(),n=i&&(yield i.resolvePrincipal(e)),o=yield this.crudRepository.createMany({principal:n,body:e.getBody(),tx:t});return f.ResponseBuilder.json(o).get()}))}getMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.crudRepository.getMany({queries:e.getQuery(),queryProvider:this.databaseAdapter});return f.ResponseBuilder.json(t).get()}))}updateMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.getAuthProvider(),n=i&&(yield i.resolvePrincipal(e)),o=yield this.crudRepository.updateMany({principal:n,queries:e.getQuery(),body:e.getBody(),tx:t});return f.ResponseBuilder.json(o).get()}))}deleteMany(e){return s(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield this.crudRepository.deleteMany({queries:e.getQuery(),tx:t});return f.ResponseBuilder.json({modified:i.modified.map((e=>e.id)).map((e=>({id:e})))}).get()}))}}n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Create records of this table."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"createMany",null),n([(0,u.AccessCondition)([]),(0,u.ApiDescription)("Get records of this table."),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"getMany",null),n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Find and update records which match search condition."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"updateMany",null),n([(0,l.Transactional)(l.PropagationMode.INHERIT_OR_CREATE),(0,u.ApiDescription)("Find and remove records which match search condition."),(0,u.AccessCondition)([]),r(0,(0,u.Raw)()),o("design:type",Function),o("design:paramtypes",[c.HttpRequest]),o("design:returntype",Promise)],CrudHttpController.prototype,"deleteMany",null),t.CrudHttpController=CrudHttpController},5879:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultHttpRequestHandler=void 0;const a=i(2318),l=s(i(9215)),d=i(99),c=s(i(9103)),u=i(8903),h=i(1532),p=i(859),f=i(767),v=i(6721),y=i(225),g=s(i(7325));let m=class DefaultHttpRequestHandler extends f.AbstractHttpRequestHandler{constructor(e,t){super("",e),this.logger=e,this.authorizationProvider=t,this._middleware=null}accessControl(e,t){return r(this,void 0,void 0,(function*(){if(e.endpointMetadata.httpMethod!==a.SocketMethod.MESSAGE){const i=yield this.authorizationProvider.resolvePrincipal(t);if(t.setAuthInfo(i),!e.endpointMetadata.openAccess&&(yield this.authorizationProvider.authorize(i,t,e),e.endpointMetadata.tfaRequired&&!(null==i?void 0:i.hasTfa)))throw a.ErrorBuilder.error(v.Errors.TFA_REQUIRED)}}))}handleRequest(e,t){return r(this,void 0,void 0,(function*(){yield this.accessControl(e,t);const i=Object.values(e.endpointMetadata.params||{}).map((e=>{switch(e.source){case"body":return t.getBody();case"params":return t.getParams();case"queries":return t.getQuery();case"headers":return t.getHeaders();case"raw":return t}})),n=yield e.endpoint.controller[e.endpointMetadata.name](...i);return e.endpointMetadata.responseValidationDto&&(n.value=(0,a.stripData)(n.value,e.endpointMetadata.responseValidationDto)),n}))}exit(){}getResponse(e){return r(this,void 0,void 0,(function*(){let t=new u.HttpResponse;const i=e.method,n=(0,l.default)({url:e.fullPath});let o={};const r=(yield this.getMountedEndpointInfo()).find((e=>{const t=e.endpointMetadata.httpMethod===i&&(0,d.match)(e.endpointMetadata.url,{decode:decodeURIComponent})(n.pathname||"/");return!!t&&(o=t,!0)}));if(!r)throw this.logger.debug(e),a.ErrorBuilder.error(v.Errors.NOT_FOUND,"Handler not found");const s=new h.HttpRequest({method:i,headers:e.headers,pathName:n.pathname||"",hash:n.hash||"",query:c.default.parse(decodeURIComponent(n.search||"")),params:o.params,body:e.body,cookies:e.cookies},r.endpointMetadata),p=yield this.getMiddleware();for(const e of p){if(!(yield e.intercept(s,t)))return t}const f=yield this.handleRequest(r,s);return f.code=f.code||t.code||200,f.value=f.value||t.value,f.headers=Object.assign(Object.assign({},t.headers),f.headers),f.cookies=Object.assign(Object.assign({},t.cookies),f.cookies),f}))}handle(e){return r(this,void 0,void 0,(function*(){const t=g.default.generate();this.logger.info(`===== HANDLING REQUEST: ${t} - ${e.method}:${e.fullPath}`);try{const i=yield this.getResponse(e);if(!(i&&i instanceof u.HttpResponse))throw a.ErrorBuilder.systemError(`Invalid response value returned, required instance of ${u.HttpResponse.name}, found ${i?null==i?void 0:i.constructor.name:i}`);return this.logger.info(`===== REQUEST SUCCESS: ${t} - ${e.method}:${e.fullPath}`),i}catch(i){this.logger.error(i);const n=u.ResponseBuilder.json({name:i.name,message:i.message}).status([v.Errors.ACCESS_DENIED,v.Errors.AUTHENTICATION_ERROR,v.Errors.SESSION_EXPIRED].includes(i.name)?401:[v.Errors.SYSTEM_ERROR,v.Errors.CANNOT_LOCK].includes(i.name)?500:400).get();return this.logger.info(`===== REQUEST FAILED: ${t} - ${e.method}:${e.fullPath}, code: ${n.code}`,n.value),n}}))}getMiddleware(){return r(this,void 0,void 0,(function*(){if(null===this._middleware){const e=(0,a.getServiceProvider)().getInjector();this._middleware=e.resolveMultiple(y.AbstractHttpMiddleware),yield e.initInstances()}return this._middleware}))}};m=n([(0,a.Injectable)(),o("design:paramtypes",[a.AbstractLogger,p.AbstractHttpAuthorizationProvider])],m),t.DefaultHttpRequestHandler=m},2417:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CurrentUser=t.UriMapper=t.Raw=t.Socket=t.Headers=t.Queries=t.Params=t.Body=t.AccessCondition=t.TfaRequired=t.OpenAccess=t.ApiResponse=t.Head=t.Get=t.Del=t.Put=t.Post=t.Endpoint=t.ApiDescription=t.Controller=void 0;const n=i(2318);t.Controller=e=>t=>{(0,n.getServiceProvider)().register(t,"singleton");(0,n.initObjectMetadata)(t.prototype).permissionGroup=null==e?void 0:e.permissionGroup};t.ApiDescription=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).description=e};t.Endpoint=e=>(t,i)=>{const o=(0,n.initFieldMetadata)(t,i);o.httpMethod=e.method,o.url=e.url||"/"};const HttpMethodDecoratorFactory=e=>i=>(n,o,r)=>(0,t.Endpoint)({method:e,url:i})(n,o);t.Post=HttpMethodDecoratorFactory(n.HttpMethod.POST),t.Put=HttpMethodDecoratorFactory(n.HttpMethod.PUT),t.Del=HttpMethodDecoratorFactory(n.HttpMethod.DEL),t.Get=HttpMethodDecoratorFactory(n.HttpMethod.GET),t.Head=HttpMethodDecoratorFactory(n.HttpMethod.HEAD);t.ApiResponse=e=>(t,i,o)=>{const r=(0,n.initFieldMetadata)(t,i);e===String?r.responseValidationDto={id:"",primitiveType:n.DataType.STRING,fields:[]}:e===Number?r.responseValidationDto={id:"",primitiveType:n.DataType.NUMBER,fields:[]}:e===Boolean?r.responseValidationDto={id:"",primitiveType:n.DataType.BOOLEAN,fields:[]}:r.responseValidationDto=(0,n.getObjectMetadata)(e)};t.OpenAccess=()=>(e,t)=>{(0,n.initFieldMetadata)(e,t).openAccess=!0};t.TfaRequired=()=>(e,t)=>{(0,n.initFieldMetadata)(e,t).tfaRequired=!0};t.AccessCondition=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).accessConditions=e};const RequestDeco=e=>(t,i,o)=>{const r=(0,n.initFieldMetadata)(t,i),s=Reflect.getMetadata("design:paramtypes",t,i)||[];switch(e){case"body":r.bodyValidationDto=(0,n.getObjectMetadata)(s[o]);break;case"params":r.paramsValidationDto=(0,n.getObjectMetadata)(s[o]);break;case"queries":r.queriesValidationDto=(0,n.getObjectMetadata)(s[o])}r.params||(r.params={}),r.params[o]={source:e,diClass:s[o]}};t.Body=()=>RequestDeco("body");t.Params=()=>RequestDeco("params");t.Queries=()=>RequestDeco("queries");t.Headers=()=>RequestDeco("headers");t.Socket=()=>RequestDeco("socket");t.Raw=()=>RequestDeco("raw");t.UriMapper=e=>(t,i)=>{(0,n.initFieldMetadata)(t,i).uriMapper=e};t.CurrentUser=e=>(t,i)=>{const o=(0,n.initFieldMetadata)(t,i);o.userResolver=e,o.serverValue=!0}},6507:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractFileUploadHandler=void 0;t.AbstractFileUploadHandler=class AbstractFileUploadHandler{}},4839:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FileUploadHandler=void 0;const s=i(2318),a=i(7179),l=i(6507);let d=class FileUploadHandler extends l.AbstractFileUploadHandler{constructor(e){super(),this.fileService=e}moveFile(e,t){return r(this,void 0,void 0,(function*(){yield this.fileService.moveObject([{fromURI:e,toURI:t}])}))}copyFile(e,t){return r(this,void 0,void 0,(function*(){yield this.fileService.copyObject([{fromURI:e,toURI:t}])}))}removeFile(e){return r(this,void 0,void 0,(function*(){yield this.fileService.removeObject([e])}))}resolvePublicUrl(e){return r(this,void 0,void 0,(function*(){return(yield this.fileService.getAccessUrls([e],!0))[0]}))}resolvePrivateUrl(e){return r(this,void 0,void 0,(function*(){return(yield this.fileService.getAccessUrls([e],!1))[0]}))}};d=n([(0,s.Injectable)(),o("design:paramtypes",[a.AbstractFileService])],d),t.FileUploadHandler=d},5232:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},5048:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRepository=void 0;const o=i(2318);t.AbstractRepository=class AbstractRepository{constructor(e){this.model=e,this.modelMetadata=(0,o.getObjectMetadata)(this.model)}beforeCreating(e,t){return n(this,void 0,void 0,(function*(){for(const i of t)for(const t of this.modelMetadata.fields)t.userResolver&&e&&(i[t.name]=t.userResolver(e))}))}project(e,t){return t?e.map((e=>t.reduce(((t,i)=>Object.assign(t,{[i]:e[i]})),{}))):e}}},9073:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DtoRepository=t.MultipleMap=t.SingleMap=void 0;const o=i(2318),r=i(5048),s=i(3355);t.SingleMap=(e,t,i,n,o)=>({multiple:!1,modelClass:e,forwardOps:t,forwardMapping:e=>{const t=i(e[0]||{});return t&&[t]},rootMapping:e=>{const t=e&&e[0];return n(t)},nestedMapping:o});t.MultipleMap=(e,t,i,n,o)=>({multiple:!0,modelClass:e,forwardOps:t,forwardMapping:i,rootMapping:n,nestedMapping:o});class DtoRepository extends r.AbstractRepository{constructor(e,t){super(e),this.model=e,this.dissolver=t}getMapValue(e,t,i,r,s){return n(this,void 0,void 0,(function*(){for(const n of i){const i=yield t(n);let a=r?yield r(n,n.forwardMapping(i),i):n.forwardMapping(i);if(n.nestedMapping&&a)for(const i of a)yield this.getMapValue(e,t,n.nestedMapping(i),r,s);s&&(a=yield s(n,n.forwardMapping(i),i));const l=n.rootMapping(a);(0,o.deepMerge)(e,l)}}))}createMany({principal:e,body:t,tx:i}){return n(this,void 0,void 0,(function*(){const r=[];yield this.beforeCreating(e,t.records);for(const a of t.records)yield this.getMapValue(a,(e=>n(this,void 0,void 0,(function*(){const t=new s.ModelRepository(e.modelClass);return(yield t.getMany({ops:e.forwardOps(),queryProvider:i})).records}))),this.dissolver(a),((t,r,a)=>n(this,void 0,void 0,(function*(){if(!r)return[];const n=new s.ModelRepository(t.modelClass),l=t.forwardOps();if(t.multiple){yield n.deleteMany({ops:l,tx:i});return(yield n.createMany({principal:e,body:{records:r},tx:i})).records}{const s=r[0];if(!s)return[];if(0===a.length){return(yield n.createMany({principal:e,body:{records:r},tx:i})).records}if(1===a.length){const t=yield n.updateMany({principal:e,ops:l,body:{update:s},tx:i});return[Object.assign(Object.assign(Object.assign({},a[0]),s),t.modified[0])]}throw o.ErrorBuilder.validationError(`Found multiple record when creating ${t.modelClass.name}`)}})))),r.push(a);return{records:r}}))}updateMany({principal:e,queries:t,ops:i,body:r,tx:a}){var l;return n(this,void 0,void 0,(function*(){if(!(null===(l=null==t?void 0:t.fields)||void 0===l?void 0:l.id)||1!==t.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const d=Object.assign(Object.assign({},r.update),{id:t.fields.id[0]});yield this.beforeCreating(e,[d]),yield this.getMapValue(d,(e=>n(this,void 0,void 0,(function*(){const t=new s.ModelRepository(e.modelClass);return(yield t.getMany({ops:e.forwardOps(i),queryProvider:a})).records}))),this.dissolver(d),((t,o,r)=>n(this,void 0,void 0,(function*(){if(!o)return[];const n=new s.ModelRepository(t.modelClass),l=t.forwardOps(i);if(t.multiple){yield n.deleteMany({ops:l,tx:a});return(yield n.createMany({principal:e,body:{records:o},tx:a})).records}{const t=o[0];return t?0==r.length?[]:(r.length>1?(yield n.deleteMany({ops:l,tx:a}),yield n.createMany({principal:e,body:{records:[t]},tx:a})):yield n.updateMany({principal:e,ops:l,body:{update:t},tx:a}),r.map((e=>Object.assign(Object.assign({},e),t)))):[]}}))));let c=["id"];return t.returning&&(c=[...c,...Object.keys(r.update).filter((e=>void 0!==r.update[e]))]),{modified:d.id?this.project([d],c):[]}}))}getMany({queries:e,ops:t,queryProvider:i}){var r;return n(this,void 0,void 0,(function*(){if(!(null===(r=null==e?void 0:e.fields)||void 0===r?void 0:r.id)||1!==e.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const a={id:e.fields.id[0]};return yield this.getMapValue(a,(()=>n(this,void 0,void 0,(function*(){return[]}))),this.dissolver(a),(e=>n(this,void 0,void 0,(function*(){const n=new s.ModelRepository(e.modelClass);return(yield n.getMany({ops:e.forwardOps(t),queryProvider:i})).records})))),a.id?{records:this.project([a],e.projection),total:1}:{records:[],total:0}}))}deleteMany({queries:e,ops:t,tx:i}){var r;return n(this,void 0,void 0,(function*(){if(!(null===(r=null==e?void 0:e.fields)||void 0===r?void 0:r.id)||1!==e.fields.id.length)throw o.ErrorBuilder.validationError("Missing required id field in query");const a={id:e.fields.id[0]};return yield this.getMapValue(a,(()=>n(this,void 0,void 0,(function*(){return[]}))),this.dissolver(a),void 0,(o=>n(this,void 0,void 0,(function*(){const n=new s.ModelRepository(o.modelClass),r=o.forwardOps(t);return(yield n.deleteMany({queries:{returning:null==e?void 0:e.returning},ops:r,tx:i})).modified})))),{modified:a.id?[a]:[]}}))}}t.DtoRepository=DtoRepository},8023:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},3355:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ModelRepository=void 0;const o=i(2318),r=i(7756),s=i(6507),a=i(5048),l=i(2552),d=i(5481);class ModelRepository extends a.AbstractRepository{constructor(e){super(e),this.model=e}getNestedQueries(e){return this.modelMetadata.fields.filter((e=>e.hasMany)).filter((t=>(null==e?void 0:e.fields)&&e.fields[t.name])).map((t=>{const i=t.hasMany.relationDto,n=this.getRequestQueryConditionFromQuery(null==e?void 0:e.fields[t.name],Object.assign(Object.assign({},i),{fields:i.fields.filter((e=>{var i;return e.name!==(null===(i=t.hasMany)||void 0===i?void 0:i.column)}))}));return{modelId:t.hasMany.relationDto.id,targetField:t.hasMany.column,queries:n.length?{_and:n}:{}}}))}getUploadHandler(){return n(this,void 0,void 0,(function*(){if(void 0===this.fileUploadHandler){const e=(0,o.getServiceProvider)().getInjector();this.fileUploadHandler=e.resolveOptional(s.AbstractFileUploadHandler)||null,yield e.initInstances()}return this.fileUploadHandler}))}getRequestQueryConditionFromQuery(e,t){var i;const n=[];for(const s of(0,r.getDirectFields)(t)){const r=`${t.id}.${s.name}`,a=e[s.name];if(void 0!==a)if(s.pk||s.fk||s.isSymbol)n.push({_in:{[r]:a}});else if(s.enum)n.push({_in:{[r]:a}});else switch(s.dataType){case o.DataType.STRING:if(s.searchable){const e={[(null==s?void 0:s.searchable.caseSensitive)?(null==s?void 0:s.searchable.accentSensitive)?"_sub":"_usub":(null===(i=null==s?void 0:s.searchable)||void 0===i?void 0:i.accentSensitive)?"_isub":"_iusub"]:{[r]:a}};n.push(e)}else n.push({_eq:{[r]:a}});break;case o.DataType.NUMBER:const e=new o.RangeQueryDto;Object.assign(e,a),e.min&&(e.minExclusive?n.push({_gt:{[r]:e.min}}):n.push({_gte:{[r]:e.min}})),e.max&&(e.maxExclusive?n.push({_lt:{[r]:e.max}}):n.push({_lte:{[r]:e.max}}));break;case o.DataType.BOOLEAN:n.push({_eq:{[r]:a}})}}return n}uriHandling(e){var t,i;return n(this,void 0,void 0,(function*(){const r=[],s=yield this.getUploadHandler(),a=[],uriHandler=(e,t,i,o)=>n(this,void 0,void 0,(function*(){const n=yield t(e,i);n&&(yield s.copyFile(e,n),o(n))}));if(s)for(const n of this.modelMetadata.fields)for(const s of e)if(n.uriMapper){const e=s[n.name];if(!e)continue;(null===(t=n.mimeProps)||void 0===t?void 0:t.keepOnRemove)||r.push(e),a.push(uriHandler(e,n.uriMapper,(0,o.getSystemLocale)(),(e=>s[n.name]=e)))}else if(n.multiLocaleColumn){const e=this.modelMetadata.fields.find((e=>e.name===n.multiLocaleColumn));if((null==e?void 0:e.uriMapper)&&s[n.name]){const t=Object.keys(s[n.name]).map((e=>[e,s[n.name][e]]));for(const o of t)(null===(i=e.mimeProps)||void 0===i?void 0:i.keepOnRemove)||r.push(o[1]),a.push(uriHandler(o[1],e.uriMapper,o[0],(e=>s[n.name][o[0]]=e)))}}return yield Promise.all(a),()=>n(this,void 0,void 0,(function*(){s&&(yield Promise.all(r.map((e=>s.removeFile(e)))))}))}))}beforeReturning(e){return n(this,void 0,void 0,(function*(){const t=yield this.getUploadHandler();if(!t)return;const i=[];for(const o of e)for(const e of this.modelMetadata.fields)if(e.uriMapper){if(!o[e.name])continue;i.push((()=>n(this,void 0,void 0,(function*(){var i;o[e.name]=(null===(i=e.mimeProps)||void 0===i?void 0:i.public)?yield t.resolvePublicUrl(o[e.name]):yield t.resolvePrivateUrl(o[e.name])})))())}else if(e.multiLocaleColumn){const r=this.modelMetadata.fields.find((t=>t.name===e.multiLocaleColumn));if(null==r?void 0:r.uriMapper){const s=o[e.name];if(!s)continue;for(const e of Object.keys(s))i.push((()=>n(this,void 0,void 0,(function*(){var i;s[e]=(null===(i=r.mimeProps)||void 0===i?void 0:i.public)?yield t.resolvePublicUrl(s[e]):yield t.resolvePrivateUrl(s[e])})))())}}yield Promise.all(i)}))}createMany({principal:e,body:t,tx:i}){var s;return n(this,void 0,void 0,(function*(){const n=t.records;if(!n.length)return{records:[]};const a=(0,r.getDirectFields)(this.modelMetadata),c=a.filter((e=>!!e.multiLocaleColumn)),u=yield this.uriHandling(n),h=(0,o.getSystemLocale)();if(h)for(const e of n)for(const t of c)e[t.name]&&(e[t.multiLocaleColumn]=e[t.name][h]);const p=n.map(((e,t)=>c.filter((t=>!!e[t.name])).map((e=>({recordIndex:t,field:e.name,entryObject:{}}))))).flatMap((e=>e)),f=yield i.use(d.LocaleEntry).createMany(p.map((e=>e.entryObject))),v=n.map((e=>c.filter((t=>!!e[t.name])).map((t=>e[t.name])))).flatMap((e=>e)).map(((e,t)=>Object.keys(e).map((i=>({localeCode:i,entryId:f[t].id,translation:e[i]}))))).flatMap((e=>e));yield i.use(l.LocaleTranslation).createMany(v),t.records=n.map(((e,t)=>a.reduce(((i,n)=>{let o=e[n.name];if(n.multiLocaleColumn){const e=p.findIndex((e=>e.recordIndex===t&&e.field===n.name));e>=0&&(o=f[e].id)}return Object.assign(i,void 0!==o?{[n.name]:o}:{})}),{}))),yield this.beforeCreating(e,t.records);let y=t.records.length?yield i.use(this.model).createMany(t.records):[];yield this.beforeReturning(y);const g=this.modelMetadata.fields.filter((e=>!e.multiLocaleColumn&&(e.pk||e.serverValue||e.mimeProps))).map((e=>e.name));y=this.project(y,g);const m=this.modelMetadata.fields.filter((e=>!!e.hasMany));for(const r of m){const a=y.flatMap(((e,t)=>{var i;const o=n[t][r.name];return o?((null===(i=r.hasMany)||void 0===i?void 0:i.single)?[o]:o).map((t=>Object.assign(Object.assign({},t),{[r.hasMany.column]:e.id}))):[]}));if(a.length){const n=new ModelRepository((0,o.getModelById)(r.hasMany.relationDto.id));t.records=a;const l=yield n.createMany({principal:e,body:t,tx:i});for(let e=0;e<l.records.length;e++)a[e]=Object.assign(Object.assign({},a[e]),l.records[e]);for(let e=0;e<y.length;e++){const t=[];for(let i=0;i<a.length;i++)a[i][r.hasMany.column]===y[e].id&&t.push(l.records[e]);y[e]=Object.assign(Object.assign({},y[e]),{[r.name]:(null===(s=r.hasMany)||void 0===s?void 0:s.single)?t[0]:t})}}}return yield u(),{records:y}}))}updateMany({principal:e,ops:t,queries:i,body:s,tx:a}){var c,u;return n(this,void 0,void 0,(function*(){const n=t||[],h=this.modelMetadata.fields.filter((e=>!!e.hasMany)),p=(0,o.getSystemLocale)(),f=(0,r.getDirectFields)(this.modelMetadata).filter((e=>!e.multiLocaleColumn&&(void 0!==s.update[e.name]||e.isMultiLocale&&!!p))),v=(0,o.leanData)(f.reduce(((e,t)=>Object.assign(e,{[t.name]:s.update[t.name]})),{}))||{},y=Object.keys(s.update),g=this.modelMetadata.fields.filter((e=>y.includes(e.name)&&e.multiLocaleColumn)),m=yield this.uriHandling([s.update]);if(p)for(const e of g)if(s.update[e.name]){const t=s.update[e.name][p];void 0!==t&&(v[e.multiLocaleColumn]=t)}if(null==i?void 0:i.fields){const e=this.getRequestQueryConditionFromQuery(i.fields,this.modelMetadata);e.length&&n.push(...e)}const b=n.length?{_and:[...n]}:{},S=this.getNestedQueries(i);let M=[];if(S.length){const e=yield a.use(this.model).getMany(b,{projection:["id"]},S);M=e.records.map((e=>e.id)),M.length&&f.length&&(yield a.use(this.model).updateMany({_in:{id:M}},v,!1))}else if(f.length)M=yield a.use(this.model).updateMany(b,v,!0);else{const e=yield a.use(this.model).getMany(b,{projection:["id"]});M=e.records.map((e=>e.id))}const R=M.map((e=>Object.assign(Object.assign({},v),{id:e})));if(g.length){const e=yield a.use(this.model).getRecords({_in:{id:M}},{projection:["id",...g.map((e=>e.name))]}),t=e.map((e=>g.filter((t=>!e[t.name])).map((t=>({recordId:e.id,field:t.name}))))).flatMap((e=>e)),i=t.length?yield a.use(d.LocaleEntry).createMany(t.map((()=>({})))):[],n=[];i.forEach(((i,o)=>{const r=t[o],s=e.find((e=>e.id===r.recordId));if(s){s[r.field]=i.id;let e=n.find((e=>e.id===s.id));e||(e={id:s.id},n.push(e)),e[r.field]=i.id}})),yield Promise.all(n.map((e=>a.use(this.model).updateOne(e))));const o=[];for(const t of g){const i=s.update[t.name],n=Object.keys(i||{}).filter((e=>e!==p));n.length&&o.push(...e.map((e=>n.map((n=>({entryId:e[t.name],langCode:n,translation:i[n]}))))).flatMap((e=>e)))}o.length&&(yield a.use(l.LocaleTranslation).deleteMany({_or:o.map((e=>({_eq:{entryId:e.entryId,localeCode:e.langCode}})))}),yield a.use(l.LocaleTranslation).createMany(o.map((e=>({entryId:e.entryId,localeCode:e.langCode,translation:e.translation})))))}yield this.beforeReturning(R);for(const t of h){const i=s.update[t.name];if(void 0===i||!M.length)continue;if(M.length>1)throw o.ErrorBuilder.systemError(`Multiple records found while updating @HasMany field: ${t.name}`);const n=R.find((e=>e.id===M[0])),r=(0,o.getModelById)(t.hasMany.relationDto.id),l=a.use(r),d=(yield l.getRecords({_eq:{[t.hasMany.column]:n.id}},{limit:(null===(c=t.hasMany)||void 0===c?void 0:c.single)?1:void 0})).map((e=>e.id)),h=i.map((e=>e.id)).filter((e=>!!e)),p=d.filter((e=>!h.includes(e))),f=i.filter((e=>!e.id)).map((e=>Object.assign(Object.assign({},e),{[t.hasMany.column]:n.id}))),v=i.filter((e=>!!e.id));p.length&&(yield l.deleteMany({_in:{id:p}}));const y=new ModelRepository(r),g=yield y.createMany({principal:e,body:{records:f},tx:a});yield Promise.all(v.filter((e=>Object.keys(e).length>1)).map((t=>y.updateMany({principal:e,ops:[{_eq:{id:t.id}}],tx:a,body:{update:(0,o.leanData)(Object.assign(Object.assign({},t),{id:void 0}))}}))));const m=f.map(((e,t)=>Object.assign(Object.assign({},e),g.records[t]))).concat(v);n[t.name]=(null===(u=t.hasMany)||void 0===u?void 0:u.single)?m[0]:m}let j=["id"];return(null==i?void 0:i.returning)&&(j=[...j,...Object.keys(s.update).filter((e=>void 0!==s.update[e]))]),yield m(),{modified:this.project(R,j)}}))}getMany({queries:e,ops:t,queryProvider:i}){var r;return n(this,void 0,void 0,(function*(){const n=t||[];if((null==e?void 0:e.fields)&&n.push(...this.getRequestQueryConditionFromQuery(e.fields,this.modelMetadata)),null==e?void 0:e.search){const t=this.modelMetadata.fields.filter((e=>e.searchable)).map((t=>({_iusub:{[t.name]:e.search}})));t.length&&n.push({_or:t})}const s=this.modelMetadata.fields.filter((t=>t.isMultiLocale&&(!(null==e?void 0:e.projection)||e.projection.includes(t.name)))),a=this.modelMetadata.fields.filter((e=>s.find((t=>t.name===e.multiLocaleColumn)))),d=(null==e?void 0:e.projection)&&[...e.projection.filter((e=>!this.modelMetadata.fields.find((t=>t.name===e&&!!t.hasMany)))),...a.map((e=>e.name))],c=yield i.use(this.model).getMany(n.length?{_and:n}:{},{limit:null==e?void 0:e.limit,page:null==e?void 0:e.page,projection:d,order:"random"===(null==e?void 0:e.order)?e.order:null===(r=null==e?void 0:e.order)||void 0===r?void 0:r.map((e=>{const t=Object.keys(e).find((t=>!!e[t]));return[t,e[t]]}))},this.getNestedQueries(e)),u=c.records.map((e=>e.id)),h=c.records.map((e=>a.map((t=>e[t.name])))).flatMap((e=>e)).filter((e=>e)),p=(0,o.getSystemLocale)(),f=h.length?(null==e?void 0:e.locale)?e.locale.toLowerCase()!==p?yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:h},_eq:{localeCode:e.locale}},{projection:["entryId","localeCode","translation"]}):[]:yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:h}},{projection:["entryId","localeCode","translation"]}):[];for(const t of c.records)for(const i of a)if(null==e?void 0:e.locale){const n=f.find((n=>n.localeCode===e.locale&&n.entryId===t[i.name]));n&&(t[i.multiLocaleColumn]=n.translation)}else{const e=f.filter((e=>e.entryId===t[i.name]));e.length?t[i.name]=e.reduce(((e,t)=>Object.assign(e,{[t.localeCode]:t.translation})),{}):t[i.name]={}}for(const t of this.modelMetadata.fields){if(!t.hasMany||(null==e?void 0:e.projection)&&!e.projection.includes(t.name))continue;const n=(0,o.getModelById)(t.hasMany.relationDto.id),r=new ModelRepository(n),s=u.length?yield r.getMany({queries:{fields:{[t.hasMany.column]:u},limit:t.hasMany.single?1:0},queryProvider:i}):{records:[]};for(const e of c.records){const i=s.records.filter((i=>i[t.hasMany.column]===e.id));e[t.name]=t.hasMany.single?i[0]:i}}return yield this.beforeReturning(c.records),{total:c.total,records:this.project(c.records,(null==e?void 0:e.projection)&&[...e.projection,...e.locale?[]:d||[]].reduce(o.uniqueReducer,[]))}}))}deleteMany({queries:e,ops:t,tx:i}){var o,r;return n(this,void 0,void 0,(function*(){let n=t||[];if(null==e?void 0:e.fields){const t=this.getRequestQueryConditionFromQuery(e.fields,this.modelMetadata);t.length&&n.push(...t)}const s=n.length?{_and:[...n,...t||[]]}:{},a=this.getNestedQueries(e);let c=[];const u=this.modelMetadata.fields.filter((e=>e.uriMapper)),h=this.modelMetadata.fields.filter((e=>e.multiLocaleColumn));if(a.length||h.length||u.length){const e=yield i.use(this.model).getRecords(s,{projection:["id",...[...h,...u].map((e=>e.name))]},a);yield i.use(this.model).deleteMany({_in:{id:e.map((e=>e.id))}});const t=[];for(const i of e)for(const e of u)i[e.name]&&!(null===(o=e.mimeProps)||void 0===o?void 0:o.keepOnRemove)&&t.push(i[e.name]);const n=[];for(const t of e)for(const e of h){const i=this.modelMetadata.fields.find((t=>t.name===e.name));(null==i?void 0:i.uriMapper)&&!(null===(r=i.mimeProps)||void 0===r?void 0:r.keepOnRemove)&&t[i.name]&&n.push(t[i.name])}if(n.length){const e=yield i.use(l.LocaleTranslation).getRecords({_in:{entryId:n}},{projection:["translation"]});for(const i of e)i.translation&&t.push(i.translation)}const p=e.map((e=>h.map((t=>e[t.name])))).flatMap((e=>e)).filter((e=>!!e));if(p.length&&(yield i.use(d.LocaleEntry).deleteMany({_in:{id:p}})),t.length){const e=yield this.getUploadHandler();e&&(yield Promise.all(t.map((t=>e.removeFile(t)))))}c=e}else c=yield i.use(this.model).deleteMany(s,null==e?void 0:e.returning);return{modified:c}}))}}t.ModelRepository=ModelRepository},2255:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractAccessCondition=void 0;t.AbstractAccessCondition=class AbstractAccessCondition{}},4192:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.DtoFieldValidation=void 0;const r=i(2318),s=i(2255);t.DtoFieldValidation=(e,t,i)=>{let a=class _ extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return t(e)}))}getConditionMetadata(){return{name:i||"dto_field_condition",valueType:r.AccessConditionValueType.DTO,valueConstraint:JSON.stringify((0,r.getObjectMetadata)(e))}}validate(e,t){return o(this,void 0,void 0,(function*(){try{for(const i of e)(0,r.validateData)(i,t);return!0}catch(e){return!1}}))}};return a=n([(0,r.Register)()],a),a}},1071:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.FilterModelFieldAccessCondition=void 0;const r=i(2318),s=i(2255);t.FilterModelFieldAccessCondition=(e,t)=>{let i=class _ extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return t(e)}))}getConditionMetadata(){return{name:"filter_model_field",valueType:r.AccessConditionValueType.CHOICES,valueConstraint:(0,r.getObjectMetadata)(e).fields.map((e=>e.name))}}validate(e,t){return o(this,void 0,void 0,(function*(){return!!e&&e.every((e=>t.includes(e)))}))}};return i=n([(0,r.Register)()],i),i}},3198:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.MaximumQueryLimit=void 0;const r=i(2318),s=i(2255);let a=class MaximumQueryLimit extends s.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){let t=e.getQuery().limit;return t&&(t=parseInt(t)),t||0}))}validate(e,t){return o(this,void 0,void 0,(function*(){return e>0&&e<=t}))}getConditionMetadata(){return{name:"maximum_query_limit",valueType:r.AccessConditionValueType.NUMBER,valueConstraint:JSON.stringify({min:1})}}};a=n([(0,r.Register)()],a),t.MaximumQueryLimit=a},7493:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},341:function(e,t,i){var n=this&&this.__createBinding||(Object.create?function(e,t,i,n){void 0===n&&(n=i);var o=Object.getOwnPropertyDescriptor(t,i);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,n,o)}:function(e,t,i,n){void 0===n&&(n=i),e[n]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||n(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),o(i(9025),t),o(i(4638),t),o(i(1820),t),o(i(1870),t),o(i(4972),t),o(i(4435),t),o(i(7540),t),o(i(8903),t),o(i(2417),t),o(i(1532),t),o(i(5879),t),o(i(6004),t),o(i(7282),t),o(i(767),t),o(i(225),t),o(i(7493),t),o(i(2255),t),o(i(1071),t),o(i(3198),t),o(i(4192),t),o(i(859),t),o(i(2085),t),o(i(531),t),o(i(7825),t),o(i(9837),t),o(i(3355),t),o(i(9073),t),o(i(8023),t),o(i(5048),t),o(i(5530),t),o(i(2841),t),o(i(7152),t),o(i(8577),t),o(i(2665),t),o(i(9990),t),o(i(6507),t),o(i(4839),t),o(i(5232),t),o(i(5572),t),o(i(10),t),o(i(5481),t),o(i(2552),t),o(i(889),t),o(i(5537),t),o(i(226),t),o(i(8836),t),o(i(9627),t),o(i(6721),t),o(i(7014),t),o(i(5761),t),o(i(7179),t),o(i(8659),t),o(i(4487),t),o(i(7120),t),o(i(7143),t),o(i(1689),t),o(i(1787),t),o(i(3016),t),o(i(7380),t),o(i(8037),t),o(i(730),t),o(i(4768),t),o(i(2345),t),o(i(7724),t),o(i(1556),t),o(i(2363),t),o(i(4683),t),o(i(9527),t),o(i(3376),t),o(i(5033),t),o(i(523),t)},4683:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobController=void 0;const n=i(2318);t.AbstractJobController=class AbstractJobController{getAllJobs(){const e=(0,n.getObjectMetadata)(this.constructor);return(null==e?void 0:e.jobs)||[]}}},523:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobRepository=void 0;t.AbstractJobRepository=class AbstractJobRepository{}},9527:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractJobScheduler=void 0;const o=i(2318),r=i(4683);t.AbstractJobScheduler=class AbstractJobScheduler{constructor(e){this.logger=e,this._jobs=null}getAvailableJobInfo(){return n(this,void 0,void 0,(function*(){if(null===this._jobs){const e=(0,o.getServiceProvider)().getInjector(),t=e.resolveMultiple(r.AbstractJobController);yield e.initInstances(),this._jobs=t.flatMap((e=>e.getAllJobs().map((t=>Object.assign(Object.assign({},t),{handlerFn:e[t.handlerName].bind(e)})))))}return this._jobs}))}scheduleJobAt(e){return this.scheduleJob(e)}executeJob(e){return n(this,void 0,void 0,(function*(){const t=(yield this.getAvailableJobInfo()).find((t=>t.jobName===e.jobName));t&&(yield t.handlerFn(...e.params||[])),t&&!e.at||(yield this.removeJob(e.jobId),this.logger.info(t?`Remove one-time job ${e.jobName} at timestamp ${e.at}`:`Remove not found job: ${e.jobName}`))}))}}},3376:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AwsJobScheduler=void 0;const a=i(2318),l=i(9336),d=s(i(1495)),c=i(9527),u=i(2363),gcdBetween=(e,t)=>{const i=e>t?e:t,n=e>t?t:e;if(i<=0||n<=0)return 1;if(i%n==0)return n;{const e=Math.trunc(i/n);return gcdBetween(n,i-n*e)}},gcdOf=(e,t)=>t.length?gcdOf(gcdBetween(e,t[0]),t.slice(1)):e,getWaitExpression=e=>`Wait ${e} seconds`;let h=class AwsJobScheduler extends c.AbstractJobScheduler{constructor(e,t,i,n,o,r,s="default",a="claire-aws-job-",c="one-minute-step-function-trigger"){super(e),this.logger=e,this.redisServerUrl=t,this.uniqueIdKey=i,this.apiLambdaFunctionArn=n,this.stepFunctionName=o,this.iamRoleArn=r,this.eventBusName=s,this.jobNamePrefix=a,this.oneMinuteRule=c,this.eventbridge=new l.EventBridge,this.stepfunctions=new l.StepFunctions({apiVersion:"2016-11-23"}),this.redisClient=new d.default(this.redisServerUrl)}init(){return r(this,void 0,void 0,(function*(){}))}exit(){this.redisClient.quit()}handleInterval(e){return r(this,void 0,void 0,(function*(){this.logger.debug("Handle interval",e,typeof e);const t=(yield this.getAvailableJobInfo()).filter((t=>t.interval&&e%t.interval==0));yield Promise.all(t.map((e=>this.executeJob(Object.assign(Object.assign({},e),{jobId:e.jobName})))))}))}handleCron(e){return r(this,void 0,void 0,(function*(){this.logger.debug("Handle cron",e),yield this.executeJob(e)}))}generateCronFromTimestamp(e){const t=new Date(e);return[t.getUTCMinutes(),t.getUTCHours(),t.getUTCDate(),t.getUTCMonth(),"?",t.getUTCFullYear()].join(" ")}isActiveScheduler(){return!1}getAllScheduledJobs(){return r(this,void 0,void 0,(function*(){const e=yield this.getAvailableJobInfo(),t=yield this.eventbridge.listRules({EventBusName:this.eventBusName,NamePrefix:this.jobNamePrefix}).promise();return(yield Promise.all((t.Rules||[]).map((e=>r(this,void 0,void 0,(function*(){var t;const i=e.Name,n=null===(t=(yield this.eventbridge.listTargetsByRule({EventBusName:this.eventBusName,Rule:i}).promise()).Targets)||void 0===t?void 0:t.find((e=>e.Id===i));if(!n||!n.Input)return;return JSON.parse(n.Input).requestContext.cronScheduler.data})))))).filter((e=>!!e)).concat(e.filter((e=>e.interval)).map((e=>Object.assign(Object.assign({},e),{jobId:e.jobName}))))}))}scheduleJob(e){return r(this,void 0,void 0,(function*(){if(this.logger.debug("Scheduling job: ",e),e.cron||e.at){const t=yield this.redisClient.incr(this.uniqueIdKey),i=`${this.jobNamePrefix}${t}`,n=e.cron?`${e.cron} *`:this.generateCronFromTimestamp(e.at);return this.logger.debug("Cron expression",n),yield this.eventbridge.putRule({Name:i,Description:`${e.jobName} - ${e.cron||e.at}`,EventBusName:this.eventBusName,ScheduleExpression:`cron(${n})`,State:"ENABLED"}).promise(),yield this.eventbridge.putTargets({Rule:i,Targets:[{Arn:this.apiLambdaFunctionArn,Id:i,Input:JSON.stringify({requestContext:{cronScheduler:{data:Object.assign(Object.assign({},e),{jobId:i})}}})}]}).promise(),i}if(e.interval)return e.jobName;throw a.ErrorBuilder.systemError(`Job does not have time config: ${e.jobName}`)}))}syncJobs(){return r(this,void 0,void 0,(function*(){this.logger.debug("Checking interval scheduler"),yield this.checkIntervalScheduler();const e=yield this.getAllScheduledJobs(),t=yield this.getAvailableJobInfo(),i=e.filter((e=>!t.find((t=>t.jobName===e.jobName))));for(const e of i)this.logger.info(`Removing stale job: ${e.jobName} of id: ${e.jobId}`),yield this.removeJob(e.jobId);i.length&&this.logger.info(`Cleaned up: ${i.length} stale jobs`),this.logger.debug("Remove scheduled cron jobs");const n=e.filter((e=>e.cron));yield Promise.all(n.map((e=>this.removeJob(e.jobId))));const o=t.filter((e=>e.cron||e.interval));this.logger.debug("Scheduling cron & interval jobs");for(const e of o)yield this.scheduleJob({jobName:e.jobName,cron:e.cron,interval:e.interval})}))}removeJob(e){return r(this,void 0,void 0,(function*(){yield this.eventbridge.removeTargets({EventBusName:this.eventBusName,Rule:e,Ids:[e]}).promise(),yield this.eventbridge.deleteRule({EventBusName:this.eventBusName,Name:e}).promise()}))}checkIntervalScheduler(){var e,t;return r(this,void 0,void 0,(function*(){const i=(yield this.getAvailableJobInfo()).filter((e=>e.interval)),n=i.map((e=>e.interval)),[o,r]=((e,t)=>{let i=u.JobInterval.EVERY_30S;t.length&&(i=gcdOf(t[0],t.slice(1)),i<u.JobInterval.EVERY_5S&&(i=u.JobInterval.EVERY_5S));const n=Math.trunc(60/i),o=[];for(let e=0;e<n;e++)o.push(e*i);return[i,`\n {\n "StartAt": "Create items",\n "States": {\n "Create items": {\n "Type": "Pass",\n "Next": "Loop",\n "Result": ${JSON.stringify(o)}\n },\n "Loop": {\n "Type": "Map",\n "End": true,\n "Iterator": {\n "StartAt": "${getWaitExpression(i)}",\n "States": {\n "${getWaitExpression(i)}": {\n "Type": "Wait",\n "Seconds": ${i},\n "Next": "Convert time to request object"\n },\n "Convert time to request object": {\n "Type": "Pass",\n "Next": "Lambda Invoke",\n "Result": {\n "requestContext": {\n "intervalScheduler": {\n "time": "$"\n }\n }\n }\n },\n "Lambda Invoke": {\n "Type": "Task",\n "Resource": "arn:aws:states:::lambda:invoke",\n "Parameters": {\n "Payload.$": "$",\n "FunctionName": "${e}:$LATEST"\n },\n "End": true,\n "OutputPath": "$.Payload"\n }\n }\n },\n "MaxConcurrency": 1\n }\n },\n "Comment": "One minute loop to trigger lambda function"\n }\n `]})(this.apiLambdaFunctionArn,n);this.logger.debug("Listing all state machines");const s=yield this.stepfunctions.listStateMachines({}).promise();let a=null===(e=s.stateMachines.find((e=>e.name.includes(this.stepFunctionName))))||void 0===e?void 0:e.stateMachineArn,l=a;if(a){(yield this.stepfunctions.describeStateMachine({stateMachineArn:a}).promise()).definition.includes(getWaitExpression(o))||(this.logger.debug("Step function definition changed, create new state machine"),l="")}const d=`${this.stepFunctionName}-${o}`;if(!l){this.logger.debug(`Create new step function with interval ${o} seconds`);l=(yield this.stepfunctions.createStateMachine({definition:r,name:d,roleArn:this.iamRoleArn,type:"EXPRESS"}).promise()).stateMachineArn}this.logger.debug("Step function ARNs old / new",a,l),this.logger.debug("Getting one minute rule");const c=yield this.eventbridge.listRules({EventBusName:this.eventBusName,NamePrefix:this.oneMinuteRule}).promise(),h=null===(t=c.Rules)||void 0===t?void 0:t.find((e=>e.Name==this.oneMinuteRule));h||(this.logger.debug("Create new one minute rule"),yield this.eventbridge.putRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule,Description:"One minute trigger function for step function",ScheduleExpression:"rate(1 minute)",State:"ENABLED"}).promise()),this.logger.debug("Adding step function state machine as target"),l!==a&&(a&&(this.logger.debug("Removing old target",a),yield this.eventbridge.removeTargets({EventBusName:this.eventBusName,Rule:this.oneMinuteRule,Ids:[this.stepFunctionName]}).promise(),this.logger.debug("Removing old state machine function"),yield this.stepfunctions.deleteStateMachine({stateMachineArn:a}).promise()),this.logger.debug("Adding new target",l),yield this.eventbridge.putTargets({Rule:this.oneMinuteRule,Targets:[{Arn:l,Id:this.stepFunctionName,RoleArn:this.iamRoleArn}]}).promise()),!i.length&&(null==h?void 0:h.State)?(this.logger.info("No interval job found, disable one minute rule"),yield this.eventbridge.disableRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule}).promise()):(this.logger.info("Interval job found, enable one minute rule"),yield this.eventbridge.enableRule({EventBusName:this.eventBusName,Name:this.oneMinuteRule}).promise())}))}};h=n([(0,a.Initable)(),o("design:paramtypes",[a.AbstractLogger,String,String,String,String,String,Object,Object,Object])],h),t.AwsJobScheduler=h},5033:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalJobScheduler=void 0;const a=i(2318),l=s(i(1495)),d=s(i(9896)),c=s(i(7344)),u=i(9527),h=i(523),p=i(9512);var f;!function(e){e.SCHEDULE_JOB="SCHEDULE_JOB",e.REMOVE_JOB="REMOVE_JOB",e.SYNC_JOB="SYNC_JOB",e.NOTIFY="NOTIFY"}(f||(f={}));let v=class LocalJobScheduler extends u.AbstractJobScheduler{constructor(e,t,i,n,o,r,s,a=30){super(e),this.logger=e,this.jobRepo=t,this.redisServerUrl=i,this.lockMutexKey=n,this.holdMutexKey=o,this.uniqueIdKey=r,this.multiClientChannel=s,this.keyRetentionDurationSecond=a,this.intervals=[],this.isActive=!1,this.notifyResolver={},this.jobHolder={},this.redisClient=new l.default(this.redisServerUrl),this.subscribeClient=this.redisClient.duplicate()}sendJob(e,t,i){this.subscribeClient.publish(this.multiClientChannel,JSON.stringify({type:e,messageId:t,data:i}))}processMessage(e,t,i){return r(this,void 0,void 0,(function*(){switch(e){case f.SYNC_JOB:yield this.syncJobs(),this.sendJob(f.NOTIFY,t);break;case f.NOTIFY:const n=this.notifyResolver[t];if(!n)return;n(i);break;case f.SCHEDULE_JOB:if(!this.isActive)return;const o=i,r=yield this.scheduleJobAt(o);this.sendJob(f.NOTIFY,t,r);break;case f.REMOVE_JOB:if(!this.isActive)return;const s=i;yield this.removeJob(s),this.sendJob(f.NOTIFY,t);break;default:this.logger.error(`Not recognize message type ${e}`)}}))}extendMutexKey(){return r(this,void 0,void 0,(function*(){this.redisClient&&(yield this.redisClient.setex(this.holdMutexKey,this.keyRetentionDurationSecond,1),this.logger.debug("Scheduler extends mutex key"))}))}init(){return r(this,void 0,void 0,(function*(){this.logger.debug("LocalJobScheduler init"),this.logger.debug("Listening on multi client channel"),this.redisClient.on("message",((e,t)=>{if(e===this.multiClientChannel){const e=JSON.parse(t);this.processMessage(e.type,e.messageId,e.data).catch((t=>this.logger.error(`Fail to process message, ${e}`,t)))}})),yield this.subscribeClient.subscribe(this.multiClientChannel),this.logger.debug("Try to claim active scheduler");const e=new d.default([this.redisClient]);try{const t=yield e.acquire([this.lockMutexKey],this.keyRetentionDurationSecond);this.isActive=!0,yield this.extendMutexKey(),yield t.release(),this.logger.debug("Being active scheduler"),this.mutexHoldInterval=setInterval((()=>{this.extendMutexKey()}),Math.trunc(1e3*this.keyRetentionDurationSecond/2)+1)}catch(e){this.logger.info("Failed to lock mutex key, ignore",e)}}))}exit(){this.mutexHoldInterval&&(0,p.clearInterval)(this.mutexHoldInterval),this.redisClient.quit(),this.subscribeClient.quit();for(const e of this.intervals)(0,p.clearInterval)(e);this.logger.debug("LocalJobScheduler exit")}isActiveScheduler(){return this.isActive}getAllScheduledJobs(){return r(this,void 0,void 0,(function*(){return Object.values(this.jobHolder).filter((e=>!!(null==e?void 0:e.jobInfo))).map((e=>null==e?void 0:e.jobInfo))}))}syncJobs(){return r(this,void 0,void 0,(function*(){if(!this.isActive){const e=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((t=>{this.notifyResolver[e]=t,this.sendJob(f.SYNC_JOB,e)}))}{const e=yield this.getAvailableJobInfo();for(const t of e)(t.cron||t.interval)&&(yield this.scheduleJob(t));const t=yield this.jobRepo.getJobs();for(const e of t)yield this.scheduleJob(e)}}))}scheduleJob(e){return r(this,void 0,void 0,(function*(){if(this.isActive){if(e.at){const t=yield this.jobRepo.saveJob({jobName:e.jobName,params:e.params,at:e.at}),i=Object.assign(Object.assign({},e),{jobId:t}),n=setTimeout((()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}),new Date(e.at).getTime()-Date.now());return this.jobHolder[t]={jobCanceler:()=>(0,p.clearTimeout)(n),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}if(e.interval){const t=e.jobName,i=Object.assign(Object.assign({},e),{jobId:t}),n=setInterval((()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}),e.interval);return this.jobHolder[t]={jobCanceler:()=>(0,p.clearInterval)(n),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}if(e.cron){const t=e.jobName,i=Object.assign(Object.assign({},e),{jobId:t}),n=c.default.scheduleJob(e.cron,(()=>{this.executeJob(i).catch((e=>this.logger.error(`Error execute job ${i.jobName} with id: ${i.jobId}`,e)))}));return this.jobHolder[t]={jobCanceler:()=>n.cancel(),jobInfo:Object.assign(Object.assign({},e),{jobId:t})},t}throw a.ErrorBuilder.systemError(`Job does not have time config: ${e.jobName}`)}{const t=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((i=>{this.notifyResolver[t]=i,this.sendJob(f.SCHEDULE_JOB,t,e)}))}}))}removeJob(e){return r(this,void 0,void 0,(function*(){if(this.isActive){const t=this.jobHolder[e];return t&&(t.jobCanceler(),this.jobHolder[e]=void 0),void(yield this.jobRepo.removeJobById(e))}{const t=yield this.redisClient.incr(this.uniqueIdKey);return new Promise((i=>{this.notifyResolver[t]=i,this.sendJob(f.REMOVE_JOB,t,e)}))}}))}};v=n([(0,a.Initable)(),o("design:paramtypes",[a.AbstractLogger,h.AbstractJobRepository,String,String,String,String,String,Number])],v),t.LocalJobScheduler=v},1556:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CustomJob=t.CronJob=t.IntervalJob=void 0;const n=i(2318);t.IntervalJob=(e,t)=>(i,o)=>{const r=(0,n.initObjectMetadata)(i);r.jobs||(r.jobs=[]),r.jobs.push({jobName:e,interval:t,handlerName:o})};t.CronJob=(e,t)=>(i,o)=>{const r=(0,n.initObjectMetadata)(i);if(r.jobs||(r.jobs=[]),5!==t.split(" ").length)throw n.ErrorBuilder.systemError("Invalid cron expression, expect minute / hour / day / month / day-of-week");r.jobs.push({jobName:e,cron:t,handlerName:o})};t.CustomJob=e=>(t,i)=>{const o=(0,n.initObjectMetadata)(t);o.jobs||(o.jobs=[]),o.jobs.push({jobName:e,handlerName:i})}},2363:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.JobInterval=t.CRON_REQUEST_METHOD=t.INTERVAL_REQUEST_METHOD=void 0,t.INTERVAL_REQUEST_METHOD="interval",t.CRON_REQUEST_METHOD="cron",function(e){e[e.EVERY_5S=5]="EVERY_5S",e[e.EVERY_10S=10]="EVERY_10S",e[e.EVERY_15S=15]="EVERY_15S",e[e.EVERY_20S=20]="EVERY_20S",e[e.EVERY_30S=30]="EVERY_30S"}(t.JobInterval||(t.JobInterval={}))},5572:function(e,t,i){var n,o=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},r=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileLogMedium=void 0;const l=a(i(7147)),d=a(i(1017)),c=i(2318);let u=n=class FileLogMedium{constructor(e){const t=e.separated?n.levels.map((t=>d.default.join(e.destination,t+".log"))):[e.destination];this.destination=t.map((e=>(l.default.existsSync(d.default.dirname(e))||l.default.mkdirSync(d.default.dirname(e),{recursive:!0}),l.default.openSync(e,"a")))),this.separated=!!e.separated}init(){return s(this,void 0,void 0,(function*(){}))}exit(){this.destination.forEach((e=>l.default.closeSync(e)))}write(e,t){const i=this.separated?this.destination[n.levels.indexOf(e)]:0;l.default.appendFileSync(i,t)}};u.levels=Object.values(c.LogLevel),u=n=o([(0,c.Initable)(),r("design:paramtypes",[Object])],u),t.FileLogMedium=u},5761:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractCacheService=void 0;t.AbstractCacheService=class AbstractCacheService{}},7179:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractFileService=void 0;t.AbstractFileService=class AbstractFileService{}},4487:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.SesMailService=t.LocalMailService=t.AbstractMailService=void 0;const l=i(2318),d=i(9336),c=a(i(7147)),u=a(i(1017));class AbstractMailService{}t.AbstractMailService=AbstractMailService;let h=class LocalMailService extends AbstractMailService{constructor(e){super(),this.config=e,c.default.existsSync(this.config.LOCAL_MAIL_FOLDER)||c.default.mkdirSync(this.config.LOCAL_MAIL_FOLDER,{recursive:!0})}send(e){return s(this,void 0,void 0,(function*(){const t=u.default.join(this.config.LOCAL_MAIL_FOLDER,`${Date.now()}.txt`);c.default.writeFileSync(t,`\nFrom: ${e.sender}\n\nTo: ${e.receivers.join(", ")}\n\nCc: ${(e.cc||[]).join(", ")}\n\nBcc: ${(e.bcc||[]).join(", ")}\n\n\nSubject: ${e.subject}\n\nContent: ${e.contentType}\n\n${e.content}\n `)}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalMailService=h;let p=class SesMailService extends AbstractMailService{constructor(e,t){super(),this.config=e,this.logger=t,this.emailClient=new d.SES({apiVersion:"2010-12-01",region:this.config.SES_REGION})}send(e){return s(this,void 0,void 0,(function*(){try{const t={Destination:{BccAddresses:e.bcc,CcAddresses:e.cc,ToAddresses:e.receivers},Message:{Body:{},Subject:{Charset:"UTF-8",Data:e.subject}},Source:e.sender};"html"===e.contentType?t.Message.Body.Html={Charset:"UTF-8",Data:e.content}:"text"===e.contentType&&(t.Message.Body.Text={Charset:"UTF-8",Data:e.content}),yield this.emailClient.sendEmail(t).promise()}catch(e){throw this.logger.error(e),l.ErrorBuilder.systemError("Cannot send email")}}))}};p=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],p),t.SesMailService=p},7014:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractService=void 0;const o=i(7756);t.AbstractService=class AbstractService{constructor(e){this.databaseAdapter=e}createTransaction(){return this.databaseAdapter.createTransaction()}getCurrentTransaction(){return n(this,void 0,void 0,(function*(){return(0,o.getTransactionFromContext)(this)}))}}},7120:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TwilioSmsService=t.LocalSmsService=t.AbstractSmsService=void 0;const l=i(2318),d=a(i(1017)),c=a(i(7202)),u=a(i(7147));class AbstractSmsService{}t.AbstractSmsService=AbstractSmsService;let h=class LocalSmsService extends AbstractSmsService{constructor(e){super(),this.config=e,u.default.existsSync(this.config.LOCAL_SMS_FOLDER)||u.default.mkdirSync(this.config.LOCAL_SMS_FOLDER,{recursive:!0})}exit(){return 0}send(e,t,i){return s(this,void 0,void 0,(function*(){const n=d.default.join(this.config.LOCAL_SMS_FOLDER,`${Date.now()}`);u.default.writeFileSync(n,`${e}-${t}: ${i}\n`)}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalSmsService=h;let p=class TwilioSmsService extends AbstractSmsService{constructor(e,t){if(super(),this.config=e,this.logger=t,!this.config.TWILIO_ACCOUNT_SID)throw l.ErrorBuilder.forConfigNotFound("TWILIO_ACCOUNT_SID");if(!this.config.TWILIO_AUTH_TOKEN)throw l.ErrorBuilder.forConfigNotFound("TWILIO_AUTH_TOKEN");this.client=(0,c.default)(this.config.TWILIO_ACCOUNT_SID,this.config.TWILIO_AUTH_TOKEN)}exit(){return 0}send(e,t,i){return s(this,void 0,void 0,(function*(){const n=yield this.client.messages.create({body:i,from:e,to:t});this.logger.debug(`Message sent from: ${e} to: ${t} with id: ${n.sid}`)}))}};p=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],p),t.TwilioSmsService=p},1689:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalFileService=void 0;const l=i(2318),d=a(i(2167)),c=i(9025),u=i(7179);let h=class LocalFileService extends u.AbstractFileService{constructor(e){super(),this.config=e}getFileSize(e){return s(this,void 0,void 0,(function*(){return Promise.all(e.map((e=>s(this,void 0,void 0,(function*(){var t;return(null===(t=(yield d.default.head(`${this.config.FILE_SERVER_URL}/info?objectKey="/${e}"`)).data)||void 0===t?void 0:t.size)||0})))))}))}getAccessUrls(e,t){return s(this,void 0,void 0,(function*(){return e.map((e=>`${this.config.FILE_SERVER_URL}/${e}`))}))}getPresignedUrl(e,t){return s(this,void 0,void 0,(function*(){return e===c.FileOperation.GET?this.getAccessUrls(t,!0):t.map((e=>`${this.config.FILE_SERVER_URL}/?objectKey="/${e}"`))}))}moveObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.post(`${this.config.FILE_SERVER_URL}/`,{from:e.fromURI,to:e.toURI}))))}))}copyObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.post(`${this.config.FILE_SERVER_URL}/`,{from:e.fromURI,to:e.toURI,copy:!0}))))}))}removeObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>d.default.delete(`${this.config.FILE_SERVER_URL}/?objectKey="/${e}"`))))}))}};h=n([(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object])],h),t.LocalFileService=h},3016:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ProxyFileService=void 0;const s=i(2318),a=i(1801),l=i(7179);let d=class ProxyFileService extends l.AbstractFileService{constructor(e,t){super(),this.fileServiceHttpClient=e,this.publicFileServerEndpoint=t}getFileSize(e){return r(this,void 0,void 0,(function*(){return(yield this.fileServiceHttpClient.get(`/file/info?${(0,a.stringifyQueries)({uris:e})}`)).fileInfos.map((e=>e.fileSizeBytes))}))}getAccessUrls(e,t){return r(this,void 0,void 0,(function*(){if(t&&this.publicFileServerEndpoint)return e.map((e=>this.publicFileServerEndpoint+"/"+e));return(yield this.fileServiceHttpClient.get(`/file?${(0,a.stringifyQueries)({uris:e,public:t})}`)).urls}))}getPresignedUrl(e,t){return r(this,void 0,void 0,(function*(){throw s.ErrorBuilder.error(s.Errors.SYSTEM_ERROR,"Not supported operation")}))}moveObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/move",{operations:e})}))}copyObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/copy",{operations:e})}))}removeObject(e){return r(this,void 0,void 0,(function*(){yield this.fileServiceHttpClient.post("/file/remove",{uris:e})}))}};d=n([(0,s.Injectable)(),o("design:paramtypes",[a.AbstractHttpClient,String])],d),t.ProxyFileService=d},7143:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RedisCacheService=void 0;const l=i(2318),d=a(i(9896)),c=a(i(1495)),u=i(5761);class RedisTransaction{constructor(e){this.multi=e}hset(e,t,i){this.multi.hset(e,t,JSON.stringify(i))}set(e,t){this.multi.set(e,JSON.stringify(t))}del(e){this.multi.del(e)}hdel(e,t){this.multi.hdel(e,t)}exec(){return s(this,void 0,void 0,(function*(){return yield this.multi.exec()}))}}let h=class RedisCacheService extends u.AbstractCacheService{constructor(e,t){super(),this.config=e,this.logger=t}get redisClient(){if(!this._redisClient)throw l.ErrorBuilder.error(l.Errors.SYSTEM_ERROR,"Redis client not ready");return this._redisClient}createTransaction(){return new RedisTransaction(this.redisClient.multi())}init(){return s(this,void 0,void 0,(function*(){this._redisClient=new c.default(this.config.REDIS_SERVER)}))}exit(){return this.redisClient.disconnect(),this._redisClient=void 0,0}flush(){return s(this,void 0,void 0,(function*(){yield this.redisClient.flushall()}))}hkeys(e){return s(this,void 0,void 0,(function*(){return yield this.redisClient.hkeys(e)}))}del(e){return s(this,void 0,void 0,(function*(){yield this.redisClient.del(e)}))}hdel(e,t){return s(this,void 0,void 0,(function*(){yield this.redisClient.hdel(e,t)}))}hget(e,t){return s(this,void 0,void 0,(function*(){const i=yield this.redisClient.hget(e,t);return i?JSON.parse(i):void 0}))}hset(e,t,i){return s(this,void 0,void 0,(function*(){yield this.redisClient.hset(e,t,JSON.stringify(i))}))}get(e){return s(this,void 0,void 0,(function*(){const t=yield this.redisClient.get(e);return t?JSON.parse(t):void 0}))}set(e,t,i){return s(this,void 0,void 0,(function*(){i&&i>0?yield this.redisClient.setex(e,i,JSON.stringify(t)):yield this.redisClient.set(e,JSON.stringify(t))}))}lock(e,t,i){return s(this,void 0,void 0,(function*(){const n=new d.default([this.redisClient],{retryCount:i?1:0,retryDelay:i});try{const i=yield n.acquire([e],t);return{unlock:()=>s(this,void 0,void 0,(function*(){yield i.release()}))}}catch(t){throw l.ErrorBuilder.error(l.Errors.CANNOT_LOCK,`Cannot lock resource ${e}`)}}))}};h=n([(0,l.Initable)(),(0,l.Injectable)(),r(0,(0,l.Inject)(l.Configuration)),o("design:paramtypes",[Object,l.AbstractLogger])],h),t.RedisCacheService=h},1787:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(i,n){t(i,n,e)}},s=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.S3FileService=void 0;const a=i(2318),l=i(9336),d=i(7179);let c=class S3FileService extends d.AbstractFileService{constructor(e,t){super(),this.config=e,this.logger=t,this.s3Client=new l.S3({signatureVersion:"v4",region:this.config.S3_BUCKET_REGION}),this.cloudfrontSigner=new l.CloudFront.Signer(this.config.CLOUD_FRONT_PUBLIC_KEY_ID,Buffer.from(this.config.CLOUD_FRONT_PRIVATE_KEY_BASE64,"base64").toString())}getFileSize(e){return s(this,void 0,void 0,(function*(){return yield Promise.all(e.map((e=>this.getSingleFileSize(e))))}))}getAccessUrls(e,t){return s(this,void 0,void 0,(function*(){return e.map((e=>this.getSingleAccessUrl(e,t)))}))}getPresignedUrl(e,t){return s(this,void 0,void 0,(function*(){return t.map((t=>this.getSinglePresignedUrl(e,t)))}))}moveObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.moveSingleObject(e.fromURI,e.toURI))))}))}copyObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.copySingleObject(e.fromURI,e.toURI))))}))}removeObject(e){return s(this,void 0,void 0,(function*(){yield Promise.all(e.map((e=>this.removeSingleObject(e))))}))}getSingleFileSize(e){return s(this,void 0,void 0,(function*(){return(yield this.s3Client.headObject({Key:e,Bucket:this.config.S3_BUCKET_NAME}).promise().then((e=>e.ContentLength)))||0}))}getSinglePresignedUrl(e,t){return this.cloudfrontSigner.getSignedUrl({url:`${this.config.CLOUD_FRONT_PUBLIC_DOMAIN}/${t}`,expires:Date.now()+36e5})}copySingleObject(e,t){return s(this,void 0,void 0,(function*(){try{yield this.s3Client.copyObject({Bucket:this.config.S3_BUCKET_NAME,CopySource:`/${this.config.S3_BUCKET_NAME}/${e}`,Key:t}).promise()}catch(e){throw this.logger.error(e),e}}))}moveSingleObject(e,t){return s(this,void 0,void 0,(function*(){try{yield this.copySingleObject(e,t),yield this.removeSingleObject(e)}catch(e){throw this.logger.error(e),e}}))}getSingleAccessUrl(e,t){const i=`${this.config.CLOUD_FRONT_PUBLIC_DOMAIN}/${e}`;return t?i:this.cloudfrontSigner.getSignedUrl({url:i,expires:Date.now()+1e3*this.config.PRESIGNED_URL_EXPIRATION_S})}removeSingleObject(e){return s(this,void 0,void 0,(function*(){yield this.s3Client.deleteObject({Bucket:this.config.S3_BUCKET_NAME,Key:e}).promise()}))}};c=n([(0,a.Injectable)(),r(0,(0,a.Inject)(a.Configuration)),o("design:paramtypes",[Object,a.AbstractLogger])],c),t.S3FileService=c},8659:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.SystemService=void 0;const s=i(2318),a=i(7756),l=i(5761),d=i(7014),c=i(2345),u=i(730),h=i(767),p=i(5530),f=i(4972);let v=class SystemService extends d.AbstractService{constructor(e,t){super(t),this.cacheService=e,this.databaseAdapter=t}getApiInfo(){return r(this,void 0,void 0,(function*(){const e=(0,s.getServiceProvider)().getInjector(),t=e.resolveOptional(h.AbstractHttpRequestHandler),i=e.resolveOptional(p.AbstractServerSocketManager);yield e.initInstances();return{permissions:[...t?yield t.getMountedEndpointInfo():[],...i?yield i.getMountedEndpointInfo():[]].map((t=>{var i;return{id:(0,f.getEndpointId)(t.endpoint),description:t.endpointMetadata.description,name:t.endpointMetadata.displayName||t.endpointMetadata.name,openAccess:!!t.endpointMetadata.openAccess,permissionGroup:t.endpointMetadata.permissionGroup||"",accessConditions:(null===(i=t.endpointMetadata.accessConditions)||void 0===i?void 0:i.map((t=>e.resolve(t).getConditionMetadata())))||[],readOnly:t.endpointMetadata.httpMethod===s.HttpMethod.GET,tfaRequired:!!t.endpointMetadata.tfaRequired,method:t.endpointMetadata.httpMethod,mount:t.endpoint.mount||"",paramDto:t.endpointMetadata.paramsValidationDto,queryDto:t.endpointMetadata.queriesValidationDto,bodyDto:t.endpointMetadata.bodyValidationDto,responseDto:t.endpointMetadata.responseValidationDto}}))}}))}getCacheValue(e,t){return r(this,void 0,void 0,(function*(){switch(e){case c.CacheOperation.GET:return this.cacheService.get(t[0]);case c.CacheOperation.HGET:return this.cacheService.hget(t[0],t[1]);case c.CacheOperation.KEYS:return this.cacheService.hkeys(t[0]);case c.CacheOperation.FLUSH:return this.cacheService.flush();default:throw s.ErrorBuilder.error(s.Errors.NOT_FOUND,"Not supported cache operation")}}))}getSystemSettings(e){return r(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=yield t.use(u.SystemSetting).getRecords(),n={};return i.forEach((e=>{n[e.key]=JSON.parse(e.value)})),(0,s.validateData)(n,(0,s.getObjectMetadata)(e))}))}updateSystemSetting(e){return r(this,void 0,void 0,(function*(){const t=yield this.getCurrentTransaction(),i=Object.keys(e).filter((t=>void 0!==e[t])).map((t=>({key:t,value:JSON.stringify(e[t])})));yield t.use(u.SystemSetting).deleteMany({_in:{key:i.map((e=>e.key))}}),yield t.use(u.SystemSetting).createMany(i)}))}};n([(0,a.Transactional)(a.PropagationMode.INHERIT_OR_CREATE),o("design:type",Function),o("design:paramtypes",[Object]),o("design:returntype",Promise)],v.prototype,"getSystemSettings",null),n([(0,a.Transactional)(a.PropagationMode.INHERIT_OR_CREATE),o("design:type",Function),o("design:paramtypes",[Object]),o("design:returntype",Promise)],v.prototype,"updateSystemSetting",null),v=n([(0,s.Injectable)(),o("design:paramtypes",[l.AbstractCacheService,a.AbstractDatabaseAdapter])],v),t.SystemService=v},6862:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractServerSocket=void 0;const o=i(2318);t.AbstractServerSocket=class AbstractServerSocket{constructor(e){this.socketInfo=e}getId(){return this.socketInfo.id}getAuthInfo(){return this.socketInfo.authInfo}send(e,t){return n(this,void 0,void 0,(function*(){t?this.socketInfo.channels.find((e=>e.name===t&&e.serverToClientAllowed))&&(yield this.sendRaw({type:o.MessageType.PLAIN,data:{message:e,channel:t}})):yield this.sendRaw({type:o.MessageType.PLAIN,data:{message:e}})}))}sendRaw(e){return n(this,void 0,void 0,(function*(){yield this.physicSend(e)}))}removeChannels(e){this.socketInfo.channels=this.socketInfo.channels.filter((t=>!e.includes(t.name)))}addChannels(e){this.socketInfo.channels.push(...e)}getChannelsInfo(){return this.socketInfo.channels}}},5530:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractServerSocketManager=void 0;const s=i(2318),a=r(i(1495)),l=i(9990),d=i(2665),c=i(2255),u=i(1532),h="x-socket-action",p="read",f="write";let v=class SocketReadCondition extends c.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return e.getHeaders()["x-socket-action"]===p}))}validate(e){return o(this,void 0,void 0,(function*(){return!!e}))}getConditionMetadata(){return{name:"disable_write",description:"Disable send message to channel",valueType:s.AccessConditionValueType.BOOLEAN}}};v=n([(0,s.Register)()],v);let y=class SocketWriteCondition extends c.AbstractAccessCondition{resolveConditionValue(e){return o(this,void 0,void 0,(function*(){return e.getHeaders()["x-socket-action"]===f}))}validate(e){return o(this,void 0,void 0,(function*(){return!!e}))}getConditionMetadata(){return{name:"disable_read",description:"Disable receive message from channel",valueType:s.AccessConditionValueType.BOOLEAN}}};y=n([(0,s.Register)()],y);t.AbstractServerSocketManager=class AbstractServerSocketManager{constructor(e,t,i,n,o){this.requireAuthentication=e,this.logger=t,this.redisServerUrl=i,this.authProvider=n,this.authResolver=o,this._connectionHandler=null,this.redisClient=new a.default(this.redisServerUrl)}getUniqueChannelPrefix(){return"CHANNEL:"}getSocketInfoHashKey(){return"__SOCKET_INFO__"}getConnectionHandler(){return o(this,void 0,void 0,(function*(){if(null===this._connectionHandler){const e=(0,s.getServiceProvider)().getInjector();this._connectionHandler=e.resolveOptional(l.AbstractSocketConnectionHandler),yield e.initInstances()}return this._connectionHandler}))}formatBroadcastData(e,t){return{type:s.MessageType.PLAIN,data:{channel:e,message:t}}}getUniqueChannelName(e){return`${this.getUniqueChannelPrefix()}${e}`}getSocketIdsOfChannel(e){return o(this,void 0,void 0,(function*(){return(yield this.redisClient.smembers(this.getUniqueChannelName(e)))||[]}))}addSocketToChannel(e,t){return o(this,void 0,void 0,(function*(){const i=yield this.getById(e);return i&&(i.addChannels(t),yield Promise.all(t.map((t=>this.redisClient.sadd(this.getUniqueChannelName(t.name),e)))),yield i.saveSocketInfo()),i}))}removeSocketFromChannel(e,t,i=!0){return o(this,void 0,void 0,(function*(){if(!t.length)return;const n=yield this.getById(e);n&&(n.removeChannels(t),yield Promise.all(t.map((t=>this.redisClient.srem(this.getUniqueChannelName(t),e)))),i&&(yield n.saveSocketInfo()))}))}removeSocket(e,t=!0){return o(this,void 0,void 0,(function*(){const t=yield this.getById(e);t&&(this.logger.debug("Remove from all channels"),yield this.removeSocketFromChannel(e,t.getChannelsInfo().map((e=>e.name)),!1)),this.logger.debug("Remove from redis"),yield this.redisClient.hdel(this.getSocketInfoHashKey(),e)}))}handle(e){var t;return o(this,void 0,void 0,(function*(){this.logger.debug("Handle socket data",e);const i=yield this.getConnectionHandler();switch(e.method){case s.SocketMethod.CONNECT:{this.logger.debug("Socket connection attempt",e);const i=this.authResolver(null===(t=e.data)||void 0===t?void 0:t.queries),n=yield this.authProvider.getPrincipalResolver().resolvePrincipal(i);if(!n&&this.requireAuthentication)throw s.ErrorBuilder.error(s.Errors.AUTHENTICATION_ERROR);yield this.addSocket({id:e.socketId,authInfo:n,channels:[],createdAt:Date.now()},e.data);break}case s.SocketMethod.DISCONNECT:{this.logger.debug("Socket disconnect",e);const t=yield this.getById(e.socketId);if(t){const e=yield this.getMountedEndpointInfo();this.logger.debug("Notify channels");for(const i of t.getChannelsInfo()){const n=e.find((e=>e.endpointMetadata.url===i.name));n&&n.endpoint.controller.onChannelLeave(t)}this.logger.debug("Calling disconnection handler"),null==i||i.onSocketDisconnect(t),this.logger.debug("Removing socket"),yield this.removeSocket(t.getId(),!1)}break}case s.SocketMethod.MESSAGE:{this.logger.debug("Socket message",e);const t=e.data;let n=yield this.getById(e.socketId);if(n)switch(t.type){case s.MessageType.READY:yield n.sendRaw({type:s.MessageType.READY,data:""}),yield null==i?void 0:i.onSocketConnect(n);break;case s.MessageType.PING_PONG:yield n.sendRaw({type:s.MessageType.PING_PONG,data:t.data});break;case s.MessageType.CHANNEL_JOIN:{const e=t.data,i=[],o=[];for(const t of e){let e=!1,r=!1;const a=(yield this.getMountedEndpointInfo()).find((e=>e.endpointMetadata.url===t));if(a){try{const e=new u.HttpRequest({method:s.SocketMethod.MESSAGE,pathName:t,headers:{[h]:p}},a.endpointMetadata);yield this.authProvider.authorize(n.getAuthInfo(),e,a),r=!0}catch(e){this.logger.debug("Error in read authorize",e)}try{const i=new u.HttpRequest({method:s.SocketMethod.MESSAGE,pathName:t,headers:{[h]:f}},a.endpointMetadata);yield this.authProvider.authorize(n.getAuthInfo(),i,a),e=!0}catch(e){this.logger.debug("Error in write authorize",e)}(e||r)&&(this.logger.debug("Adding channel info",t,e,r),i.push({name:t,clientToServerAllowed:e,serverToClientAllowed:r}),o.push(a))}}n=yield this.addSocketToChannel(n.getId(),i),n?yield Promise.all([n.sendRaw({type:s.MessageType.CHANNEL_JOIN,data:i.map((e=>e.name))}),...o.map((e=>e.endpoint.controller.onChannelJoin(n)))]):this.logger.debug("Socket not found after addSocketToChannel")}break;case s.MessageType.CHANNEL_LEAVE:{const e=t.data,i=yield this.getMountedEndpointInfo();Promise.all(e.map((e=>()=>{const t=i.find((t=>t.endpointMetadata.url===e));if(t)return t.endpoint.controller.onChannelLeave(n)}))),yield this.removeSocketFromChannel(n.getId(),e)}break;case s.MessageType.PLAIN:{const e=t.data.channel,o=t.data.message;if(e){if(n.getChannelsInfo().find((t=>t.name===e&&t.clientToServerAllowed))){const t=(yield this.getMountedEndpointInfo()).find((t=>t.endpointMetadata.url===e));if(t){!1!==(yield t.endpoint.controller.onMessage(n,o))&&(this.logger.debug("broadcasting to channel",e,o),this.broadcastToChannel(e,o))}}}else yield null==i?void 0:i.onMessage(n,o)}break;default:this.logger.debug("Invalid message format",t)}else this.logger.debug("Socket not found",e.socketId);break}default:return}}))}getMountedEndpointInfo(){return o(this,void 0,void 0,(function*(){if(!this.mountedEndpointInfo){const e=(0,s.getServiceProvider)().getInjector(),t=e.resolveMultiple(d.AbstractSocketController);yield e.initInstances(),this.mountedEndpointInfo=t.map((e=>({endpoint:{httpMethod:s.SocketMethod.MESSAGE,mount:e.channel,controller:e,handlerFunctionName:e.onMessage.name},endpointMetadata:{httpMethod:s.SocketMethod.MESSAGE,description:"Send / Receive message to / from channel",dataType:s.DataType.OBJECT,url:e.channel,name:e.channel,accessConditions:[v,y]}})))}return this.mountedEndpointInfo}))}}},9990:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSocketConnectionHandler=void 0;t.AbstractSocketConnectionHandler=class AbstractSocketConnectionHandler{}},2665:function(e,t){var i=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSocketController=void 0;t.AbstractSocketController=class AbstractSocketController{constructor(e){this.channel=e}onChannelJoin(e){return i(this,void 0,void 0,(function*(){}))}onChannelLeave(e){return i(this,void 0,void 0,(function*(){}))}onMessage(e,t){return i(this,void 0,void 0,(function*(){}))}}},7152:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AwsSocketManager=void 0;const a=i(2318),l=s(i(9336)),d=i(767),c=i(5530),u=i(6862),h=i(859);class ApiGatewaySocket extends u.AbstractServerSocket{constructor(e,t,i,n,o,r){super(i),this.socketManager=e,this.logger=t,this.socketInfo=i,this.apiGateway=n,this.socketNamespace=o,this.redisClient=r}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.redisClient.hset(this.socketNamespace,this.socketInfo.id,JSON.stringify(this.socketInfo))}))}physicSend(e){return r(this,void 0,void 0,(function*(){this.logger.debug("aws socket physic send",e),yield this.socketManager.physicSend(this.getId(),e)}))}disconnect(e){return r(this,void 0,void 0,(function*(){e&&(yield this.physicSend(e)),yield this.socketManager.removeSocket(this.getId())}))}serialize(){return JSON.stringify(this.socketInfo)}}let p=class AwsSocketManager extends c.AbstractServerSocketManager{constructor(e,t,i,n,o,r,s,a){super(e,a,n,r,s),this.authenticationRequired=e,this.region=t,this.socketDomainUrl=i,this.redisServerUrl=n,this.httpRequestHandler=o,this.authorizationProvider=r,this.authResolver=s,this.logger=a,this.apiGatewayManagement=new l.default.ApiGatewayManagementApi({region:t,apiVersion:"2018-11-29",endpoint:i})}init(){return r(this,void 0,void 0,(function*(){this.logger.info("AwsSocketManager init")}))}exit(){this.redisClient.disconnect(),this.logger.info("AwsSocketManager exit")}removeSocketFromRedis(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.hdel(this.getSocketInfoHashKey(),e)}))}physicSend(e,t){return r(this,void 0,void 0,(function*(){try{this.logger.debug(`Socket ${e} sending`,t),yield this.apiGatewayManagement.postToConnection({ConnectionId:e,Data:JSON.stringify(t)}).promise()}catch(t){throw this.logger.debug(`Socket ${e} post error`,t),410===t.statusCode&&(this.logger.debug(`Disconnect & remove stale socket ${e}`),yield this.removeSocket(e,!1),this.logger.debug(`Socket removed ${e}`)),t}}))}configure(e){this.logger.debug("Aws socket manager configure")}getSocketsByChannel(e){return r(this,void 0,void 0,(function*(){const t=yield this.getSocketIdsOfChannel(e);if(!t.length)return[];return(yield this.redisClient.hmget(this.getSocketInfoHashKey(),...t)).filter((e=>!!e)).map((e=>this.getSocketBySerialized(e)))}))}broadcastToChannel(e,t){return r(this,void 0,void 0,(function*(){const i=yield this.getSocketIdsOfChannel(e);if(i.length){const n=this.formatBroadcastData(e,t);i.map((e=>this.physicSend(e,n).catch((t=>this.logger.error(`Cannot send to socket ${e}`,t)))))}}))}addSocket(e,t){return r(this,void 0,void 0,(function*(){const t=new ApiGatewaySocket(this,this.logger,e,this.apiGatewayManagement,this.getSocketInfoHashKey(),this.redisClient);return yield t.saveSocketInfo(),t}))}removeSocket(e,t=!0){const i=Object.create(null,{removeSocket:{get:()=>super.removeSocket}});return r(this,void 0,void 0,(function*(){this.logger.debug(`Aws socket manager remove socket: ${e}, ${t}`),yield i.removeSocket.call(this,e,t),this.logger.debug("Super remove ok"),t&&this.apiGatewayManagement.deleteConnection({ConnectionId:e}).promise().catch((e=>this.logger.error("Cannot physic remove aws socket",e)))}))}getSocketBySerialized(e){return new ApiGatewaySocket(this,this.logger,JSON.parse(e),this.apiGatewayManagement,this.getSocketInfoHashKey(),this.redisClient)}getById(e){return r(this,void 0,void 0,(function*(){const t=yield this.redisClient.hget(this.getSocketInfoHashKey(),e);if(t)return this.logger.debug("Serialized aws socket",t),this.getSocketBySerialized(t);this.logger.error("Cannot find socket with id: "+e)}))}};p=n([(0,a.Initable)(),o("design:paramtypes",[Boolean,String,String,String,d.AbstractHttpRequestHandler,h.AbstractHttpAuthorizationProvider,Function,a.AbstractLogger])],p),t.AwsSocketManager=p},8577:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},2841:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.LocalSocketManager=void 0;const a=i(2318),l=s(i(5352)),d=s(i(9215)),c=s(i(9103)),u=i(5530),h=i(6862),p=i(859);var f;!function(e){e.SEND="SEND",e.CLOSE="CLOSE",e.SAVE="SAVE"}(f||(f={}));class RedisSocket extends h.AbstractServerSocket{constructor(e,t,i){super(i),this.socketChannelName=e,this.redisClient=t,this.socketInfo=i}physicSend(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.SEND,data:e}))}))}disconnect(e){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.CLOSE,data:e}))}))}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.redisClient.publish(this.socketChannelName,JSON.stringify({type:f.SAVE,data:this.socketInfo}))}))}}class ExpressSocket extends h.AbstractServerSocket{constructor(e,t,i,n,o){super(n),this.socketManager=e,this.logger=t,this.socket=i,this.socketInfo=n,this.infoSaver=o}saveSocketInfo(){return r(this,void 0,void 0,(function*(){yield this.infoSaver(this.socketInfo)}))}physicSend(e){return r(this,void 0,void 0,(function*(){this.socket.send(JSON.stringify(e))}))}disconnect(e){return r(this,void 0,void 0,(function*(){this.socket.close(1e3,e&&JSON.stringify(e)),yield this.socketManager.removeSocket(this.getId())}))}}let v=class LocalSocketManager extends u.AbstractServerSocketManager{constructor(e,t,i,n,o){super(e,i,t,n,o),this.authenticationRequired=e,this.redisServerUrl=t,this.logger=i,this.authProvider=n,this.authResolver=o,this.allSockets=[],this.subscribedChannels=[],this.subClient=this.redisClient.duplicate(),this.channelSubClient=this.redisClient.duplicate(),this.sendClient=this.redisClient.duplicate()}init(){return r(this,void 0,void 0,(function*(){this.logger.info("LocalSocketManager init"),this.channelSubClient.on("message",((e,t)=>{this.logger.debug("channelSubClient: ",t,e),this.channelMessageListenner(t,e)})),this.subClient.on("message",((e,t)=>{this.logger.debug("subClient: ",t,e),this.socketMessageListener(t,e)}))}))}exit(){this.sendClient.disconnect(),this.subClient.disconnect(),this.channelSubClient.disconnect(),this.redisClient.disconnect(),this.logger.info("LocalSocketManager exit")}channelMessageListenner(e,t){this.logger.debug("Receiving message from channel",t,e);const i=JSON.parse(e);i.type===a.MessageType.PLAIN&&this.allSockets.forEach((e=>{e.send(i.data.message,i.data.channel)}))}socketMessageListener(e,t){this.logger.debug("Receiving message from remote socket channel",t,e);const i=t.substring(this.getSocketChannelKeyPrefix().length),n=this.allSockets.find((e=>e.getId()===i));if(n){const t=JSON.parse(e);switch(t.type){case f.SEND:n.physicSend(t.data);break;case f.SAVE:n.socketInfo.channels=t.data,n.saveSocketInfo();break;case f.CLOSE:n.disconnect(t.data);break;default:this.logger.debug("Invalid remote command",t)}}}getUniqueDataChannelName(e){return`CHANNEL_DATA:${e}`}getSocketChannelKeyPrefix(){return"SOCKET_CHANNEL:"}getSocketChannelKey(e){return`${this.getSocketChannelKeyPrefix()}${e}`}broadcastToChannel(e,t){return r(this,void 0,void 0,(function*(){const i=this.formatBroadcastData(e,t);yield this.redisClient.publish(this.getUniqueDataChannelName(e),JSON.stringify(i))}))}addSocketToChannel(e,t){const i=Object.create(null,{addSocketToChannel:{get:()=>super.addSocketToChannel}});return r(this,void 0,void 0,(function*(){const n=yield i.addSocketToChannel.call(this,e,t),o=t.map((e=>e.name)).filter((e=>!this.subscribedChannels.includes(e)));return o.length&&(yield Promise.all(o.map((e=>this.channelSubClient.subscribe(this.getUniqueDataChannelName(e))))),this.subscribedChannels.push(...o)),n}))}removeSocketFromChannel(e,t,i=!0){const n=Object.create(null,{removeSocketFromChannel:{get:()=>super.removeSocketFromChannel}});return r(this,void 0,void 0,(function*(){yield n.removeSocketFromChannel.call(this,e,t,i),yield Promise.all(t.map((e=>this.channelSubClient.unsubscribe(this.getUniqueChannelName(e))))),this.subscribedChannels=this.subscribedChannels.filter((e=>!t.includes(e)))}))}addSocket(e,{socket:t}){return r(this,void 0,void 0,(function*(){const i=new ExpressSocket(this,this.logger,t,e,(e=>r(this,void 0,void 0,(function*(){yield this.redisClient.hset(this.getSocketInfoHashKey(),e.id,JSON.stringify(e))})))),n=this.getSocketChannelKey(e.id);return yield this.subClient.subscribe(n),this.allSockets.push(i),i}))}removeSocket(e,t=!0){const i=Object.create(null,{removeSocket:{get:()=>super.removeSocket}});return r(this,void 0,void 0,(function*(){yield i.removeSocket.call(this,e,t);const n=this.getSocketChannelKey(e);yield this.subClient.unsubscribe(n),this.allSockets=this.allSockets.filter((t=>t.getId()!==e))}))}getById(e){return r(this,void 0,void 0,(function*(){let t=this.allSockets.find((t=>t.getId()===e));if(!t){const i=yield new Promise((t=>this.redisClient.hget(this.getSocketInfoHashKey(),e).then((e=>t(e?JSON.parse(e):void 0))).catch((e=>{this.logger.error(e),t(void 0)}))));i&&(t=new RedisSocket(this.getSocketChannelKey(e),this.sendClient,i))}return t}))}getSocketsByChannel(e){return r(this,void 0,void 0,(function*(){const t=yield this.getSocketIdsOfChannel(e);return(yield Promise.all(t.map((e=>this.getById(e))))).filter((e=>!!e))}))}configure(e){if(!e)return;this.logger.debug("Local socket manager configure");new l.default.Server({server:e}).on("connection",((e,t)=>{const i=t.headers["sec-websocket-key"];let n=!1,o=[];const r=(0,d.default)({url:t.url}),s=c.default.parse(decodeURIComponent(r.search||""));this.handle({method:a.SocketMethod.CONNECT,socketId:i,data:{queries:s,socket:e}}).then((()=>{n=!0;for(const e of o)this.handle(e).catch((e=>{this.logger.error(e)}))})).catch((t=>{o=[],e.close(1e3,`${t.name}:${t.message}`)})),e.onmessage=e=>{const t={method:a.SocketMethod.MESSAGE,socketId:i,data:e.data&&JSON.parse(e.data)};n?this.handle(t).catch((e=>{this.logger.error(e)})):o.push(t)},e.onclose=()=>{this.handle({method:a.SocketMethod.DISCONNECT,socketId:i}).catch((e=>{this.logger.error(e)}))}}))}};v=n([(0,a.Initable)(),o("design:paramtypes",[Boolean,String,a.AbstractLogger,p.AbstractHttpAuthorizationProvider,Function])],v),t.LocalSocketManager=v},5537:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClaireServer=void 0;const o=i(2318),r=i(137),s=i(4972);class ClaireServer extends o.ClaireApp{constructor(e,t,i){super(),this.logger=e,this.httpRequestHandler=t,this.socketManager=i,this.booted=!1}init(){return n(this,void 0,void 0,(function*(){if(this.booted)return;const e=[];if(this.httpRequestHandler){const t=yield this.httpRequestHandler.getMountedEndpointInfo();e.push(...t)}if(this.socketManager){const t=yield this.socketManager.getMountedEndpointInfo();e.push(...t)}for(const t of e)this.logger.info(`Mounting: ${(0,s.getEndpointId)(t.endpoint)}`);(0,o.getGlobalStore)().mountedEndpointInfo=e,this.logger.debug("Claire server initing"),this.logger.debug("Setting up exception handlers"),process.on("SIGTERM",(()=>(this.logger.warn("SIGTERM interrupt signal"),this.stop(r.ExitCode.SIGTERM_INTERUPTION)))),process.on("SIGINT",(()=>(this.logger.warn("SIGINT interrupt signal"),this.stop(r.ExitCode.SIGTERM_INTERUPTION)))),process.on("uncaughtException",(e=>{this.logger.error("uncaughtException",e.name,e.stack)})),process.on("unhandledRejection",(e=>{this.logger.error("unhandledRejection",e.name,e.stack)})),this.booted=!0}))}exit(){super.exit()}stop(e){this.logger.debug("Server is shutting down"),this.exit(),process.exit(e)}}t.ClaireServer=ClaireServer},226:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ExpressWrapper=void 0;const r=i(2318),s=o(i(6860)),a=o(i(3685)),l=o(i(9710)),d=o(i(6674)),c=i(5530),u=i(767),h=o(i(3582));t.ExpressWrapper=class ExpressWrapper{constructor(e,t){this.injector=(0,r.getServiceProvider)().getInjector(),this.server=e,this.config=t,this.logger=this.injector.resolve(r.AbstractLogger),this.socketManager=this.injector.resolveOptional(c.AbstractServerSocketManager),this.httpRequestHandler=this.injector.resolveOptional(u.AbstractHttpRequestHandler)}close(){var e;null===(e=this.httpServer)||void 0===e||e.close(),this.server.exit()}listen(e){var t,i,o,c;return n(this,void 0,void 0,(function*(){yield this.server.init(),yield this.injector.initInstances();const u=(0,s.default)(),p=a.default.createServer(u);null===(t=this.socketManager)||void 0===t||t.configure(p),(null===(i=this.httpRequestHandler)||void 0===i?void 0:i.corsConfig)&&u.use((0,h.default)({allowedHeaders:this.httpRequestHandler.corsConfig.headers,credentials:this.httpRequestHandler.corsConfig.credentials,origin:this.httpRequestHandler.corsConfig.origins,methods:this.httpRequestHandler.corsConfig.methods}));const f=1024*((null===(c=null===(o=this.config)||void 0===o?void 0:o.requestSetting)||void 0===c?void 0:c.maxBodySizeKB)||10240);return u.use((0,l.default)()),u.use(s.default.json({limit:f})),u.use(s.default.urlencoded({extended:!1,limit:f})),u.use((0,d.default)()),u.use(((e,t,i)=>{e.files&&(e.body||(e.body={}),Object.keys(e.files).forEach((t=>{e.body[t]=e.files[t]}))),i()})),u.use(s.default.raw({limit:f,type:e=>!["application/json","application/x-www-form-urlencoded"].find((t=>{var i;return null===(i=e.headers["content-type"])||void 0===i?void 0:i.includes(t)}))})),u.all("*",((e,t)=>{(()=>n(this,void 0,void 0,(function*(){if(!!e.headers["x-amzn-apigateway-api-id"]){if(!this.socketManager)throw r.ErrorBuilder.systemError("Socket manager not found");const i={socketId:e.body.connectionId,data:e.body.data,method:e.body.type.toLowerCase()};if(i.method===r.SocketMethod.CONNECT){const t=e.body.data.querystring,n=t.substring(1,t.length-1).split(",").map((e=>e.trim().split("="))).reduce(((e,t)=>Object.assign(e,{[t[0]]:t[1]})),{});i.data={queries:n}}yield this.socketManager.handle(i).then((()=>{t.status(200).send()})).catch((e=>{this.logger.debug("Handle error",e),t.status(400).json({name:e.name,message:e.message})}))}else{if(!this.httpRequestHandler)throw r.ErrorBuilder.systemError("Http request handler not found");const i={fullPath:e.url,method:e.method.toLowerCase(),headers:e.headers,body:e.body,cookies:e.cookies},n=yield this.httpRequestHandler.handle(i);n.headers&&Object.keys(n.headers).forEach((e=>{t.set(e,n.headers[e])})),n.cookies&&Object.keys(n.cookies).forEach((e=>{t.cookie(e,n.cookies[e].value,n.cookies[e].options||{})})),t.status(n.code||200).send(n.value)}})))().catch((e=>{this.logger.error(e),t.status(400).json({name:e.name,message:e.message})}))})),new Promise(((t,i)=>{this.httpServer=p.listen(e,t).on("error",i)}))}))}}},8836:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))((function(o,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.LambdaWrapper=void 0;const o=i(2318),r=i(767),s=i(3376),a=i(2363),l=i(5530),d=i(6721),toApiGatewayFormat=e=>({statusCode:e.code||200,body:e.value&&JSON.stringify(e.value),headers:e.headers,cookies:Object.keys(e.cookies||{}).map((t=>{var i,n,o,r,s,a,l,d,c,u,h;const p=e.cookies[t];let f=`${t}=${p.value}`;return(null===(i=p.options)||void 0===i?void 0:i.maxAge)&&(f+=`; MaxAge=${p.options.maxAge}`),(null===(n=p.options)||void 0===n?void 0:n.expires)&&(f+=`; Expires=${p.options.expires.toUTCString()}`),(null===(o=p.options)||void 0===o?void 0:o.httpOnly)&&(f+="; HttpOnly"),(null===(r=p.options)||void 0===r?void 0:r.path)&&(f+=`; Path=${null===(s=p.options)||void 0===s?void 0:s.path}`),(null===(a=p.options)||void 0===a?void 0:a.domain)&&(f+=`; Domain=${null===(l=p.options)||void 0===l?void 0:l.domain}`),(null===(d=p.options)||void 0===d?void 0:d.secure)&&(f+="; Secure"),(null===(c=p.options)||void 0===c?void 0:c.sameSite)&&("boolean"==typeof(null===(u=p.options)||void 0===u?void 0:u.sameSite)?f+="; SameSite":f+=`; SameSite=${null===(h=p.options)||void 0===h?void 0:h.sameSite}`),f}))});t.LambdaWrapper=class LambdaWrapper{constructor(e,t,i){this.serverFactory=e,this.requestMapper=t,this.config=i,this.requestMapper=t,this.handler=this.handler.bind(this),this.injector=(0,o.getServiceProvider)().getInjector(),this.logger=this.injector.resolve(o.AbstractLogger),this.socketManager=this.injector.resolveOptional(l.AbstractServerSocketManager),this.httpRequestHandler=this.injector.resolveOptional(r.AbstractHttpRequestHandler),this.jobScheduler=this.injector.resolveOptional(s.AwsJobScheduler)}bootServer(){var e;return n(this,void 0,void 0,(function*(){return this._server||(this._server=yield this.serverFactory(),yield this.injector.initInstances(),null===(e=this.socketManager)||void 0===e||e.configure(),yield this._server.init()),this._server}))}handler(e){var t,i,r,s;return n(this,void 0,void 0,(function*(){yield this.bootServer();const n=this.requestMapper(e);if(!n)return toApiGatewayFormat({code:400,value:"Cannot resolve event",headers:{},cookies:{}});const l=((e,t)=>{const i={};return(null==t?void 0:t.credentials)&&(i["Access-Control-Allow-Credentials"]="true"),(null==t?void 0:t.headers)&&(i["Access-Control-Allow-Headers"]="string"==typeof t.headers?t.headers:t.headers.join(", ")),(null==t?void 0:t.methods)&&(i["Access-Control-Allow-Methods"]="string"==typeof t.methods?t.methods:t.methods.join(", ")),(null==t?void 0:t.origins)&&(i["Access-Control-Allow-Origin"]="string"==typeof t.origins?t.origins:t.origins.find((t=>e.match(t)))?e:""),i})((null===(t=n.headers)||void 0===t?void 0:t.origin)||"",null===(i=this.httpRequestHandler)||void 0===i?void 0:i.corsConfig);if(n.method===o.HttpMethod.OPTIONS)return toApiGatewayFormat({code:200,headers:l,cookies:{}});if(n.method===a.INTERVAL_REQUEST_METHOD)return yield null===(r=this.jobScheduler)||void 0===r?void 0:r.handleInterval(n.body),toApiGatewayFormat({code:200,headers:l,cookies:{}});if(n.method===a.CRON_REQUEST_METHOD)return yield null===(s=this.jobScheduler)||void 0===s?void 0:s.handleCron(n.body),toApiGatewayFormat({code:200,headers:l,cookies:{}});try{if(Object.values(o.HttpMethod).includes(n.method)){if(!this.httpRequestHandler)throw o.ErrorBuilder.error(d.Errors.SYSTEM_ERROR,"Http request handler not found");const e={fullPath:n.rawPath,method:n.method,headers:n.headers,cookies:n.cookies,body:n.body},t=yield this.httpRequestHandler.handle(e);return toApiGatewayFormat(Object.assign(Object.assign({},t),{headers:Object.assign(Object.assign({},l),t.headers)}))}if(!Object.values(o.SocketMethod).includes(n.method))throw o.ErrorBuilder.error(d.Errors.HTTP_REQUEST_ERROR,"Not allow request method: "+n.method);{if(!this.socketManager)throw o.ErrorBuilder.error(d.Errors.SYSTEM_ERROR,"Socket manager not found");const e={socketId:n.rawPath,method:n.method,data:n.body};yield this.socketManager.handle(e)}return toApiGatewayFormat({code:200,headers:l,cookies:{}})}catch(e){return toApiGatewayFormat({code:400,value:{name:e.name,message:e.message},headers:l,cookies:{}})}}))}}},9627:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},6721:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Errors=void 0;const n=i(2318);t.Errors=Object.assign(Object.assign({},n.Errors),{TFA_REQUIRED:"TFA_REQUIRED"})},889:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.lambdaRequestMapper=void 0;const n=i(2318),o=i(2363),parseCookie=e=>{let t={};for(const i of e){const e=i.split("=");e[0]&&e[1]&&(t[e[0]]=e[1])}return t};t.lambdaRequestMapper=e=>{if(e.requestContext.eventType){const t=e.requestContext.eventType.toLowerCase(),i=e.body&&JSON.parse(e.body);return{method:t,rawPath:e.requestContext.connectionId,body:t===n.SocketMethod.CONNECT?{queries:e.queryStringParameters}:i}}return e.requestContext.intervalScheduler?{method:o.INTERVAL_REQUEST_METHOD,rawPath:"",body:e.requestContext.intervalScheduler.time}:e.requestContext.cronScheduler?{method:o.CRON_REQUEST_METHOD,rawPath:"",body:e.requestContext.cronScheduler.data}:{method:e.requestContext.http.method.toLowerCase(),rawPath:`${e.rawPath}?${e.rawQueryString}`,body:e.body&&JSON.parse(e.body),headers:e.headers,cookies:parseCookie(e.cookies||[])}}},5481:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s};Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleEntry=void 0;const o=i(2318);let r=class LocaleEntry extends o.AbstractModel{};r=n([(0,o.Model)()],r),t.LocaleEntry=r},2552:function(e,t,i){var n=this&&this.__decorate||function(e,t,i,n){var o,r=arguments.length,s=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,n);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(s=(r<3?o(s):r>3?o(t,i,s):o(t,i))||s);return r>3&&s&&Object.defineProperty(t,i,s),s},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleTranslation=void 0;const r=i(2318),s=i(5481),a="translation_unique";let l=class LocaleTranslation extends r.AbstractModel{};n([(0,r.Column)(Object.assign(Object.assign({description:"Id of the locale",isRequired:!0},(0,r.FK)({model:s.LocaleEntry,cascade:"delete"})),{unique:{groupName:a}})),o("design:type",Number)],l.prototype,"entryId",void 0),n([(0,r.Column)({description:"Code of locale",isRequired:!0,unique:{groupName:a},textLength:3}),o("design:type",String)],l.prototype,"localeCode",void 0),n([(0,r.Column)({description:"Translation of locale",isRequired:!0}),o("design:type",String)],l.prototype,"translation",void 0),l=n([(0,r.Model)()],l),t.LocaleTranslation=l},10:(e,t,i)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleOf=void 0;const n=i(2318),o=i(5481);t.LocaleOf=e=>(t,i)=>{const r=(0,n.initFieldMetadata)(t,i);r.multiLocaleColumn=e,r.fk=(0,n.FK)({model:o.LocaleEntry,cascade:"nullify"}).fk,r.dataType=n.DataType.NUMBER;(0,n.initFieldMetadata)(t,e).isMultiLocale=!0}},1801:e=>{e.exports=require("@clairejs/client")},2318:e=>{e.exports=require("@clairejs/core")},7756:e=>{e.exports=require("@clairejs/orm")},9336:e=>{e.exports=require("aws-sdk")},2167:e=>{e.exports=require("axios")},9710:e=>{e.exports=require("cookie-parser")},3582:e=>{e.exports=require("cors")},6860:e=>{e.exports=require("express")},6674:e=>{e.exports=require("express-fileupload")},1495:e=>{e.exports=require("ioredis")},7344:e=>{e.exports=require("node-schedule")},9215:e=>{e.exports=require("parseurl")},99:e=>{e.exports=require("path-to-regexp")},9103:e=>{e.exports=require("query-string")},7325:e=>{e.exports=require("randomstring")},9896:e=>{e.exports=require("redlock")},7202:e=>{e.exports=require("twilio")},5352:e=>{e.exports=require("ws")},7147:e=>{e.exports=require("fs")},3685:e=>{e.exports=require("http")},1017:e=>{e.exports=require("path")},9512:e=>{e.exports=require("timers")}},t={};var i=function __webpack_require__(i){var n=t[i];if(void 0!==n)return n.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,__webpack_require__),o.exports}(341);return i})()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clairejs/server",
3
- "version": "3.12.4",
3
+ "version": "3.12.5",
4
4
  "description": "Claire server NodeJs framework written in Typescript.",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",