@flusys/nestjs-iam 7.0.2 → 8.0.0-beta.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 (173) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/action.controller.d.ts +4 -4
  3. package/controllers/company-action-permission.controller.d.ts +2 -2
  4. package/controllers/index.d.ts +6 -6
  5. package/controllers/my-permission.controller.d.ts +3 -3
  6. package/controllers/role-permission.controller.d.ts +4 -4
  7. package/controllers/role.controller.d.ts +2 -2
  8. package/controllers/user-action-permission.controller.d.ts +4 -4
  9. package/docs/iam-swagger.config.d.ts +2 -2
  10. package/docs/index.d.ts +1 -1
  11. package/dtos/action.dto.d.ts +2 -2
  12. package/dtos/index.d.ts +3 -3
  13. package/entities/action.entity.d.ts +2 -2
  14. package/entities/index.d.ts +11 -11
  15. package/entities/permission-with-company.entity.d.ts +1 -1
  16. package/entities/role-with-company.entity.d.ts +1 -1
  17. package/entities/role.entity.d.ts +1 -1
  18. package/entities/user-iam-permission.entity.d.ts +1 -1
  19. package/enums/index.d.ts +4 -4
  20. package/fesm/284.js +1262 -0
  21. package/fesm/867.js +3699 -0
  22. package/fesm/chunks/364.js +86 -0
  23. package/fesm/config/index.js +133 -3
  24. package/fesm/controllers/index.js +18 -7
  25. package/fesm/docs/index.js +240 -1
  26. package/fesm/dtos/index.js +1090 -3
  27. package/fesm/entities/index.js +670 -31
  28. package/fesm/enums/index.js +97 -4
  29. package/fesm/helpers/index.js +125 -2
  30. package/fesm/index.js +806 -11
  31. package/fesm/interfaces/index.js +17 -3
  32. package/fesm/modules/index.js +259 -1
  33. package/fesm/runtime.js +134 -0
  34. package/fesm/services/index.js +43 -6
  35. package/fesm/types/index.js +15 -1
  36. package/helpers/company-access.helper.d.ts +2 -2
  37. package/helpers/index.d.ts +2 -2
  38. package/helpers/permission-mode.helper.d.ts +1 -1
  39. package/index.d.ts +11 -11
  40. package/interfaces/action.interface.d.ts +2 -2
  41. package/interfaces/iam-module-options.interface.d.ts +3 -3
  42. package/interfaces/index.d.ts +3 -3
  43. package/modules/iam.module.d.ts +2 -2
  44. package/modules/index.d.ts +1 -1
  45. package/package.json +30 -37
  46. package/services/action.service.d.ts +9 -9
  47. package/services/iam-config.service.d.ts +4 -4
  48. package/services/iam-datasource.service.d.ts +3 -3
  49. package/services/index.d.ts +6 -6
  50. package/services/permission-cache.service.d.ts +5 -5
  51. package/services/permission.service.d.ts +4 -4
  52. package/services/role.service.d.ts +8 -8
  53. package/types/index.d.ts +1 -1
  54. package/cjs/config/event-actions.js +0 -36
  55. package/cjs/config/iam.constants.js +0 -11
  56. package/cjs/config/index.js +0 -20
  57. package/cjs/config/message-keys.js +0 -71
  58. package/cjs/controllers/action.controller.js +0 -174
  59. package/cjs/controllers/action.controller.spec.js +0 -79
  60. package/cjs/controllers/company-action-permission.controller.js +0 -119
  61. package/cjs/controllers/company-action-permission.controller.spec.js +0 -65
  62. package/cjs/controllers/index.js +0 -23
  63. package/cjs/controllers/my-permission.controller.js +0 -147
  64. package/cjs/controllers/my-permission.controller.spec.js +0 -128
  65. package/cjs/controllers/role-permission.controller.js +0 -191
  66. package/cjs/controllers/role-permission.controller.spec.js +0 -140
  67. package/cjs/controllers/role.controller.js +0 -102
  68. package/cjs/controllers/role.controller.spec.js +0 -86
  69. package/cjs/controllers/user-action-permission.controller.js +0 -129
  70. package/cjs/controllers/user-action-permission.controller.spec.js +0 -68
  71. package/cjs/docs/iam-swagger.config.js +0 -209
  72. package/cjs/docs/iam-swagger.config.spec.js +0 -99
  73. package/cjs/docs/index.js +0 -18
  74. package/cjs/dtos/action.dto.js +0 -282
  75. package/cjs/dtos/index.js +0 -21
  76. package/cjs/dtos/permission.dto.js +0 -637
  77. package/cjs/dtos/role.dto.js +0 -155
  78. package/cjs/entities/action.entity.js +0 -138
  79. package/cjs/entities/index.js +0 -80
  80. package/cjs/entities/index.spec.js +0 -56
  81. package/cjs/entities/permission-base.entity.js +0 -107
  82. package/cjs/entities/permission-with-company.entity.js +0 -100
  83. package/cjs/entities/role-base.entity.js +0 -80
  84. package/cjs/entities/role-with-company.entity.js +0 -55
  85. package/cjs/entities/role.entity.js +0 -25
  86. package/cjs/entities/user-iam-permission.entity.js +0 -43
  87. package/cjs/enums/action-type.enum.js +0 -22
  88. package/cjs/enums/iam-entity-type.enum.js +0 -17
  89. package/cjs/enums/iam-permission-type.enum.js +0 -17
  90. package/cjs/enums/index.js +0 -21
  91. package/cjs/enums/permission-type.enum.js +0 -16
  92. package/cjs/helpers/company-access.helper.js +0 -23
  93. package/cjs/helpers/company-access.helper.spec.js +0 -68
  94. package/cjs/helpers/index.js +0 -19
  95. package/cjs/helpers/permission-mode.helper.js +0 -49
  96. package/cjs/helpers/permission-mode.helper.spec.js +0 -54
  97. package/cjs/index.js +0 -28
  98. package/cjs/interfaces/action.interface.js +0 -4
  99. package/cjs/interfaces/iam-module-options.interface.js +0 -4
  100. package/cjs/interfaces/index.js +0 -20
  101. package/cjs/interfaces/role.interface.js +0 -7
  102. package/cjs/modules/iam.module.js +0 -186
  103. package/cjs/modules/iam.module.spec.js +0 -282
  104. package/cjs/modules/index.js +0 -18
  105. package/cjs/services/action.service.js +0 -337
  106. package/cjs/services/action.service.spec.js +0 -351
  107. package/cjs/services/iam-config.service.js +0 -87
  108. package/cjs/services/iam-config.service.spec.js +0 -110
  109. package/cjs/services/iam-datasource.service.js +0 -129
  110. package/cjs/services/iam-datasource.service.spec.js +0 -110
  111. package/cjs/services/index.js +0 -23
  112. package/cjs/services/permission-cache.service.js +0 -544
  113. package/cjs/services/permission-cache.service.spec.js +0 -718
  114. package/cjs/services/permission.service.js +0 -914
  115. package/cjs/services/permission.service.spec.js +0 -918
  116. package/cjs/services/role.service.js +0 -224
  117. package/cjs/services/role.service.spec.js +0 -347
  118. package/cjs/types/index.js +0 -18
  119. package/cjs/types/logic-node.type.js +0 -30
  120. package/fesm/config/event-actions.js +0 -15
  121. package/fesm/config/iam.constants.js +0 -1
  122. package/fesm/config/message-keys.js +0 -35
  123. package/fesm/controllers/action.controller.js +0 -164
  124. package/fesm/controllers/action.controller.spec.js +0 -75
  125. package/fesm/controllers/company-action-permission.controller.js +0 -109
  126. package/fesm/controllers/company-action-permission.controller.spec.js +0 -61
  127. package/fesm/controllers/my-permission.controller.js +0 -137
  128. package/fesm/controllers/my-permission.controller.spec.js +0 -124
  129. package/fesm/controllers/role-permission.controller.js +0 -181
  130. package/fesm/controllers/role-permission.controller.spec.js +0 -136
  131. package/fesm/controllers/role.controller.js +0 -92
  132. package/fesm/controllers/role.controller.spec.js +0 -82
  133. package/fesm/controllers/user-action-permission.controller.js +0 -119
  134. package/fesm/controllers/user-action-permission.controller.spec.js +0 -64
  135. package/fesm/docs/iam-swagger.config.js +0 -199
  136. package/fesm/docs/iam-swagger.config.spec.js +0 -95
  137. package/fesm/dtos/action.dto.js +0 -252
  138. package/fesm/dtos/permission.dto.js +0 -571
  139. package/fesm/dtos/role.dto.js +0 -134
  140. package/fesm/entities/action.entity.js +0 -128
  141. package/fesm/entities/index.spec.js +0 -52
  142. package/fesm/entities/permission-base.entity.js +0 -100
  143. package/fesm/entities/permission-with-company.entity.js +0 -90
  144. package/fesm/entities/role-base.entity.js +0 -70
  145. package/fesm/entities/role-with-company.entity.js +0 -45
  146. package/fesm/entities/role.entity.js +0 -15
  147. package/fesm/entities/user-iam-permission.entity.js +0 -33
  148. package/fesm/enums/action-type.enum.js +0 -12
  149. package/fesm/enums/iam-entity-type.enum.js +0 -7
  150. package/fesm/enums/iam-permission-type.enum.js +0 -7
  151. package/fesm/enums/permission-type.enum.js +0 -6
  152. package/fesm/helpers/company-access.helper.js +0 -18
  153. package/fesm/helpers/company-access.helper.spec.js +0 -64
  154. package/fesm/helpers/permission-mode.helper.js +0 -49
  155. package/fesm/helpers/permission-mode.helper.spec.js +0 -50
  156. package/fesm/interfaces/action.interface.js +0 -3
  157. package/fesm/interfaces/iam-module-options.interface.js +0 -3
  158. package/fesm/interfaces/role.interface.js +0 -4
  159. package/fesm/modules/iam.module.js +0 -176
  160. package/fesm/modules/iam.module.spec.js +0 -278
  161. package/fesm/services/action.service.js +0 -327
  162. package/fesm/services/action.service.spec.js +0 -347
  163. package/fesm/services/iam-config.service.js +0 -77
  164. package/fesm/services/iam-config.service.spec.js +0 -106
  165. package/fesm/services/iam-datasource.service.js +0 -78
  166. package/fesm/services/iam-datasource.service.spec.js +0 -106
  167. package/fesm/services/permission-cache.service.js +0 -527
  168. package/fesm/services/permission-cache.service.spec.js +0 -714
  169. package/fesm/services/permission.service.js +0 -904
  170. package/fesm/services/permission.service.spec.js +0 -914
  171. package/fesm/services/role.service.js +0 -214
  172. package/fesm/services/role.service.spec.js +0 -343
  173. package/fesm/types/logic-node.type.js +0 -27
package/fesm/867.js ADDED
@@ -0,0 +1,3699 @@
1
+ import { AUTH_MESSAGES } from "@flusys/nestjs-shared/constants";
2
+ import * as __rspack_external__flusys_nestjs_shared_393d2cae from "@flusys/nestjs-shared";
3
+ import * as __rspack_external__flusys_nestjs_shared_classes_6076a329 from "@flusys/nestjs-shared/classes";
4
+ import * as __rspack_external__flusys_nestjs_shared_modules_24702bee from "@flusys/nestjs-shared/modules";
5
+ import * as __rspack_external__nestjs_common_a04939da from "@nestjs/common";
6
+ import * as __rspack_external__nestjs_swagger_7cd450b5 from "@nestjs/swagger";
7
+ import * as __rspack_external_class_transformer_c5a479fb from "class-transformer";
8
+ import * as __rspack_external_class_validator_7b99ef4d from "class-validator";
9
+ import * as __rspack_external_typeorm from "typeorm";
10
+ import * as __rspack_external__nestjs_core_d7b00a1a from "@nestjs/core";
11
+ import * as __rspack_external__flusys_nestjs_core_config_197fa0a9 from "@flusys/nestjs-core/config";
12
+ import * as __rspack_external__flusys_nestjs_shared_utils_9125c1f1 from "@flusys/nestjs-shared/utils";
13
+ export const __rspack_esm_id = 867;
14
+ export const __rspack_esm_ids = [867];
15
+ export const __webpack_modules__ = {
16
+ 916(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
17
+ /**
18
+ * Domain event actions published by the IAM module, alongside the CRUD
19
+ * lifecycle actions every ApiService emits.
20
+ */ const IAM_EVENT_ACTIONS = {
21
+ PERMISSIONS_ASSIGNED: 'permissions-assigned'
22
+ };
23
+ /** Every entity the IAM module publishes under, ApiService backed or not */ const IAM_EVENT_ENTITIES = {
24
+ ACTION: 'action',
25
+ ROLE: 'role',
26
+ USER_ACTION: 'user_action',
27
+ ROLE_ACTION: 'role_action',
28
+ COMPANY_ACTION: 'company_action',
29
+ USER_ROLE: 'user_role'
30
+ };
31
+ const IAM_EVENT_MODULE = 'iam';
32
+
33
+ __webpack_require__.d(__webpack_exports__, {
34
+ }, {
35
+ H: IAM_EVENT_ENTITIES,
36
+ X: IAM_EVENT_ACTIONS
37
+ });
38
+
39
+
40
+ },
41
+ 180(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
42
+ const IAM_MODULE_OPTIONS = 'IAM_MODULE_OPTIONS';
43
+
44
+ __webpack_require__.d(__webpack_exports__, {
45
+ }, {
46
+ G: IAM_MODULE_OPTIONS
47
+ });
48
+
49
+
50
+ },
51
+ 490(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
52
+ // ==================== IAM MODULE MESSAGE KEYS ====================
53
+ const ACTION_MESSAGES = {
54
+ GET_ALL_SUCCESS: 'action.get.all.success',
55
+ READONLY_UPDATE_FORBIDDEN: 'action.readonly.update.forbidden',
56
+ READONLY_DELETE_FORBIDDEN: 'action.readonly.delete.forbidden'
57
+ };
58
+ const ROLE_MESSAGES = {
59
+ READONLY_UPDATE_FORBIDDEN: 'role.readonly.update.forbidden',
60
+ READONLY_DELETE_FORBIDDEN: 'role.readonly.delete.forbidden'
61
+ };
62
+ const PERMISSION_OPERATION_MESSAGES = {
63
+ PROCESS_SUCCESS: 'permission.process.success',
64
+ ALREADY_EXISTS: 'permission.already.exists',
65
+ USER_REQUIRED: 'permission.user.required'
66
+ };
67
+ const ROLE_PERMISSION_MESSAGES = {
68
+ ACTIONS_SUCCESS: 'role.permission.actions.success',
69
+ USER_ROLES_SUCCESS: 'role.permission.user.roles.success'
70
+ };
71
+ const USER_ACTION_PERMISSION_MESSAGES = {
72
+ GET_SUCCESS: 'user.action.permission.get.success'
73
+ };
74
+ const COMPANY_ACTION_PERMISSION_MESSAGES = {
75
+ GET_SUCCESS: 'company.action.permission.get.success'
76
+ };
77
+ const MY_PERMISSION_MESSAGES = {
78
+ GET_SUCCESS: 'my.permission.get.success',
79
+ MY_ROLES_SUCCESS: 'my.permission.roles.success',
80
+ MY_ACTIONS_SUCCESS: 'my.permission.actions.success'
81
+ };
82
+ const IAM_MODE_MESSAGES = {
83
+ DIRECT_MODE_UNAVAILABLE: 'iam.direct.mode.unavailable',
84
+ RBAC_MODE_UNAVAILABLE: 'iam.rbac.mode.unavailable',
85
+ ROLE_ASSIGNMENT_UNAVAILABLE: 'iam.role.assignment.unavailable'
86
+ };
87
+
88
+ __webpack_require__.d(__webpack_exports__, {
89
+ }, {
90
+ GG: COMPANY_ACTION_PERMISSION_MESSAGES,
91
+ P3: PERMISSION_OPERATION_MESSAGES,
92
+ Q$: ACTION_MESSAGES,
93
+ QW: ROLE_MESSAGES,
94
+ eh: ROLE_PERMISSION_MESSAGES,
95
+ k: USER_ACTION_PERMISSION_MESSAGES,
96
+ sb: MY_PERMISSION_MESSAGES,
97
+ xI: IAM_MODE_MESSAGES
98
+ });
99
+
100
+
101
+ },
102
+ 296(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
103
+ /* import */ var _nestjs_swagger__rspack_import_0 = __webpack_require__(176);
104
+ /* import */ var class_transformer__rspack_import_1 = __webpack_require__(812);
105
+ /* import */ var class_validator__rspack_import_2 = __webpack_require__(421);
106
+ function _ts_decorate(decorators, target, key, desc) {
107
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
108
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
109
+ r = Reflect.decorate(decorators, target, key, desc);
110
+ } else {
111
+ for(var i = decorators.length - 1; i >= 0; i--){
112
+ if (d = decorators[i]) {
113
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
114
+ }
115
+ }
116
+ }
117
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
118
+ }
119
+ function _ts_metadata(metadataKey, metadataValue) {
120
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
121
+ return Reflect.metadata(metadataKey, metadataValue);
122
+ }
123
+ }
124
+
125
+
126
+
127
+ var PermissionAction = /*#__PURE__*/ function(PermissionAction) {
128
+ PermissionAction["ADD"] = "add";
129
+ PermissionAction["REMOVE"] = "remove";
130
+ return PermissionAction;
131
+ }({});
132
+ class PermissionItemDto {
133
+ id;
134
+ action;
135
+ }
136
+ _ts_decorate([
137
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
138
+ description: 'ID of the target (action or role)'
139
+ }),
140
+ (0,class_validator__rspack_import_2.IsUUID)(),
141
+ _ts_metadata("design:type", String)
142
+ ], PermissionItemDto.prototype, "id", void 0);
143
+ _ts_decorate([
144
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
145
+ description: 'Action to perform',
146
+ enum: PermissionAction,
147
+ example: "add"
148
+ }),
149
+ (0,class_validator__rspack_import_2.IsEnum)(PermissionAction),
150
+ _ts_metadata("design:type", String)
151
+ ], PermissionItemDto.prototype, "action", void 0);
152
+ class AssignUserActionsDto {
153
+ userId;
154
+ companyId;
155
+ branchId;
156
+ items;
157
+ }
158
+ _ts_decorate([
159
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
160
+ description: 'User ID'
161
+ }),
162
+ (0,class_validator__rspack_import_2.IsUUID)(),
163
+ _ts_metadata("design:type", String)
164
+ ], AssignUserActionsDto.prototype, "userId", void 0);
165
+ _ts_decorate([
166
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
167
+ description: 'Company ID (for company-wide or branch-specific assignments)'
168
+ }),
169
+ (0,class_validator__rspack_import_2.IsUUID)(),
170
+ (0,class_validator__rspack_import_2.IsOptional)(),
171
+ _ts_metadata("design:type", String)
172
+ ], AssignUserActionsDto.prototype, "companyId", void 0);
173
+ _ts_decorate([
174
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
175
+ description: 'Branch ID (null = company-wide, set = branch-specific)'
176
+ }),
177
+ (0,class_validator__rspack_import_2.IsUUID)(),
178
+ (0,class_validator__rspack_import_2.IsOptional)(),
179
+ _ts_metadata("design:type", String)
180
+ ], AssignUserActionsDto.prototype, "branchId", void 0);
181
+ _ts_decorate([
182
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
183
+ description: 'Array of actions to assign/remove',
184
+ type: [
185
+ PermissionItemDto
186
+ ]
187
+ }),
188
+ (0,class_validator__rspack_import_2.IsArray)(),
189
+ (0,class_validator__rspack_import_2.ValidateNested)({
190
+ each: true
191
+ }),
192
+ (0,class_transformer__rspack_import_1.Type)(()=>PermissionItemDto),
193
+ _ts_metadata("design:type", Array)
194
+ ], AssignUserActionsDto.prototype, "items", void 0);
195
+ class AssignCompanyActionsDto {
196
+ companyId;
197
+ items;
198
+ }
199
+ _ts_decorate([
200
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
201
+ description: 'Company ID'
202
+ }),
203
+ (0,class_validator__rspack_import_2.IsUUID)(),
204
+ _ts_metadata("design:type", String)
205
+ ], AssignCompanyActionsDto.prototype, "companyId", void 0);
206
+ _ts_decorate([
207
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
208
+ description: 'Array of actions to assign/remove to company (whitelist)',
209
+ type: [
210
+ PermissionItemDto
211
+ ]
212
+ }),
213
+ (0,class_validator__rspack_import_2.IsArray)(),
214
+ (0,class_validator__rspack_import_2.ValidateNested)({
215
+ each: true
216
+ }),
217
+ (0,class_transformer__rspack_import_1.Type)(()=>PermissionItemDto),
218
+ _ts_metadata("design:type", Array)
219
+ ], AssignCompanyActionsDto.prototype, "items", void 0);
220
+ class AssignRoleActionsDto {
221
+ roleId;
222
+ items;
223
+ }
224
+ _ts_decorate([
225
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
226
+ description: 'Role ID'
227
+ }),
228
+ (0,class_validator__rspack_import_2.IsUUID)(),
229
+ _ts_metadata("design:type", String)
230
+ ], AssignRoleActionsDto.prototype, "roleId", void 0);
231
+ _ts_decorate([
232
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
233
+ description: 'Array of actions to assign/remove',
234
+ type: [
235
+ PermissionItemDto
236
+ ]
237
+ }),
238
+ (0,class_validator__rspack_import_2.IsArray)(),
239
+ (0,class_validator__rspack_import_2.ValidateNested)({
240
+ each: true
241
+ }),
242
+ (0,class_transformer__rspack_import_1.Type)(()=>PermissionItemDto),
243
+ _ts_metadata("design:type", Array)
244
+ ], AssignRoleActionsDto.prototype, "items", void 0);
245
+ class AssignUserRolesDto {
246
+ userId;
247
+ companyId;
248
+ branchId;
249
+ items;
250
+ }
251
+ _ts_decorate([
252
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
253
+ description: 'User ID'
254
+ }),
255
+ (0,class_validator__rspack_import_2.IsUUID)(),
256
+ _ts_metadata("design:type", String)
257
+ ], AssignUserRolesDto.prototype, "userId", void 0);
258
+ _ts_decorate([
259
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
260
+ description: 'Company ID (for company-wide or branch-specific assignments)'
261
+ }),
262
+ (0,class_validator__rspack_import_2.IsUUID)(),
263
+ (0,class_validator__rspack_import_2.IsOptional)(),
264
+ _ts_metadata("design:type", String)
265
+ ], AssignUserRolesDto.prototype, "companyId", void 0);
266
+ _ts_decorate([
267
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
268
+ description: 'Branch ID (null = company-wide, set = branch-specific)'
269
+ }),
270
+ (0,class_validator__rspack_import_2.IsUUID)(),
271
+ (0,class_validator__rspack_import_2.IsOptional)(),
272
+ _ts_metadata("design:type", String)
273
+ ], AssignUserRolesDto.prototype, "branchId", void 0);
274
+ _ts_decorate([
275
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
276
+ description: 'Array of roles to assign/remove',
277
+ type: [
278
+ PermissionItemDto
279
+ ]
280
+ }),
281
+ (0,class_validator__rspack_import_2.IsArray)(),
282
+ (0,class_validator__rspack_import_2.ValidateNested)({
283
+ each: true
284
+ }),
285
+ (0,class_transformer__rspack_import_1.Type)(()=>PermissionItemDto),
286
+ _ts_metadata("design:type", Array)
287
+ ], AssignUserRolesDto.prototype, "items", void 0);
288
+ class GetUserActionsDto {
289
+ userId;
290
+ companyId;
291
+ branchId;
292
+ }
293
+ _ts_decorate([
294
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
295
+ description: 'User ID to get actions for'
296
+ }),
297
+ (0,class_validator__rspack_import_2.IsUUID)(),
298
+ _ts_metadata("design:type", String)
299
+ ], GetUserActionsDto.prototype, "userId", void 0);
300
+ _ts_decorate([
301
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
302
+ description: 'Company ID (ignored when enableCompanyFeature is false)'
303
+ }),
304
+ (0,class_validator__rspack_import_2.IsUUID)(),
305
+ (0,class_validator__rspack_import_2.IsOptional)(),
306
+ _ts_metadata("design:type", String)
307
+ ], GetUserActionsDto.prototype, "companyId", void 0);
308
+ _ts_decorate([
309
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
310
+ description: 'Branch ID to filter by branch (ignored when enableCompanyFeature is false)'
311
+ }),
312
+ (0,class_validator__rspack_import_2.IsUUID)(),
313
+ (0,class_validator__rspack_import_2.IsOptional)(),
314
+ _ts_metadata("design:type", String)
315
+ ], GetUserActionsDto.prototype, "branchId", void 0);
316
+ class GetRoleActionsDto {
317
+ roleId;
318
+ }
319
+ _ts_decorate([
320
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
321
+ description: 'Role ID to get actions for'
322
+ }),
323
+ (0,class_validator__rspack_import_2.IsUUID)(),
324
+ _ts_metadata("design:type", String)
325
+ ], GetRoleActionsDto.prototype, "roleId", void 0);
326
+ class GetCompanyActionsDto {
327
+ companyId;
328
+ }
329
+ _ts_decorate([
330
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
331
+ description: 'Company ID to get actions for'
332
+ }),
333
+ (0,class_validator__rspack_import_2.IsUUID)(),
334
+ _ts_metadata("design:type", String)
335
+ ], GetCompanyActionsDto.prototype, "companyId", void 0);
336
+ class GetUserRolesDto {
337
+ userId;
338
+ companyId;
339
+ branchId;
340
+ }
341
+ _ts_decorate([
342
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
343
+ description: 'User ID to get roles for'
344
+ }),
345
+ (0,class_validator__rspack_import_2.IsUUID)(),
346
+ _ts_metadata("design:type", String)
347
+ ], GetUserRolesDto.prototype, "userId", void 0);
348
+ _ts_decorate([
349
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
350
+ description: 'Company ID (ignored when enableCompanyFeature is false)'
351
+ }),
352
+ (0,class_validator__rspack_import_2.IsUUID)(),
353
+ (0,class_validator__rspack_import_2.IsOptional)(),
354
+ _ts_metadata("design:type", String)
355
+ ], GetUserRolesDto.prototype, "companyId", void 0);
356
+ _ts_decorate([
357
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
358
+ description: 'Branch ID to filter by branch (ignored when enableCompanyFeature is false)'
359
+ }),
360
+ (0,class_validator__rspack_import_2.IsUUID)(),
361
+ (0,class_validator__rspack_import_2.IsOptional)(),
362
+ _ts_metadata("design:type", String)
363
+ ], GetUserRolesDto.prototype, "branchId", void 0);
364
+ class UserActionResponseDto {
365
+ id;
366
+ userId;
367
+ actionId;
368
+ actionCode;
369
+ actionName;
370
+ companyId;
371
+ branchId;
372
+ createdAt;
373
+ }
374
+ _ts_decorate([
375
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
376
+ description: 'Permission ID'
377
+ }),
378
+ _ts_metadata("design:type", String)
379
+ ], UserActionResponseDto.prototype, "id", void 0);
380
+ _ts_decorate([
381
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
382
+ description: 'User ID'
383
+ }),
384
+ _ts_metadata("design:type", String)
385
+ ], UserActionResponseDto.prototype, "userId", void 0);
386
+ _ts_decorate([
387
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
388
+ description: 'Action ID'
389
+ }),
390
+ _ts_metadata("design:type", String)
391
+ ], UserActionResponseDto.prototype, "actionId", void 0);
392
+ _ts_decorate([
393
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
394
+ description: 'Action code'
395
+ }),
396
+ _ts_metadata("design:type", String)
397
+ ], UserActionResponseDto.prototype, "actionCode", void 0);
398
+ _ts_decorate([
399
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
400
+ description: 'Action name'
401
+ }),
402
+ _ts_metadata("design:type", String)
403
+ ], UserActionResponseDto.prototype, "actionName", void 0);
404
+ _ts_decorate([
405
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
406
+ description: 'Company ID (null = global)'
407
+ }),
408
+ _ts_metadata("design:type", Object)
409
+ ], UserActionResponseDto.prototype, "companyId", void 0);
410
+ _ts_decorate([
411
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
412
+ description: 'Branch ID (null = company-wide)'
413
+ }),
414
+ _ts_metadata("design:type", Object)
415
+ ], UserActionResponseDto.prototype, "branchId", void 0);
416
+ _ts_decorate([
417
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
418
+ description: 'When this permission was created'
419
+ }),
420
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
421
+ ], UserActionResponseDto.prototype, "createdAt", void 0);
422
+ class RoleActionResponseDto {
423
+ id;
424
+ roleId;
425
+ actionId;
426
+ actionCode;
427
+ actionName;
428
+ createdAt;
429
+ }
430
+ _ts_decorate([
431
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
432
+ description: 'Permission ID'
433
+ }),
434
+ _ts_metadata("design:type", String)
435
+ ], RoleActionResponseDto.prototype, "id", void 0);
436
+ _ts_decorate([
437
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
438
+ description: 'Role ID'
439
+ }),
440
+ _ts_metadata("design:type", String)
441
+ ], RoleActionResponseDto.prototype, "roleId", void 0);
442
+ _ts_decorate([
443
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
444
+ description: 'Action ID'
445
+ }),
446
+ _ts_metadata("design:type", String)
447
+ ], RoleActionResponseDto.prototype, "actionId", void 0);
448
+ _ts_decorate([
449
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
450
+ description: 'Action code'
451
+ }),
452
+ _ts_metadata("design:type", String)
453
+ ], RoleActionResponseDto.prototype, "actionCode", void 0);
454
+ _ts_decorate([
455
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
456
+ description: 'Action name'
457
+ }),
458
+ _ts_metadata("design:type", String)
459
+ ], RoleActionResponseDto.prototype, "actionName", void 0);
460
+ _ts_decorate([
461
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
462
+ description: 'When this permission was created'
463
+ }),
464
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
465
+ ], RoleActionResponseDto.prototype, "createdAt", void 0);
466
+ class CompanyActionResponseDto {
467
+ id;
468
+ companyId;
469
+ actionId;
470
+ actionCode;
471
+ actionName;
472
+ createdAt;
473
+ }
474
+ _ts_decorate([
475
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
476
+ description: 'Permission ID'
477
+ }),
478
+ _ts_metadata("design:type", String)
479
+ ], CompanyActionResponseDto.prototype, "id", void 0);
480
+ _ts_decorate([
481
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
482
+ description: 'Company ID'
483
+ }),
484
+ _ts_metadata("design:type", String)
485
+ ], CompanyActionResponseDto.prototype, "companyId", void 0);
486
+ _ts_decorate([
487
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
488
+ description: 'Action ID'
489
+ }),
490
+ _ts_metadata("design:type", String)
491
+ ], CompanyActionResponseDto.prototype, "actionId", void 0);
492
+ _ts_decorate([
493
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
494
+ description: 'Action Code'
495
+ }),
496
+ _ts_metadata("design:type", String)
497
+ ], CompanyActionResponseDto.prototype, "actionCode", void 0);
498
+ _ts_decorate([
499
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
500
+ description: 'Action Name'
501
+ }),
502
+ _ts_metadata("design:type", String)
503
+ ], CompanyActionResponseDto.prototype, "actionName", void 0);
504
+ _ts_decorate([
505
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
506
+ description: 'When this permission was created'
507
+ }),
508
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
509
+ ], CompanyActionResponseDto.prototype, "createdAt", void 0);
510
+ class UserRoleResponseDto {
511
+ id;
512
+ userId;
513
+ roleId;
514
+ roleName;
515
+ branchId;
516
+ createdAt;
517
+ }
518
+ _ts_decorate([
519
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
520
+ description: 'Permission ID'
521
+ }),
522
+ _ts_metadata("design:type", String)
523
+ ], UserRoleResponseDto.prototype, "id", void 0);
524
+ _ts_decorate([
525
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
526
+ description: 'User ID'
527
+ }),
528
+ _ts_metadata("design:type", String)
529
+ ], UserRoleResponseDto.prototype, "userId", void 0);
530
+ _ts_decorate([
531
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
532
+ description: 'Role ID'
533
+ }),
534
+ _ts_metadata("design:type", String)
535
+ ], UserRoleResponseDto.prototype, "roleId", void 0);
536
+ _ts_decorate([
537
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
538
+ description: 'Role name'
539
+ }),
540
+ _ts_metadata("design:type", String)
541
+ ], UserRoleResponseDto.prototype, "roleName", void 0);
542
+ _ts_decorate([
543
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
544
+ description: 'Branch ID (null = company-wide)'
545
+ }),
546
+ _ts_metadata("design:type", Object)
547
+ ], UserRoleResponseDto.prototype, "branchId", void 0);
548
+ _ts_decorate([
549
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
550
+ description: 'When this permission was created'
551
+ }),
552
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
553
+ ], UserRoleResponseDto.prototype, "createdAt", void 0);
554
+ class FrontendActionDto {
555
+ code;
556
+ name;
557
+ description;
558
+ }
559
+ _ts_decorate([
560
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
561
+ description: 'Action code'
562
+ }),
563
+ _ts_metadata("design:type", String)
564
+ ], FrontendActionDto.prototype, "code", void 0);
565
+ _ts_decorate([
566
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
567
+ description: 'Action name'
568
+ }),
569
+ _ts_metadata("design:type", String)
570
+ ], FrontendActionDto.prototype, "name", void 0);
571
+ _ts_decorate([
572
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
573
+ description: 'Action description'
574
+ }),
575
+ _ts_metadata("design:type", Object)
576
+ ], FrontendActionDto.prototype, "description", void 0);
577
+ class MyPermissionsQueryDto {
578
+ parentCodes;
579
+ }
580
+ _ts_decorate([
581
+ (0,_nestjs_swagger__rspack_import_0.ApiPropertyOptional)({
582
+ description: 'Filter by parent action codes',
583
+ example: [
584
+ 'user',
585
+ 'role'
586
+ ],
587
+ type: [
588
+ String
589
+ ]
590
+ }),
591
+ (0,class_validator__rspack_import_2.IsArray)(),
592
+ (0,class_validator__rspack_import_2.IsString)({
593
+ each: true
594
+ }),
595
+ (0,class_validator__rspack_import_2.IsOptional)(),
596
+ _ts_metadata("design:type", Array)
597
+ ], MyPermissionsQueryDto.prototype, "parentCodes", void 0);
598
+ class MyPermissionsResponseDto {
599
+ frontendActions;
600
+ cachedEndpoints;
601
+ }
602
+ _ts_decorate([
603
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
604
+ type: [
605
+ FrontendActionDto
606
+ ]
607
+ }),
608
+ _ts_metadata("design:type", Array)
609
+ ], MyPermissionsResponseDto.prototype, "frontendActions", void 0);
610
+ _ts_decorate([
611
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
612
+ description: 'Number of endpoint actions cached for PermissionGuard'
613
+ }),
614
+ _ts_metadata("design:type", Number)
615
+ ], MyPermissionsResponseDto.prototype, "cachedEndpoints", void 0);
616
+ class PermissionOperationResultDto {
617
+ added;
618
+ removed;
619
+ total;
620
+ }
621
+ _ts_decorate([
622
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
623
+ description: 'Number of permissions added'
624
+ }),
625
+ _ts_metadata("design:type", Number)
626
+ ], PermissionOperationResultDto.prototype, "added", void 0);
627
+ _ts_decorate([
628
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
629
+ description: 'Number of permissions removed'
630
+ }),
631
+ _ts_metadata("design:type", Number)
632
+ ], PermissionOperationResultDto.prototype, "removed", void 0);
633
+ _ts_decorate([
634
+ (0,_nestjs_swagger__rspack_import_0.ApiProperty)({
635
+ description: 'Number of permissions requested'
636
+ }),
637
+ _ts_metadata("design:type", Number)
638
+ ], PermissionOperationResultDto.prototype, "total", void 0);
639
+
640
+ __webpack_require__.d(__webpack_exports__, {
641
+ $l: () => (RoleActionResponseDto),
642
+ CM: () => (GetUserActionsDto),
643
+ E4: () => (CompanyActionResponseDto),
644
+ LK: () => (UserRoleResponseDto),
645
+ Nx: () => (AssignCompanyActionsDto),
646
+ O_: () => (MyPermissionsQueryDto),
647
+ Q0: () => (GetUserRolesDto),
648
+ Uu: () => (PermissionItemDto),
649
+ Xz: () => (AssignUserRolesDto),
650
+ Yb: () => (FrontendActionDto),
651
+ Zn: () => (GetRoleActionsDto),
652
+ aG: () => (PermissionAction),
653
+ c8: () => (GetCompanyActionsDto),
654
+ cv: () => (AssignRoleActionsDto),
655
+ gF: () => (UserActionResponseDto),
656
+ ji: () => (MyPermissionsResponseDto),
657
+ xJ: () => (PermissionOperationResultDto),
658
+ zs: () => (AssignUserActionsDto)
659
+ });
660
+
661
+
662
+ },
663
+ 864(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
664
+ /* import */ var _flusys_nestjs_shared__rspack_import_0 = __webpack_require__(422);
665
+ /* import */ var typeorm__rspack_import_1 = __webpack_require__(158);
666
+ /* import */ var _enums_index_js__rspack_import_2 = __webpack_require__(560);
667
+ function _ts_decorate(decorators, target, key, desc) {
668
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
669
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
670
+ r = Reflect.decorate(decorators, target, key, desc);
671
+ } else {
672
+ for(var i = decorators.length - 1; i >= 0; i--){
673
+ if (d = decorators[i]) {
674
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
675
+ }
676
+ }
677
+ }
678
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
679
+ }
680
+ function _ts_metadata(metadataKey, metadataValue) {
681
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
682
+ return Reflect.metadata(metadataKey, metadataValue);
683
+ }
684
+ }
685
+
686
+
687
+
688
+ class Action extends _flusys_nestjs_shared__rspack_import_0.Identity {
689
+ readOnly;
690
+ name;
691
+ description;
692
+ code;
693
+ actionType;
694
+ permissionLogic;
695
+ serial;
696
+ isActive;
697
+ parent;
698
+ parentId;
699
+ children;
700
+ }
701
+ _ts_decorate([
702
+ (0,typeorm__rspack_import_1.Column)({
703
+ type: 'boolean',
704
+ nullable: false,
705
+ default: false,
706
+ name: 'read_only'
707
+ }),
708
+ _ts_metadata("design:type", Boolean)
709
+ ], Action.prototype, "readOnly", void 0);
710
+ _ts_decorate([
711
+ (0,typeorm__rspack_import_1.Column)({
712
+ type: 'varchar',
713
+ length: 255,
714
+ nullable: false
715
+ }),
716
+ _ts_metadata("design:type", String)
717
+ ], Action.prototype, "name", void 0);
718
+ _ts_decorate([
719
+ (0,typeorm__rspack_import_1.Column)({
720
+ type: 'varchar',
721
+ length: 500,
722
+ nullable: true
723
+ }),
724
+ _ts_metadata("design:type", Object)
725
+ ], Action.prototype, "description", void 0);
726
+ _ts_decorate([
727
+ (0,typeorm__rspack_import_1.Column)({
728
+ type: 'varchar',
729
+ length: 255,
730
+ nullable: true,
731
+ unique: true
732
+ }),
733
+ _ts_metadata("design:type", Object)
734
+ ], Action.prototype, "code", void 0);
735
+ _ts_decorate([
736
+ (0,typeorm__rspack_import_1.Column)({
737
+ type: 'varchar',
738
+ length: 50,
739
+ nullable: false,
740
+ default: 'BACKEND',
741
+ name: 'action_type'
742
+ }),
743
+ _ts_metadata("design:type", typeof _enums_index_js__rspack_import_2/* .ActionType */.X === "undefined" ? Object : _enums_index_js__rspack_import_2/* .ActionType */.X)
744
+ ], Action.prototype, "actionType", void 0);
745
+ _ts_decorate([
746
+ (0,typeorm__rspack_import_1.Column)({
747
+ type: (0,_flusys_nestjs_shared__rspack_import_0.getJsonColumnType)(),
748
+ nullable: true,
749
+ name: 'permission_logic'
750
+ }),
751
+ _ts_metadata("design:type", Object)
752
+ ], Action.prototype, "permissionLogic", void 0);
753
+ _ts_decorate([
754
+ (0,typeorm__rspack_import_1.Column)({
755
+ type: 'int',
756
+ nullable: true
757
+ }),
758
+ _ts_metadata("design:type", Object)
759
+ ], Action.prototype, "serial", void 0);
760
+ _ts_decorate([
761
+ (0,typeorm__rspack_import_1.Column)({
762
+ type: 'boolean',
763
+ nullable: false,
764
+ default: true,
765
+ name: 'is_active'
766
+ }),
767
+ _ts_metadata("design:type", Boolean)
768
+ ], Action.prototype, "isActive", void 0);
769
+ _ts_decorate([
770
+ (0,typeorm__rspack_import_1.ManyToOne)('Action', 'children', {
771
+ nullable: true,
772
+ onDelete: 'CASCADE'
773
+ }),
774
+ (0,typeorm__rspack_import_1.JoinColumn)({
775
+ name: 'parent_id'
776
+ }),
777
+ _ts_metadata("design:type", Object)
778
+ ], Action.prototype, "parent", void 0);
779
+ _ts_decorate([
780
+ (0,typeorm__rspack_import_1.Column)({
781
+ type: 'uuid',
782
+ nullable: true,
783
+ name: 'parent_id'
784
+ }),
785
+ _ts_metadata("design:type", Object)
786
+ ], Action.prototype, "parentId", void 0);
787
+ _ts_decorate([
788
+ (0,typeorm__rspack_import_1.OneToMany)('Action', 'parent'),
789
+ _ts_metadata("design:type", Array)
790
+ ], Action.prototype, "children", void 0);
791
+ Action = _ts_decorate([
792
+ (0,typeorm__rspack_import_1.Entity)({
793
+ name: 'action'
794
+ }),
795
+ (0,typeorm__rspack_import_1.Index)([
796
+ 'parentId'
797
+ ])
798
+ ], Action);
799
+
800
+ __webpack_require__.d(__webpack_exports__, {
801
+ r: () => (Action)
802
+ });
803
+
804
+
805
+ },
806
+ 423(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
807
+ /* import */ var _flusys_nestjs_shared__rspack_import_0 = __webpack_require__(422);
808
+ /* import */ var typeorm__rspack_import_1 = __webpack_require__(158);
809
+ function _ts_decorate(decorators, target, key, desc) {
810
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
811
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
812
+ r = Reflect.decorate(decorators, target, key, desc);
813
+ } else {
814
+ for(var i = decorators.length - 1; i >= 0; i--){
815
+ if (d = decorators[i]) {
816
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
817
+ }
818
+ }
819
+ }
820
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
821
+ }
822
+ function _ts_metadata(metadataKey, metadataValue) {
823
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
824
+ return Reflect.metadata(metadataKey, metadataValue);
825
+ }
826
+ }
827
+
828
+
829
+ /**
830
+ * Permission Base Entity
831
+ * Core permission fields - always included regardless of company feature
832
+ */ class PermissionBase extends _flusys_nestjs_shared__rspack_import_0.Identity {
833
+ permissionType;
834
+ sourceType;
835
+ sourceId;
836
+ targetType;
837
+ targetId;
838
+ validFrom;
839
+ validUntil;
840
+ reason;
841
+ isValid(now = new Date()) {
842
+ if (this.validFrom && now < this.validFrom) return false;
843
+ if (this.validUntil && now > this.validUntil) return false;
844
+ return true;
845
+ }
846
+ }
847
+ _ts_decorate([
848
+ (0,typeorm__rspack_import_1.Column)({
849
+ type: 'varchar',
850
+ length: 50,
851
+ name: 'permission_type'
852
+ }),
853
+ _ts_metadata("design:type", String)
854
+ ], PermissionBase.prototype, "permissionType", void 0);
855
+ _ts_decorate([
856
+ (0,typeorm__rspack_import_1.Column)({
857
+ type: 'varchar',
858
+ length: 50,
859
+ name: 'source_type'
860
+ }),
861
+ _ts_metadata("design:type", String)
862
+ ], PermissionBase.prototype, "sourceType", void 0);
863
+ _ts_decorate([
864
+ (0,typeorm__rspack_import_1.Column)({
865
+ type: 'varchar',
866
+ length: 150,
867
+ name: 'source_id'
868
+ }),
869
+ _ts_metadata("design:type", String)
870
+ ], PermissionBase.prototype, "sourceId", void 0);
871
+ _ts_decorate([
872
+ (0,typeorm__rspack_import_1.Column)({
873
+ type: 'varchar',
874
+ length: 50,
875
+ name: 'target_type'
876
+ }),
877
+ _ts_metadata("design:type", String)
878
+ ], PermissionBase.prototype, "targetType", void 0);
879
+ _ts_decorate([
880
+ (0,typeorm__rspack_import_1.Column)({
881
+ type: 'varchar',
882
+ length: 150,
883
+ name: 'target_id'
884
+ }),
885
+ _ts_metadata("design:type", String)
886
+ ], PermissionBase.prototype, "targetId", void 0);
887
+ _ts_decorate([
888
+ (0,typeorm__rspack_import_1.Column)({
889
+ type: 'timestamp',
890
+ nullable: true,
891
+ name: 'valid_from'
892
+ }),
893
+ _ts_metadata("design:type", Object)
894
+ ], PermissionBase.prototype, "validFrom", void 0);
895
+ _ts_decorate([
896
+ (0,typeorm__rspack_import_1.Column)({
897
+ type: 'timestamp',
898
+ nullable: true,
899
+ name: 'valid_until'
900
+ }),
901
+ _ts_metadata("design:type", Object)
902
+ ], PermissionBase.prototype, "validUntil", void 0);
903
+ _ts_decorate([
904
+ (0,typeorm__rspack_import_1.Column)({
905
+ type: 'text',
906
+ nullable: true
907
+ }),
908
+ _ts_metadata("design:type", Object)
909
+ ], PermissionBase.prototype, "reason", void 0);
910
+
911
+ __webpack_require__.d(__webpack_exports__, {
912
+ $: () => (PermissionBase)
913
+ });
914
+
915
+
916
+ },
917
+ 746(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
918
+ /* import */ var typeorm__rspack_import_0 = __webpack_require__(158);
919
+ /* import */ var _permission_base_entity_js__rspack_import_1 = __webpack_require__(423);
920
+ function _ts_decorate(decorators, target, key, desc) {
921
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
922
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
923
+ r = Reflect.decorate(decorators, target, key, desc);
924
+ } else {
925
+ for(var i = decorators.length - 1; i >= 0; i--){
926
+ if (d = decorators[i]) {
927
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
928
+ }
929
+ }
930
+ }
931
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
932
+ }
933
+ function _ts_metadata(metadataKey, metadataValue) {
934
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
935
+ return Reflect.metadata(metadataKey, metadataValue);
936
+ }
937
+ }
938
+
939
+
940
+ class UserIamPermissionWithCompany extends _permission_base_entity_js__rspack_import_1/* .PermissionBase */.$ {
941
+ /**
942
+ * Company ID - Company scope for this permission
943
+ * - null: Global permission (not company-specific)
944
+ * - set: Permission belongs to this company
945
+ */ companyId;
946
+ /**
947
+ * Branch ID - Branch scope for this permission
948
+ * - null: Company-wide permission (all branches in company)
949
+ * - set: Permission applies only to this specific branch
950
+ */ branchId;
951
+ }
952
+ _ts_decorate([
953
+ (0,typeorm__rspack_import_0.Column)({
954
+ type: 'varchar',
955
+ length: 150,
956
+ nullable: true,
957
+ name: 'company_id'
958
+ }),
959
+ _ts_metadata("design:type", Object)
960
+ ], UserIamPermissionWithCompany.prototype, "companyId", void 0);
961
+ _ts_decorate([
962
+ (0,typeorm__rspack_import_0.Column)({
963
+ type: 'varchar',
964
+ length: 150,
965
+ nullable: true,
966
+ name: 'branch_id'
967
+ }),
968
+ _ts_metadata("design:type", Object)
969
+ ], UserIamPermissionWithCompany.prototype, "branchId", void 0);
970
+ UserIamPermissionWithCompany = _ts_decorate([
971
+ (0,typeorm__rspack_import_0.Entity)({
972
+ name: 'user_iam_permission'
973
+ }),
974
+ (0,typeorm__rspack_import_0.Index)([
975
+ 'permissionType',
976
+ 'sourceId',
977
+ 'targetId',
978
+ 'companyId',
979
+ 'branchId'
980
+ ], {
981
+ unique: true
982
+ }),
983
+ (0,typeorm__rspack_import_0.Index)([
984
+ 'sourceId',
985
+ 'sourceType'
986
+ ]),
987
+ (0,typeorm__rspack_import_0.Index)([
988
+ 'targetId',
989
+ 'targetType'
990
+ ]),
991
+ (0,typeorm__rspack_import_0.Index)([
992
+ 'permissionType'
993
+ ]),
994
+ (0,typeorm__rspack_import_0.Index)([
995
+ 'companyId'
996
+ ]),
997
+ (0,typeorm__rspack_import_0.Index)([
998
+ 'branchId'
999
+ ]),
1000
+ (0,typeorm__rspack_import_0.Index)([
1001
+ 'companyId',
1002
+ 'branchId'
1003
+ ])
1004
+ ], UserIamPermissionWithCompany);
1005
+
1006
+ __webpack_require__.d(__webpack_exports__, {
1007
+ t: () => (UserIamPermissionWithCompany)
1008
+ });
1009
+
1010
+
1011
+ },
1012
+ 784(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1013
+ /* import */ var _flusys_nestjs_shared__rspack_import_0 = __webpack_require__(422);
1014
+ /* import */ var typeorm__rspack_import_1 = __webpack_require__(158);
1015
+ function _ts_decorate(decorators, target, key, desc) {
1016
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1017
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1018
+ r = Reflect.decorate(decorators, target, key, desc);
1019
+ } else {
1020
+ for(var i = decorators.length - 1; i >= 0; i--){
1021
+ if (d = decorators[i]) {
1022
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1023
+ }
1024
+ }
1025
+ }
1026
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1027
+ }
1028
+ function _ts_metadata(metadataKey, metadataValue) {
1029
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1030
+ return Reflect.metadata(metadataKey, metadataValue);
1031
+ }
1032
+ }
1033
+
1034
+
1035
+ class RoleBase extends _flusys_nestjs_shared__rspack_import_0.Identity {
1036
+ readOnly;
1037
+ name;
1038
+ description;
1039
+ isActive;
1040
+ serial;
1041
+ }
1042
+ _ts_decorate([
1043
+ (0,typeorm__rspack_import_1.Column)({
1044
+ type: 'boolean',
1045
+ nullable: false,
1046
+ default: false,
1047
+ name: 'read_only'
1048
+ }),
1049
+ _ts_metadata("design:type", Boolean)
1050
+ ], RoleBase.prototype, "readOnly", void 0);
1051
+ _ts_decorate([
1052
+ (0,typeorm__rspack_import_1.Column)({
1053
+ type: 'varchar',
1054
+ length: 255,
1055
+ nullable: false
1056
+ }),
1057
+ _ts_metadata("design:type", String)
1058
+ ], RoleBase.prototype, "name", void 0);
1059
+ _ts_decorate([
1060
+ (0,typeorm__rspack_import_1.Column)({
1061
+ type: 'varchar',
1062
+ length: 500,
1063
+ nullable: true
1064
+ }),
1065
+ _ts_metadata("design:type", Object)
1066
+ ], RoleBase.prototype, "description", void 0);
1067
+ _ts_decorate([
1068
+ (0,typeorm__rspack_import_1.Column)({
1069
+ type: 'boolean',
1070
+ nullable: false,
1071
+ default: true,
1072
+ name: 'is_active'
1073
+ }),
1074
+ _ts_metadata("design:type", Boolean)
1075
+ ], RoleBase.prototype, "isActive", void 0);
1076
+ _ts_decorate([
1077
+ (0,typeorm__rspack_import_1.Column)({
1078
+ type: 'int',
1079
+ nullable: true
1080
+ }),
1081
+ _ts_metadata("design:type", Object)
1082
+ ], RoleBase.prototype, "serial", void 0);
1083
+
1084
+ __webpack_require__.d(__webpack_exports__, {
1085
+ u: () => (RoleBase)
1086
+ });
1087
+
1088
+
1089
+ },
1090
+ 353(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1091
+ /* import */ var typeorm__rspack_import_0 = __webpack_require__(158);
1092
+ /* import */ var _role_base_entity_js__rspack_import_1 = __webpack_require__(784);
1093
+ function _ts_decorate(decorators, target, key, desc) {
1094
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1095
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1096
+ r = Reflect.decorate(decorators, target, key, desc);
1097
+ } else {
1098
+ for(var i = decorators.length - 1; i >= 0; i--){
1099
+ if (d = decorators[i]) {
1100
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1101
+ }
1102
+ }
1103
+ }
1104
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1105
+ }
1106
+ function _ts_metadata(metadataKey, metadataValue) {
1107
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1108
+ return Reflect.metadata(metadataKey, metadataValue);
1109
+ }
1110
+ }
1111
+
1112
+
1113
+ class RoleWithCompany extends _role_base_entity_js__rspack_import_1/* .RoleBase */.u {
1114
+ companyId;
1115
+ }
1116
+ _ts_decorate([
1117
+ (0,typeorm__rspack_import_0.Column)({
1118
+ type: 'uuid',
1119
+ nullable: true,
1120
+ name: 'company_id'
1121
+ }),
1122
+ _ts_metadata("design:type", Object)
1123
+ ], RoleWithCompany.prototype, "companyId", void 0);
1124
+ RoleWithCompany = _ts_decorate([
1125
+ (0,typeorm__rspack_import_0.Entity)({
1126
+ name: 'role'
1127
+ }),
1128
+ (0,typeorm__rspack_import_0.Index)([
1129
+ 'companyId'
1130
+ ])
1131
+ ], RoleWithCompany);
1132
+
1133
+ __webpack_require__.d(__webpack_exports__, {
1134
+ g: () => (RoleWithCompany)
1135
+ });
1136
+
1137
+
1138
+ },
1139
+ 326(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1140
+ /* import */ var typeorm__rspack_import_0 = __webpack_require__(158);
1141
+ /* import */ var _role_base_entity_js__rspack_import_1 = __webpack_require__(784);
1142
+ function _ts_decorate(decorators, target, key, desc) {
1143
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1144
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1145
+ r = Reflect.decorate(decorators, target, key, desc);
1146
+ } else {
1147
+ for(var i = decorators.length - 1; i >= 0; i--){
1148
+ if (d = decorators[i]) {
1149
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1150
+ }
1151
+ }
1152
+ }
1153
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1154
+ }
1155
+
1156
+
1157
+ class Role extends _role_base_entity_js__rspack_import_1/* .RoleBase */.u {
1158
+ }
1159
+ Role = _ts_decorate([
1160
+ (0,typeorm__rspack_import_0.Entity)({
1161
+ name: 'role'
1162
+ })
1163
+ ], Role);
1164
+
1165
+ __webpack_require__.d(__webpack_exports__, {
1166
+ X: () => (Role)
1167
+ });
1168
+
1169
+
1170
+ },
1171
+ 489(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1172
+ /* import */ var typeorm__rspack_import_0 = __webpack_require__(158);
1173
+ /* import */ var _permission_base_entity_js__rspack_import_1 = __webpack_require__(423);
1174
+ function _ts_decorate(decorators, target, key, desc) {
1175
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1176
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1177
+ r = Reflect.decorate(decorators, target, key, desc);
1178
+ } else {
1179
+ for(var i = decorators.length - 1; i >= 0; i--){
1180
+ if (d = decorators[i]) {
1181
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1182
+ }
1183
+ }
1184
+ }
1185
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1186
+ }
1187
+
1188
+
1189
+ class UserIamPermission extends _permission_base_entity_js__rspack_import_1/* .PermissionBase */.$ {
1190
+ }
1191
+ UserIamPermission = _ts_decorate([
1192
+ (0,typeorm__rspack_import_0.Entity)({
1193
+ name: 'user_iam_permission'
1194
+ }),
1195
+ (0,typeorm__rspack_import_0.Index)([
1196
+ 'permissionType',
1197
+ 'sourceId',
1198
+ 'targetId'
1199
+ ], {
1200
+ unique: true
1201
+ }),
1202
+ (0,typeorm__rspack_import_0.Index)([
1203
+ 'sourceId',
1204
+ 'sourceType'
1205
+ ]),
1206
+ (0,typeorm__rspack_import_0.Index)([
1207
+ 'targetId',
1208
+ 'targetType'
1209
+ ]),
1210
+ (0,typeorm__rspack_import_0.Index)([
1211
+ 'permissionType'
1212
+ ])
1213
+ ], UserIamPermission);
1214
+
1215
+ __webpack_require__.d(__webpack_exports__, {
1216
+ y: () => (UserIamPermission)
1217
+ });
1218
+
1219
+
1220
+ },
1221
+ 560(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1222
+ /**
1223
+ * ActionType Enum - Categorizes actions by their usage context
1224
+ *
1225
+ * - BACKEND: Actions for API endpoint permissions (cached for PermissionGuard)
1226
+ * - FRONTEND: Actions for frontend features (returned in my-permissions API)
1227
+ * - BOTH: Actions used for both backend and frontend (cached + returned)
1228
+ */ var ActionType = /*#__PURE__*/ function(ActionType) {
1229
+ ActionType["BACKEND"] = "backend";
1230
+ ActionType["FRONTEND"] = "frontend";
1231
+ ActionType["BOTH"] = "both";
1232
+ return ActionType;
1233
+ }({});
1234
+
1235
+ __webpack_require__.d(__webpack_exports__, {
1236
+ X: () => (ActionType)
1237
+ });
1238
+
1239
+
1240
+ },
1241
+ 85(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1242
+ var IamEntityType = /*#__PURE__*/ function(IamEntityType) {
1243
+ IamEntityType["USER"] = "user";
1244
+ IamEntityType["ROLE"] = "role";
1245
+ IamEntityType["ACTION"] = "action";
1246
+ IamEntityType["COMPANY"] = "company";
1247
+ return IamEntityType;
1248
+ }({});
1249
+
1250
+ __webpack_require__.d(__webpack_exports__, {
1251
+ n: () => (IamEntityType)
1252
+ });
1253
+
1254
+
1255
+ },
1256
+ 517(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1257
+ var IamPermissionType = /*#__PURE__*/ function(IamPermissionType) {
1258
+ IamPermissionType["USER_ROLE"] = "user_role";
1259
+ IamPermissionType["ROLE_ACTION"] = "role_action";
1260
+ IamPermissionType["USER_ACTION"] = "user_action";
1261
+ IamPermissionType["COMPANY_ACTION"] = "company_action";
1262
+ return IamPermissionType;
1263
+ }({});
1264
+
1265
+ __webpack_require__.d(__webpack_exports__, {
1266
+ V: () => (IamPermissionType)
1267
+ });
1268
+
1269
+
1270
+ },
1271
+ 841(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1272
+ var IAMPermissionMode = /*#__PURE__*/ function(IAMPermissionMode) {
1273
+ IAMPermissionMode[IAMPermissionMode["RBAC"] = 1] = "RBAC";
1274
+ IAMPermissionMode[IAMPermissionMode["DIRECT"] = 2] = "DIRECT";
1275
+ IAMPermissionMode[IAMPermissionMode["FULL"] = 3] = "FULL";
1276
+ return IAMPermissionMode;
1277
+ }({});
1278
+
1279
+ __webpack_require__.d(__webpack_exports__, {
1280
+ w: () => (IAMPermissionMode)
1281
+ });
1282
+
1283
+
1284
+ },
1285
+ 674(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1286
+
1287
+ // EXPORTS
1288
+ __webpack_require__.d(__webpack_exports__, {
1289
+ T: () => (/* reexport */ PermissionModeHelper),
1290
+ u: () => (/* reexport */ validateCompanyAccess)
1291
+ });
1292
+
1293
+ // EXTERNAL MODULE: external "@nestjs/common"
1294
+ var common_ = __webpack_require__(157);
1295
+ ;// CONCATENATED MODULE: external "@flusys/nestjs-shared/constants"
1296
+
1297
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/helpers/company-access.helper.ts
1298
+
1299
+
1300
+ /**
1301
+ * Validates that user has access to the specified company.
1302
+ * Used for user-action and role-permission operations when company feature is enabled.
1303
+ *
1304
+ * @throws ForbiddenException if user doesn't have access to the company
1305
+ */ function validateCompanyAccess(config, companyId, user, errorMessage = 'You do not have access to this company', messageKey = AUTH_MESSAGES.COMPANY_NO_ACCESS) {
1306
+ if (!config.isCompanyFeatureEnabled() || !companyId) {
1307
+ return;
1308
+ }
1309
+ if (user.companyId !== companyId) {
1310
+ throw new common_.ForbiddenException({
1311
+ message: errorMessage,
1312
+ messageKey
1313
+ });
1314
+ }
1315
+ }
1316
+
1317
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/permission-type.enum.ts
1318
+ var permission_type_enum = __webpack_require__(841);
1319
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/helpers/permission-mode.helper.ts
1320
+
1321
+ /**
1322
+ * Helper for converting permission mode strings to enum values
1323
+ *
1324
+ * **Purpose:** Centralize the conversion logic from IBootstrapAppConfig.permissionMode
1325
+ * (string) to IAMPermissionMode enum to prevent duplication and sync issues.
1326
+ *
1327
+ * **Used by:**
1328
+ * - iam.module.ts (forRoot, forRootAsync)
1329
+ * - iam-config.service.ts (getPermissionMode)
1330
+ * - main.ts (Swagger setup)
1331
+ */ class PermissionModeHelper {
1332
+ /**
1333
+ * Convert permission mode string to enum value
1334
+ *
1335
+ * @param modeStr - Permission mode string ('FULL', 'RBAC', 'DIRECT')
1336
+ * @returns IAMPermissionMode enum value
1337
+ * @default IAMPermissionMode.FULL if invalid/missing
1338
+ *
1339
+ * @example
1340
+ * ```typescript
1341
+ * const mode = PermissionModeHelper.fromString('RBAC');
1342
+ * // Returns: IAMPermissionMode.RBAC
1343
+ *
1344
+ * const mode = PermissionModeHelper.fromString(undefined);
1345
+ * // Returns: IAMPermissionMode.FULL (default)
1346
+ * ```
1347
+ */ static fromString(modeStr) {
1348
+ if (!modeStr) {
1349
+ return permission_type_enum/* .IAMPermissionMode.FULL */.w.FULL;
1350
+ }
1351
+ const mode = permission_type_enum/* .IAMPermissionMode */.w[modeStr];
1352
+ return mode ?? permission_type_enum/* .IAMPermissionMode.FULL */.w.FULL;
1353
+ }
1354
+ /**
1355
+ * Convert enum value to string (for serialization/logging)
1356
+ *
1357
+ * @param mode - IAMPermissionMode enum value
1358
+ * @returns String representation
1359
+ *
1360
+ * @example
1361
+ * ```typescript
1362
+ * const str = PermissionModeHelper.toString(IAMPermissionMode.RBAC);
1363
+ * // Returns: 'RBAC'
1364
+ * ```
1365
+ */ static toString(mode) {
1366
+ return permission_type_enum/* .IAMPermissionMode */.w[mode];
1367
+ }
1368
+ }
1369
+
1370
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/helpers/index.ts
1371
+
1372
+
1373
+
1374
+
1375
+ },
1376
+ 713(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1377
+ /* import */ var _flusys_nestjs_shared_classes__rspack_import_0 = __webpack_require__(937);
1378
+ /* import */ var _flusys_nestjs_shared_modules__rspack_import_1 = __webpack_require__(236);
1379
+ /* import */ var _nestjs_common__rspack_import_2 = __webpack_require__(157);
1380
+ /* import */ var typeorm__rspack_import_3 = __webpack_require__(158);
1381
+ /* import */ var _config_index_js__rspack_import_11 = __webpack_require__(916);
1382
+ /* import */ var _config_index_js__rspack_import_12 = __webpack_require__(490);
1383
+ /* import */ var _entities_action_entity_js__rspack_import_4 = __webpack_require__(864);
1384
+ /* import */ var _entities_permission_with_company_entity_js__rspack_import_5 = __webpack_require__(746);
1385
+ /* import */ var _entities_user_iam_permission_entity_js__rspack_import_6 = __webpack_require__(489);
1386
+ /* import */ var _enums_iam_entity_type_enum_js__rspack_import_14 = __webpack_require__(85);
1387
+ /* import */ var _enums_iam_permission_type_enum_js__rspack_import_13 = __webpack_require__(517);
1388
+ /* import */ var _iam_config_service_js__rspack_import_7 = __webpack_require__(645);
1389
+ /* import */ var _iam_datasource_service_js__rspack_import_8 = __webpack_require__(831);
1390
+ /* import */ var _permission_cache_service_js__rspack_import_9 = __webpack_require__(99);
1391
+ /* import */ var _permission_service_js__rspack_import_10 = __webpack_require__(472);
1392
+ function _ts_decorate(decorators, target, key, desc) {
1393
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1394
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1395
+ r = Reflect.decorate(decorators, target, key, desc);
1396
+ } else {
1397
+ for(var i = decorators.length - 1; i >= 0; i--){
1398
+ if (d = decorators[i]) {
1399
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1400
+ }
1401
+ }
1402
+ }
1403
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1404
+ }
1405
+ function _ts_metadata(metadataKey, metadataValue) {
1406
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1407
+ return Reflect.metadata(metadataKey, metadataValue);
1408
+ }
1409
+ }
1410
+ function _ts_param(paramIndex, decorator) {
1411
+ return function(target, key) {
1412
+ decorator(target, key, paramIndex);
1413
+ };
1414
+ }
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+ class ActionService extends _flusys_nestjs_shared_classes__rspack_import_0.ApiService {
1430
+ cacheManager;
1431
+ utilsService;
1432
+ iamConfigService;
1433
+ permissionService;
1434
+ permissionCacheService;
1435
+ constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider, permissionService, permissionCacheService){
1436
+ super(_config_index_js__rspack_import_11/* .IAM_EVENT_ENTITIES.ACTION */.H.ACTION, cacheManager, utilsService, ActionService.name, true, (/* inlined export .IAM_EVENT_MODULE */"iam"), dataSourceProvider, _entities_action_entity_js__rspack_import_4/* .Action */.r), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.permissionService = permissionService, this.permissionCacheService = permissionCacheService;
1437
+ }
1438
+ async beforeUpdateOperation(dto, _user, _queryRunner) {
1439
+ const dtos = Array.isArray(dto) ? dto : [
1440
+ dto
1441
+ ];
1442
+ const ids = dtos.map((d)=>d.id);
1443
+ await this.ensureDataSourceRepository();
1444
+ const readonlyActions = await this.repository.find({
1445
+ where: {
1446
+ id: (0,typeorm__rspack_import_3.In)(ids),
1447
+ readOnly: true,
1448
+ deletedAt: (0,typeorm__rspack_import_3.IsNull)()
1449
+ }
1450
+ });
1451
+ if (readonlyActions.length > 0) {
1452
+ const names = readonlyActions.map((a)=>a.name).join(', ');
1453
+ throw new _nestjs_common__rspack_import_2.ForbiddenException({
1454
+ message: `Cannot modify readonly action(s): ${names}`,
1455
+ messageKey: _config_index_js__rspack_import_12/* .ACTION_MESSAGES.READONLY_UPDATE_FORBIDDEN */.Q$.READONLY_UPDATE_FORBIDDEN,
1456
+ messageVariables: {
1457
+ names
1458
+ }
1459
+ });
1460
+ }
1461
+ }
1462
+ async beforeDeleteOperation(dto, user, queryRunner) {
1463
+ const actionIds = Array.isArray(dto.id) ? dto.id : [
1464
+ dto.id
1465
+ ];
1466
+ if (actionIds.length === 0) {
1467
+ return;
1468
+ }
1469
+ await this.ensureDataSourceRepository();
1470
+ const readonlyActions = await this.repository.find({
1471
+ where: {
1472
+ id: (0,typeorm__rspack_import_3.In)(actionIds),
1473
+ readOnly: true,
1474
+ deletedAt: (0,typeorm__rspack_import_3.IsNull)()
1475
+ }
1476
+ });
1477
+ if (readonlyActions.length > 0) {
1478
+ const names = readonlyActions.map((a)=>a.name).join(', ');
1479
+ throw new _nestjs_common__rspack_import_2.ForbiddenException({
1480
+ message: `Cannot delete readonly action(s): ${names}`,
1481
+ messageKey: _config_index_js__rspack_import_12/* .ACTION_MESSAGES.READONLY_DELETE_FORBIDDEN */.Q$.READONLY_DELETE_FORBIDDEN,
1482
+ messageVariables: {
1483
+ names
1484
+ }
1485
+ });
1486
+ }
1487
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
1488
+ const permissionEntity = enableCompanyFeature ? _entities_permission_with_company_entity_js__rspack_import_5/* .UserIamPermissionWithCompany */.t : _entities_user_iam_permission_entity_js__rspack_import_6/* .UserIamPermission */.y;
1489
+ const permissionRepo = queryRunner.manager.getRepository(permissionEntity);
1490
+ const [roleActionRows, userActionRows, companyActionRows] = await Promise.all([
1491
+ permissionRepo.find({
1492
+ where: {
1493
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
1494
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ROLE */.n.ROLE,
1495
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1496
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1497
+ }
1498
+ }),
1499
+ permissionRepo.find({
1500
+ where: {
1501
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
1502
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1503
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1504
+ }
1505
+ }),
1506
+ enableCompanyFeature ? permissionRepo.find({
1507
+ where: {
1508
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
1509
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.COMPANY */.n.COMPANY,
1510
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1511
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1512
+ }
1513
+ }) : Promise.resolve([])
1514
+ ]);
1515
+ const affectedUserIds = new Set(userActionRows.map((row)=>row.sourceId));
1516
+ const affectedCompanyIds = [
1517
+ ...new Set(companyActionRows.map((row)=>row.sourceId).filter((id)=>!!id))
1518
+ ];
1519
+ const affectedRoleIds = [
1520
+ ...new Set(roleActionRows.map((row)=>row.sourceId))
1521
+ ];
1522
+ if (affectedRoleIds.length > 0) {
1523
+ const userRoleRows = await permissionRepo.find({
1524
+ where: {
1525
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
1526
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ROLE */.n.ROLE,
1527
+ targetId: (0,typeorm__rspack_import_3.In)(affectedRoleIds)
1528
+ }
1529
+ });
1530
+ userRoleRows.forEach((row)=>affectedUserIds.add(row.sourceId));
1531
+ }
1532
+ await permissionRepo.delete({
1533
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
1534
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1535
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1536
+ });
1537
+ await permissionRepo.delete({
1538
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
1539
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1540
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1541
+ });
1542
+ await permissionRepo.delete({
1543
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_13/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
1544
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.COMPANY */.n.COMPANY,
1545
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_14/* .IamEntityType.ACTION */.n.ACTION,
1546
+ targetId: (0,typeorm__rspack_import_3.In)(actionIds)
1547
+ });
1548
+ await Promise.all([
1549
+ affectedUserIds.size > 0 ? this.permissionCacheService.invalidateUsers([
1550
+ ...affectedUserIds
1551
+ ]) : Promise.resolve(),
1552
+ ...affectedCompanyIds.map((companyId)=>this.permissionCacheService.invalidateCompanyMembersCache(companyId))
1553
+ ]);
1554
+ }
1555
+ // Query Customization
1556
+ async getSelectQuery(query, _user, select) {
1557
+ if (!select?.length) {
1558
+ select = [
1559
+ 'id',
1560
+ 'name',
1561
+ 'code',
1562
+ 'description',
1563
+ 'actionType',
1564
+ 'permissionLogic',
1565
+ 'isActive',
1566
+ 'readOnly',
1567
+ 'parentId',
1568
+ 'serial',
1569
+ 'createdAt'
1570
+ ];
1571
+ }
1572
+ query.select(select.map((f)=>`${this.entityName}.${f}`));
1573
+ return {
1574
+ query,
1575
+ isRaw: false
1576
+ };
1577
+ }
1578
+ async getGlobalSearchQuery(query, search) {
1579
+ query.andWhere('(action.name LIKE :search OR action.code LIKE :search OR action.description LIKE :search)', {
1580
+ search: `%${search}%`
1581
+ });
1582
+ return {
1583
+ query,
1584
+ isRaw: false
1585
+ };
1586
+ }
1587
+ // Response Conversion
1588
+ convertEntityToResponseDto(entity, _isRaw) {
1589
+ return {
1590
+ id: entity.id,
1591
+ readOnly: entity.readOnly,
1592
+ name: entity.name,
1593
+ description: entity.description,
1594
+ code: entity.code,
1595
+ actionType: entity.actionType,
1596
+ permissionLogic: entity.permissionLogic,
1597
+ serial: entity.serial,
1598
+ isActive: entity.isActive,
1599
+ parentId: entity.parentId,
1600
+ createdAt: entity.createdAt,
1601
+ updatedAt: entity.updatedAt,
1602
+ deletedAt: entity.deletedAt,
1603
+ createdById: entity.createdById,
1604
+ updatedById: entity.updatedById,
1605
+ deletedById: entity.deletedById
1606
+ };
1607
+ }
1608
+ // Custom Methods
1609
+ actionSelectFields = [
1610
+ 'id',
1611
+ 'code',
1612
+ 'name',
1613
+ 'description',
1614
+ 'actionType',
1615
+ 'permissionLogic',
1616
+ 'isActive',
1617
+ 'parentId',
1618
+ 'serial'
1619
+ ];
1620
+ requireUser(user, methodName) {
1621
+ if (!user) {
1622
+ throw new _nestjs_common__rspack_import_2.BadRequestException({
1623
+ message: `User is required for ${methodName}`,
1624
+ messageKey: _config_index_js__rspack_import_12/* .PERMISSION_OPERATION_MESSAGES.USER_REQUIRED */.P3.USER_REQUIRED,
1625
+ messageVariables: {
1626
+ method: methodName
1627
+ }
1628
+ });
1629
+ }
1630
+ }
1631
+ /** Get actions available for permission assignment (filtered by company whitelist) */ async getActionsForPermission(user, companyId) {
1632
+ await this.ensureDataSourceRepository();
1633
+ this.requireUser(user, 'getActionsForPermission');
1634
+ let whereClause = {};
1635
+ const targetCompanyId = companyId || user.companyId;
1636
+ if (this.iamConfigService.isCompanyFeatureEnabled() && targetCompanyId) {
1637
+ const companyActionIds = await this.permissionService.getCompanyActions(targetCompanyId, true);
1638
+ if (companyActionIds.length === 0) {
1639
+ return [];
1640
+ }
1641
+ whereClause = {
1642
+ id: (0,typeorm__rspack_import_3.In)(companyActionIds)
1643
+ };
1644
+ }
1645
+ const actions = await this.repository.find({
1646
+ where: whereClause,
1647
+ select: this.actionSelectFields
1648
+ });
1649
+ return actions.map((action)=>this.convertEntityToResponseDto(action, false));
1650
+ }
1651
+ /** Get actions in hierarchical tree structure */ async getActionTree(user, search, isActive, withDeleted = false) {
1652
+ await this.ensureDataSourceRepository();
1653
+ this.requireUser(user, 'getActionTree');
1654
+ const query = this.repository.createQueryBuilder('action');
1655
+ if (!withDeleted) {
1656
+ query.andWhere('action.deletedAt IS NULL');
1657
+ }
1658
+ if (isActive !== undefined) {
1659
+ query.andWhere('action.isActive = :isActive', {
1660
+ isActive
1661
+ });
1662
+ }
1663
+ if (search?.trim()) {
1664
+ query.andWhere('(action.name LIKE :search OR action.code LIKE :search)', {
1665
+ search: `%${search.trim()}%`
1666
+ });
1667
+ }
1668
+ const actions = await query.orderBy('action.serial', 'ASC').getMany();
1669
+ return this.buildActionTree(actions);
1670
+ }
1671
+ buildActionTree(actions) {
1672
+ if (!actions?.length) {
1673
+ return [];
1674
+ }
1675
+ const map = new Map();
1676
+ const rootNodes = [];
1677
+ for (const action of actions){
1678
+ const treeNode = {
1679
+ ...this.convertEntityToResponseDto(action, false),
1680
+ children: []
1681
+ };
1682
+ map.set(action.id, treeNode);
1683
+ }
1684
+ for (const action of actions){
1685
+ const node = map.get(action.id);
1686
+ if (!node) {
1687
+ continue;
1688
+ }
1689
+ if (action.parentId && map.has(action.parentId)) {
1690
+ const parent = map.get(action.parentId);
1691
+ if (parent?.children) {
1692
+ parent.children.push(node);
1693
+ }
1694
+ } else {
1695
+ rootNodes.push(node);
1696
+ }
1697
+ }
1698
+ return rootNodes;
1699
+ }
1700
+ }
1701
+ ActionService = _ts_decorate([
1702
+ (0,_nestjs_common__rspack_import_2.Injectable)({
1703
+ scope: _nestjs_common__rspack_import_2.Scope.REQUEST
1704
+ }),
1705
+ _ts_param(0, (0,_nestjs_common__rspack_import_2.Inject)('CACHE_INSTANCE')),
1706
+ _ts_param(1, (0,_nestjs_common__rspack_import_2.Inject)(_flusys_nestjs_shared_modules__rspack_import_1.UtilsService)),
1707
+ _ts_param(2, (0,_nestjs_common__rspack_import_2.Inject)(_iam_config_service_js__rspack_import_7/* .IAMConfigService */.N)),
1708
+ _ts_param(3, (0,_nestjs_common__rspack_import_2.Inject)(_iam_datasource_service_js__rspack_import_8/* .IAMDataSourceService */.U)),
1709
+ _ts_param(4, (0,_nestjs_common__rspack_import_2.Inject)(_permission_service_js__rspack_import_10/* .PermissionService */.n)),
1710
+ _ts_param(5, (0,_nestjs_common__rspack_import_2.Inject)(_permission_cache_service_js__rspack_import_9/* .PermissionCacheService */.D)),
1711
+ _ts_metadata("design:type", Function),
1712
+ _ts_metadata("design:paramtypes", [
1713
+ typeof _flusys_nestjs_shared_classes__rspack_import_0.HybridCache === "undefined" ? Object : _flusys_nestjs_shared_classes__rspack_import_0.HybridCache,
1714
+ typeof _flusys_nestjs_shared_modules__rspack_import_1.UtilsService === "undefined" ? Object : _flusys_nestjs_shared_modules__rspack_import_1.UtilsService,
1715
+ typeof _iam_config_service_js__rspack_import_7/* .IAMConfigService */.N === "undefined" ? Object : _iam_config_service_js__rspack_import_7/* .IAMConfigService */.N,
1716
+ typeof _iam_datasource_service_js__rspack_import_8/* .IAMDataSourceService */.U === "undefined" ? Object : _iam_datasource_service_js__rspack_import_8/* .IAMDataSourceService */.U,
1717
+ typeof _permission_service_js__rspack_import_10/* .PermissionService */.n === "undefined" ? Object : _permission_service_js__rspack_import_10/* .PermissionService */.n,
1718
+ typeof _permission_cache_service_js__rspack_import_9/* .PermissionCacheService */.D === "undefined" ? Object : _permission_cache_service_js__rspack_import_9/* .PermissionCacheService */.D
1719
+ ])
1720
+ ], ActionService);
1721
+
1722
+ __webpack_require__.d(__webpack_exports__, {
1723
+ u: () => (ActionService)
1724
+ });
1725
+
1726
+
1727
+ },
1728
+ 645(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1729
+ /* import */ var _nestjs_common__rspack_import_0 = __webpack_require__(157);
1730
+ /* import */ var _config_iam_constants_js__rspack_import_3 = __webpack_require__(180);
1731
+ /* import */ var _enums_permission_type_enum_js__rspack_import_2 = __webpack_require__(841);
1732
+ /* import */ var _helpers_index_js__rspack_import_1 = __webpack_require__(674);
1733
+ function _ts_decorate(decorators, target, key, desc) {
1734
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1735
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1736
+ r = Reflect.decorate(decorators, target, key, desc);
1737
+ } else {
1738
+ for(var i = decorators.length - 1; i >= 0; i--){
1739
+ if (d = decorators[i]) {
1740
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1741
+ }
1742
+ }
1743
+ }
1744
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1745
+ }
1746
+ function _ts_metadata(metadataKey, metadataValue) {
1747
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1748
+ return Reflect.metadata(metadataKey, metadataValue);
1749
+ }
1750
+ }
1751
+ function _ts_param(paramIndex, decorator) {
1752
+ return function(target, key) {
1753
+ decorator(target, key, paramIndex);
1754
+ };
1755
+ }
1756
+
1757
+
1758
+
1759
+
1760
+ class IAMConfigService {
1761
+ options;
1762
+ constructor(injectedOptions){
1763
+ this.options = injectedOptions ?? {
1764
+ global: false,
1765
+ includeController: false
1766
+ };
1767
+ }
1768
+ // Database Mode
1769
+ getDatabaseMode() {
1770
+ return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
1771
+ }
1772
+ isMultiTenant() {
1773
+ return this.getDatabaseMode() === 'multi-tenant';
1774
+ }
1775
+ // Feature Flags
1776
+ isCompanyFeatureEnabled() {
1777
+ return this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
1778
+ }
1779
+ // Permission Mode
1780
+ getPermissionMode() {
1781
+ return _helpers_index_js__rspack_import_1/* .PermissionModeHelper.fromString */.T.fromString(this.options.bootstrapAppConfig?.permissionMode);
1782
+ }
1783
+ isRbacEnabled() {
1784
+ const mode = this.getPermissionMode();
1785
+ return mode === _enums_permission_type_enum_js__rspack_import_2/* .IAMPermissionMode.RBAC */.w.RBAC || mode === _enums_permission_type_enum_js__rspack_import_2/* .IAMPermissionMode.FULL */.w.FULL;
1786
+ }
1787
+ isDirectPermissionEnabled() {
1788
+ const mode = this.getPermissionMode();
1789
+ return mode === _enums_permission_type_enum_js__rspack_import_2/* .IAMPermissionMode.DIRECT */.w.DIRECT || mode === _enums_permission_type_enum_js__rspack_import_2/* .IAMPermissionMode.FULL */.w.FULL;
1790
+ }
1791
+ // Options
1792
+ getOptions() {
1793
+ return this.options;
1794
+ }
1795
+ }
1796
+ IAMConfigService = _ts_decorate([
1797
+ (0,_nestjs_common__rspack_import_0.Injectable)(),
1798
+ _ts_param(0, (0,_nestjs_common__rspack_import_0.Optional)()),
1799
+ _ts_param(0, (0,_nestjs_common__rspack_import_0.Inject)(_config_iam_constants_js__rspack_import_3/* .IAM_MODULE_OPTIONS */.G)),
1800
+ _ts_metadata("design:type", Function),
1801
+ _ts_metadata("design:paramtypes", [
1802
+ typeof IAMModuleOptions === "undefined" ? Object : IAMModuleOptions
1803
+ ])
1804
+ ], IAMConfigService);
1805
+
1806
+ __webpack_require__.d(__webpack_exports__, {
1807
+ N: () => (IAMConfigService)
1808
+ });
1809
+
1810
+
1811
+ },
1812
+ 831(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1813
+
1814
+ // EXPORTS
1815
+ __webpack_require__.d(__webpack_exports__, {
1816
+ U: () => (/* binding */ IAMDataSourceService)
1817
+ });
1818
+
1819
+ // EXTERNAL MODULE: external "@flusys/nestjs-shared/modules"
1820
+ var modules_ = __webpack_require__(236);
1821
+ // EXTERNAL MODULE: external "@nestjs/common"
1822
+ var common_ = __webpack_require__(157);
1823
+ ;// CONCATENATED MODULE: external "@nestjs/core"
1824
+
1825
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/helpers/index.ts + 3 modules
1826
+ var helpers = __webpack_require__(674);
1827
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/iam-config.service.ts
1828
+ var iam_config_service = __webpack_require__(645);
1829
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/services/iam-datasource.service.ts
1830
+ function _ts_decorate(decorators, target, key, desc) {
1831
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1832
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1833
+ r = Reflect.decorate(decorators, target, key, desc);
1834
+ } else {
1835
+ for(var i = decorators.length - 1; i >= 0; i--){
1836
+ if (d = decorators[i]) {
1837
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1838
+ }
1839
+ }
1840
+ }
1841
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1842
+ }
1843
+ function _ts_metadata(metadataKey, metadataValue) {
1844
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1845
+ return Reflect.metadata(metadataKey, metadataValue);
1846
+ }
1847
+ }
1848
+ function _ts_param(paramIndex, decorator) {
1849
+ return function(target, key) {
1850
+ decorator(target, key, paramIndex);
1851
+ };
1852
+ }
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+ class IAMDataSourceService extends modules_.MultiTenantDataSourceService {
1859
+ configService;
1860
+ static tenantConnections = new Map();
1861
+ static singleDataSource = null;
1862
+ static tenantsRegistry = new Map();
1863
+ static initialized = false;
1864
+ static connectionLocks = new Map();
1865
+ static singleConnectionLock = null;
1866
+ constructor(configService, request){
1867
+ super(IAMDataSourceService.buildParentOptions(configService.getOptions()), request), this.configService = configService;
1868
+ }
1869
+ static buildParentOptions(options) {
1870
+ return {
1871
+ bootstrapAppConfig: options.bootstrapAppConfig,
1872
+ defaultDatabaseConfig: options.config?.defaultDatabaseConfig,
1873
+ tenantDefaultDatabaseConfig: options.config?.tenantDefaultDatabaseConfig,
1874
+ tenants: options.config?.tenants
1875
+ };
1876
+ }
1877
+ getEnableCompanyFeatureForTenant(tenant) {
1878
+ return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
1879
+ }
1880
+ async getIAMEntities() {
1881
+ const { getIAMEntitiesByConfig } = await __webpack_require__.e(/* import() */ 364).then(__webpack_require__.bind(__webpack_require__, 743));
1882
+ const enableCompanyFeature = this.getEnableCompanyFeatureForTenant(this.getCurrentTenant() ?? undefined);
1883
+ const permissionMode = helpers/* .PermissionModeHelper.toString */.T.toString(this.configService.getPermissionMode());
1884
+ return getIAMEntitiesByConfig(enableCompanyFeature, permissionMode);
1885
+ }
1886
+ async createDataSourceFromConfig(config) {
1887
+ const entities = await this.getIAMEntities();
1888
+ return await super.createDataSourceFromConfig(config, entities);
1889
+ }
1890
+ }
1891
+ IAMDataSourceService = _ts_decorate([
1892
+ (0,common_.Injectable)({
1893
+ scope: common_.Scope.REQUEST
1894
+ }),
1895
+ _ts_param(0, (0,common_.Inject)(iam_config_service/* .IAMConfigService */.N)),
1896
+ _ts_param(1, (0,common_.Optional)()),
1897
+ _ts_param(1, (0,common_.Inject)(__rspack_external__nestjs_core_d7b00a1a.REQUEST)),
1898
+ _ts_metadata("design:type", Function),
1899
+ _ts_metadata("design:paramtypes", [
1900
+ typeof iam_config_service/* .IAMConfigService */.N === "undefined" ? Object : iam_config_service/* .IAMConfigService */.N,
1901
+ typeof Request === "undefined" ? Object : Request
1902
+ ])
1903
+ ], IAMDataSourceService);
1904
+
1905
+
1906
+ },
1907
+ 99(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
1908
+
1909
+ // EXPORTS
1910
+ __webpack_require__.d(__webpack_exports__, {
1911
+ D: () => (/* binding */ PermissionCacheService)
1912
+ });
1913
+
1914
+ ;// CONCATENATED MODULE: external "@flusys/nestjs-core/config"
1915
+
1916
+ // EXTERNAL MODULE: external "@flusys/nestjs-shared"
1917
+ var nestjs_shared_ = __webpack_require__(422);
1918
+ // EXTERNAL MODULE: external "@nestjs/common"
1919
+ var common_ = __webpack_require__(157);
1920
+ // EXTERNAL MODULE: external "typeorm"
1921
+ var external_typeorm_ = __webpack_require__(158);
1922
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/action.entity.ts
1923
+ var action_entity = __webpack_require__(864);
1924
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/permission-with-company.entity.ts
1925
+ var permission_with_company_entity = __webpack_require__(746);
1926
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/role-with-company.entity.ts
1927
+ var role_with_company_entity = __webpack_require__(353);
1928
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/role.entity.ts
1929
+ var role_entity = __webpack_require__(326);
1930
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/user-iam-permission.entity.ts
1931
+ var user_iam_permission_entity = __webpack_require__(489);
1932
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/action-type.enum.ts
1933
+ var action_type_enum = __webpack_require__(560);
1934
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/iam-entity-type.enum.ts
1935
+ var iam_entity_type_enum = __webpack_require__(85);
1936
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/iam-permission-type.enum.ts
1937
+ var iam_permission_type_enum = __webpack_require__(517);
1938
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/permission-type.enum.ts
1939
+ var permission_type_enum = __webpack_require__(841);
1940
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/iam-config.service.ts
1941
+ var iam_config_service = __webpack_require__(645);
1942
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/iam-datasource.service.ts + 1 modules
1943
+ var iam_datasource_service = __webpack_require__(831);
1944
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/services/permission-cache.service.ts
1945
+ function _ts_decorate(decorators, target, key, desc) {
1946
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1947
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
1948
+ r = Reflect.decorate(decorators, target, key, desc);
1949
+ } else {
1950
+ for(var i = decorators.length - 1; i >= 0; i--){
1951
+ if (d = decorators[i]) {
1952
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1953
+ }
1954
+ }
1955
+ }
1956
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1957
+ }
1958
+ function _ts_metadata(metadataKey, metadataValue) {
1959
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
1960
+ return Reflect.metadata(metadataKey, metadataValue);
1961
+ }
1962
+ }
1963
+ function _ts_param(paramIndex, decorator) {
1964
+ return function(target, key) {
1965
+ decorator(target, key, paramIndex);
1966
+ };
1967
+ }
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+ const NO_COMPANY_SCOPE = 'none';
1984
+ class PermissionCacheService {
1985
+ cacheManager;
1986
+ iamConfigService;
1987
+ dataSourceProvider;
1988
+ guardConfig;
1989
+ TRACKED_KEYS_PREFIX = 'permission-tracked-keys';
1990
+ TRACKED_SCOPES_PREFIX = 'permission-tracked-scopes';
1991
+ TTL;
1992
+ constructor(cacheManager, iamConfigService, dataSourceProvider, guardConfig){
1993
+ this.cacheManager = cacheManager;
1994
+ this.iamConfigService = iamConfigService;
1995
+ this.dataSourceProvider = dataSourceProvider;
1996
+ this.guardConfig = guardConfig;
1997
+ this.TTL = this.parseDurationMs(__rspack_external__flusys_nestjs_core_config_197fa0a9.envConfig.getJwtConfig().refreshExpiration);
1998
+ }
1999
+ // Repository Getters
2000
+ async getPermissionRepository() {
2001
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2002
+ const entity = enableCompanyFeature ? permission_with_company_entity/* .UserIamPermissionWithCompany */.t : user_iam_permission_entity/* .UserIamPermission */.y;
2003
+ return this.dataSourceProvider.getRepository(entity);
2004
+ }
2005
+ async getActionRepository() {
2006
+ return this.dataSourceProvider.getRepository(action_entity/* .Action */.r);
2007
+ }
2008
+ async getRoleRepository() {
2009
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2010
+ const entity = enableCompanyFeature ? role_with_company_entity/* .RoleWithCompany */.g : role_entity/* .Role */.X;
2011
+ return this.dataSourceProvider.getRepository(entity);
2012
+ }
2013
+ // Cache Key Generation
2014
+ parseDurationMs(duration) {
2015
+ const unitMs = {
2016
+ ms: 1,
2017
+ s: 1000,
2018
+ m: 60000,
2019
+ h: 3600000,
2020
+ d: 86400000,
2021
+ w: 604800000
2022
+ };
2023
+ const match = /^(\d+)\s*(ms|s|m|h|d|w)?$/i.exec(duration.trim());
2024
+ if (!match) {
2025
+ return unitMs.h; // fallback: 1 hour
2026
+ }
2027
+ const unit = (match[2] || 'ms').toLowerCase();
2028
+ return Number(match[1]) * unitMs[unit];
2029
+ }
2030
+ buildCacheKey(options) {
2031
+ return (0,nestjs_shared_.buildPermissionCacheKey)(options, this.guardConfig);
2032
+ }
2033
+ scopeToken(companyId) {
2034
+ return companyId || NO_COMPANY_SCOPE;
2035
+ }
2036
+ buildTrackedKeysKey(userId, companyId) {
2037
+ return `${this.TRACKED_KEYS_PREFIX}:user:${userId}:company:${this.scopeToken(companyId)}`;
2038
+ }
2039
+ buildTrackedScopesKey(userId) {
2040
+ return `${this.TRACKED_SCOPES_PREFIX}:user:${userId}`;
2041
+ }
2042
+ // Cache Operations
2043
+ async setMyPermissions(options, data) {
2044
+ const key = this.buildCacheKey(options);
2045
+ await this.cacheManager.set(key, data, this.TTL);
2046
+ await this.trackKey(options.userId, key, options.companyId);
2047
+ }
2048
+ async getMyPermissions(options) {
2049
+ try {
2050
+ const key = this.buildCacheKey(options);
2051
+ const result = await this.cacheManager.get(key);
2052
+ return result || null;
2053
+ } catch {
2054
+ return null;
2055
+ }
2056
+ }
2057
+ async trackKey(userId, key, companyId) {
2058
+ try {
2059
+ let scopeKey = key;
2060
+ if (companyId) {
2061
+ scopeKey = this.buildTrackedKeysKey(userId, companyId);
2062
+ const keys = await this.cacheManager.get(scopeKey) || [];
2063
+ if (!keys.includes(key)) {
2064
+ keys.push(key);
2065
+ await this.cacheManager.set(scopeKey, keys, this.TTL);
2066
+ }
2067
+ }
2068
+ const scopesKey = this.buildTrackedScopesKey(userId);
2069
+ const scopes = await this.cacheManager.get(scopesKey) || [];
2070
+ if (!scopes.includes(scopeKey)) {
2071
+ scopes.push(scopeKey);
2072
+ await this.cacheManager.set(scopesKey, scopes, this.TTL);
2073
+ }
2074
+ } catch {
2075
+ // tracking is best-effort; a missed entry only widens invalidation, never narrows it
2076
+ }
2077
+ }
2078
+ // My Permissions (cache-first read, DB-backed rebuild)
2079
+ /** Get user's effective permissions (cache-first approach) */ async getMyPermissionsResponse(userId, branchId, companyId, parentCodes) {
2080
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2081
+ const cacheOptions = {
2082
+ userId,
2083
+ companyId: enableCompanyFeature ? companyId : null,
2084
+ branchId: enableCompanyFeature ? branchId : null
2085
+ };
2086
+ const cachedData = await this.getMyPermissions(cacheOptions);
2087
+ if (cachedData) {
2088
+ return this.buildResponseFromCache(cachedData, parentCodes);
2089
+ }
2090
+ const freshData = await this.fetchAndCachePermissions(userId, branchId, companyId);
2091
+ return this.buildResponseFromCache(freshData, parentCodes);
2092
+ }
2093
+ /** Build response from cached data, applying optional parentCodes filter */ async buildResponseFromCache(cachedData, parentCodes) {
2094
+ let frontendActions = cachedData.frontendActions;
2095
+ if (parentCodes?.length) {
2096
+ const parentIds = await this.getParentIdsByCodesWithCache(parentCodes);
2097
+ if (parentIds.size > 0) {
2098
+ frontendActions = frontendActions.filter((a)=>a.parentId && parentIds.has(a.parentId));
2099
+ } else {
2100
+ frontendActions = [];
2101
+ }
2102
+ }
2103
+ return {
2104
+ frontendActions: frontendActions.map((a)=>({
2105
+ code: a.code,
2106
+ name: a.name,
2107
+ description: a.description
2108
+ })),
2109
+ cachedEndpoints: cachedData.backendCodes.length
2110
+ };
2111
+ }
2112
+ /** Resolve action IDs for the given codes */ async getParentIdsByCodesWithCache(codes) {
2113
+ const actionRepo = await this.getActionRepository();
2114
+ const actions = await actionRepo.find({
2115
+ where: {
2116
+ code: (0,external_typeorm_.In)(codes)
2117
+ },
2118
+ select: [
2119
+ 'id',
2120
+ 'code'
2121
+ ]
2122
+ });
2123
+ return new Set(actions.map((action)=>action.id));
2124
+ }
2125
+ /** Fetch permissions from DB and cache them (empty permissions are also cached) */ async fetchAndCachePermissions(userId, branchId, companyId) {
2126
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2127
+ const cacheOptions = {
2128
+ userId,
2129
+ companyId: enableCompanyFeature ? companyId : null,
2130
+ branchId
2131
+ };
2132
+ const emptyData = {
2133
+ frontendActions: [],
2134
+ backendCodes: []
2135
+ };
2136
+ const allActionIds = await this.collectAllActionIds(userId, branchId, companyId);
2137
+ if (allActionIds.size === 0) {
2138
+ await this.setMyPermissions(cacheOptions, emptyData);
2139
+ return emptyData;
2140
+ }
2141
+ return this.buildAndCachePermissionData(allActionIds, cacheOptions);
2142
+ }
2143
+ /** Collect all action IDs based on permission mode (RBAC, DIRECT, or FULL) */ async collectAllActionIds(userId, branchId, companyId) {
2144
+ const permissionMode = this.iamConfigService.getPermissionMode();
2145
+ const allActionIds = new Set();
2146
+ if (permissionMode === permission_type_enum/* .IAMPermissionMode.RBAC */.w.RBAC || permissionMode === permission_type_enum/* .IAMPermissionMode.FULL */.w.FULL) {
2147
+ const userRoleIds = await this.getUserRoleIds(userId, branchId, companyId);
2148
+ if (userRoleIds.length > 0) {
2149
+ const roleActionIds = await this.getRoleActionIds(userRoleIds);
2150
+ roleActionIds.forEach((id)=>allActionIds.add(id));
2151
+ }
2152
+ }
2153
+ if (permissionMode === permission_type_enum/* .IAMPermissionMode.DIRECT */.w.DIRECT || permissionMode === permission_type_enum/* .IAMPermissionMode.FULL */.w.FULL) {
2154
+ const userActionIds = await this.getUserActionIds(userId, branchId, companyId);
2155
+ userActionIds.forEach((id)=>allActionIds.add(id));
2156
+ }
2157
+ return allActionIds;
2158
+ }
2159
+ /** Fetch actions from DB, separate by type, build cache data, and cache it */ async buildAndCachePermissionData(actionIds, cacheOptions) {
2160
+ const actionRepo = await this.getActionRepository();
2161
+ const actions = await actionRepo.find({
2162
+ where: {
2163
+ id: (0,external_typeorm_.In)(Array.from(actionIds)),
2164
+ isActive: true
2165
+ }
2166
+ });
2167
+ const backendActions = actions.filter((a)=>a.actionType === action_type_enum/* .ActionType.BACKEND */.X.BACKEND || a.actionType === action_type_enum/* .ActionType.BOTH */.X.BOTH);
2168
+ const frontendActions = actions.filter((a)=>a.actionType === action_type_enum/* .ActionType.FRONTEND */.X.FRONTEND || a.actionType === action_type_enum/* .ActionType.BOTH */.X.BOTH);
2169
+ const backendCodes = backendActions.map((a)=>a.code).filter((c)=>!!c);
2170
+ const cacheData = {
2171
+ frontendActions: frontendActions.map((a)=>({
2172
+ id: a.id,
2173
+ code: a.code ?? '',
2174
+ name: a.name,
2175
+ description: a.description,
2176
+ parentId: a.parentId
2177
+ })),
2178
+ backendCodes
2179
+ };
2180
+ await this.setMyPermissions(cacheOptions, cacheData);
2181
+ return cacheData;
2182
+ }
2183
+ /** Get role IDs assigned to a user (merges company-wide + branch-specific roles) */ async getUserRoleIds(userId, branchId, companyId) {
2184
+ const permissionRepo = await this.getPermissionRepository();
2185
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2186
+ if (!enableCompanyFeature) {
2187
+ const permissions = await permissionRepo.find({
2188
+ where: {
2189
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2190
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
2191
+ sourceId: userId
2192
+ }
2193
+ });
2194
+ return permissions.filter((p)=>p.isValid()).map((p)=>p.targetId);
2195
+ }
2196
+ const roleIds = new Set();
2197
+ const baseWhere = {
2198
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2199
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
2200
+ sourceId: userId
2201
+ };
2202
+ if (companyId) {
2203
+ baseWhere.companyId = companyId;
2204
+ }
2205
+ if (branchId) {
2206
+ // Get company-wide + branch-specific roles
2207
+ const companyWidePermissions = await permissionRepo.find({
2208
+ where: {
2209
+ ...baseWhere,
2210
+ branchId: (0,external_typeorm_.IsNull)()
2211
+ }
2212
+ });
2213
+ companyWidePermissions.filter((p)=>p.isValid()).forEach((p)=>roleIds.add(p.targetId));
2214
+ const branchPermissions = await permissionRepo.find({
2215
+ where: {
2216
+ ...baseWhere,
2217
+ branchId
2218
+ }
2219
+ });
2220
+ branchPermissions.filter((p)=>p.isValid()).forEach((p)=>roleIds.add(p.targetId));
2221
+ } else {
2222
+ // No branch context: get all roles for this company
2223
+ const allPermissions = await permissionRepo.find({
2224
+ where: baseWhere
2225
+ });
2226
+ allPermissions.filter((p)=>p.isValid()).forEach((p)=>roleIds.add(p.targetId));
2227
+ }
2228
+ return Array.from(roleIds);
2229
+ }
2230
+ async getRoleActionIds(roleIds) {
2231
+ const permissionRepo = await this.getPermissionRepository();
2232
+ const permissions = await permissionRepo.find({
2233
+ where: {
2234
+ permissionType: iam_permission_type_enum/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2235
+ sourceType: iam_entity_type_enum/* .IamEntityType.ROLE */.n.ROLE,
2236
+ sourceId: (0,external_typeorm_.In)(roleIds)
2237
+ }
2238
+ });
2239
+ return permissions.filter((p)=>p.isValid()).map((p)=>p.targetId);
2240
+ }
2241
+ /** Get action IDs directly assigned to a user (merges company-wide + branch-specific actions) */ async getUserActionIds(userId, branchId, companyId) {
2242
+ const permissionRepo = await this.getPermissionRepository();
2243
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2244
+ if (!enableCompanyFeature) {
2245
+ const permissions = await permissionRepo.find({
2246
+ where: {
2247
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2248
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
2249
+ sourceId: userId
2250
+ }
2251
+ });
2252
+ return permissions.filter((p)=>p.isValid()).map((p)=>p.targetId);
2253
+ }
2254
+ const actionIds = new Set();
2255
+ const baseWhere = {
2256
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2257
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
2258
+ sourceId: userId
2259
+ };
2260
+ if (companyId) {
2261
+ baseWhere.companyId = companyId;
2262
+ }
2263
+ if (branchId) {
2264
+ // Get company-wide + branch-specific actions
2265
+ const companyWidePermissions = await permissionRepo.find({
2266
+ where: {
2267
+ ...baseWhere,
2268
+ branchId: (0,external_typeorm_.IsNull)()
2269
+ }
2270
+ });
2271
+ companyWidePermissions.filter((p)=>p.isValid()).forEach((p)=>actionIds.add(p.targetId));
2272
+ const branchPermissions = await permissionRepo.find({
2273
+ where: {
2274
+ ...baseWhere,
2275
+ branchId
2276
+ }
2277
+ });
2278
+ branchPermissions.filter((p)=>p.isValid()).forEach((p)=>actionIds.add(p.targetId));
2279
+ } else {
2280
+ // No branch context: get all actions for this company
2281
+ const allPermissions = await permissionRepo.find({
2282
+ where: baseWhere
2283
+ });
2284
+ allPermissions.filter((p)=>p.isValid()).forEach((p)=>actionIds.add(p.targetId));
2285
+ }
2286
+ return Array.from(actionIds);
2287
+ }
2288
+ // Cache Invalidation
2289
+ async invalidateUser(userId, companyId, branchIds) {
2290
+ const keysToDelete = new Set();
2291
+ /** Drop a scope entry from the tracked-scopes index, or queue the whole index for deletion once nothing remains */ const untrackScope = async (scopeKey)=>{
2292
+ const scopesKeysKey = this.buildTrackedScopesKey(userId);
2293
+ let scopesKeys = [];
2294
+ try {
2295
+ scopesKeys = await this.cacheManager.get(scopesKeysKey) || [];
2296
+ } catch {
2297
+ scopesKeys = [];
2298
+ }
2299
+ if (scopeKey) {
2300
+ const remainingScopes = scopesKeys.filter((scope)=>scope !== scopeKey);
2301
+ if (remainingScopes.length > 0) {
2302
+ await this.cacheManager.set(scopesKeysKey, remainingScopes, this.TTL);
2303
+ } else {
2304
+ keysToDelete.add(scopesKeysKey);
2305
+ }
2306
+ } else {
2307
+ for (const scope of scopesKeys){
2308
+ if (scope.startsWith(this.TRACKED_KEYS_PREFIX)) {
2309
+ let nestedKeys = [];
2310
+ try {
2311
+ nestedKeys = await this.cacheManager.get(scope) || [];
2312
+ } catch {
2313
+ nestedKeys = [];
2314
+ }
2315
+ nestedKeys.forEach((key)=>keysToDelete.add(key));
2316
+ }
2317
+ keysToDelete.add(scope);
2318
+ }
2319
+ keysToDelete.add(scopesKeysKey);
2320
+ }
2321
+ };
2322
+ if (companyId) {
2323
+ const trackedKeysKey = this.buildTrackedKeysKey(userId, companyId);
2324
+ let trackedKeys = [];
2325
+ try {
2326
+ trackedKeys = await this.cacheManager.get(trackedKeysKey) || [];
2327
+ } catch {
2328
+ trackedKeys = [];
2329
+ }
2330
+ const hasCompanyWideScope = branchIds?.some((branchId)=>!branchId);
2331
+ if (!branchIds?.length || hasCompanyWideScope) {
2332
+ trackedKeys.forEach((key)=>keysToDelete.add(key));
2333
+ keysToDelete.add(trackedKeysKey);
2334
+ await untrackScope(trackedKeysKey);
2335
+ } else {
2336
+ // Branch scope given: only invalidate those branches, keep the rest tracked
2337
+ branchIds.forEach((branchId)=>keysToDelete.add(this.buildCacheKey({
2338
+ userId,
2339
+ companyId,
2340
+ branchId
2341
+ })));
2342
+ const remainingKeys = trackedKeys.filter((key)=>!keysToDelete.has(key));
2343
+ if (remainingKeys.length) {
2344
+ await this.cacheManager.set(trackedKeysKey, remainingKeys, this.TTL);
2345
+ } else {
2346
+ keysToDelete.add(trackedKeysKey);
2347
+ await untrackScope(trackedKeysKey);
2348
+ }
2349
+ }
2350
+ } else {
2351
+ await untrackScope();
2352
+ }
2353
+ await Promise.all(Array.from(keysToDelete).map(async (key)=>{
2354
+ try {
2355
+ await this.cacheManager.del(key);
2356
+ } catch {}
2357
+ }));
2358
+ }
2359
+ async invalidateUsers(userIds, companyId, branchIds) {
2360
+ if (userIds.length === 0) {
2361
+ return 0;
2362
+ }
2363
+ const results = await Promise.allSettled(userIds.map((userId)=>this.invalidateUser(userId, companyId, branchIds)));
2364
+ return results.filter((r)=>r.status === 'fulfilled').length;
2365
+ }
2366
+ /** Invalidate permission cache for all users holding a given role */ async invalidateRoleMembersCache(roleId) {
2367
+ const permissionRepo = await this.getPermissionRepository();
2368
+ const roleRepo = await this.getRoleRepository();
2369
+ const userRoles = await permissionRepo.find({
2370
+ where: {
2371
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2372
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
2373
+ targetType: iam_entity_type_enum/* .IamEntityType.ROLE */.n.ROLE,
2374
+ targetId: roleId
2375
+ }
2376
+ });
2377
+ const userIds = [
2378
+ ...new Set(userRoles.map((ur)=>ur.sourceId))
2379
+ ];
2380
+ if (userIds.length === 0) {
2381
+ return 0;
2382
+ }
2383
+ const role = await roleRepo.findOne({
2384
+ where: {
2385
+ id: roleId
2386
+ }
2387
+ });
2388
+ const companyId = role?.companyId || null;
2389
+ return this.invalidateUsers(userIds, companyId);
2390
+ }
2391
+ /** Invalidate permission cache for all users in a company */ async invalidateCompanyMembersCache(companyId) {
2392
+ if (!this.iamConfigService.isCompanyFeatureEnabled()) {
2393
+ return 0;
2394
+ }
2395
+ const permissionRepo = await this.getPermissionRepository();
2396
+ const userPermissions = await permissionRepo.createQueryBuilder('p').select('DISTINCT p.source_id', 'userId').where('p.company_id = :companyId', {
2397
+ companyId
2398
+ }).andWhere('p.source_type = :sourceType', {
2399
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER
2400
+ }).getRawMany();
2401
+ const userIds = [
2402
+ ...new Set(userPermissions.map((p)=>p.userId).filter(Boolean))
2403
+ ];
2404
+ if (userIds.length === 0) {
2405
+ return 0;
2406
+ }
2407
+ return this.invalidateUsers(userIds, companyId);
2408
+ }
2409
+ }
2410
+ _ts_decorate([
2411
+ (0,nestjs_shared_.LogAction)({
2412
+ action: 'permissionCache.setMyPermissions',
2413
+ module: 'iam'
2414
+ }),
2415
+ _ts_metadata("design:type", Function),
2416
+ _ts_metadata("design:paramtypes", [
2417
+ typeof PermissionCacheKeyOptions === "undefined" ? Object : PermissionCacheKeyOptions,
2418
+ typeof CachedMyPermissions === "undefined" ? Object : CachedMyPermissions
2419
+ ]),
2420
+ _ts_metadata("design:returntype", Promise)
2421
+ ], PermissionCacheService.prototype, "setMyPermissions", null);
2422
+ _ts_decorate([
2423
+ (0,nestjs_shared_.LogAction)({
2424
+ action: 'permissionCache.invalidateUser',
2425
+ module: 'iam'
2426
+ }),
2427
+ _ts_metadata("design:type", Function),
2428
+ _ts_metadata("design:paramtypes", [
2429
+ String,
2430
+ Object,
2431
+ Array
2432
+ ]),
2433
+ _ts_metadata("design:returntype", Promise)
2434
+ ], PermissionCacheService.prototype, "invalidateUser", null);
2435
+ _ts_decorate([
2436
+ (0,nestjs_shared_.LogAction)({
2437
+ action: 'permissionCache.invalidateUsers',
2438
+ module: 'iam'
2439
+ }),
2440
+ _ts_metadata("design:type", Function),
2441
+ _ts_metadata("design:paramtypes", [
2442
+ Array,
2443
+ Object,
2444
+ Array
2445
+ ]),
2446
+ _ts_metadata("design:returntype", Promise)
2447
+ ], PermissionCacheService.prototype, "invalidateUsers", null);
2448
+ PermissionCacheService = _ts_decorate([
2449
+ (0,common_.Injectable)({
2450
+ scope: common_.Scope.REQUEST
2451
+ }),
2452
+ _ts_param(0, (0,common_.Inject)('CACHE_INSTANCE')),
2453
+ _ts_param(1, (0,common_.Inject)(iam_config_service/* .IAMConfigService */.N)),
2454
+ _ts_param(2, (0,common_.Inject)(iam_datasource_service/* .IAMDataSourceService */.U)),
2455
+ _ts_param(3, (0,common_.Optional)()),
2456
+ _ts_param(3, (0,common_.Inject)(nestjs_shared_.PERMISSION_GUARD_CONFIG)),
2457
+ _ts_metadata("design:type", Function),
2458
+ _ts_metadata("design:paramtypes", [
2459
+ typeof nestjs_shared_.HybridCache === "undefined" ? Object : nestjs_shared_.HybridCache,
2460
+ typeof iam_config_service/* .IAMConfigService */.N === "undefined" ? Object : iam_config_service/* .IAMConfigService */.N,
2461
+ typeof iam_datasource_service/* .IAMDataSourceService */.U === "undefined" ? Object : iam_datasource_service/* .IAMDataSourceService */.U,
2462
+ typeof PermissionGuardConfig === "undefined" ? Object : PermissionGuardConfig
2463
+ ])
2464
+ ], PermissionCacheService);
2465
+
2466
+
2467
+ },
2468
+ 472(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
2469
+ /* import */ var _flusys_nestjs_shared__rspack_import_0 = __webpack_require__(422);
2470
+ /* import */ var _flusys_nestjs_shared_classes__rspack_import_1 = __webpack_require__(937);
2471
+ /* import */ var _nestjs_common__rspack_import_2 = __webpack_require__(157);
2472
+ /* import */ var typeorm__rspack_import_3 = __webpack_require__(158);
2473
+ /* import */ var _config_index_js__rspack_import_13 = __webpack_require__(490);
2474
+ /* import */ var _config_index_js__rspack_import_16 = __webpack_require__(916);
2475
+ /* import */ var _dtos_permission_dto_js__rspack_import_4 = __webpack_require__(296);
2476
+ /* import */ var _entities_action_entity_js__rspack_import_5 = __webpack_require__(864);
2477
+ /* import */ var _entities_permission_with_company_entity_js__rspack_import_6 = __webpack_require__(746);
2478
+ /* import */ var _entities_role_with_company_entity_js__rspack_import_7 = __webpack_require__(353);
2479
+ /* import */ var _entities_role_entity_js__rspack_import_8 = __webpack_require__(326);
2480
+ /* import */ var _entities_user_iam_permission_entity_js__rspack_import_9 = __webpack_require__(489);
2481
+ /* import */ var _enums_iam_entity_type_enum_js__rspack_import_15 = __webpack_require__(85);
2482
+ /* import */ var _enums_iam_permission_type_enum_js__rspack_import_14 = __webpack_require__(517);
2483
+ /* import */ var _iam_config_service_js__rspack_import_10 = __webpack_require__(645);
2484
+ /* import */ var _iam_datasource_service_js__rspack_import_11 = __webpack_require__(831);
2485
+ /* import */ var _permission_cache_service_js__rspack_import_12 = __webpack_require__(99);
2486
+ function _ts_decorate(decorators, target, key, desc) {
2487
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2488
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
2489
+ r = Reflect.decorate(decorators, target, key, desc);
2490
+ } else {
2491
+ for(var i = decorators.length - 1; i >= 0; i--){
2492
+ if (d = decorators[i]) {
2493
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2494
+ }
2495
+ }
2496
+ }
2497
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
2498
+ }
2499
+ function _ts_metadata(metadataKey, metadataValue) {
2500
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
2501
+ return Reflect.metadata(metadataKey, metadataValue);
2502
+ }
2503
+ }
2504
+ function _ts_param(paramIndex, decorator) {
2505
+ return function(target, key) {
2506
+ decorator(target, key, paramIndex);
2507
+ };
2508
+ }
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+ class PermissionService {
2526
+ permissionCacheService;
2527
+ iamConfigService;
2528
+ dataSourceProvider;
2529
+ // NOTE: @Inject() required for bundled code - type metadata may be lost during esbuild
2530
+ constructor(permissionCacheService, iamConfigService, dataSourceProvider){
2531
+ this.permissionCacheService = permissionCacheService;
2532
+ this.iamConfigService = iamConfigService;
2533
+ this.dataSourceProvider = dataSourceProvider;
2534
+ }
2535
+ // Repository Getters
2536
+ async getPermissionRepository() {
2537
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2538
+ const entity = enableCompanyFeature ? _entities_permission_with_company_entity_js__rspack_import_6/* .UserIamPermissionWithCompany */.t : _entities_user_iam_permission_entity_js__rspack_import_9/* .UserIamPermission */.y;
2539
+ return this.dataSourceProvider.getRepository(entity);
2540
+ }
2541
+ async getActionRepository() {
2542
+ return this.dataSourceProvider.getRepository(_entities_action_entity_js__rspack_import_5/* .Action */.r);
2543
+ }
2544
+ async getRoleRepository() {
2545
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2546
+ const entity = enableCompanyFeature ? _entities_role_with_company_entity_js__rspack_import_7/* .RoleWithCompany */.g : _entities_role_entity_js__rspack_import_8/* .Role */.X;
2547
+ return this.dataSourceProvider.getRepository(entity);
2548
+ }
2549
+ async getActionsMap(actionIds) {
2550
+ const actionRepo = await this.getActionRepository();
2551
+ const actions = await actionRepo.find({
2552
+ where: {
2553
+ id: (0,typeorm__rspack_import_3.In)(actionIds)
2554
+ }
2555
+ });
2556
+ return new Map(actions.map((a)=>[
2557
+ a.id,
2558
+ a
2559
+ ]));
2560
+ }
2561
+ // User-Action Permissions
2562
+ async assignUserActions(dto) {
2563
+ if (!this.iamConfigService.isDirectPermissionEnabled()) {
2564
+ throw new _nestjs_common__rspack_import_2.BadRequestException({
2565
+ message: 'Direct permission assignment not available in RBAC-only mode. Use role-based permissions instead.',
2566
+ messageKey: _config_index_js__rspack_import_13/* .IAM_MODE_MESSAGES.DIRECT_MODE_UNAVAILABLE */.xI.DIRECT_MODE_UNAVAILABLE
2567
+ });
2568
+ }
2569
+ const permissionRepo = await this.getPermissionRepository();
2570
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2571
+ const branchId = dto.branchId ?? null;
2572
+ const companyId = dto.companyId ?? null;
2573
+ const { toAdd: itemsToAdd, toRemove: itemsToRemove } = this.splitItemsByAction(dto.items);
2574
+ let added = 0;
2575
+ let removed = 0;
2576
+ if (itemsToAdd.length > 0) {
2577
+ const actionIdsToAdd = itemsToAdd.map((item)=>item.id);
2578
+ const whereFind = {
2579
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2580
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2581
+ sourceId: dto.userId,
2582
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2583
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToAdd)
2584
+ };
2585
+ if (enableCompanyFeature) {
2586
+ if (companyId) whereFind.companyId = companyId;
2587
+ if (branchId) whereFind.branchId = branchId;
2588
+ }
2589
+ const existingPermissions = await permissionRepo.find({
2590
+ where: whereFind,
2591
+ select: [
2592
+ 'targetId'
2593
+ ]
2594
+ });
2595
+ const existingActionIds = new Set(existingPermissions.map((p)=>p.targetId));
2596
+ const newPermissions = itemsToAdd.filter((item)=>!existingActionIds.has(item.id)).map((item)=>({
2597
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2598
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2599
+ sourceId: dto.userId,
2600
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2601
+ targetId: item.id,
2602
+ companyId: enableCompanyFeature ? companyId : null,
2603
+ branchId: enableCompanyFeature ? branchId : null
2604
+ }));
2605
+ if (newPermissions.length > 0) {
2606
+ try {
2607
+ await permissionRepo.save(newPermissions);
2608
+ added = newPermissions.length;
2609
+ } catch (error) {
2610
+ if (error?.code === 'ER_DUP_ENTRY' || error?.message?.includes('Duplicate entry')) {
2611
+ throw new _nestjs_common__rspack_import_2.ConflictException({
2612
+ message: 'Some permissions already exist for this user. Please refresh and try again.',
2613
+ messageKey: _config_index_js__rspack_import_13/* .PERMISSION_OPERATION_MESSAGES.ALREADY_EXISTS */.P3.ALREADY_EXISTS
2614
+ });
2615
+ }
2616
+ throw error;
2617
+ }
2618
+ }
2619
+ }
2620
+ if (itemsToRemove.length > 0) {
2621
+ const actionIdsToRemove = itemsToRemove.map((item)=>item.id);
2622
+ const whereDelete = {
2623
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2624
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2625
+ sourceId: dto.userId,
2626
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2627
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToRemove)
2628
+ };
2629
+ if (enableCompanyFeature) {
2630
+ if (companyId) whereDelete.companyId = companyId;
2631
+ if (branchId) whereDelete.branchId = branchId;
2632
+ }
2633
+ const result = await permissionRepo.delete(whereDelete);
2634
+ removed = result.affected || 0;
2635
+ }
2636
+ await this.permissionCacheService.invalidateUser(dto.userId, enableCompanyFeature ? companyId : null, enableCompanyFeature ? [
2637
+ branchId
2638
+ ] : []);
2639
+ const result = this.buildOperationResult(dto.items.length, added, removed);
2640
+ await this.publishAssignmentEvent(_config_index_js__rspack_import_16/* .IAM_EVENT_ENTITIES.USER_ACTION */.H.USER_ACTION, dto.userId, result);
2641
+ return result;
2642
+ }
2643
+ async getUserActions(userId, companyId, branchId) {
2644
+ const permissionRepo = await this.getPermissionRepository();
2645
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2646
+ const where = {
2647
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2648
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2649
+ sourceId: userId
2650
+ };
2651
+ if (enableCompanyFeature) {
2652
+ if (companyId) where.companyId = companyId;
2653
+ if (branchId) where.branchId = branchId;
2654
+ }
2655
+ const permissions = await permissionRepo.find({
2656
+ where
2657
+ });
2658
+ if (permissions.length === 0) {
2659
+ return [];
2660
+ }
2661
+ const actionIds = permissions.map((p)=>p.targetId);
2662
+ const actionMap = await this.getActionsMap(actionIds);
2663
+ return permissions.filter((p)=>actionMap.has(p.targetId)).map((p)=>{
2664
+ const action = actionMap.get(p.targetId);
2665
+ return {
2666
+ id: p.id,
2667
+ userId: p.sourceId,
2668
+ actionId: action.id,
2669
+ actionCode: action.code ?? '',
2670
+ actionName: action.name,
2671
+ companyId: ('companyId' in p ? p.companyId : null) ?? null,
2672
+ branchId: ('branchId' in p ? p.branchId : null) ?? null,
2673
+ createdAt: p.createdAt
2674
+ };
2675
+ });
2676
+ }
2677
+ // Role-Action Permissions
2678
+ async assignRoleActions(dto) {
2679
+ if (!this.iamConfigService.isRbacEnabled()) {
2680
+ throw new _nestjs_common__rspack_import_2.BadRequestException({
2681
+ message: 'Role-based permission assignment not available in DIRECT-only mode. Use direct user permissions instead.',
2682
+ messageKey: _config_index_js__rspack_import_13/* .IAM_MODE_MESSAGES.RBAC_MODE_UNAVAILABLE */.xI.RBAC_MODE_UNAVAILABLE
2683
+ });
2684
+ }
2685
+ const permissionRepo = await this.getPermissionRepository();
2686
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2687
+ let roleCompanyId = null;
2688
+ if (enableCompanyFeature) {
2689
+ const roleRepo = await this.getRoleRepository();
2690
+ const role = await roleRepo.findOne({
2691
+ where: {
2692
+ id: dto.roleId
2693
+ },
2694
+ select: [
2695
+ 'id',
2696
+ 'companyId'
2697
+ ]
2698
+ });
2699
+ roleCompanyId = role?.companyId ?? null;
2700
+ }
2701
+ const { toAdd: itemsToAdd, toRemove: itemsToRemove } = this.splitItemsByAction(dto.items);
2702
+ let added = 0;
2703
+ let removed = 0;
2704
+ if (itemsToAdd.length > 0) {
2705
+ const actionIdsToAdd = itemsToAdd.map((item)=>item.id);
2706
+ const existingPermissions = await permissionRepo.find({
2707
+ where: {
2708
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2709
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2710
+ sourceId: dto.roleId,
2711
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2712
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToAdd)
2713
+ },
2714
+ select: [
2715
+ 'targetId'
2716
+ ]
2717
+ });
2718
+ const existingActionIds = new Set(existingPermissions.map((p)=>p.targetId));
2719
+ const newPermissions = itemsToAdd.filter((item)=>!existingActionIds.has(item.id)).map((item)=>({
2720
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2721
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2722
+ sourceId: dto.roleId,
2723
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2724
+ targetId: item.id,
2725
+ companyId: enableCompanyFeature ? roleCompanyId : null,
2726
+ branchId: null
2727
+ }));
2728
+ if (newPermissions.length > 0) {
2729
+ try {
2730
+ await permissionRepo.save(newPermissions);
2731
+ added = newPermissions.length;
2732
+ } catch (error) {
2733
+ if (error?.code === 'ER_DUP_ENTRY' || error?.message?.includes('Duplicate entry')) {
2734
+ throw new _nestjs_common__rspack_import_2.ConflictException({
2735
+ message: 'Some role-action permissions already exist. Please refresh and try again.',
2736
+ messageKey: _config_index_js__rspack_import_13/* .PERMISSION_OPERATION_MESSAGES.ALREADY_EXISTS */.P3.ALREADY_EXISTS
2737
+ });
2738
+ }
2739
+ throw error;
2740
+ }
2741
+ }
2742
+ }
2743
+ if (itemsToRemove.length > 0) {
2744
+ const actionIdsToRemove = itemsToRemove.map((item)=>item.id);
2745
+ const result = await permissionRepo.delete({
2746
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2747
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2748
+ sourceId: dto.roleId,
2749
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2750
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToRemove)
2751
+ });
2752
+ removed = result.affected || 0;
2753
+ }
2754
+ await this.permissionCacheService.invalidateRoleMembersCache(dto.roleId);
2755
+ const result = this.buildOperationResult(dto.items.length, added, removed);
2756
+ await this.publishAssignmentEvent(_config_index_js__rspack_import_16/* .IAM_EVENT_ENTITIES.ROLE_ACTION */.H.ROLE_ACTION, dto.roleId, result);
2757
+ return result;
2758
+ }
2759
+ async getRoleActions(roleId) {
2760
+ const permissionRepo = await this.getPermissionRepository();
2761
+ const permissions = await permissionRepo.find({
2762
+ where: {
2763
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2764
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2765
+ sourceId: roleId
2766
+ }
2767
+ });
2768
+ if (permissions.length === 0) {
2769
+ return [];
2770
+ }
2771
+ const actionIds = permissions.map((p)=>p.targetId);
2772
+ const actionMap = await this.getActionsMap(actionIds);
2773
+ return permissions.filter((p)=>actionMap.has(p.targetId)).map((p)=>{
2774
+ const action = actionMap.get(p.targetId);
2775
+ return {
2776
+ id: p.id,
2777
+ roleId: p.sourceId,
2778
+ actionId: action.id,
2779
+ actionCode: action.code ?? '',
2780
+ actionName: action.name,
2781
+ createdAt: p.createdAt
2782
+ };
2783
+ });
2784
+ }
2785
+ // Company-Action Permissions (Whitelist)
2786
+ /** Assign or remove actions to/from a company (whitelist) */ async assignCompanyActions(dto) {
2787
+ const permissionRepo = await this.getPermissionRepository();
2788
+ const dataSource = await this.dataSourceProvider.getDataSource();
2789
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2790
+ const { toAdd: itemsToAdd, toRemove: itemsToRemove } = this.splitItemsByAction(dto.items);
2791
+ let added = 0;
2792
+ let removed = 0;
2793
+ await dataSource.transaction(async (manager)=>{
2794
+ const transactionalPermissionRepo = manager.getRepository(permissionRepo.target);
2795
+ if (itemsToAdd.length > 0) {
2796
+ const actionIdsToAdd = itemsToAdd.map((item)=>item.id);
2797
+ const existingPermissions = await transactionalPermissionRepo.find({
2798
+ where: {
2799
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
2800
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.COMPANY */.n.COMPANY,
2801
+ sourceId: dto.companyId,
2802
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2803
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToAdd)
2804
+ },
2805
+ select: [
2806
+ 'targetId'
2807
+ ]
2808
+ });
2809
+ const existingActionIds = new Set(existingPermissions.map((p)=>p.targetId));
2810
+ const newActionIds = actionIdsToAdd.filter((id)=>!existingActionIds.has(id));
2811
+ if (newActionIds.length > 0) {
2812
+ const newPermissions = newActionIds.map((actionId)=>transactionalPermissionRepo.create({
2813
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
2814
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.COMPANY */.n.COMPANY,
2815
+ sourceId: dto.companyId,
2816
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2817
+ targetId: actionId
2818
+ }));
2819
+ await transactionalPermissionRepo.save(newPermissions);
2820
+ added = newPermissions.length;
2821
+ }
2822
+ }
2823
+ if (itemsToRemove.length > 0) {
2824
+ const actionIdsToRemove = itemsToRemove.map((item)=>item.id);
2825
+ const companyResult = await transactionalPermissionRepo.delete({
2826
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
2827
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.COMPANY */.n.COMPANY,
2828
+ sourceId: dto.companyId,
2829
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2830
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToRemove)
2831
+ });
2832
+ removed = companyResult.affected || 0;
2833
+ // Cascade: an action no longer on the company whitelist must not remain
2834
+ // reachable via role grants or direct user grants scoped to this company.
2835
+ const roleEntity = enableCompanyFeature ? _entities_role_with_company_entity_js__rspack_import_7/* .RoleWithCompany */.g : _entities_role_entity_js__rspack_import_8/* .Role */.X;
2836
+ const roleRepo = manager.getRepository(roleEntity);
2837
+ const companyRoles = await roleRepo.find({
2838
+ where: {
2839
+ companyId: dto.companyId,
2840
+ deletedAt: (0,typeorm__rspack_import_3.IsNull)()
2841
+ },
2842
+ select: [
2843
+ 'id'
2844
+ ]
2845
+ });
2846
+ if (companyRoles.length > 0) {
2847
+ const roleIds = companyRoles.map((role)=>role.id);
2848
+ await transactionalPermissionRepo.delete({
2849
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
2850
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2851
+ sourceId: (0,typeorm__rspack_import_3.In)(roleIds),
2852
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2853
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToRemove)
2854
+ });
2855
+ }
2856
+ if (enableCompanyFeature) {
2857
+ await transactionalPermissionRepo.delete({
2858
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
2859
+ companyId: dto.companyId,
2860
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ACTION */.n.ACTION,
2861
+ targetId: (0,typeorm__rspack_import_3.In)(actionIdsToRemove)
2862
+ });
2863
+ }
2864
+ }
2865
+ });
2866
+ await this.permissionCacheService.invalidateCompanyMembersCache(dto.companyId);
2867
+ const result = this.buildOperationResult(dto.items.length, added, removed);
2868
+ await this.publishAssignmentEvent(_config_index_js__rspack_import_16/* .IAM_EVENT_ENTITIES.COMPANY_ACTION */.H.COMPANY_ACTION, dto.companyId, result);
2869
+ return result;
2870
+ }
2871
+ /** Get all actions assigned to a company (whitelist) */ async getCompanyActions(companyId, isOnlyId = false) {
2872
+ const permissionRepo = await this.getPermissionRepository();
2873
+ const permissions = await permissionRepo.find({
2874
+ where: {
2875
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
2876
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.COMPANY */.n.COMPANY,
2877
+ sourceId: companyId
2878
+ }
2879
+ });
2880
+ if (permissions.length === 0) {
2881
+ return [];
2882
+ }
2883
+ const actionIds = permissions.map((p)=>p.targetId);
2884
+ if (isOnlyId) return actionIds;
2885
+ const actionMap = await this.getActionsMap(actionIds);
2886
+ return permissions.filter((p)=>actionMap.has(p.targetId)).map((p)=>{
2887
+ const action = actionMap.get(p.targetId);
2888
+ return {
2889
+ id: p.id,
2890
+ companyId: companyId,
2891
+ actionId: action.id,
2892
+ actionCode: action.code ?? '',
2893
+ actionName: action.name,
2894
+ createdAt: p.createdAt
2895
+ };
2896
+ });
2897
+ }
2898
+ // User-Role Permissions
2899
+ /** Assign user to roles (branch-scoped when company feature is enabled) */ async assignUserRoles(dto) {
2900
+ if (!this.iamConfigService.isRbacEnabled()) {
2901
+ throw new _nestjs_common__rspack_import_2.BadRequestException({
2902
+ message: 'Role assignment not available in DIRECT-only mode. Use direct user permissions instead.',
2903
+ messageKey: _config_index_js__rspack_import_13/* .IAM_MODE_MESSAGES.ROLE_ASSIGNMENT_UNAVAILABLE */.xI.ROLE_ASSIGNMENT_UNAVAILABLE
2904
+ });
2905
+ }
2906
+ const permissionRepo = await this.getPermissionRepository();
2907
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2908
+ const branchId = dto.branchId ?? null;
2909
+ const companyId = dto.companyId ?? null;
2910
+ const { toAdd: itemsToAdd, toRemove: itemsToRemove } = this.splitItemsByAction(dto.items);
2911
+ let added = 0;
2912
+ let removed = 0;
2913
+ if (itemsToAdd.length > 0) {
2914
+ const roleIdsToAdd = itemsToAdd.map((item)=>item.id);
2915
+ const whereFind = {
2916
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2917
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2918
+ sourceId: dto.userId,
2919
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2920
+ targetId: (0,typeorm__rspack_import_3.In)(roleIdsToAdd)
2921
+ };
2922
+ if (enableCompanyFeature) {
2923
+ if (companyId) whereFind.companyId = companyId;
2924
+ if (branchId) whereFind.branchId = branchId;
2925
+ }
2926
+ const existingPermissions = await permissionRepo.find({
2927
+ where: whereFind,
2928
+ select: [
2929
+ 'targetId'
2930
+ ]
2931
+ });
2932
+ const existingRoleIds = new Set(existingPermissions.map((p)=>p.targetId));
2933
+ const newPermissions = itemsToAdd.filter((item)=>!existingRoleIds.has(item.id)).map((item)=>({
2934
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2935
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2936
+ sourceId: dto.userId,
2937
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2938
+ targetId: item.id,
2939
+ companyId: enableCompanyFeature ? companyId : null,
2940
+ branchId: enableCompanyFeature ? branchId : null
2941
+ }));
2942
+ if (newPermissions.length > 0) {
2943
+ try {
2944
+ await permissionRepo.save(newPermissions);
2945
+ added = newPermissions.length;
2946
+ } catch (error) {
2947
+ if (error?.code === 'ER_DUP_ENTRY' || error?.message?.includes('Duplicate entry')) {
2948
+ throw new _nestjs_common__rspack_import_2.ConflictException({
2949
+ message: 'Some user-role permissions already exist. Please refresh and try again.',
2950
+ messageKey: _config_index_js__rspack_import_13/* .PERMISSION_OPERATION_MESSAGES.ALREADY_EXISTS */.P3.ALREADY_EXISTS
2951
+ });
2952
+ }
2953
+ throw error;
2954
+ }
2955
+ }
2956
+ }
2957
+ if (itemsToRemove.length > 0) {
2958
+ const roleIdsToRemove = itemsToRemove.map((item)=>item.id);
2959
+ const whereDelete = {
2960
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2961
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2962
+ sourceId: dto.userId,
2963
+ targetType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
2964
+ targetId: (0,typeorm__rspack_import_3.In)(roleIdsToRemove)
2965
+ };
2966
+ if (enableCompanyFeature) {
2967
+ if (companyId) whereDelete.companyId = companyId;
2968
+ if (branchId) whereDelete.branchId = branchId;
2969
+ }
2970
+ const result = await permissionRepo.delete(whereDelete);
2971
+ removed = result.affected || 0;
2972
+ }
2973
+ await this.permissionCacheService.invalidateUser(dto.userId, enableCompanyFeature ? companyId : null, [
2974
+ branchId
2975
+ ]);
2976
+ const result = this.buildOperationResult(dto.items.length, added, removed);
2977
+ await this.publishAssignmentEvent(_config_index_js__rspack_import_16/* .IAM_EVENT_ENTITIES.USER_ROLE */.H.USER_ROLE, dto.userId, result);
2978
+ return result;
2979
+ }
2980
+ /** Get user's roles (branch-scoped, filtered by companyId and branchId if provided) */ async getUserRoles(userId, branchId, companyId) {
2981
+ const permissionRepo = await this.getPermissionRepository();
2982
+ const roleRepo = await this.getRoleRepository();
2983
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
2984
+ const where = {
2985
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
2986
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
2987
+ sourceId: userId
2988
+ };
2989
+ if (enableCompanyFeature) {
2990
+ if (companyId) where.companyId = companyId;
2991
+ if (branchId) where.branchId = branchId;
2992
+ }
2993
+ const permissions = await permissionRepo.find({
2994
+ where
2995
+ });
2996
+ if (permissions.length === 0) {
2997
+ return [];
2998
+ }
2999
+ const roleIds = permissions.map((p)=>p.targetId);
3000
+ const roleWhere = {
3001
+ id: (0,typeorm__rspack_import_3.In)(roleIds)
3002
+ };
3003
+ const roles = await roleRepo.find({
3004
+ where: roleWhere
3005
+ });
3006
+ const roleMap = new Map(roles.map((r)=>[
3007
+ r.id,
3008
+ r
3009
+ ]));
3010
+ return permissions.filter((p)=>roleMap.has(p.targetId)).map((p)=>{
3011
+ const role = roleMap.get(p.targetId);
3012
+ const permissionEntity = p;
3013
+ return {
3014
+ id: p.id,
3015
+ userId: p.sourceId,
3016
+ roleId: role.id,
3017
+ roleName: role.name,
3018
+ branchId: enableCompanyFeature ? permissionEntity.branchId ?? null : null,
3019
+ createdAt: p.createdAt
3020
+ };
3021
+ });
3022
+ }
3023
+ // Effective (Merged) Permissions — self-scoped, company-wide + branch-specific
3024
+ /** Get user's effective roles: company-wide (branchId null) merged with branch-specific */ async getUserEffectiveRoles(userId, companyId, branchId) {
3025
+ const permissionRepo = await this.getPermissionRepository();
3026
+ const roleRepo = await this.getRoleRepository();
3027
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
3028
+ const baseWhere = {
3029
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3030
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
3031
+ sourceId: userId
3032
+ };
3033
+ if (enableCompanyFeature && companyId) baseWhere.companyId = companyId;
3034
+ const permissions = enableCompanyFeature && branchId ? await permissionRepo.find({
3035
+ where: [
3036
+ {
3037
+ ...baseWhere,
3038
+ branchId: (0,typeorm__rspack_import_3.IsNull)()
3039
+ },
3040
+ {
3041
+ ...baseWhere,
3042
+ branchId
3043
+ }
3044
+ ]
3045
+ }) : await permissionRepo.find({
3046
+ where: baseWhere
3047
+ });
3048
+ const validPermissions = permissions.filter((p)=>p.isValid());
3049
+ if (validPermissions.length === 0) {
3050
+ return [];
3051
+ }
3052
+ const roleIds = [
3053
+ ...new Set(validPermissions.map((p)=>p.targetId))
3054
+ ];
3055
+ const roles = await roleRepo.find({
3056
+ where: {
3057
+ id: (0,typeorm__rspack_import_3.In)(roleIds)
3058
+ }
3059
+ });
3060
+ const roleMap = new Map(roles.map((r)=>[
3061
+ r.id,
3062
+ r
3063
+ ]));
3064
+ return validPermissions.filter((p)=>roleMap.has(p.targetId)).map((p)=>{
3065
+ const role = roleMap.get(p.targetId);
3066
+ return {
3067
+ id: p.id,
3068
+ userId: p.sourceId,
3069
+ roleId: role.id,
3070
+ roleName: role.name,
3071
+ branchId: enableCompanyFeature ? p.branchId ?? null : null,
3072
+ createdAt: p.createdAt
3073
+ };
3074
+ });
3075
+ }
3076
+ /** Get user's effective actions: company-wide (branchId null) merged with branch-specific */ async getUserEffectiveActions(userId, companyId, branchId) {
3077
+ const permissionRepo = await this.getPermissionRepository();
3078
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
3079
+ const baseWhere = {
3080
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION,
3081
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
3082
+ sourceId: userId
3083
+ };
3084
+ if (enableCompanyFeature && companyId) baseWhere.companyId = companyId;
3085
+ const permissions = enableCompanyFeature && branchId ? await permissionRepo.find({
3086
+ where: [
3087
+ {
3088
+ ...baseWhere,
3089
+ branchId: (0,typeorm__rspack_import_3.IsNull)()
3090
+ },
3091
+ {
3092
+ ...baseWhere,
3093
+ branchId
3094
+ }
3095
+ ]
3096
+ }) : await permissionRepo.find({
3097
+ where: baseWhere
3098
+ });
3099
+ const validPermissions = permissions.filter((p)=>p.isValid());
3100
+ if (validPermissions.length === 0) {
3101
+ return [];
3102
+ }
3103
+ const actionIds = [
3104
+ ...new Set(validPermissions.map((p)=>p.targetId))
3105
+ ];
3106
+ const actionMap = await this.getActionsMap(actionIds);
3107
+ return validPermissions.filter((p)=>actionMap.has(p.targetId)).map((p)=>{
3108
+ const action = actionMap.get(p.targetId);
3109
+ return {
3110
+ id: p.id,
3111
+ userId: p.sourceId,
3112
+ actionId: action.id,
3113
+ actionCode: action.code ?? '',
3114
+ actionName: action.name,
3115
+ companyId: ('companyId' in p ? p.companyId : null) ?? null,
3116
+ branchId: ('branchId' in p ? p.branchId : null) ?? null,
3117
+ createdAt: p.createdAt
3118
+ };
3119
+ });
3120
+ }
3121
+ // My Permissions
3122
+ /** Get user's effective permissions (cache-first approach) */ async getMyPermissions(userId, branchId, companyId, parentCodes) {
3123
+ return this.permissionCacheService.getMyPermissionsResponse(userId, branchId, companyId, parentCodes);
3124
+ }
3125
+ // Helper Methods
3126
+ /** Split permission items into add and remove arrays */ splitItemsByAction(items) {
3127
+ return {
3128
+ toAdd: items.filter((item)=>item.action === _dtos_permission_dto_js__rspack_import_4/* .PermissionAction.ADD */.aG.ADD),
3129
+ toRemove: items.filter((item)=>item.action === _dtos_permission_dto_js__rspack_import_4/* .PermissionAction.REMOVE */.aG.REMOVE)
3130
+ };
3131
+ }
3132
+ async publishAssignmentEvent(entity, targetId, result) {
3133
+ await (0,_flusys_nestjs_shared_classes__rspack_import_1.publishDomainEvent)({
3134
+ module: (/* inlined export .IAM_EVENT_MODULE */"iam"),
3135
+ entity,
3136
+ action: _config_index_js__rspack_import_16/* .IAM_EVENT_ACTIONS.PERMISSIONS_ASSIGNED */.X.PERMISSIONS_ASSIGNED,
3137
+ ids: [
3138
+ targetId
3139
+ ],
3140
+ metadata: {
3141
+ added: result.added,
3142
+ removed: result.removed,
3143
+ total: result.total
3144
+ }
3145
+ });
3146
+ }
3147
+ /** Build standard operation result DTO */ buildOperationResult(_totalItems, added, removed) {
3148
+ return {
3149
+ added,
3150
+ removed,
3151
+ total: _totalItems
3152
+ };
3153
+ }
3154
+ async revokeCompanyPermissions(companyId) {
3155
+ if (!this.iamConfigService.isCompanyFeatureEnabled()) {
3156
+ return;
3157
+ }
3158
+ const permissionRepo = await this.getPermissionRepository();
3159
+ const roleRepo = await this.getRoleRepository();
3160
+ const dataSource = await this.dataSourceProvider.getDataSource();
3161
+ const companyRoles = await roleRepo.find({
3162
+ where: {
3163
+ companyId,
3164
+ deletedAt: (0,typeorm__rspack_import_3.IsNull)()
3165
+ },
3166
+ select: [
3167
+ 'id'
3168
+ ]
3169
+ });
3170
+ const roleIds = companyRoles.map((role)=>role.id);
3171
+ const affectedUserRows = await permissionRepo.find({
3172
+ where: {
3173
+ permissionType: (0,typeorm__rspack_import_3.In)([
3174
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3175
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION
3176
+ ]),
3177
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
3178
+ companyId
3179
+ },
3180
+ select: [
3181
+ 'sourceId'
3182
+ ]
3183
+ });
3184
+ const affectedUserIds = [
3185
+ ...new Set(affectedUserRows.map((row)=>row.sourceId))
3186
+ ];
3187
+ await dataSource.transaction(async (manager)=>{
3188
+ const txRepo = manager.getRepository(permissionRepo.target);
3189
+ await txRepo.delete({
3190
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.COMPANY_ACTION */.V.COMPANY_ACTION,
3191
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.COMPANY */.n.COMPANY,
3192
+ sourceId: companyId
3193
+ });
3194
+ if (roleIds.length > 0) {
3195
+ await txRepo.delete({
3196
+ permissionType: _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
3197
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.ROLE */.n.ROLE,
3198
+ sourceId: (0,typeorm__rspack_import_3.In)(roleIds)
3199
+ });
3200
+ }
3201
+ await txRepo.delete({
3202
+ permissionType: (0,typeorm__rspack_import_3.In)([
3203
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3204
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION
3205
+ ]),
3206
+ companyId
3207
+ });
3208
+ if (roleIds.length > 0) {
3209
+ const txRoleRepo = manager.getRepository(roleRepo.target);
3210
+ await txRoleRepo.delete(roleIds);
3211
+ }
3212
+ });
3213
+ if (affectedUserIds.length > 0) {
3214
+ await this.permissionCacheService.invalidateUsers(affectedUserIds, companyId);
3215
+ }
3216
+ }
3217
+ async revokeBranchPermissions(branchId, companyId) {
3218
+ if (!this.iamConfigService.isCompanyFeatureEnabled()) {
3219
+ return;
3220
+ }
3221
+ const permissionRepo = await this.getPermissionRepository();
3222
+ const where = {
3223
+ permissionType: (0,typeorm__rspack_import_3.In)([
3224
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3225
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION
3226
+ ]),
3227
+ companyId,
3228
+ branchId
3229
+ };
3230
+ const affectedUserRows = await permissionRepo.find({
3231
+ where: {
3232
+ ...where,
3233
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER
3234
+ },
3235
+ select: [
3236
+ 'sourceId'
3237
+ ]
3238
+ });
3239
+ const affectedUserIds = [
3240
+ ...new Set(affectedUserRows.map((row)=>row.sourceId))
3241
+ ];
3242
+ await permissionRepo.delete(where);
3243
+ if (affectedUserIds.length > 0) {
3244
+ await this.permissionCacheService.invalidateUsers(affectedUserIds, companyId, [
3245
+ branchId
3246
+ ]);
3247
+ }
3248
+ }
3249
+ async revokeUserCompanyAccess(userId, companyId) {
3250
+ const permissionRepo = await this.getPermissionRepository();
3251
+ await permissionRepo.delete({
3252
+ permissionType: (0,typeorm__rspack_import_3.In)([
3253
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3254
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION
3255
+ ]),
3256
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
3257
+ sourceId: userId,
3258
+ companyId
3259
+ });
3260
+ await this.permissionCacheService.invalidateUser(userId, companyId);
3261
+ }
3262
+ async revokeUserBranchAccess(userId, branchId, companyId) {
3263
+ const permissionRepo = await this.getPermissionRepository();
3264
+ const where = {
3265
+ permissionType: (0,typeorm__rspack_import_3.In)([
3266
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3267
+ _enums_iam_permission_type_enum_js__rspack_import_14/* .IamPermissionType.USER_ACTION */.V.USER_ACTION
3268
+ ]),
3269
+ sourceType: _enums_iam_entity_type_enum_js__rspack_import_15/* .IamEntityType.USER */.n.USER,
3270
+ sourceId: userId,
3271
+ branchId,
3272
+ companyId
3273
+ };
3274
+ await permissionRepo.delete(where);
3275
+ await this.permissionCacheService.invalidateUser(userId, companyId, [
3276
+ branchId
3277
+ ]);
3278
+ }
3279
+ }
3280
+ _ts_decorate([
3281
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3282
+ action: 'iam.assignUserActions',
3283
+ module: 'iam'
3284
+ }),
3285
+ _ts_metadata("design:type", Function),
3286
+ _ts_metadata("design:paramtypes", [
3287
+ typeof _dtos_permission_dto_js__rspack_import_4/* .AssignUserActionsDto */.zs === "undefined" ? Object : _dtos_permission_dto_js__rspack_import_4/* .AssignUserActionsDto */.zs
3288
+ ]),
3289
+ _ts_metadata("design:returntype", Promise)
3290
+ ], PermissionService.prototype, "assignUserActions", null);
3291
+ _ts_decorate([
3292
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3293
+ action: 'iam.assignRoleActions',
3294
+ module: 'iam'
3295
+ }),
3296
+ _ts_metadata("design:type", Function),
3297
+ _ts_metadata("design:paramtypes", [
3298
+ typeof _dtos_permission_dto_js__rspack_import_4/* .AssignRoleActionsDto */.cv === "undefined" ? Object : _dtos_permission_dto_js__rspack_import_4/* .AssignRoleActionsDto */.cv
3299
+ ]),
3300
+ _ts_metadata("design:returntype", Promise)
3301
+ ], PermissionService.prototype, "assignRoleActions", null);
3302
+ _ts_decorate([
3303
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3304
+ action: 'iam.assignCompanyActions',
3305
+ module: 'iam'
3306
+ }),
3307
+ _ts_metadata("design:type", Function),
3308
+ _ts_metadata("design:paramtypes", [
3309
+ typeof _dtos_permission_dto_js__rspack_import_4/* .AssignCompanyActionsDto */.Nx === "undefined" ? Object : _dtos_permission_dto_js__rspack_import_4/* .AssignCompanyActionsDto */.Nx
3310
+ ]),
3311
+ _ts_metadata("design:returntype", Promise)
3312
+ ], PermissionService.prototype, "assignCompanyActions", null);
3313
+ _ts_decorate([
3314
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3315
+ action: 'iam.assignUserRoles',
3316
+ module: 'iam'
3317
+ }),
3318
+ _ts_metadata("design:type", Function),
3319
+ _ts_metadata("design:paramtypes", [
3320
+ typeof _dtos_permission_dto_js__rspack_import_4/* .AssignUserRolesDto */.Xz === "undefined" ? Object : _dtos_permission_dto_js__rspack_import_4/* .AssignUserRolesDto */.Xz
3321
+ ]),
3322
+ _ts_metadata("design:returntype", Promise)
3323
+ ], PermissionService.prototype, "assignUserRoles", null);
3324
+ _ts_decorate([
3325
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3326
+ action: 'iam.revokeCompanyPermissions',
3327
+ module: 'iam'
3328
+ }),
3329
+ _ts_metadata("design:type", Function),
3330
+ _ts_metadata("design:paramtypes", [
3331
+ String
3332
+ ]),
3333
+ _ts_metadata("design:returntype", Promise)
3334
+ ], PermissionService.prototype, "revokeCompanyPermissions", null);
3335
+ _ts_decorate([
3336
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3337
+ action: 'iam.revokeBranchPermissions',
3338
+ module: 'iam'
3339
+ }),
3340
+ _ts_metadata("design:type", Function),
3341
+ _ts_metadata("design:paramtypes", [
3342
+ String,
3343
+ String
3344
+ ]),
3345
+ _ts_metadata("design:returntype", Promise)
3346
+ ], PermissionService.prototype, "revokeBranchPermissions", null);
3347
+ _ts_decorate([
3348
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3349
+ action: 'iam.revokeUserCompanyAccess',
3350
+ module: 'iam'
3351
+ }),
3352
+ _ts_metadata("design:type", Function),
3353
+ _ts_metadata("design:paramtypes", [
3354
+ String,
3355
+ String
3356
+ ]),
3357
+ _ts_metadata("design:returntype", Promise)
3358
+ ], PermissionService.prototype, "revokeUserCompanyAccess", null);
3359
+ _ts_decorate([
3360
+ (0,_flusys_nestjs_shared__rspack_import_0.LogAction)({
3361
+ action: 'iam.revokeUserBranchAccess',
3362
+ module: 'iam'
3363
+ }),
3364
+ _ts_metadata("design:type", Function),
3365
+ _ts_metadata("design:paramtypes", [
3366
+ String,
3367
+ String,
3368
+ String
3369
+ ]),
3370
+ _ts_metadata("design:returntype", Promise)
3371
+ ], PermissionService.prototype, "revokeUserBranchAccess", null);
3372
+ PermissionService = _ts_decorate([
3373
+ (0,_nestjs_common__rspack_import_2.Injectable)({
3374
+ scope: _nestjs_common__rspack_import_2.Scope.REQUEST
3375
+ }),
3376
+ _ts_param(0, (0,_nestjs_common__rspack_import_2.Inject)(_permission_cache_service_js__rspack_import_12/* .PermissionCacheService */.D)),
3377
+ _ts_param(1, (0,_nestjs_common__rspack_import_2.Inject)(_iam_config_service_js__rspack_import_10/* .IAMConfigService */.N)),
3378
+ _ts_param(2, (0,_nestjs_common__rspack_import_2.Inject)(_iam_datasource_service_js__rspack_import_11/* .IAMDataSourceService */.U)),
3379
+ _ts_metadata("design:type", Function),
3380
+ _ts_metadata("design:paramtypes", [
3381
+ typeof _permission_cache_service_js__rspack_import_12/* .PermissionCacheService */.D === "undefined" ? Object : _permission_cache_service_js__rspack_import_12/* .PermissionCacheService */.D,
3382
+ typeof _iam_config_service_js__rspack_import_10/* .IAMConfigService */.N === "undefined" ? Object : _iam_config_service_js__rspack_import_10/* .IAMConfigService */.N,
3383
+ typeof _iam_datasource_service_js__rspack_import_11/* .IAMDataSourceService */.U === "undefined" ? Object : _iam_datasource_service_js__rspack_import_11/* .IAMDataSourceService */.U
3384
+ ])
3385
+ ], PermissionService);
3386
+
3387
+ __webpack_require__.d(__webpack_exports__, {
3388
+ n: () => (PermissionService)
3389
+ });
3390
+
3391
+
3392
+ },
3393
+ 446(__unused_rspack_module, __webpack_exports__, __webpack_require__) {
3394
+
3395
+ // EXPORTS
3396
+ __webpack_require__.d(__webpack_exports__, {
3397
+ W: () => (/* binding */ RoleService)
3398
+ });
3399
+
3400
+ // EXTERNAL MODULE: external "@flusys/nestjs-shared/classes"
3401
+ var classes_ = __webpack_require__(937);
3402
+ // EXTERNAL MODULE: external "@flusys/nestjs-shared/modules"
3403
+ var modules_ = __webpack_require__(236);
3404
+ ;// CONCATENATED MODULE: external "@flusys/nestjs-shared/utils"
3405
+
3406
+ // EXTERNAL MODULE: external "@nestjs/common"
3407
+ var common_ = __webpack_require__(157);
3408
+ // EXTERNAL MODULE: external "typeorm"
3409
+ var external_typeorm_ = __webpack_require__(158);
3410
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/config/event-actions.ts
3411
+ var event_actions = __webpack_require__(916);
3412
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/config/message-keys.ts
3413
+ var message_keys = __webpack_require__(490);
3414
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/permission-with-company.entity.ts
3415
+ var permission_with_company_entity = __webpack_require__(746);
3416
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/role-with-company.entity.ts
3417
+ var role_with_company_entity = __webpack_require__(353);
3418
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/role.entity.ts
3419
+ var role_entity = __webpack_require__(326);
3420
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/entities/user-iam-permission.entity.ts
3421
+ var user_iam_permission_entity = __webpack_require__(489);
3422
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/iam-entity-type.enum.ts
3423
+ var iam_entity_type_enum = __webpack_require__(85);
3424
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/enums/iam-permission-type.enum.ts
3425
+ var iam_permission_type_enum = __webpack_require__(517);
3426
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/iam-config.service.ts
3427
+ var iam_config_service = __webpack_require__(645);
3428
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/iam-datasource.service.ts + 1 modules
3429
+ var iam_datasource_service = __webpack_require__(831);
3430
+ // EXTERNAL MODULE: ./projects/nestjs-iam/src/services/permission-cache.service.ts + 1 modules
3431
+ var permission_cache_service = __webpack_require__(99);
3432
+ ;// CONCATENATED MODULE: ./projects/nestjs-iam/src/services/role.service.ts
3433
+ function _ts_decorate(decorators, target, key, desc) {
3434
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3435
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
3436
+ r = Reflect.decorate(decorators, target, key, desc);
3437
+ } else {
3438
+ for(var i = decorators.length - 1; i >= 0; i--){
3439
+ if (d = decorators[i]) {
3440
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
3441
+ }
3442
+ }
3443
+ }
3444
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
3445
+ }
3446
+ function _ts_metadata(metadataKey, metadataValue) {
3447
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
3448
+ return Reflect.metadata(metadataKey, metadataValue);
3449
+ }
3450
+ }
3451
+ function _ts_param(paramIndex, decorator) {
3452
+ return function(target, key) {
3453
+ decorator(target, key, paramIndex);
3454
+ };
3455
+ }
3456
+
3457
+
3458
+
3459
+
3460
+
3461
+
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+
3468
+
3469
+
3470
+
3471
+ class RoleService extends classes_.ApiService {
3472
+ cacheManager;
3473
+ utilsService;
3474
+ iamConfigService;
3475
+ permissionCacheService;
3476
+ constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider, permissionCacheService){
3477
+ super(event_actions/* .IAM_EVENT_ENTITIES.ROLE */.H.ROLE, cacheManager, utilsService, RoleService.name, true, (/* inlined export .IAM_EVENT_MODULE */"iam"), dataSourceProvider, iamConfigService.isCompanyFeatureEnabled() ? role_with_company_entity/* .RoleWithCompany */.g : role_entity/* .Role */.X), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.permissionCacheService = permissionCacheService;
3478
+ }
3479
+ async beforeUpdateOperation(dto, _user, _queryRunner) {
3480
+ const dtos = Array.isArray(dto) ? dto : [
3481
+ dto
3482
+ ];
3483
+ const ids = dtos.map((d)=>d.id);
3484
+ await this.ensureDataSourceRepository();
3485
+ const readonlyRoles = await this.repository.find({
3486
+ where: {
3487
+ id: (0,external_typeorm_.In)(ids),
3488
+ readOnly: true,
3489
+ deletedAt: (0,external_typeorm_.IsNull)()
3490
+ }
3491
+ });
3492
+ if (readonlyRoles.length > 0) {
3493
+ const names = readonlyRoles.map((r)=>r.name).join(', ');
3494
+ throw new common_.ForbiddenException({
3495
+ message: `Cannot modify readonly role(s): ${names}`,
3496
+ messageKey: message_keys/* .ROLE_MESSAGES.READONLY_UPDATE_FORBIDDEN */.QW.READONLY_UPDATE_FORBIDDEN,
3497
+ messageVariables: {
3498
+ names
3499
+ }
3500
+ });
3501
+ }
3502
+ }
3503
+ async beforeDeleteOperation(dto, user, queryRunner) {
3504
+ await super.beforeDeleteOperation(dto, user, queryRunner);
3505
+ const roleIds = Array.isArray(dto.id) ? dto.id : [
3506
+ dto.id
3507
+ ];
3508
+ if (roleIds.length === 0) {
3509
+ return;
3510
+ }
3511
+ await this.ensureDataSourceRepository();
3512
+ const readonlyRoles = await this.repository.find({
3513
+ where: {
3514
+ id: (0,external_typeorm_.In)(roleIds),
3515
+ readOnly: true,
3516
+ deletedAt: (0,external_typeorm_.IsNull)()
3517
+ }
3518
+ });
3519
+ if (readonlyRoles.length > 0) {
3520
+ const names = readonlyRoles.map((r)=>r.name).join(', ');
3521
+ throw new common_.ForbiddenException({
3522
+ message: `Cannot delete readonly role(s): ${names}`,
3523
+ messageKey: message_keys/* .ROLE_MESSAGES.READONLY_DELETE_FORBIDDEN */.QW.READONLY_DELETE_FORBIDDEN,
3524
+ messageVariables: {
3525
+ names
3526
+ }
3527
+ });
3528
+ }
3529
+ const enableCompanyFeature = this.iamConfigService.isCompanyFeatureEnabled();
3530
+ const permissionEntity = enableCompanyFeature ? permission_with_company_entity/* .UserIamPermissionWithCompany */.t : user_iam_permission_entity/* .UserIamPermission */.y;
3531
+ const permissionRepo = queryRunner.manager.getRepository(permissionEntity);
3532
+ const userRoleRows = await permissionRepo.find({
3533
+ where: {
3534
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3535
+ sourceType: iam_entity_type_enum/* .IamEntityType.USER */.n.USER,
3536
+ targetType: iam_entity_type_enum/* .IamEntityType.ROLE */.n.ROLE,
3537
+ targetId: (0,external_typeorm_.In)(roleIds)
3538
+ }
3539
+ });
3540
+ const affectedUserIds = [
3541
+ ...new Set(userRoleRows.map((row)=>row.sourceId))
3542
+ ];
3543
+ await permissionRepo.delete({
3544
+ permissionType: iam_permission_type_enum/* .IamPermissionType.ROLE_ACTION */.V.ROLE_ACTION,
3545
+ sourceType: iam_entity_type_enum/* .IamEntityType.ROLE */.n.ROLE,
3546
+ sourceId: (0,external_typeorm_.In)(roleIds)
3547
+ });
3548
+ await permissionRepo.delete({
3549
+ permissionType: iam_permission_type_enum/* .IamPermissionType.USER_ROLE */.V.USER_ROLE,
3550
+ targetType: iam_entity_type_enum/* .IamEntityType.ROLE */.n.ROLE,
3551
+ targetId: (0,external_typeorm_.In)(roleIds)
3552
+ });
3553
+ if (affectedUserIds.length > 0) {
3554
+ await this.permissionCacheService.invalidateUsers(affectedUserIds);
3555
+ }
3556
+ }
3557
+ // Entity Conversion
3558
+ async convertSingleDtoToEntity(dto, user) {
3559
+ const entity = await super.convertSingleDtoToEntity(dto, user);
3560
+ // Handle companyId based on company feature
3561
+ if (this.iamConfigService.isCompanyFeatureEnabled()) {
3562
+ const isUpdate = 'id' in dto && dto.id;
3563
+ // For create: use dto.companyId or user's companyId
3564
+ // For update: only override if explicitly provided
3565
+ if (!isUpdate || dto.companyId !== undefined) {
3566
+ entity.companyId = dto.companyId ?? user?.companyId ?? null;
3567
+ }
3568
+ }
3569
+ return entity;
3570
+ }
3571
+ // Query Customization
3572
+ async getSelectQuery(query, _user, select) {
3573
+ if (!select?.length) {
3574
+ select = [
3575
+ 'id',
3576
+ 'name',
3577
+ 'description',
3578
+ 'isActive',
3579
+ 'readOnly',
3580
+ 'serial',
3581
+ 'createdAt'
3582
+ ];
3583
+ if (this.iamConfigService.isCompanyFeatureEnabled()) {
3584
+ select.push('companyId');
3585
+ }
3586
+ }
3587
+ query.select(select.map((f)=>`${this.entityName}.${f}`));
3588
+ return {
3589
+ query,
3590
+ isRaw: false
3591
+ };
3592
+ }
3593
+ async getGlobalSearchQuery(query, search) {
3594
+ query.andWhere('(role.name LIKE :search OR role.description LIKE :search)', {
3595
+ search: `%${search}%`
3596
+ });
3597
+ return {
3598
+ query,
3599
+ isRaw: false
3600
+ };
3601
+ }
3602
+ async getExtraManipulateQuery(query, filterDto, user) {
3603
+ const result = await super.getExtraManipulateQuery(query, filterDto, user);
3604
+ (0,__rspack_external__flusys_nestjs_shared_utils_9125c1f1.applyCompanyFilter)(query, {
3605
+ isCompanyFeatureEnabled: this.iamConfigService.isCompanyFeatureEnabled(),
3606
+ entityAlias: 'role'
3607
+ }, user);
3608
+ return result;
3609
+ }
3610
+ // Response Conversion
3611
+ convertEntityToResponseDto(entity, _isRaw) {
3612
+ return {
3613
+ id: entity.id,
3614
+ readOnly: entity.readOnly,
3615
+ name: entity.name,
3616
+ description: entity.description,
3617
+ isActive: entity.isActive,
3618
+ serial: entity.serial,
3619
+ companyId: ('companyId' in entity ? entity.companyId : null) ?? null,
3620
+ createdAt: entity.createdAt,
3621
+ updatedAt: entity.updatedAt,
3622
+ deletedAt: entity.deletedAt,
3623
+ createdById: entity.createdById,
3624
+ updatedById: entity.updatedById,
3625
+ deletedById: entity.deletedById
3626
+ };
3627
+ }
3628
+ }
3629
+ RoleService = _ts_decorate([
3630
+ (0,common_.Injectable)({
3631
+ scope: common_.Scope.REQUEST
3632
+ }),
3633
+ _ts_param(0, (0,common_.Inject)('CACHE_INSTANCE')),
3634
+ _ts_param(1, (0,common_.Inject)(modules_.UtilsService)),
3635
+ _ts_param(2, (0,common_.Inject)(iam_config_service/* .IAMConfigService */.N)),
3636
+ _ts_param(3, (0,common_.Inject)(iam_datasource_service/* .IAMDataSourceService */.U)),
3637
+ _ts_param(4, (0,common_.Inject)(permission_cache_service/* .PermissionCacheService */.D)),
3638
+ _ts_metadata("design:type", Function),
3639
+ _ts_metadata("design:paramtypes", [
3640
+ typeof classes_.HybridCache === "undefined" ? Object : classes_.HybridCache,
3641
+ typeof modules_.UtilsService === "undefined" ? Object : modules_.UtilsService,
3642
+ typeof iam_config_service/* .IAMConfigService */.N === "undefined" ? Object : iam_config_service/* .IAMConfigService */.N,
3643
+ typeof iam_datasource_service/* .IAMDataSourceService */.U === "undefined" ? Object : iam_datasource_service/* .IAMDataSourceService */.U,
3644
+ typeof permission_cache_service/* .PermissionCacheService */.D === "undefined" ? Object : permission_cache_service/* .PermissionCacheService */.D
3645
+ ])
3646
+ ], RoleService);
3647
+
3648
+
3649
+ },
3650
+ 422(module) {
3651
+
3652
+ module.exports = __rspack_external__flusys_nestjs_shared_393d2cae;
3653
+
3654
+
3655
+ },
3656
+ 937(module) {
3657
+
3658
+ module.exports = __rspack_external__flusys_nestjs_shared_classes_6076a329;
3659
+
3660
+
3661
+ },
3662
+ 236(module) {
3663
+
3664
+ module.exports = __rspack_external__flusys_nestjs_shared_modules_24702bee;
3665
+
3666
+
3667
+ },
3668
+ 157(module) {
3669
+
3670
+ module.exports = __rspack_external__nestjs_common_a04939da;
3671
+
3672
+
3673
+ },
3674
+ 176(module) {
3675
+
3676
+ module.exports = __rspack_external__nestjs_swagger_7cd450b5;
3677
+
3678
+
3679
+ },
3680
+ 812(module) {
3681
+
3682
+ module.exports = __rspack_external_class_transformer_c5a479fb;
3683
+
3684
+
3685
+ },
3686
+ 421(module) {
3687
+
3688
+ module.exports = __rspack_external_class_validator_7b99ef4d;
3689
+
3690
+
3691
+ },
3692
+ 158(module) {
3693
+
3694
+ module.exports = __rspack_external_typeorm;
3695
+
3696
+
3697
+ },
3698
+
3699
+ };