@flusys/nestjs-shared 8.1.5 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +48 -2
  2. package/classes/api-service.class.d.ts +3 -0
  3. package/constants/permissions.d.ts +46 -0
  4. package/exceptions/base-app.exception.d.ts +3 -2
  5. package/fesm/{509.js → 183.js} +43 -37
  6. package/fesm/470.js +228 -105
  7. package/fesm/667.js +28 -10
  8. package/fesm/{67.js → 681.js} +97 -19
  9. package/fesm/{720.js → 948.js} +60 -7
  10. package/fesm/chunks/123.js +9 -10
  11. package/fesm/chunks/37.js +7 -8
  12. package/fesm/classes/index.js +10 -4
  13. package/fesm/constants/index.js +53 -1
  14. package/fesm/decorators/index.js +4 -4
  15. package/fesm/dtos/index.js +2 -2
  16. package/fesm/guards/index.js +48 -426
  17. package/fesm/index.js +436 -341
  18. package/fesm/interceptors/index.js +62 -23
  19. package/fesm/interfaces/index.js +28 -3
  20. package/fesm/middlewares/index.js +5 -3
  21. package/fesm/modules/index.js +6 -414
  22. package/fesm/pipes/index.js +196 -0
  23. package/fesm/utils/index.js +125 -10
  24. package/index.d.ts +1 -0
  25. package/interfaces/company-access-resolver.interface.d.ts +18 -0
  26. package/interfaces/datasource.interface.d.ts +2 -0
  27. package/interfaces/email-adapter.interface.d.ts +27 -0
  28. package/interfaces/index.d.ts +5 -0
  29. package/interfaces/message-ref.interface.d.ts +4 -0
  30. package/interfaces/permission-action-registry.interface.d.ts +12 -0
  31. package/interfaces/permission-resolver.interface.d.ts +9 -0
  32. package/middlewares/logger.middleware.d.ts +4 -0
  33. package/modules/shared-permission-cache/shared-permission-cache.service.d.ts +5 -0
  34. package/package.json +8 -2
  35. package/pipes/dto-body-validation.pipe.d.ts +18 -0
  36. package/pipes/index.d.ts +1 -0
  37. package/utils/cache-tenant.util.d.ts +2 -0
  38. package/utils/index.d.ts +3 -0
  39. package/utils/message-ref.util.d.ts +2 -0
  40. package/utils/permission-match.util.d.ts +1 -0
  41. package/utils/query-helpers.util.d.ts +2 -1
package/fesm/667.js CHANGED
@@ -64,8 +64,8 @@ CacheModule = _ts_decorate([
64
64
 
65
65
  // EXTERNAL MODULE: external "@flusys/nestjs-core"
66
66
  var nestjs_core_ = __webpack_require__(436);
67
- // EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/message-keys.ts
68
- var message_keys = __webpack_require__(389);
67
+ // EXTERNAL MODULE: ./projects/nestjs-shared/src/middlewares/logger.middleware.ts + 2 modules
68
+ var logger_middleware = __webpack_require__(591);
69
69
  // EXTERNAL MODULE: external "@nestjs/core"
70
70
  var core_ = __webpack_require__(75);
71
71
  // EXTERNAL MODULE: external "typeorm"
@@ -102,6 +102,7 @@ function _ts_param(paramIndex, decorator) {
102
102
 
103
103
 
104
104
 
105
+
105
106
  class MultiTenantDataSourceService {
106
107
  options;
107
108
  request;
@@ -138,14 +139,17 @@ class MultiTenantDataSourceService {
138
139
  isMultiTenant() {
139
140
  return this.getDatabaseMode() === 'multi-tenant';
140
141
  }
141
- getCurrentTenantId() {
142
- if (!this.request) return null;
143
- const tenantId = this.request.headers[this.tenantHeader];
142
+ /**
143
+ * The request's tenant header, else the tenant of the current request context - which is how
144
+ * work outside an HTTP request (event handlers, providers resolved through ModuleRef) finds
145
+ * its tenant: LoggerMiddleware and the event bus both run their work inside that context.
146
+ */ getCurrentTenantId() {
147
+ const tenantId = this.request?.headers[this.tenantHeader] ?? (0,logger_middleware/* .getTenantId */.EO)();
144
148
  if (!tenantId) return null;
145
149
  if (!/^[a-zA-Z0-9_-]+$/.test(tenantId)) {
146
150
  throw new common_.BadRequestException({
147
151
  message: 'Invalid tenant ID format',
148
- messageKey: message_keys/* .SYSTEM_MESSAGES.INVALID_TENANT_ID */.hg.INVALID_TENANT_ID
152
+ messageKey: constants/* .SYSTEM_MESSAGES.INVALID_TENANT_ID */.hg.INVALID_TENANT_ID
149
153
  });
150
154
  }
151
155
  return tenantId;
@@ -187,7 +191,7 @@ class MultiTenantDataSourceService {
187
191
  if (!config) {
188
192
  throw new common_.InternalServerErrorException({
189
193
  message: 'No database config available. Provide defaultDatabaseConfig or tenantDefaultDatabaseConfig.',
190
- messageKey: message_keys/* .SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE */.hg.DATABASE_CONFIG_NOT_AVAILABLE
194
+ messageKey: constants/* .SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE */.hg.DATABASE_CONFIG_NOT_AVAILABLE
191
195
  });
192
196
  }
193
197
  const connectionPromise = this.createDataSourceFromConfig(config);
@@ -205,7 +209,7 @@ class MultiTenantDataSourceService {
205
209
  if (!tenant) {
206
210
  throw new common_.BadRequestException({
207
211
  message: `Tenant not found. Ensure '${this.tenantHeader}' header is set.`,
208
- messageKey: message_keys/* .SYSTEM_MESSAGES.TENANT_HEADER_REQUIRED */.hg.TENANT_HEADER_REQUIRED,
212
+ messageKey: constants/* .SYSTEM_MESSAGES.TENANT_HEADER_REQUIRED */.hg.TENANT_HEADER_REQUIRED,
209
213
  messageVariables: {
210
214
  header: this.tenantHeader
211
215
  }
@@ -237,7 +241,7 @@ class MultiTenantDataSourceService {
237
241
  if (!defaultConfig) {
238
242
  throw new common_.InternalServerErrorException({
239
243
  message: 'No default database config for multi-tenant mode.',
240
- messageKey: message_keys/* .SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE */.hg.DATABASE_CONFIG_NOT_AVAILABLE
244
+ messageKey: constants/* .SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE */.hg.DATABASE_CONFIG_NOT_AVAILABLE
241
245
  });
242
246
  }
243
247
  return {
@@ -283,6 +287,8 @@ MultiTenantDataSourceService = multi_tenant_datasource_service_ts_decorate([
283
287
  ;// CONCATENATED MODULE: ./projects/nestjs-shared/src/modules/datasource/index.ts
284
288
 
285
289
 
290
+ // EXTERNAL MODULE: external "crypto"
291
+ var external_crypto_ = __webpack_require__(823);
286
292
  ;// CONCATENATED MODULE: ./projects/nestjs-shared/src/modules/event-bus/event-bus.explorer.ts
287
293
  function event_bus_explorer_ts_decorate(decorators, target, key, desc) {
288
294
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -310,6 +316,8 @@ function event_bus_explorer_ts_param(paramIndex, decorator) {
310
316
 
311
317
 
312
318
 
319
+
320
+
313
321
  class EventBusExplorer {
314
322
  eventBus;
315
323
  discovery;
@@ -358,7 +366,7 @@ class EventBusExplorer {
358
366
  if (!patterns.length) continue;
359
367
  const handler = method;
360
368
  for (const pattern of patterns){
361
- await bus.subscribe(pattern, (event)=>handler.call(instance, event));
369
+ await bus.subscribe(pattern, (event)=>runInEventContext(event, ()=>handler.call(instance, event)));
362
370
  bound++;
363
371
  }
364
372
  }
@@ -393,6 +401,16 @@ EventBusExplorer = event_bus_explorer_ts_decorate([
393
401
  typeof core_.MetadataScanner === "undefined" ? Object : core_.MetadataScanner
394
402
  ])
395
403
  ], EventBusExplorer);
404
+ function runInEventContext(event, handle) {
405
+ const actor = event.actor ?? {};
406
+ return logger_middleware/* .requestContext.run */.V8.run({
407
+ requestId: actor.requestId ?? (0,external_crypto_.randomUUID)(),
408
+ tenantId: actor.tenantId ?? undefined,
409
+ userId: actor.userId ?? undefined,
410
+ companyId: actor.companyId ?? undefined,
411
+ startTime: Date.now()
412
+ }, handle);
413
+ }
396
414
 
397
415
  // EXTERNAL MODULE: external "@flusys/nestjs-core/config"
398
416
  var config_ = __webpack_require__(307);
@@ -1,12 +1,13 @@
1
1
  import * as __rspack_external__flusys_nestjs_core_ff4ca4e2 from "@flusys/nestjs-core";
2
2
  import * as __rspack_external__nestjs_core_d7b00a1a from "@nestjs/core";
3
+ import * as __rspack_external_crypto from "crypto";
3
4
  import * as __rspack_external_typeorm from "typeorm";
4
5
  import * as __rspack_external__keyv_redis_139d03ca from "@keyv/redis";
5
6
  import * as __rspack_external_cacheable from "cacheable";
6
7
  import * as __rspack_external_keyv from "keyv";
7
8
  import * as __rspack_external_events from "events";
8
- export const __rspack_esm_id = 67;
9
- export const __rspack_esm_ids = [67];
9
+ export const __rspack_esm_id = 681;
10
+ export const __rspack_esm_ids = [681];
10
11
  export const __webpack_modules__ = {
11
12
  864(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
12
13
  /**
@@ -482,12 +483,61 @@ __webpack_require__.d(__webpack_exports__, {
482
483
  });
483
484
 
484
485
 
486
+ },
487
+ 374(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
488
+ /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
489
+ /* import */ var _constants_message_keys_js__rspack_import_1 = __webpack_require__(389);
490
+
491
+
492
+ class PermissionSystemUnavailableException extends _nestjs_common__rspack_import_0.InternalServerErrorException {
493
+ constructor(){
494
+ super({
495
+ success: false,
496
+ message: 'Permission system temporarily unavailable',
497
+ messageKey: _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.PERMISSION_SYSTEM_UNAVAILABLE */.UU.PERMISSION_SYSTEM_UNAVAILABLE
498
+ });
499
+ }
500
+ }
501
+ class InsufficientPermissionsException extends _nestjs_common__rspack_import_0.ForbiddenException {
502
+ constructor(missingPermissions, operator = 'AND'){
503
+ const messageKey = operator === 'OR' ? _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.INSUFFICIENT_PERMISSIONS_OR */.UU.INSUFFICIENT_PERMISSIONS_OR : _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.INSUFFICIENT_PERMISSIONS */.UU.INSUFFICIENT_PERMISSIONS;
504
+ super({
505
+ success: false,
506
+ message: 'Insufficient permissions',
507
+ messageKey,
508
+ messageVariables: {
509
+ permissions: missingPermissions.join(', ')
510
+ },
511
+ missingPermissions,
512
+ operator
513
+ });
514
+ }
515
+ }
516
+ class NoPermissionsFoundException extends _nestjs_common__rspack_import_0.ForbiddenException {
517
+ constructor(){
518
+ super({
519
+ success: false,
520
+ message: 'No permissions found',
521
+ messageKey: _constants_message_keys_js__rspack_import_1/* .ERROR_MESSAGES.NO_PERMISSIONS_FOUND */.UU.NO_PERMISSIONS_FOUND
522
+ });
523
+ }
524
+ }
525
+
526
+ __webpack_require__.d(__webpack_exports__, {
527
+ GS: () => (PermissionSystemUnavailableException),
528
+ d$: () => (NoPermissionsFoundException),
529
+ z8: () => (InsufficientPermissionsException)
530
+ });
531
+
532
+
485
533
  },
486
534
  657(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
487
535
  /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
488
536
  /* import */ var _classes_hybrid_cache_class_js__rspack_import_1 = __webpack_require__(375);
489
- /* import */ var _constants_index_js__rspack_import_3 = __webpack_require__(43);
490
- /* import */ var _utils_permission_cache_key_util_js__rspack_import_2 = __webpack_require__(199);
537
+ /* import */ var _constants_index_js__rspack_import_2 = __webpack_require__(43);
538
+ /* import */ var _exceptions_permission_exception_js__rspack_import_3 = __webpack_require__(374);
539
+ /* import */ var _utils_permission_cache_key_util_js__rspack_import_4 = __webpack_require__(199);
540
+ /* import */ var _utils_permission_match_util_js__rspack_import_5 = __webpack_require__(788);
491
541
  function _ts_decorate(decorators, target, key, desc) {
492
542
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
493
543
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
@@ -515,6 +565,8 @@ function _ts_param(paramIndex, decorator) {
515
565
 
516
566
 
517
567
 
568
+
569
+
518
570
  class SharedPermissionCacheService {
519
571
  cache;
520
572
  config;
@@ -522,52 +574,56 @@ class SharedPermissionCacheService {
522
574
  this.cache = cache;
523
575
  this.config = {
524
576
  enableCompanyFeature: false,
525
- userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
526
- companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
577
+ userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
578
+ companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
527
579
  ...config
528
580
  };
529
581
  }
530
582
  /** Read the cached permission codes for a user; empty array when cache is unavailable or unset */ async getPermissions(options) {
531
583
  if (!this.cache) return [];
532
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
584
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
533
585
  const cached = await this.cache.get(cacheKey);
534
586
  if (!cached) return [];
535
587
  return Array.isArray(cached) ? cached : cached.backendCodes || [];
536
588
  }
537
589
  /** Overwrite the cached permission codes for a user with a fixed list */ async setPermissions(options, permissions, ttl) {
538
590
  if (!this.cache) return;
539
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
591
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
540
592
  await this.cache.set(cacheKey, permissions, ttl);
541
593
  }
542
594
  /** Clear the cached permission codes for a user */ async clearPermissions(options) {
543
595
  if (!this.cache) return;
544
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
596
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
545
597
  await this.cache.del(cacheKey);
546
598
  }
547
599
  /** Check a single permission against the cached list, honoring `*` and `prefix.*` wildcards */ async hasPermission(options, requiredPermission) {
548
600
  const permissions = await this.getPermissions(options);
549
601
  return this.matchPermission(permissions, requiredPermission);
550
602
  }
603
+ /** Throws 403 unless `user` holds `requiredPermission`; fails closed (500) when no cache is wired up. */ async assertPermission(user, requiredPermission) {
604
+ if (!this.isCacheConfigured()) throw new _exceptions_permission_exception_js__rspack_import_3/* .PermissionSystemUnavailableException */.GS();
605
+ const allowed = !!user?.id && await this.hasPermission({
606
+ userId: user.id,
607
+ companyId: user.companyId,
608
+ branchId: user.branchId
609
+ }, requiredPermission);
610
+ if (!allowed) throw new _exceptions_permission_exception_js__rspack_import_3/* .InsufficientPermissionsException */.z8([
611
+ requiredPermission
612
+ ], 'AND');
613
+ }
551
614
  /** Whether a cache instance is wired up; false means permission checks can't be served at all */ isCacheConfigured() {
552
615
  return !!this.cache;
553
616
  }
554
617
  /** Match an already-fetched permission list against a required permission, honoring `*` and `prefix.*` wildcards */ matchPermission(userPermissions, requiredPermission) {
555
- if (userPermissions.includes(requiredPermission)) return true;
556
- for (const permission of userPermissions){
557
- if (permission === '*') return true;
558
- if (permission.endsWith('.*') && requiredPermission.startsWith(permission.slice(0, -1))) {
559
- return true;
560
- }
561
- }
562
- return false;
618
+ return (0,_utils_permission_match_util_js__rspack_import_5/* .matchesPermission */.x)(userPermissions, requiredPermission);
563
619
  }
564
620
  }
565
621
  SharedPermissionCacheService = _ts_decorate([
566
622
  (0,_nestjs_common__rspack_import_0.Injectable)(),
567
623
  _ts_param(0, (0,_nestjs_common__rspack_import_0.Optional)()),
568
- _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .CACHE_INSTANCE */.zl)),
624
+ _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .CACHE_INSTANCE */.zl)),
569
625
  _ts_param(1, (0,_nestjs_common__rspack_import_0.Optional)()),
570
- _ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .PERMISSION_GUARD_CONFIG */.Lw)),
626
+ _ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .PERMISSION_GUARD_CONFIG */.Lw)),
571
627
  _ts_metadata("design:type", Function),
572
628
  _ts_metadata("design:paramtypes", [
573
629
  typeof _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l === "undefined" ? Object : _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l,
@@ -785,6 +841,22 @@ __webpack_require__.d(__webpack_exports__, {
785
841
  });
786
842
 
787
843
 
844
+ },
845
+ 788(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
846
+ /** Whether `granted` covers `required`, honoring `*` (everything) and `prefix.*` (everything under prefix) wildcards */ function matchesPermission(granted, required) {
847
+ if (granted.includes(required)) return true;
848
+ for (const permission of granted){
849
+ if (permission === '*') return true;
850
+ if (permission.endsWith('.*') && required.startsWith(permission.slice(0, -1))) return true;
851
+ }
852
+ return false;
853
+ }
854
+
855
+ __webpack_require__.d(__webpack_exports__, {
856
+ x: () => (matchesPermission)
857
+ });
858
+
859
+
788
860
  },
789
861
  436(module) {
790
862
 
@@ -797,6 +869,12 @@ module.exports = __rspack_external__flusys_nestjs_core_ff4ca4e2;
797
869
  module.exports = __rspack_external__nestjs_core_d7b00a1a;
798
870
 
799
871
 
872
+ },
873
+ 823(module) {
874
+
875
+ module.exports = __rspack_external_crypto;
876
+
877
+
800
878
  },
801
879
  158(module) {
802
880
 
@@ -6,9 +6,9 @@ import * as __rspack_external_fs from "fs";
6
6
  import * as __rspack_external_path from "path";
7
7
  import * as __rspack_external_winston from "winston";
8
8
  import * as __rspack_external_async_hooks from "async_hooks";
9
- import * as __rspack_external_uuid from "uuid";
10
- export const __rspack_esm_id = 720;
11
- export const __rspack_esm_ids = [720];
9
+ import * as __rspack_external_node_crypto_2e7c4b46 from "node:crypto";
10
+ export const __rspack_esm_id = 948;
11
+ export const __rspack_esm_ids = [948];
12
12
  export const __webpack_modules__ = {
13
13
  245(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
14
14
 
@@ -281,7 +281,10 @@ const DEFAULT_EVENT_SERVICE_NAME = 'flusys';
281
281
  __webpack_require__.d(__webpack_exports__, {
282
282
  BC: () => (/* reexport safe */ _permissions_js__rspack_import_0.BC),
283
283
  Bz: () => (/* reexport safe */ _permissions_js__rspack_import_0.Bz),
284
+ DP: () => (/* reexport safe */ _permissions_js__rspack_import_0.DP),
284
285
  Em: () => (/* reexport safe */ _permissions_js__rspack_import_0.Em),
286
+ G0: () => (/* reexport safe */ _permissions_js__rspack_import_0.G0),
287
+ GH: () => (/* reexport safe */ _permissions_js__rspack_import_0.GH),
285
288
  GT: () => (/* reexport safe */ _permissions_js__rspack_import_0.GT),
286
289
  Jj: () => (/* reexport safe */ _permissions_js__rspack_import_0.Jj),
287
290
  N3: () => (/* reexport safe */ _permissions_js__rspack_import_0.N3),
@@ -300,8 +303,11 @@ __webpack_require__.d(__webpack_exports__, {
300
303
  Y7: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y7),
301
304
  _X: () => (/* reexport safe */ _permissions_js__rspack_import_0._X),
302
305
  aO: () => (/* reexport safe */ _permissions_js__rspack_import_0.aO),
306
+ aT: () => (/* reexport safe */ _permissions_js__rspack_import_0.aT),
303
307
  fS: () => (/* reexport safe */ _permissions_js__rspack_import_0.fS),
304
308
  hg: () => (/* reexport safe */ _message_keys_js__rspack_import_1.hg),
309
+ kA: () => (/* reexport safe */ _permissions_js__rspack_import_0.kA),
310
+ kd: () => (/* reexport safe */ _permissions_js__rspack_import_0.kd),
305
311
  l3: () => (/* reexport safe */ _permissions_js__rspack_import_0.l3),
306
312
  mK: () => (/* reexport safe */ _message_keys_js__rspack_import_1.mK),
307
313
  mV: () => (/* reexport safe */ _permissions_js__rspack_import_0.mV),
@@ -496,6 +502,35 @@ const FORM_RESULT_PERMISSIONS = {
496
502
  UPDATE: 'form-result.update',
497
503
  DELETE: 'form-result.delete'
498
504
  };
505
+ // ==================== ENTITY BUILDER MODULE ====================
506
+ // Static metadata permissions only. Per-dynamic-entity record permissions
507
+ // (`entity_builder.entity.<entityCode>.<action>`) are checked by flows running as the caller;
508
+ // ENTITY_BUILDER_ALL_DYNAMIC is the wildcard that grants all of them (and nothing else).
509
+ const ENTITY_DEFINITION_PERMISSIONS = {
510
+ CREATE: 'entity_builder.entity_definition.create',
511
+ READ: 'entity_builder.entity_definition.read',
512
+ UPDATE: 'entity_builder.entity_definition.update',
513
+ DELETE: 'entity_builder.entity_definition.delete'
514
+ };
515
+ const FIELD_DEFINITION_PERMISSIONS = {
516
+ READ: 'entity_builder.field_definition.read',
517
+ UPDATE: 'entity_builder.field_definition.update'
518
+ };
519
+ const FLOW_DEFINITION_PERMISSIONS = {
520
+ CREATE: 'entity_builder.flow_definition.create',
521
+ READ: 'entity_builder.flow_definition.read',
522
+ UPDATE: 'entity_builder.flow_definition.update',
523
+ DELETE: 'entity_builder.flow_definition.delete',
524
+ TEST: 'entity_builder.flow_definition.test',
525
+ /** Needed to save a flow that runs as the system (bypassing per-entity permissions). */ SYSTEM: 'entity_builder.flow_definition.system',
526
+ /** Needed to save a flow containing a code node (sandboxed JavaScript). */ CODE: 'entity_builder.flow_definition.code'
527
+ };
528
+ const ENTITY_BUILDER_DYNAMIC_PREFIX = 'entity_builder.entity';
529
+ const ENTITY_BUILDER_ALL_DYNAMIC = {
530
+ ALL: `${ENTITY_BUILDER_DYNAMIC_PREFIX}.*`
531
+ };
532
+ const dynamicEntityPermissionParent = (entityCode)=>`${ENTITY_BUILDER_DYNAMIC_PREFIX}.${entityCode}`;
533
+ const dynamicEntityPermission = (entityCode, action)=>`${dynamicEntityPermissionParent(entityCode)}.${action}`;
499
534
  // ==================== EVENT MANAGER MODULE ====================
500
535
  const EVENT_PERMISSIONS = {
501
536
  CREATE: 'event.create',
@@ -590,6 +625,11 @@ const PERMISSIONS = {
590
625
  // Form Builder
591
626
  FORM: FORM_PERMISSIONS,
592
627
  FORM_RESULT: FORM_RESULT_PERMISSIONS,
628
+ // Entity Builder
629
+ ENTITY_DEFINITION: ENTITY_DEFINITION_PERMISSIONS,
630
+ FIELD_DEFINITION: FIELD_DEFINITION_PERMISSIONS,
631
+ FLOW_DEFINITION: FLOW_DEFINITION_PERMISSIONS,
632
+ ENTITY_BUILDER_ALL_DYNAMIC: ENTITY_BUILDER_ALL_DYNAMIC,
593
633
  // Event Manager
594
634
  EVENT: EVENT_PERMISSIONS,
595
635
  // Notification
@@ -612,7 +652,10 @@ __webpack_require__.d(__webpack_exports__, {
612
652
  }, {
613
653
  BC: USER_PERMISSIONS,
614
654
  Bz: AI_ASSISTANT_PERMISSIONS,
655
+ DP: ENTITY_DEFINITION_PERMISSIONS,
615
656
  Em: STORAGE_CONFIG_PERMISSIONS,
657
+ G0: ENTITY_BUILDER_ALL_DYNAMIC,
658
+ GH: dynamicEntityPermissionParent,
616
659
  GT: FORM_RESULT_PERMISSIONS,
617
660
  Jj: PERMISSIONS,
618
661
  N3: TRANSLATION_KEY_PERMISSIONS,
@@ -630,7 +673,10 @@ __webpack_require__.d(__webpack_exports__, {
630
673
  Y7: ACTION_PERMISSIONS,
631
674
  _X: USER_ACTION_PERMISSIONS,
632
675
  aO: COMPANY_ACTION_PERMISSIONS,
676
+ aT: dynamicEntityPermission,
633
677
  fS: TRANSLATION_PERMISSIONS,
678
+ kA: FIELD_DEFINITION_PERMISSIONS,
679
+ kd: FLOW_DEFINITION_PERMISSIONS,
634
680
  l3: SOCIAL_AUTH_CONFIG_PERMISSIONS,
635
681
  mV: ROLE_PERMISSIONS,
636
682
  rH: NOTIFICATION_PERMISSIONS,
@@ -644,7 +690,7 @@ __webpack_require__.d(__webpack_exports__, {
644
690
 
645
691
 
646
692
  },
647
- 419(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
693
+ 591(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
648
694
 
649
695
  // EXPORTS
650
696
  __webpack_require__.d(__webpack_exports__, {
@@ -653,7 +699,8 @@ __webpack_require__.d(__webpack_exports__, {
653
699
  RE: () => (/* binding */ getRequestId),
654
700
  EO: () => (/* binding */ getTenantId),
655
701
  F6: () => (/* binding */ getUserId),
656
- V8: () => (/* binding */ requestContext)
702
+ V8: () => (/* binding */ requestContext),
703
+ ZV: () => (/* binding */ setRequestUser)
657
704
  });
658
705
 
659
706
  // EXTERNAL MODULE: external "@flusys/nestjs-core/config"
@@ -662,7 +709,7 @@ var config_ = __webpack_require__(307);
662
709
  var common_ = __webpack_require__(157);
663
710
  ;// CONCATENATED MODULE: external "async_hooks"
664
711
 
665
- ;// CONCATENATED MODULE: external "uuid"
712
+ ;// CONCATENATED MODULE: external "node:crypto"
666
713
 
667
714
  // EXTERNAL MODULE: ./projects/nestjs-shared/src/classes/winston.logger.class.ts + 5 modules
668
715
  var winston_logger_class = __webpack_require__(245);
@@ -705,6 +752,12 @@ const getRequestId = ()=>requestContext.getStore()?.requestId;
705
752
  const getTenantId = ()=>requestContext.getStore()?.tenantId;
706
753
  const getUserId = ()=>requestContext.getStore()?.userId;
707
754
  const getCompanyId = ()=>requestContext.getStore()?.companyId;
755
+ function setRequestUser(user) {
756
+ const store = requestContext.getStore();
757
+ if (!store || !user) return;
758
+ store.userId = user.id;
759
+ store.companyId = user.companyId;
760
+ }
708
761
  // Helper Functions
709
762
  function summarizeRequestBody(body) {
710
763
  if (!body) return undefined;
@@ -778,7 +831,7 @@ function getClientIp(req) {
778
831
  class LoggerMiddleware {
779
832
  logger = winston_logger_class/* .instance */.K;
780
833
  use(req, res, next) {
781
- const requestId = req.headers[constants/* .REQUEST_ID_HEADER */.kC] || (0,__rspack_external_uuid.v4)();
834
+ const requestId = req.headers[constants/* .REQUEST_ID_HEADER */.kC] || (0,__rspack_external_node_crypto_2e7c4b46.randomUUID)();
782
835
  const tenantId = req.headers[TENANT_ID_HEADER];
783
836
  const startTime = Date.now();
784
837
  res.setHeader(constants/* .REQUEST_ID_HEADER */.kC, requestId);
@@ -3,11 +3,10 @@ export const __rspack_esm_ids = [123];
3
3
  export const __webpack_modules__ = {
4
4
  46(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
5
5
  /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
6
- /* import */ var _constants_index_js__rspack_import_3 = __webpack_require__(389);
7
- /* import */ var _constants_index_js__rspack_import_4 = __webpack_require__(43);
8
- /* import */ var _utils_event_pattern_util_js__rspack_import_5 = __webpack_require__(456);
9
- /* import */ var _utils_optional_module_util_js__rspack_import_2 = __webpack_require__(368);
10
- /* import */ var _event_transport_registry_js__rspack_import_1 = __webpack_require__(149);
6
+ /* import */ var _constants_index_js__rspack_import_1 = __webpack_require__(43);
7
+ /* import */ var _utils_event_pattern_util_js__rspack_import_4 = __webpack_require__(456);
8
+ /* import */ var _utils_optional_module_util_js__rspack_import_3 = __webpack_require__(368);
9
+ /* import */ var _event_transport_registry_js__rspack_import_2 = __webpack_require__(149);
11
10
  /**
12
11
  * Optional RabbitMQ event transport
13
12
  * Requires: npm install amqplib
@@ -35,11 +34,11 @@ class RabbitMqTransport {
35
34
  async connect() {
36
35
  let amqp;
37
36
  try {
38
- amqp = await (0,_utils_optional_module_util_js__rspack_import_2/* .loadOptionalModule */.l)('amqplib');
37
+ amqp = await (0,_utils_optional_module_util_js__rspack_import_3/* .loadOptionalModule */.l)('amqplib');
39
38
  } catch {
40
39
  throw new _nestjs_common__rspack_import_0.InternalServerErrorException({
41
40
  message: 'amqplib not found',
42
- messageKey: _constants_index_js__rspack_import_3/* .SYSTEM_MESSAGES.SDK_NOT_INSTALLED */.hg.SDK_NOT_INSTALLED,
41
+ messageKey: _constants_index_js__rspack_import_1/* .SYSTEM_MESSAGES.SDK_NOT_INSTALLED */.hg.SDK_NOT_INSTALLED,
43
42
  messageVariables: {
44
43
  sdk: 'amqplib'
45
44
  }
@@ -98,7 +97,7 @@ class RabbitMqTransport {
98
97
  return Boolean(this.channel);
99
98
  }
100
99
  get exchange() {
101
- return this.config.exchange ?? _constants_index_js__rspack_import_4/* .DEFAULT_EVENT_EXCHANGE */.Hq;
100
+ return this.config.exchange ?? _constants_index_js__rspack_import_1/* .DEFAULT_EVENT_EXCHANGE */.Hq;
102
101
  }
103
102
  get queue() {
104
103
  return this.config.queue ?? `${(/* inlined export .DEFAULT_EVENT_SERVICE_NAME */"flusys")}.events`;
@@ -107,7 +106,7 @@ class RabbitMqTransport {
107
106
  return this.config.durable ?? true;
108
107
  }
109
108
  /** `**` is the FLUSYS alias for the AMQP multi word wildcard */ toRoutingKey(pattern) {
110
- return pattern.split('.').map((segment)=>(0,_utils_event_pattern_util_js__rspack_import_5/* .isMultiWildcard */._c)(segment) ? '#' : segment).join('.');
109
+ return pattern.split('.').map((segment)=>(0,_utils_event_pattern_util_js__rspack_import_4/* .isMultiWildcard */._c)(segment) ? '#' : segment).join('.');
111
110
  }
112
111
  async startConsuming() {
113
112
  // Captured, because a reconnect swaps `this.channel` while deliveries are in
@@ -162,7 +161,7 @@ class RabbitMqTransport {
162
161
  await connection?.close().catch(()=>{});
163
162
  }
164
163
  }
165
- _event_transport_registry_js__rspack_import_1/* .EventTransportRegistry.register */.P.register('rabbitmq', (config)=>new RabbitMqTransport(config));
164
+ _event_transport_registry_js__rspack_import_2/* .EventTransportRegistry.register */.P.register('rabbitmq', (config)=>new RabbitMqTransport(config));
166
165
 
167
166
  __webpack_require__.d(__webpack_exports__, {
168
167
  RabbitMqTransport: () => (RabbitMqTransport)
package/fesm/chunks/37.js CHANGED
@@ -3,10 +3,9 @@ export const __rspack_esm_ids = [37];
3
3
  export const __webpack_modules__ = {
4
4
  20(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
5
5
  /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
6
- /* import */ var _constants_index_js__rspack_import_3 = __webpack_require__(389);
7
- /* import */ var _constants_index_js__rspack_import_4 = __webpack_require__(43);
8
- /* import */ var _utils_optional_module_util_js__rspack_import_2 = __webpack_require__(368);
9
- /* import */ var _event_transport_registry_js__rspack_import_1 = __webpack_require__(149);
6
+ /* import */ var _constants_index_js__rspack_import_1 = __webpack_require__(43);
7
+ /* import */ var _utils_optional_module_util_js__rspack_import_3 = __webpack_require__(368);
8
+ /* import */ var _event_transport_registry_js__rspack_import_2 = __webpack_require__(149);
10
9
  /**
11
10
  * Optional Kafka event transport
12
11
  * Requires: npm install kafkajs
@@ -36,11 +35,11 @@ const DEFAULT_BROKERS = [
36
35
  async connect() {
37
36
  let kafkajs;
38
37
  try {
39
- kafkajs = await (0,_utils_optional_module_util_js__rspack_import_2/* .loadOptionalModule */.l)('kafkajs');
38
+ kafkajs = await (0,_utils_optional_module_util_js__rspack_import_3/* .loadOptionalModule */.l)('kafkajs');
40
39
  } catch {
41
40
  throw new _nestjs_common__rspack_import_0.InternalServerErrorException({
42
41
  message: 'kafkajs not found',
43
- messageKey: _constants_index_js__rspack_import_3/* .SYSTEM_MESSAGES.SDK_NOT_INSTALLED */.hg.SDK_NOT_INSTALLED,
42
+ messageKey: _constants_index_js__rspack_import_1/* .SYSTEM_MESSAGES.SDK_NOT_INSTALLED */.hg.SDK_NOT_INSTALLED,
44
43
  messageVariables: {
45
44
  sdk: 'kafkajs'
46
45
  }
@@ -98,7 +97,7 @@ const DEFAULT_BROKERS = [
98
97
  return Boolean(this.producer);
99
98
  }
100
99
  get topic() {
101
- return this.config.topic ?? _constants_index_js__rspack_import_4/* .DEFAULT_EVENT_TOPIC */.nx;
100
+ return this.config.topic ?? _constants_index_js__rspack_import_1/* .DEFAULT_EVENT_TOPIC */.nx;
102
101
  }
103
102
  async startConsuming() {
104
103
  if (this.running || !this.client) return;
@@ -132,7 +131,7 @@ const DEFAULT_BROKERS = [
132
131
  }
133
132
  }
134
133
  }
135
- _event_transport_registry_js__rspack_import_1/* .EventTransportRegistry.register */.P.register('kafka', (config)=>new KafkaTransport(config));
134
+ _event_transport_registry_js__rspack_import_2/* .EventTransportRegistry.register */.P.register('kafka', (config)=>new KafkaTransport(config));
136
135
 
137
136
  __webpack_require__.d(__webpack_exports__, {
138
137
  KafkaTransport: () => (KafkaTransport)
@@ -3,11 +3,11 @@ export const __rspack_esm_ids = [29];
3
3
  export const __webpack_modules__ = {};
4
4
  import { __webpack_require__ } from '../runtime.js';
5
5
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
6
- import * as __rspack_chunk_1 from '../720.js';
6
+ import * as __rspack_chunk_1 from '../948.js';
7
7
  __webpack_require__.C(__rspack_chunk_1);
8
- import * as __rspack_chunk_2 from '../509.js';
8
+ import * as __rspack_chunk_2 from '../183.js';
9
9
  __webpack_require__.C(__rspack_chunk_2);
10
- import * as __rspack_chunk_3 from '../67.js';
10
+ import * as __rspack_chunk_3 from '../681.js';
11
11
  __webpack_require__.C(__rspack_chunk_3);
12
12
  import * as __rspack_chunk_4 from '../470.js';
13
13
  __webpack_require__.C(__rspack_chunk_4);
@@ -23,10 +23,14 @@ var __webpack_exports__DOMAIN_EVENT_VERSION = __webpack_exports__.xC;
23
23
  var __webpack_exports__DisabledEventBus = __webpack_exports__.XI;
24
24
  var __webpack_exports__EMAIL_CONFIG_PERMISSIONS = __webpack_exports__.V0;
25
25
  var __webpack_exports__EMAIL_TEMPLATE_PERMISSIONS = __webpack_exports__.z$;
26
+ var __webpack_exports__ENTITY_BUILDER_ALL_DYNAMIC = __webpack_exports__.G0;
27
+ var __webpack_exports__ENTITY_DEFINITION_PERMISSIONS = __webpack_exports__.DP;
26
28
  var __webpack_exports__EVENT_PERMISSIONS = __webpack_exports__.Ub;
27
29
  var __webpack_exports__EventBusRegistry = __webpack_exports__.qS;
28
30
  var __webpack_exports__EventTransportRegistry = __webpack_exports__.Pm;
31
+ var __webpack_exports__FIELD_DEFINITION_PERMISSIONS = __webpack_exports__.kA;
29
32
  var __webpack_exports__FILE_PERMISSIONS = __webpack_exports__.S6;
33
+ var __webpack_exports__FLOW_DEFINITION_PERMISSIONS = __webpack_exports__.kd;
30
34
  var __webpack_exports__FOLDER_PERMISSIONS = __webpack_exports__.wM;
31
35
  var __webpack_exports__FORM_PERMISSIONS = __webpack_exports__.Wc;
32
36
  var __webpack_exports__FORM_RESULT_PERMISSIONS = __webpack_exports__.GT;
@@ -55,8 +59,10 @@ var __webpack_exports__buildDomainEvent = __webpack_exports__.rv;
55
59
  var __webpack_exports__buildQuery = __webpack_exports__.Zq;
56
60
  var __webpack_exports__createApiController = __webpack_exports__.RD;
57
61
  var __webpack_exports__createModuleLogger = __webpack_exports__.Xv;
62
+ var __webpack_exports__dynamicEntityPermission = __webpack_exports__.aT;
63
+ var __webpack_exports__dynamicEntityPermissionParent = __webpack_exports__.GH;
58
64
  var __webpack_exports__getCastIntType = __webpack_exports__.Tj;
59
65
  var __webpack_exports__getJsonColumnType = __webpack_exports__.pf;
60
66
  var __webpack_exports__instance = __webpack_exports__.KJ;
61
67
  var __webpack_exports__publishDomainEvent = __webpack_exports__.wT;
62
- export { __webpack_exports__ACTION_PERMISSIONS as ACTION_PERMISSIONS, __webpack_exports__AI_ASSISTANT_PERMISSIONS as AI_ASSISTANT_PERMISSIONS, __webpack_exports__ApiService as ApiService, __webpack_exports__BRANCH_PERMISSIONS as BRANCH_PERMISSIONS, __webpack_exports__COMPANY_ACTION_PERMISSIONS as COMPANY_ACTION_PERMISSIONS, __webpack_exports__COMPANY_PERMISSIONS as COMPANY_PERMISSIONS, __webpack_exports__DOMAIN_EVENT_VERSION as DOMAIN_EVENT_VERSION, __webpack_exports__DisabledEventBus as DisabledEventBus, __webpack_exports__EMAIL_CONFIG_PERMISSIONS as EMAIL_CONFIG_PERMISSIONS, __webpack_exports__EMAIL_TEMPLATE_PERMISSIONS as EMAIL_TEMPLATE_PERMISSIONS, __webpack_exports__EVENT_PERMISSIONS as EVENT_PERMISSIONS, __webpack_exports__EventBusRegistry as EventBusRegistry, __webpack_exports__EventTransportRegistry as EventTransportRegistry, __webpack_exports__FILE_PERMISSIONS as FILE_PERMISSIONS, __webpack_exports__FOLDER_PERMISSIONS as FOLDER_PERMISSIONS, __webpack_exports__FORM_PERMISSIONS as FORM_PERMISSIONS, __webpack_exports__FORM_RESULT_PERMISSIONS as FORM_RESULT_PERMISSIONS, __webpack_exports__HybridCache as HybridCache, __webpack_exports__HybridEventBus as HybridEventBus, __webpack_exports__LANGUAGE_PERMISSIONS as LANGUAGE_PERMISSIONS, __webpack_exports__MemoryTransport as MemoryTransport, __webpack_exports__NOTIFICATION_PERMISSIONS as NOTIFICATION_PERMISSIONS, __webpack_exports__PERMISSIONS as PERMISSIONS, __webpack_exports__ROLE_ACTION_PERMISSIONS as ROLE_ACTION_PERMISSIONS, __webpack_exports__ROLE_PERMISSIONS as ROLE_PERMISSIONS, __webpack_exports__SOCIAL_AUTH_CONFIG_PERMISSIONS as SOCIAL_AUTH_CONFIG_PERMISSIONS, __webpack_exports__STORAGE_CONFIG_PERMISSIONS as STORAGE_CONFIG_PERMISSIONS, __webpack_exports__TASK_BOARD_PERMISSIONS as TASK_BOARD_PERMISSIONS, __webpack_exports__TASK_COMMENT_PERMISSIONS as TASK_COMMENT_PERMISSIONS, __webpack_exports__TASK_LABEL_PERMISSIONS as TASK_LABEL_PERMISSIONS, __webpack_exports__TASK_LIST_PERMISSIONS as TASK_LIST_PERMISSIONS, __webpack_exports__TASK_PERMISSIONS as TASK_PERMISSIONS, __webpack_exports__TRANSLATION_KEY_PERMISSIONS as TRANSLATION_KEY_PERMISSIONS, __webpack_exports__TRANSLATION_PERMISSIONS as TRANSLATION_PERMISSIONS, __webpack_exports__UPLOAD_CONFIG_PERMISSIONS as UPLOAD_CONFIG_PERMISSIONS, __webpack_exports__USER_ACTION_PERMISSIONS as USER_ACTION_PERMISSIONS, __webpack_exports__USER_PERMISSIONS as USER_PERMISSIONS, __webpack_exports__USER_ROLE_PERMISSIONS as USER_ROLE_PERMISSIONS, __webpack_exports__buildDomainEvent as buildDomainEvent, __webpack_exports__buildQuery as buildQuery, __webpack_exports__createApiController as createApiController, __webpack_exports__createModuleLogger as createModuleLogger, __webpack_exports__getCastIntType as getCastIntType, __webpack_exports__getJsonColumnType as getJsonColumnType, __webpack_exports__instance as instance, __webpack_exports__publishDomainEvent as publishDomainEvent };
68
+ export { __webpack_exports__ACTION_PERMISSIONS as ACTION_PERMISSIONS, __webpack_exports__AI_ASSISTANT_PERMISSIONS as AI_ASSISTANT_PERMISSIONS, __webpack_exports__ApiService as ApiService, __webpack_exports__BRANCH_PERMISSIONS as BRANCH_PERMISSIONS, __webpack_exports__COMPANY_ACTION_PERMISSIONS as COMPANY_ACTION_PERMISSIONS, __webpack_exports__COMPANY_PERMISSIONS as COMPANY_PERMISSIONS, __webpack_exports__DOMAIN_EVENT_VERSION as DOMAIN_EVENT_VERSION, __webpack_exports__DisabledEventBus as DisabledEventBus, __webpack_exports__EMAIL_CONFIG_PERMISSIONS as EMAIL_CONFIG_PERMISSIONS, __webpack_exports__EMAIL_TEMPLATE_PERMISSIONS as EMAIL_TEMPLATE_PERMISSIONS, __webpack_exports__ENTITY_BUILDER_ALL_DYNAMIC as ENTITY_BUILDER_ALL_DYNAMIC, __webpack_exports__ENTITY_DEFINITION_PERMISSIONS as ENTITY_DEFINITION_PERMISSIONS, __webpack_exports__EVENT_PERMISSIONS as EVENT_PERMISSIONS, __webpack_exports__EventBusRegistry as EventBusRegistry, __webpack_exports__EventTransportRegistry as EventTransportRegistry, __webpack_exports__FIELD_DEFINITION_PERMISSIONS as FIELD_DEFINITION_PERMISSIONS, __webpack_exports__FILE_PERMISSIONS as FILE_PERMISSIONS, __webpack_exports__FLOW_DEFINITION_PERMISSIONS as FLOW_DEFINITION_PERMISSIONS, __webpack_exports__FOLDER_PERMISSIONS as FOLDER_PERMISSIONS, __webpack_exports__FORM_PERMISSIONS as FORM_PERMISSIONS, __webpack_exports__FORM_RESULT_PERMISSIONS as FORM_RESULT_PERMISSIONS, __webpack_exports__HybridCache as HybridCache, __webpack_exports__HybridEventBus as HybridEventBus, __webpack_exports__LANGUAGE_PERMISSIONS as LANGUAGE_PERMISSIONS, __webpack_exports__MemoryTransport as MemoryTransport, __webpack_exports__NOTIFICATION_PERMISSIONS as NOTIFICATION_PERMISSIONS, __webpack_exports__PERMISSIONS as PERMISSIONS, __webpack_exports__ROLE_ACTION_PERMISSIONS as ROLE_ACTION_PERMISSIONS, __webpack_exports__ROLE_PERMISSIONS as ROLE_PERMISSIONS, __webpack_exports__SOCIAL_AUTH_CONFIG_PERMISSIONS as SOCIAL_AUTH_CONFIG_PERMISSIONS, __webpack_exports__STORAGE_CONFIG_PERMISSIONS as STORAGE_CONFIG_PERMISSIONS, __webpack_exports__TASK_BOARD_PERMISSIONS as TASK_BOARD_PERMISSIONS, __webpack_exports__TASK_COMMENT_PERMISSIONS as TASK_COMMENT_PERMISSIONS, __webpack_exports__TASK_LABEL_PERMISSIONS as TASK_LABEL_PERMISSIONS, __webpack_exports__TASK_LIST_PERMISSIONS as TASK_LIST_PERMISSIONS, __webpack_exports__TASK_PERMISSIONS as TASK_PERMISSIONS, __webpack_exports__TRANSLATION_KEY_PERMISSIONS as TRANSLATION_KEY_PERMISSIONS, __webpack_exports__TRANSLATION_PERMISSIONS as TRANSLATION_PERMISSIONS, __webpack_exports__UPLOAD_CONFIG_PERMISSIONS as UPLOAD_CONFIG_PERMISSIONS, __webpack_exports__USER_ACTION_PERMISSIONS as USER_ACTION_PERMISSIONS, __webpack_exports__USER_PERMISSIONS as USER_PERMISSIONS, __webpack_exports__USER_ROLE_PERMISSIONS as USER_ROLE_PERMISSIONS, __webpack_exports__buildDomainEvent as buildDomainEvent, __webpack_exports__buildQuery as buildQuery, __webpack_exports__createApiController as createApiController, __webpack_exports__createModuleLogger as createModuleLogger, __webpack_exports__dynamicEntityPermission as dynamicEntityPermission, __webpack_exports__dynamicEntityPermissionParent as dynamicEntityPermissionParent, __webpack_exports__getCastIntType as getCastIntType, __webpack_exports__getJsonColumnType as getJsonColumnType, __webpack_exports__instance as instance, __webpack_exports__publishDomainEvent as publishDomainEvent };