@flusys/nestjs-iam 7.1.0 → 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
@@ -1,186 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "IAMModule", {
6
- enumerable: true,
7
- get: function() {
8
- return IAMModule;
9
- }
10
- });
11
- const _nestjsshared = require("@flusys/nestjs-shared");
12
- const _modules = require("@flusys/nestjs-shared/modules");
13
- const _common = require("@nestjs/common");
14
- const _iamconstants = require("../config/iam.constants");
15
- const _controllers = require("../controllers");
16
- const _permissiontypeenum = require("../enums/permission-type.enum");
17
- const _helpers = require("../helpers");
18
- const _services = require("../services");
19
- const _iamconfigservice = require("../services/iam-config.service");
20
- const _iamdatasourceservice = require("../services/iam-datasource.service");
21
- const _permissioncacheservice = require("../services/permission-cache.service");
22
- function _ts_decorate(decorators, target, key, desc) {
23
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
- return c > 3 && r && Object.defineProperty(target, key, r), r;
27
- }
28
- let IAMModule = class IAMModule {
29
- static getControllers(permissionMode, enableCompanyFeature) {
30
- const baseControllers = [
31
- _controllers.ActionController,
32
- _controllers.MyPermissionController
33
- ];
34
- // Direct permission mode - user actions only
35
- if (permissionMode === _permissiontypeenum.IAMPermissionMode.DIRECT) {
36
- baseControllers.push(_controllers.UserActionPermissionController);
37
- }
38
- // RBAC mode - role actions and user roles only
39
- if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC) {
40
- baseControllers.push(_controllers.RoleController);
41
- baseControllers.push(_controllers.RolePermissionController);
42
- }
43
- // FULL mode - all permission controllers
44
- if (permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
45
- baseControllers.push(_controllers.RoleController);
46
- baseControllers.push(_controllers.UserActionPermissionController);
47
- baseControllers.push(_controllers.RolePermissionController);
48
- }
49
- // Company action permissions - only if company feature enabled
50
- if (enableCompanyFeature) {
51
- baseControllers.push(_controllers.CompanyActionPermissionController);
52
- }
53
- return baseControllers;
54
- }
55
- static getServices(permissionMode) {
56
- const services = [
57
- _services.ActionService,
58
- _services.PermissionService,
59
- _permissioncacheservice.PermissionCacheService
60
- ];
61
- // RoleService - Only for RBAC or FULL mode
62
- if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
63
- services.push(_services.RoleService);
64
- }
65
- return services;
66
- }
67
- static getPermissionGuardConfigProvider(enableCompanyFeature) {
68
- return {
69
- provide: _nestjsshared.PERMISSION_GUARD_CONFIG,
70
- useValue: {
71
- enableCompanyFeature,
72
- userPermissionKeyFormat: `${_nestjsshared.PERMISSIONS_CACHE_PREFIX}:user:{userId}`,
73
- companyPermissionKeyFormat: `${_nestjsshared.PERMISSIONS_CACHE_PREFIX}:company:{companyId}:branch:{branchId}:user:{userId}`
74
- }
75
- };
76
- }
77
- static getExports(permissionMode) {
78
- const baseExports = [
79
- _iamconfigservice.IAMConfigService,
80
- _iamdatasourceservice.IAMDataSourceService,
81
- _services.ActionService,
82
- _services.PermissionService,
83
- _permissioncacheservice.PermissionCacheService,
84
- _nestjsshared.PERMISSION_GUARD_CONFIG
85
- ];
86
- if (permissionMode === _permissiontypeenum.IAMPermissionMode.RBAC || permissionMode === _permissiontypeenum.IAMPermissionMode.FULL) {
87
- baseExports.push(_services.RoleService);
88
- }
89
- return baseExports;
90
- }
91
- static forRoot(options = {}) {
92
- const { global = false, includeController = false } = options;
93
- const enableCompanyFeature = options.bootstrapAppConfig?.enableCompanyFeature ?? false;
94
- const permissionMode = _helpers.PermissionModeHelper.fromString(options.bootstrapAppConfig?.permissionMode);
95
- const controllers = includeController ? this.getControllers(permissionMode, enableCompanyFeature) : [];
96
- const providers = [
97
- {
98
- provide: _iamconstants.IAM_MODULE_OPTIONS,
99
- useValue: options
100
- },
101
- _iamconfigservice.IAMConfigService,
102
- _iamdatasourceservice.IAMDataSourceService,
103
- ...this.getServices(permissionMode),
104
- this.getPermissionGuardConfigProvider(enableCompanyFeature),
105
- (0, _modules.createModuleEventsProvider)('iam', _iamconstants.IAM_MODULE_OPTIONS)
106
- ];
107
- const module = {
108
- module: IAMModule,
109
- imports: [
110
- _modules.CacheModule,
111
- _modules.UtilsModule
112
- ],
113
- controllers,
114
- providers,
115
- exports: this.getExports(permissionMode)
116
- };
117
- return global ? {
118
- ...module,
119
- global: true
120
- } : module;
121
- }
122
- static forRootAsync(asyncOptions) {
123
- const { global = false, includeController = false, imports: externalImports = [] } = asyncOptions;
124
- const enableCompanyFeature = asyncOptions.bootstrapAppConfig?.enableCompanyFeature ?? false;
125
- const permissionMode = _helpers.PermissionModeHelper.fromString(asyncOptions.bootstrapAppConfig?.permissionMode);
126
- const controllers = includeController ? this.getControllers(permissionMode, enableCompanyFeature) : [];
127
- const providers = [
128
- ...this.createAsyncProviders(asyncOptions),
129
- _iamconfigservice.IAMConfigService,
130
- _iamdatasourceservice.IAMDataSourceService,
131
- ...this.getServices(permissionMode),
132
- this.getPermissionGuardConfigProvider(enableCompanyFeature),
133
- (0, _modules.createModuleEventsProvider)('iam', _iamconstants.IAM_MODULE_OPTIONS)
134
- ];
135
- const module = {
136
- module: IAMModule,
137
- imports: [
138
- ...externalImports,
139
- _modules.CacheModule,
140
- _modules.UtilsModule
141
- ],
142
- controllers,
143
- providers,
144
- exports: this.getExports(permissionMode)
145
- };
146
- return global ? {
147
- ...module,
148
- global: true
149
- } : module;
150
- }
151
- static createAsyncProviders(options) {
152
- if (options.useExisting || options.useFactory) {
153
- return [
154
- this.createAsyncOptionsProvider(options)
155
- ];
156
- }
157
- const useClass = options.useClass;
158
- return [
159
- this.createAsyncOptionsProvider(options),
160
- {
161
- provide: useClass,
162
- useClass
163
- }
164
- ];
165
- }
166
- static createAsyncOptionsProvider(options) {
167
- if (options.useFactory) {
168
- return {
169
- provide: _iamconstants.IAM_MODULE_OPTIONS,
170
- useFactory: options.useFactory,
171
- inject: options.inject || []
172
- };
173
- }
174
- const inject = [
175
- options.useClass || options.useExisting
176
- ];
177
- return {
178
- provide: _iamconstants.IAM_MODULE_OPTIONS,
179
- useFactory: async (optionsFactory)=>optionsFactory.createIAMOptions(),
180
- inject
181
- };
182
- }
183
- };
184
- IAMModule = _ts_decorate([
185
- (0, _common.Module)({})
186
- ], IAMModule);
@@ -1,282 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _nestjsshared = require("@flusys/nestjs-shared");
6
- const _iammodule = require("./iam.module");
7
- const _iamconstants = require("../config/iam.constants");
8
- const _controllers = require("../controllers");
9
- const _services = require("../services");
10
- const _iamconfigservice = require("../services/iam-config.service");
11
- const _iamdatasourceservice = require("../services/iam-datasource.service");
12
- const _permissioncacheservice = require("../services/permission-cache.service");
13
- function _define_property(obj, key, value) {
14
- if (key in obj) {
15
- Object.defineProperty(obj, key, {
16
- value: value,
17
- enumerable: true,
18
- configurable: true,
19
- writable: true
20
- });
21
- } else {
22
- obj[key] = value;
23
- }
24
- return obj;
25
- }
26
- function providerTokens(providers) {
27
- return providers.map((p)=>typeof p === 'function' ? p : p.provide);
28
- }
29
- describe('IAMModule', ()=>{
30
- describe('forRoot - controller/service registration matrix', ()=>{
31
- it('should register no controllers by default (includeController defaults to false)', ()=>{
32
- const dynamicModule = _iammodule.IAMModule.forRoot();
33
- expect(dynamicModule.controllers).toEqual([]);
34
- });
35
- it('DIRECT mode: registers only UserActionPermissionController beyond the base set', ()=>{
36
- const dynamicModule = _iammodule.IAMModule.forRoot({
37
- includeController: true,
38
- bootstrapAppConfig: {
39
- permissionMode: 'DIRECT'
40
- }
41
- });
42
- expect(dynamicModule.controllers).toEqual([
43
- _controllers.ActionController,
44
- _controllers.MyPermissionController,
45
- _controllers.UserActionPermissionController
46
- ]);
47
- expect(providerTokens(dynamicModule.providers)).not.toContain(_services.RoleService);
48
- });
49
- it('RBAC mode: registers RoleController + RolePermissionController but not UserActionPermissionController', ()=>{
50
- const dynamicModule = _iammodule.IAMModule.forRoot({
51
- includeController: true,
52
- bootstrapAppConfig: {
53
- permissionMode: 'RBAC'
54
- }
55
- });
56
- expect(dynamicModule.controllers).toEqual([
57
- _controllers.ActionController,
58
- _controllers.MyPermissionController,
59
- _controllers.RoleController,
60
- _controllers.RolePermissionController
61
- ]);
62
- expect(providerTokens(dynamicModule.providers)).toContain(_services.RoleService);
63
- });
64
- it('FULL mode: registers every permission controller', ()=>{
65
- const dynamicModule = _iammodule.IAMModule.forRoot({
66
- includeController: true,
67
- bootstrapAppConfig: {
68
- permissionMode: 'FULL'
69
- }
70
- });
71
- expect(dynamicModule.controllers).toEqual([
72
- _controllers.ActionController,
73
- _controllers.MyPermissionController,
74
- _controllers.RoleController,
75
- _controllers.UserActionPermissionController,
76
- _controllers.RolePermissionController
77
- ]);
78
- });
79
- it('defaults to FULL mode when permissionMode is omitted', ()=>{
80
- const dynamicModule = _iammodule.IAMModule.forRoot({
81
- includeController: true
82
- });
83
- expect(dynamicModule.controllers).toEqual(expect.arrayContaining([
84
- _controllers.RoleController,
85
- _controllers.UserActionPermissionController,
86
- _controllers.RolePermissionController
87
- ]));
88
- });
89
- it('defaults to FULL mode when permissionMode is an unrecognized string', ()=>{
90
- const dynamicModule = _iammodule.IAMModule.forRoot({
91
- includeController: true,
92
- bootstrapAppConfig: {
93
- permissionMode: 'BOGUS'
94
- }
95
- });
96
- expect(dynamicModule.controllers).toEqual(expect.arrayContaining([
97
- _controllers.RoleController,
98
- _controllers.UserActionPermissionController,
99
- _controllers.RolePermissionController
100
- ]));
101
- });
102
- it('adds CompanyActionPermissionController only when enableCompanyFeature is true', ()=>{
103
- const withCompany = _iammodule.IAMModule.forRoot({
104
- includeController: true,
105
- bootstrapAppConfig: {
106
- enableCompanyFeature: true
107
- }
108
- });
109
- const withoutCompany = _iammodule.IAMModule.forRoot({
110
- includeController: true,
111
- bootstrapAppConfig: {
112
- enableCompanyFeature: false
113
- }
114
- });
115
- expect(withCompany.controllers).toContain(_controllers.CompanyActionPermissionController);
116
- expect(withoutCompany.controllers).not.toContain(_controllers.CompanyActionPermissionController);
117
- });
118
- it('excludes RoleService for DIRECT mode but includes it for RBAC/FULL', ()=>{
119
- const direct = _iammodule.IAMModule.forRoot({
120
- bootstrapAppConfig: {
121
- permissionMode: 'DIRECT'
122
- }
123
- });
124
- const rbac = _iammodule.IAMModule.forRoot({
125
- bootstrapAppConfig: {
126
- permissionMode: 'RBAC'
127
- }
128
- });
129
- const full = _iammodule.IAMModule.forRoot({
130
- bootstrapAppConfig: {
131
- permissionMode: 'FULL'
132
- }
133
- });
134
- expect(providerTokens(direct.providers)).not.toContain(_services.RoleService);
135
- expect(providerTokens(rbac.providers)).toContain(_services.RoleService);
136
- expect(providerTokens(full.providers)).toContain(_services.RoleService);
137
- expect(providerTokens(direct.exports)).not.toContain(_services.RoleService);
138
- expect(providerTokens(rbac.exports)).toContain(_services.RoleService);
139
- });
140
- it('always registers the base providers/exports (ActionService, PermissionService, PermissionCacheService)', ()=>{
141
- const dynamicModule = _iammodule.IAMModule.forRoot();
142
- expect(providerTokens(dynamicModule.providers)).toEqual(expect.arrayContaining([
143
- _iamconfigservice.IAMConfigService,
144
- _iamdatasourceservice.IAMDataSourceService,
145
- _services.ActionService,
146
- _services.PermissionService,
147
- _permissioncacheservice.PermissionCacheService
148
- ]));
149
- expect(dynamicModule.exports).toEqual(expect.arrayContaining([
150
- _iamconfigservice.IAMConfigService,
151
- _iamdatasourceservice.IAMDataSourceService,
152
- _services.ActionService,
153
- _services.PermissionService,
154
- _permissioncacheservice.PermissionCacheService,
155
- _nestjsshared.PERMISSION_GUARD_CONFIG
156
- ]));
157
- });
158
- });
159
- describe('forRoot - options/global handling', ()=>{
160
- it('should not set `global` on the returned module when global is false/omitted', ()=>{
161
- const dynamicModule = _iammodule.IAMModule.forRoot();
162
- expect(dynamicModule.global).toBeUndefined();
163
- });
164
- it('should set global: true when requested', ()=>{
165
- const dynamicModule = _iammodule.IAMModule.forRoot({
166
- global: true
167
- });
168
- expect(dynamicModule.global).toBe(true);
169
- });
170
- it('should register IAM_MODULE_OPTIONS with the given options', ()=>{
171
- const options = {
172
- includeController: true
173
- };
174
- const dynamicModule = _iammodule.IAMModule.forRoot(options);
175
- const provider = dynamicModule.providers.find((p)=>p.provide === _iamconstants.IAM_MODULE_OPTIONS);
176
- expect(provider.useValue).toBe(options);
177
- });
178
- it('should build a company-aware PERMISSION_GUARD_CONFIG provider', ()=>{
179
- const dynamicModule = _iammodule.IAMModule.forRoot({
180
- bootstrapAppConfig: {
181
- enableCompanyFeature: true
182
- }
183
- });
184
- const provider = dynamicModule.providers.find((p)=>p.provide === _nestjsshared.PERMISSION_GUARD_CONFIG);
185
- expect(provider.useValue.enableCompanyFeature).toBe(true);
186
- expect(provider.useValue.userPermissionKeyFormat).toContain('{userId}');
187
- expect(provider.useValue.companyPermissionKeyFormat).toContain('{companyId}');
188
- });
189
- });
190
- describe('forRootAsync', ()=>{
191
- it('mirrors the controller/service registration matrix of forRoot', ()=>{
192
- const dynamicModule = _iammodule.IAMModule.forRootAsync({
193
- includeController: true,
194
- bootstrapAppConfig: {
195
- permissionMode: 'DIRECT'
196
- }
197
- });
198
- expect(dynamicModule.controllers).toEqual([
199
- _controllers.ActionController,
200
- _controllers.MyPermissionController,
201
- _controllers.UserActionPermissionController
202
- ]);
203
- });
204
- it('should forward external imports alongside CacheModule/UtilsModule', ()=>{
205
- let FakeImportedModule = class FakeImportedModule {
206
- };
207
- const dynamicModule = _iammodule.IAMModule.forRootAsync({
208
- imports: [
209
- FakeImportedModule
210
- ]
211
- });
212
- expect(dynamicModule.imports).toEqual(expect.arrayContaining([
213
- FakeImportedModule
214
- ]));
215
- });
216
- it('useFactory: registers a single options provider using the given inject tokens', async ()=>{
217
- const useFactory = jest.fn().mockResolvedValue({
218
- foo: 'bar'
219
- });
220
- const dynamicModule = _iammodule.IAMModule.forRootAsync({
221
- useFactory,
222
- inject: [
223
- 'SOME_TOKEN'
224
- ]
225
- });
226
- const optionsProviders = dynamicModule.providers.filter((p)=>p.provide === _iamconstants.IAM_MODULE_OPTIONS);
227
- expect(optionsProviders).toHaveLength(1);
228
- const provider = optionsProviders[0];
229
- expect(provider.useFactory).toBe(useFactory);
230
- expect(provider.inject).toEqual([
231
- 'SOME_TOKEN'
232
- ]);
233
- });
234
- it('useClass: registers both the class provider and an options provider that calls createIAMOptions()', async ()=>{
235
- let MyOptionsFactory = class MyOptionsFactory {
236
- constructor(){
237
- _define_property(this, "createIAMOptions", jest.fn().mockResolvedValue({
238
- foo: 'from-class'
239
- }));
240
- }
241
- };
242
- const dynamicModule = _iammodule.IAMModule.forRootAsync({
243
- useClass: MyOptionsFactory
244
- });
245
- const classProvider = dynamicModule.providers.find((p)=>p.provide === MyOptionsFactory);
246
- expect(classProvider.useClass).toBe(MyOptionsFactory);
247
- const optionsProvider = dynamicModule.providers.find((p)=>p.provide === _iamconstants.IAM_MODULE_OPTIONS);
248
- expect(optionsProvider.inject).toEqual([
249
- MyOptionsFactory
250
- ]);
251
- const instance = new MyOptionsFactory();
252
- const resolved = await optionsProvider.useFactory(instance);
253
- expect(instance.createIAMOptions).toHaveBeenCalled();
254
- expect(resolved).toEqual({
255
- foo: 'from-class'
256
- });
257
- });
258
- it('useExisting: registers a single options provider injecting the existing factory', async ()=>{
259
- let MyOptionsFactory = class MyOptionsFactory {
260
- constructor(){
261
- _define_property(this, "createIAMOptions", jest.fn().mockResolvedValue({
262
- foo: 'from-existing'
263
- }));
264
- }
265
- };
266
- const dynamicModule = _iammodule.IAMModule.forRootAsync({
267
- useExisting: MyOptionsFactory
268
- });
269
- const optionsProviders = dynamicModule.providers.filter((p)=>p.provide === _iamconstants.IAM_MODULE_OPTIONS);
270
- expect(optionsProviders).toHaveLength(1);
271
- const provider = optionsProviders[0];
272
- expect(provider.inject).toEqual([
273
- MyOptionsFactory
274
- ]);
275
- const instance = new MyOptionsFactory();
276
- const resolved = await provider.useFactory(instance);
277
- expect(resolved).toEqual({
278
- foo: 'from-existing'
279
- });
280
- });
281
- });
282
- });
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./iam.module"), exports);
6
- function _export_star(from, to) {
7
- Object.keys(from).forEach(function(k) {
8
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
- Object.defineProperty(to, k, {
10
- enumerable: true,
11
- get: function() {
12
- return from[k];
13
- }
14
- });
15
- }
16
- });
17
- return from;
18
- }