@flusys/nestjs-shared 8.1.4 → 9.1.0-rc.1

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 (39) 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 +422 -341
  18. package/fesm/interceptors/index.js +62 -23
  19. package/fesm/interfaces/index.js +16 -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/datasource.interface.d.ts +2 -0
  26. package/interfaces/index.d.ts +3 -0
  27. package/interfaces/message-ref.interface.d.ts +4 -0
  28. package/interfaces/permission-action-registry.interface.d.ts +12 -0
  29. package/interfaces/permission-resolver.interface.d.ts +9 -0
  30. package/middlewares/logger.middleware.d.ts +4 -0
  31. package/modules/shared-permission-cache/shared-permission-cache.service.d.ts +5 -0
  32. package/package.json +8 -2
  33. package/pipes/dto-body-validation.pipe.d.ts +18 -0
  34. package/pipes/index.d.ts +1 -0
  35. package/utils/cache-tenant.util.d.ts +2 -0
  36. package/utils/index.d.ts +3 -0
  37. package/utils/message-ref.util.d.ts +2 -0
  38. package/utils/permission-match.util.d.ts +1 -0
  39. package/utils/query-helpers.util.d.ts +2 -1
@@ -1,5 +1,3 @@
1
- import * as __rspack_external__flusys_nestjs_core_config_197fa0a9 from "@flusys/nestjs-core/config";
2
- import * as __rspack_external__nestjs_common_a04939da from "@nestjs/common";
3
1
  import * as __rspack_external__nestjs_core_d7b00a1a from "@nestjs/core";
4
2
  import * as __rspack_external__nestjs_passport_18907953 from "@nestjs/passport";
5
3
  import * as __rspack_external__keyv_redis_139d03ca from "@keyv/redis";
@@ -94,400 +92,6 @@ class HybridCache {
94
92
  }
95
93
 
96
94
 
97
- },
98
- 43(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
99
- /* import */ var _permissions_js__rspack_import_0 = __webpack_require__(975);
100
- /* import */ var _message_keys_js__rspack_import_1 = __webpack_require__(389);
101
- // Metadata keys
102
- const IS_PUBLIC_KEY = 'isPublic';
103
- const PERMISSIONS_KEY = 'permissions';
104
- const DOMAIN_EVENT_HANDLER_KEY = 'domainEventHandler';
105
- // Injection tokens
106
- const CACHE_INSTANCE = 'CACHE_INSTANCE';
107
- const PERMISSION_GUARD_CONFIG = 'PERMISSION_GUARD_CONFIG';
108
- const EVENT_BUS_INSTANCE = 'EVENT_BUS_INSTANCE';
109
- const EVENT_BUS_MODULE_OPTIONS = 'EVENT_BUS_MODULE_OPTIONS';
110
- // Header names
111
- const IDEMPOTENCY_KEY_HEADER = 'x-idempotency-key';
112
- const REQUEST_ID_HEADER = 'x-request-id';
113
- const CLIENT_TYPE_HEADER = 'x-client-type';
114
- // Cache key prefixes
115
- const PERMISSIONS_CACHE_PREFIX = 'my-permissions';
116
- const IDEMPOTENCY_CACHE_PREFIX = 'idempotency';
117
- // Event bus defaults
118
- const DEFAULT_EVENT_EXCHANGE = 'flusys.events';
119
- const DEFAULT_EVENT_TOPIC = 'flusys.domain-events';
120
- const DEFAULT_EVENT_SERVICE_NAME = 'flusys';
121
- // Permission codes
122
-
123
- // Message keys for localization
124
-
125
-
126
- __webpack_require__.d(__webpack_exports__, {
127
- BC: () => (/* reexport safe */ _permissions_js__rspack_import_0.BC),
128
- Bz: () => (/* reexport safe */ _permissions_js__rspack_import_0.Bz),
129
- Em: () => (/* reexport safe */ _permissions_js__rspack_import_0.Em),
130
- GT: () => (/* reexport safe */ _permissions_js__rspack_import_0.GT),
131
- Jj: () => (/* reexport safe */ _permissions_js__rspack_import_0.Jj),
132
- N3: () => (/* reexport safe */ _permissions_js__rspack_import_0.N3),
133
- ON: () => (/* reexport safe */ _permissions_js__rspack_import_0.ON),
134
- P0: () => (/* reexport safe */ _permissions_js__rspack_import_0.P0),
135
- Q5: () => (/* reexport safe */ _permissions_js__rspack_import_0.Q5),
136
- S6: () => (/* reexport safe */ _permissions_js__rspack_import_0.S6),
137
- T: () => (/* reexport safe */ _permissions_js__rspack_import_0.T),
138
- UB: () => (/* reexport safe */ _permissions_js__rspack_import_0.UB),
139
- UG: () => (/* reexport safe */ _permissions_js__rspack_import_0.UG),
140
- UU: () => (/* reexport safe */ _message_keys_js__rspack_import_1.UU),
141
- Ub: () => (/* reexport safe */ _permissions_js__rspack_import_0.Ub),
142
- V0: () => (/* reexport safe */ _permissions_js__rspack_import_0.V0),
143
- Wc: () => (/* reexport safe */ _permissions_js__rspack_import_0.Wc),
144
- Y3: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y3),
145
- Y7: () => (/* reexport safe */ _permissions_js__rspack_import_0.Y7),
146
- _X: () => (/* reexport safe */ _permissions_js__rspack_import_0._X),
147
- aO: () => (/* reexport safe */ _permissions_js__rspack_import_0.aO),
148
- fS: () => (/* reexport safe */ _permissions_js__rspack_import_0.fS),
149
- hg: () => (/* reexport safe */ _message_keys_js__rspack_import_1.hg),
150
- l3: () => (/* reexport safe */ _permissions_js__rspack_import_0.l3),
151
- mK: () => (/* reexport safe */ _message_keys_js__rspack_import_1.mK),
152
- mV: () => (/* reexport safe */ _permissions_js__rspack_import_0.mV),
153
- rH: () => (/* reexport safe */ _permissions_js__rspack_import_0.rH),
154
- t$: () => (/* reexport safe */ _permissions_js__rspack_import_0.t$),
155
- w7: () => (/* reexport safe */ _permissions_js__rspack_import_0.w7),
156
- wA: () => (/* reexport safe */ _permissions_js__rspack_import_0.wA),
157
- wM: () => (/* reexport safe */ _permissions_js__rspack_import_0.wM),
158
- z$: () => (/* reexport safe */ _permissions_js__rspack_import_0.z$),
159
- zd: () => (/* reexport safe */ _permissions_js__rspack_import_0.zd)
160
- }, {
161
- Hq: DEFAULT_EVENT_EXCHANGE,
162
- Lw: PERMISSION_GUARD_CONFIG,
163
- N7: PERMISSIONS_KEY,
164
- PT: DOMAIN_EVENT_HANDLER_KEY,
165
- Qj: EVENT_BUS_INSTANCE,
166
- SL: EVENT_BUS_MODULE_OPTIONS,
167
- fG: PERMISSIONS_CACHE_PREFIX,
168
- iH: IDEMPOTENCY_KEY_HEADER,
169
- jA: IS_PUBLIC_KEY,
170
- kC: REQUEST_ID_HEADER,
171
- mg: IDEMPOTENCY_CACHE_PREFIX,
172
- nx: DEFAULT_EVENT_TOPIC,
173
- xw: CLIENT_TYPE_HEADER,
174
- zl: CACHE_INSTANCE
175
- });
176
-
177
-
178
- },
179
- 389(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
180
- // ==================== AUTH (Shared across guards/interceptors) ====================
181
- // These are duplicated in nestjs-auth but needed here to avoid circular dependencies
182
- const AUTH_MESSAGES = {
183
- TOKEN_REQUIRED: 'auth.token.required',
184
- TOKEN_INVALID: 'auth.token.invalid',
185
- ENTITY_BELOG_ANOTHER_COMPANY: 'entity.belongs.another.company',
186
- COMPANY_NO_ACCESS: 'auth.company.no.access'
187
- };
188
- // ==================== ERROR (HTTP Exceptions) ====================
189
- const ERROR_MESSAGES = {
190
- NOT_FOUND: 'error.not.found',
191
- VALIDATION: 'error.validation',
192
- UNAUTHORIZED: 'error.unauthorized',
193
- FORBIDDEN: 'error.forbidden',
194
- CONFLICT: 'error.conflict',
195
- DB_FOREIGN_KEY: 'error.db.foreign.key',
196
- DB_NOT_NULL: 'error.db.not.null',
197
- DB_INVALID_INPUT: 'error.db.invalid.input',
198
- DB_VALUE_TOO_LONG: 'error.db.value.too.long',
199
- DB_CHECK_CONSTRAINT: 'error.db.check.constraint',
200
- DB_DEADLOCK: 'error.db.deadlock',
201
- INTERNAL: 'error.internal',
202
- SERVICE_UNAVAILABLE: 'error.service.unavailable',
203
- UNKNOWN: 'error.unknown',
204
- HTTP: 'error.http',
205
- GENERIC: 'error.generic',
206
- PERMISSION_SYSTEM_UNAVAILABLE: 'error.permission.system.unavailable',
207
- INSUFFICIENT_PERMISSIONS: 'error.insufficient.permissions',
208
- INSUFFICIENT_PERMISSIONS_OR: 'error.insufficient.permissions.or',
209
- NO_PERMISSIONS_FOUND: 'error.no.permissions.found',
210
- ENDPOINT_DISABLED: 'error.endpoint.disabled'
211
- };
212
- // ==================== SYSTEM (Infrastructure) ====================
213
- const SYSTEM_MESSAGES = {
214
- REPOSITORY_NOT_AVAILABLE: 'system.repository.not.available',
215
- DATASOURCE_NOT_AVAILABLE: 'system.datasource.not.available',
216
- DATABASE_CONFIG_NOT_AVAILABLE: 'system.database.config.not.available',
217
- SERVICE_NOT_AVAILABLE: 'system.service.not.available',
218
- CONFIG_REQUIRED: 'system.config.required',
219
- INTERNAL_ERROR: 'system.internal.error',
220
- DUPLICATE_REQUEST: 'system.duplicate.request',
221
- INVALID_TENANT_ID: 'system.invalid.tenant.id',
222
- TENANT_NOT_FOUND: 'system.tenant.not.found',
223
- TENANT_HEADER_REQUIRED: 'system.tenant.header.required',
224
- MISSING_PARAMETER: 'system.missing.parameter',
225
- SDK_NOT_INSTALLED: 'system.sdk.not.installed',
226
- PATH_TRAVERSAL_DETECTED: 'system.path.traversal.detected',
227
- INVALID_FILE_KEY: 'system.invalid.file.key'
228
- };
229
-
230
- __webpack_require__.d(__webpack_exports__, {
231
- }, {
232
- UU: ERROR_MESSAGES,
233
- hg: SYSTEM_MESSAGES,
234
- mK: AUTH_MESSAGES
235
- });
236
-
237
-
238
- },
239
- 975(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
240
- // ==================== AUTH MODULE ====================
241
- const USER_PERMISSIONS = {
242
- CREATE: 'user.create',
243
- READ: 'user.read',
244
- UPDATE: 'user.update',
245
- DELETE: 'user.delete',
246
- LOOKUP: 'user.lookup'
247
- };
248
- const COMPANY_PERMISSIONS = {
249
- CREATE: 'company.create',
250
- READ: 'company.read',
251
- UPDATE: 'company.update',
252
- DELETE: 'company.delete'
253
- };
254
- const BRANCH_PERMISSIONS = {
255
- CREATE: 'branch.create',
256
- READ: 'branch.read',
257
- UPDATE: 'branch.update',
258
- DELETE: 'branch.delete'
259
- };
260
- const SOCIAL_AUTH_CONFIG_PERMISSIONS = {
261
- CREATE: 'social-config.create',
262
- READ: 'social-config.read',
263
- UPDATE: 'social-config.update',
264
- DELETE: 'social-config.delete'
265
- };
266
- // ==================== IAM MODULE ====================
267
- const ACTION_PERMISSIONS = {
268
- CREATE: 'action.create',
269
- READ: 'action.read',
270
- UPDATE: 'action.update',
271
- DELETE: 'action.delete'
272
- };
273
- const ROLE_PERMISSIONS = {
274
- CREATE: 'role.create',
275
- READ: 'role.read',
276
- UPDATE: 'role.update',
277
- DELETE: 'role.delete'
278
- };
279
- const ROLE_ACTION_PERMISSIONS = {
280
- READ: 'role-action.read',
281
- ASSIGN: 'role-action.assign'
282
- };
283
- const USER_ROLE_PERMISSIONS = {
284
- READ: 'user-role.read',
285
- ASSIGN: 'user-role.assign'
286
- };
287
- const USER_ACTION_PERMISSIONS = {
288
- READ: 'user-action.read',
289
- ASSIGN: 'user-action.assign'
290
- };
291
- const COMPANY_ACTION_PERMISSIONS = {
292
- READ: 'company-action.read',
293
- ASSIGN: 'company-action.assign'
294
- };
295
- // ==================== STORAGE MODULE ====================
296
- const FILE_PERMISSIONS = {
297
- CREATE: 'file.create',
298
- READ: 'file.read',
299
- UPDATE: 'file.update',
300
- DELETE: 'file.delete',
301
- VIEW_PRIVATE_ACTION: 'file.view.private'
302
- };
303
- const FOLDER_PERMISSIONS = {
304
- CREATE: 'folder.create',
305
- READ: 'folder.read',
306
- UPDATE: 'folder.update',
307
- DELETE: 'folder.delete'
308
- };
309
- const STORAGE_CONFIG_PERMISSIONS = {
310
- CREATE: 'storage-config.create',
311
- READ: 'storage-config.read',
312
- UPDATE: 'storage-config.update',
313
- DELETE: 'storage-config.delete'
314
- };
315
- const UPLOAD_CONFIG_PERMISSIONS = {
316
- DELETE: 'upload-config.delete'
317
- };
318
- // ==================== EMAIL MODULE ====================
319
- const EMAIL_CONFIG_PERMISSIONS = {
320
- CREATE: 'email-config.create',
321
- READ: 'email-config.read',
322
- UPDATE: 'email-config.update',
323
- DELETE: 'email-config.delete'
324
- };
325
- const EMAIL_TEMPLATE_PERMISSIONS = {
326
- CREATE: 'email-template.create',
327
- READ: 'email-template.read',
328
- UPDATE: 'email-template.update',
329
- DELETE: 'email-template.delete'
330
- };
331
- // ==================== FORM BUILDER MODULE ====================
332
- const FORM_PERMISSIONS = {
333
- CREATE: 'form.create',
334
- READ: 'form.read',
335
- UPDATE: 'form.update',
336
- DELETE: 'form.delete'
337
- };
338
- const FORM_RESULT_PERMISSIONS = {
339
- CREATE: 'form-result.create',
340
- READ: 'form-result.read',
341
- UPDATE: 'form-result.update',
342
- DELETE: 'form-result.delete'
343
- };
344
- // ==================== EVENT MANAGER MODULE ====================
345
- const EVENT_PERMISSIONS = {
346
- CREATE: 'event.create',
347
- READ: 'event.read',
348
- UPDATE: 'event.update',
349
- DELETE: 'event.delete'
350
- };
351
- // ==================== NOTIFICATION MODULE ====================
352
- const NOTIFICATION_PERMISSIONS = {
353
- CREATE: 'notification.create',
354
- READ: 'notification.read',
355
- UPDATE: 'notification.update',
356
- DELETE: 'notification.delete'
357
- };
358
- // ==================== LOCALIZATION MODULE ====================
359
- const LANGUAGE_PERMISSIONS = {
360
- CREATE: 'language.create',
361
- READ: 'language.read',
362
- UPDATE: 'language.update',
363
- DELETE: 'language.delete'
364
- };
365
- const TRANSLATION_KEY_PERMISSIONS = {
366
- CREATE: 'translation-key.create',
367
- READ: 'translation-key.read',
368
- UPDATE: 'translation-key.update',
369
- DELETE: 'translation-key.delete'
370
- };
371
- const TRANSLATION_PERMISSIONS = {
372
- CREATE: 'translation.create',
373
- READ: 'translation.read',
374
- UPDATE: 'translation.update',
375
- DELETE: 'translation.delete'
376
- };
377
- // ==================== TASK MANAGER MODULE ====================
378
- const TASK_BOARD_PERMISSIONS = {
379
- CREATE: 'task-board.create',
380
- READ: 'task-board.read',
381
- UPDATE: 'task-board.update',
382
- DELETE: 'task-board.delete',
383
- MANAGE_MEMBERS: 'task-board.manage-members'
384
- };
385
- const TASK_LIST_PERMISSIONS = {
386
- CREATE: 'task-list.create',
387
- READ: 'task-list.read',
388
- UPDATE: 'task-list.update',
389
- DELETE: 'task-list.delete'
390
- };
391
- const TASK_PERMISSIONS = {
392
- CREATE: 'task.create',
393
- READ: 'task.read',
394
- UPDATE: 'task.update',
395
- DELETE: 'task.delete',
396
- MOVE: 'task.move',
397
- ASSIGN: 'task.assign'
398
- };
399
- const TASK_LABEL_PERMISSIONS = {
400
- CREATE: 'task-label.create',
401
- READ: 'task-label.read',
402
- UPDATE: 'task-label.update',
403
- DELETE: 'task-label.delete'
404
- };
405
- const TASK_COMMENT_PERMISSIONS = {
406
- CREATE: 'task-comment.create',
407
- READ: 'task-comment.read',
408
- DELETE: 'task-comment.delete'
409
- };
410
- // ==================== AI ASSISTANT MODULE ====================
411
- const AI_ASSISTANT_PERMISSIONS = {
412
- VIEW_ALL_HISTORY: 'ai-assistant.view-all-history'
413
- };
414
- // ==================== AGGREGATED EXPORTS ====================
415
- const PERMISSIONS = {
416
- // Auth
417
- USER: USER_PERMISSIONS,
418
- COMPANY: COMPANY_PERMISSIONS,
419
- BRANCH: BRANCH_PERMISSIONS,
420
- SOCIAL_AUTH_CONFIG: SOCIAL_AUTH_CONFIG_PERMISSIONS,
421
- // IAM
422
- ACTION: ACTION_PERMISSIONS,
423
- ROLE: ROLE_PERMISSIONS,
424
- ROLE_ACTION: ROLE_ACTION_PERMISSIONS,
425
- USER_ROLE: USER_ROLE_PERMISSIONS,
426
- USER_ACTION: USER_ACTION_PERMISSIONS,
427
- COMPANY_ACTION: COMPANY_ACTION_PERMISSIONS,
428
- // Storage
429
- FILE: FILE_PERMISSIONS,
430
- FOLDER: FOLDER_PERMISSIONS,
431
- STORAGE_CONFIG: STORAGE_CONFIG_PERMISSIONS,
432
- // Email
433
- EMAIL_CONFIG: EMAIL_CONFIG_PERMISSIONS,
434
- EMAIL_TEMPLATE: EMAIL_TEMPLATE_PERMISSIONS,
435
- // Form Builder
436
- FORM: FORM_PERMISSIONS,
437
- FORM_RESULT: FORM_RESULT_PERMISSIONS,
438
- // Event Manager
439
- EVENT: EVENT_PERMISSIONS,
440
- // Notification
441
- NOTIFICATION: NOTIFICATION_PERMISSIONS,
442
- // Localization
443
- LANGUAGE: LANGUAGE_PERMISSIONS,
444
- TRANSLATION_KEY: TRANSLATION_KEY_PERMISSIONS,
445
- TRANSLATION: TRANSLATION_PERMISSIONS,
446
- // Task Manager
447
- TASK_BOARD: TASK_BOARD_PERMISSIONS,
448
- TASK_LIST: TASK_LIST_PERMISSIONS,
449
- TASK: TASK_PERMISSIONS,
450
- TASK_LABEL: TASK_LABEL_PERMISSIONS,
451
- TASK_COMMENT: TASK_COMMENT_PERMISSIONS,
452
- // AI Assistant
453
- AI_ASSISTANT: AI_ASSISTANT_PERMISSIONS
454
- };
455
-
456
- __webpack_require__.d(__webpack_exports__, {
457
- }, {
458
- BC: USER_PERMISSIONS,
459
- Bz: AI_ASSISTANT_PERMISSIONS,
460
- Em: STORAGE_CONFIG_PERMISSIONS,
461
- GT: FORM_RESULT_PERMISSIONS,
462
- Jj: PERMISSIONS,
463
- N3: TRANSLATION_KEY_PERMISSIONS,
464
- ON: TASK_LIST_PERMISSIONS,
465
- P0: ROLE_ACTION_PERMISSIONS,
466
- Q5: LANGUAGE_PERMISSIONS,
467
- S6: FILE_PERMISSIONS,
468
- T: TASK_PERMISSIONS,
469
- UB: UPLOAD_CONFIG_PERMISSIONS,
470
- UG: TASK_LABEL_PERMISSIONS,
471
- Ub: EVENT_PERMISSIONS,
472
- V0: EMAIL_CONFIG_PERMISSIONS,
473
- Wc: FORM_PERMISSIONS,
474
- Y3: TASK_BOARD_PERMISSIONS,
475
- Y7: ACTION_PERMISSIONS,
476
- _X: USER_ACTION_PERMISSIONS,
477
- aO: COMPANY_ACTION_PERMISSIONS,
478
- fS: TRANSLATION_PERMISSIONS,
479
- l3: SOCIAL_AUTH_CONFIG_PERMISSIONS,
480
- mV: ROLE_PERMISSIONS,
481
- rH: NOTIFICATION_PERMISSIONS,
482
- t$: COMPANY_PERMISSIONS,
483
- w7: USER_ROLE_PERMISSIONS,
484
- wA: BRANCH_PERMISSIONS,
485
- wM: FOLDER_PERMISSIONS,
486
- z$: EMAIL_TEMPLATE_PERMISSIONS,
487
- zd: TASK_COMMENT_PERMISSIONS
488
- });
489
-
490
-
491
95
  },
492
96
  374(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
493
97
  /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
@@ -547,8 +151,8 @@ __webpack_require__.d(__webpack_exports__, {
547
151
 
548
152
  // EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/index.ts
549
153
  var constants = __webpack_require__(43);
550
- // EXTERNAL MODULE: ./projects/nestjs-shared/src/constants/message-keys.ts
551
- var message_keys = __webpack_require__(389);
154
+ // EXTERNAL MODULE: ./projects/nestjs-shared/src/middlewares/logger.middleware.ts + 2 modules
155
+ var logger_middleware = __webpack_require__(591);
552
156
  // EXTERNAL MODULE: external "@nestjs/common"
553
157
  var common_ = __webpack_require__(157);
554
158
  // EXTERNAL MODULE: external "@nestjs/core"
@@ -583,6 +187,7 @@ function _ts_param(paramIndex, decorator) {
583
187
 
584
188
 
585
189
 
190
+
586
191
  class JwtAuthGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
587
192
  reflector;
588
193
  // NOTE: @Inject(Reflector) required for bundled code - external classes need explicit injection
@@ -604,9 +209,10 @@ class JwtAuthGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGu
604
209
  if (err || !user) {
605
210
  throw err || new common_.UnauthorizedException({
606
211
  message: 'Invalid or expired token',
607
- messageKey: message_keys/* .AUTH_MESSAGES.TOKEN_INVALID */.mK.TOKEN_INVALID
212
+ messageKey: constants/* .AUTH_MESSAGES.TOKEN_INVALID */.mK.TOKEN_INVALID
608
213
  });
609
214
  }
215
+ (0,logger_middleware/* .setRequestUser */.ZV)(user);
610
216
  return user;
611
217
  }
612
218
  }
@@ -647,6 +253,7 @@ function optional_jwt_auth_guard_ts_param(paramIndex, decorator) {
647
253
 
648
254
 
649
255
 
256
+
650
257
  class OptionalJwtGuard extends (0,__rspack_external__nestjs_passport_18907953.AuthGuard)('jwt') {
651
258
  reflector;
652
259
  constructor(reflector){
@@ -663,6 +270,7 @@ class OptionalJwtGuard extends (0,__rspack_external__nestjs_passport_18907953.Au
663
270
  return super.canActivate(context);
664
271
  }
665
272
  handleRequest(_err, user) {
273
+ (0,logger_middleware/* .setRequestUser */.ZV)(user);
666
274
  return user || undefined;
667
275
  }
668
276
  }
@@ -730,7 +338,7 @@ class PermissionGuard {
730
338
  const user = request.user;
731
339
  if (!user) throw new common_.UnauthorizedException({
732
340
  message: 'Authentication required',
733
- messageKey: message_keys/* .AUTH_MESSAGES.TOKEN_REQUIRED */.mK.TOKEN_REQUIRED
341
+ messageKey: constants/* .AUTH_MESSAGES.TOKEN_REQUIRED */.mK.TOKEN_REQUIRED
734
342
  });
735
343
  if (!this.permissionCacheService?.isCacheConfigured()) {
736
344
  throw new permission_exception/* .PermissionSystemUnavailableException */.GS();
@@ -856,8 +464,10 @@ PermissionGuard = permission_guard_ts_decorate([
856
464
  657(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
857
465
  /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
858
466
  /* import */ var _classes_hybrid_cache_class_js__rspack_import_1 = __webpack_require__(375);
859
- /* import */ var _constants_index_js__rspack_import_3 = __webpack_require__(43);
860
- /* import */ var _utils_permission_cache_key_util_js__rspack_import_2 = __webpack_require__(199);
467
+ /* import */ var _constants_index_js__rspack_import_2 = __webpack_require__(43);
468
+ /* import */ var _exceptions_permission_exception_js__rspack_import_3 = __webpack_require__(374);
469
+ /* import */ var _utils_permission_cache_key_util_js__rspack_import_4 = __webpack_require__(199);
470
+ /* import */ var _utils_permission_match_util_js__rspack_import_5 = __webpack_require__(788);
861
471
  function _ts_decorate(decorators, target, key, desc) {
862
472
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
863
473
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
@@ -885,6 +495,8 @@ function _ts_param(paramIndex, decorator) {
885
495
 
886
496
 
887
497
 
498
+
499
+
888
500
  class SharedPermissionCacheService {
889
501
  cache;
890
502
  config;
@@ -892,52 +504,56 @@ class SharedPermissionCacheService {
892
504
  this.cache = cache;
893
505
  this.config = {
894
506
  enableCompanyFeature: false,
895
- userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
896
- companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_2/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
507
+ userPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_USER_PERMISSION_KEY_FORMAT */.q6,
508
+ companyPermissionKeyFormat: _utils_permission_cache_key_util_js__rspack_import_4/* .DEFAULT_COMPANY_PERMISSION_KEY_FORMAT */.s8,
897
509
  ...config
898
510
  };
899
511
  }
900
512
  /** Read the cached permission codes for a user; empty array when cache is unavailable or unset */ async getPermissions(options) {
901
513
  if (!this.cache) return [];
902
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
514
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
903
515
  const cached = await this.cache.get(cacheKey);
904
516
  if (!cached) return [];
905
517
  return Array.isArray(cached) ? cached : cached.backendCodes || [];
906
518
  }
907
519
  /** Overwrite the cached permission codes for a user with a fixed list */ async setPermissions(options, permissions, ttl) {
908
520
  if (!this.cache) return;
909
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
521
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
910
522
  await this.cache.set(cacheKey, permissions, ttl);
911
523
  }
912
524
  /** Clear the cached permission codes for a user */ async clearPermissions(options) {
913
525
  if (!this.cache) return;
914
- const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_2/* .buildPermissionCacheKey */.nt)(options, this.config);
526
+ const cacheKey = (0,_utils_permission_cache_key_util_js__rspack_import_4/* .buildPermissionCacheKey */.nt)(options, this.config);
915
527
  await this.cache.del(cacheKey);
916
528
  }
917
529
  /** Check a single permission against the cached list, honoring `*` and `prefix.*` wildcards */ async hasPermission(options, requiredPermission) {
918
530
  const permissions = await this.getPermissions(options);
919
531
  return this.matchPermission(permissions, requiredPermission);
920
532
  }
533
+ /** Throws 403 unless `user` holds `requiredPermission`; fails closed (500) when no cache is wired up. */ async assertPermission(user, requiredPermission) {
534
+ if (!this.isCacheConfigured()) throw new _exceptions_permission_exception_js__rspack_import_3/* .PermissionSystemUnavailableException */.GS();
535
+ const allowed = !!user?.id && await this.hasPermission({
536
+ userId: user.id,
537
+ companyId: user.companyId,
538
+ branchId: user.branchId
539
+ }, requiredPermission);
540
+ if (!allowed) throw new _exceptions_permission_exception_js__rspack_import_3/* .InsufficientPermissionsException */.z8([
541
+ requiredPermission
542
+ ], 'AND');
543
+ }
921
544
  /** Whether a cache instance is wired up; false means permission checks can't be served at all */ isCacheConfigured() {
922
545
  return !!this.cache;
923
546
  }
924
547
  /** Match an already-fetched permission list against a required permission, honoring `*` and `prefix.*` wildcards */ matchPermission(userPermissions, requiredPermission) {
925
- if (userPermissions.includes(requiredPermission)) return true;
926
- for (const permission of userPermissions){
927
- if (permission === '*') return true;
928
- if (permission.endsWith('.*') && requiredPermission.startsWith(permission.slice(0, -1))) {
929
- return true;
930
- }
931
- }
932
- return false;
548
+ return (0,_utils_permission_match_util_js__rspack_import_5/* .matchesPermission */.x)(userPermissions, requiredPermission);
933
549
  }
934
550
  }
935
551
  SharedPermissionCacheService = _ts_decorate([
936
552
  (0,_nestjs_common__rspack_import_0.Injectable)(),
937
553
  _ts_param(0, (0,_nestjs_common__rspack_import_0.Optional)()),
938
- _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .CACHE_INSTANCE */.zl)),
554
+ _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .CACHE_INSTANCE */.zl)),
939
555
  _ts_param(1, (0,_nestjs_common__rspack_import_0.Optional)()),
940
- _ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_3/* .PERMISSION_GUARD_CONFIG */.Lw)),
556
+ _ts_param(1, (0,_nestjs_common__rspack_import_0.Inject)(_constants_index_js__rspack_import_2/* .PERMISSION_GUARD_CONFIG */.Lw)),
941
557
  _ts_metadata("design:type", Function),
942
558
  _ts_metadata("design:paramtypes", [
943
559
  typeof _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l === "undefined" ? Object : _classes_hybrid_cache_class_js__rspack_import_1/* .HybridCache */.l,
@@ -973,15 +589,19 @@ __webpack_require__.d(__webpack_exports__, {
973
589
 
974
590
 
975
591
  },
976
- 307(module) {
977
-
978
- module.exports = __rspack_external__flusys_nestjs_core_config_197fa0a9;
979
-
980
-
981
- },
982
- 157(module) {
592
+ 788(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
593
+ /** Whether `granted` covers `required`, honoring `*` (everything) and `prefix.*` (everything under prefix) wildcards */ function matchesPermission(granted, required) {
594
+ if (granted.includes(required)) return true;
595
+ for (const permission of granted){
596
+ if (permission === '*') return true;
597
+ if (permission.endsWith('.*') && required.startsWith(permission.slice(0, -1))) return true;
598
+ }
599
+ return false;
600
+ }
983
601
 
984
- module.exports = __rspack_external__nestjs_common_a04939da;
602
+ __webpack_require__.d(__webpack_exports__, {
603
+ x: () => (matchesPermission)
604
+ });
985
605
 
986
606
 
987
607
  },
@@ -995,8 +615,10 @@ module.exports = __rspack_external__nestjs_core_d7b00a1a;
995
615
  };
996
616
  import { __webpack_require__ } from '../runtime.js';
997
617
  var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
998
- import * as __rspack_chunk_1 from './index.js';
618
+ import * as __rspack_chunk_1 from '../948.js';
999
619
  __webpack_require__.C(__rspack_chunk_1);
620
+ import * as __rspack_chunk_2 from './index.js';
621
+ __webpack_require__.C(__rspack_chunk_2);
1000
622
  var __webpack_exports__ = __webpack_exec__(510);var __webpack_exports__JwtAuthGuard = __webpack_exports__.TD;
1001
623
  var __webpack_exports__OptionalJwtGuard = __webpack_exports__.Zb;
1002
624
  var __webpack_exports__PermissionGuard = __webpack_exports__.LQ;