@flusys/nestjs-iam 5.1.1 → 5.1.3

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.
@@ -25,7 +25,9 @@ _export(exports, {
25
25
  return UpdateActionDto;
26
26
  }
27
27
  });
28
+ const _dtos = require("@flusys/nestjs-shared/dtos");
28
29
  const _swagger = require("@nestjs/swagger");
30
+ const _classtransformer = require("class-transformer");
29
31
  const _classvalidator = require("class-validator");
30
32
  const _enums = require("../enums");
31
33
  const _types = require("../types");
@@ -158,106 +160,65 @@ _ts_decorate([
158
160
  (0, _classvalidator.IsNotEmpty)(),
159
161
  _ts_metadata("design:type", String)
160
162
  ], UpdateActionDto.prototype, "id", void 0);
161
- let ActionResponseDto = class ActionResponseDto {
162
- constructor(){
163
- _define_property(this, "id", void 0);
164
- _define_property(this, "readOnly", void 0);
165
- _define_property(this, "name", void 0);
166
- _define_property(this, "description", void 0);
167
- _define_property(this, "code", void 0);
168
- _define_property(this, "actionType", void 0);
169
- _define_property(this, "permissionLogic", void 0);
170
- _define_property(this, "parentId", void 0);
171
- _define_property(this, "serial", void 0);
172
- _define_property(this, "isActive", void 0);
173
- _define_property(this, "createdAt", void 0);
174
- _define_property(this, "updatedAt", void 0);
175
- _define_property(this, "deletedAt", void 0);
176
- _define_property(this, "createdById", void 0);
177
- _define_property(this, "updatedById", void 0);
178
- _define_property(this, "deletedById", void 0);
163
+ let ActionResponseDto = class ActionResponseDto extends _dtos.IdentityResponseDto {
164
+ constructor(...args){
165
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "code", void 0), _define_property(this, "actionType", void 0), _define_property(this, "permissionLogic", void 0), _define_property(this, "parentId", void 0), _define_property(this, "serial", void 0), _define_property(this, "isActive", void 0);
179
166
  }
180
167
  };
181
168
  _ts_decorate([
182
- (0, _swagger.ApiProperty)(),
183
- _ts_metadata("design:type", String)
184
- ], ActionResponseDto.prototype, "id", void 0);
185
- _ts_decorate([
169
+ (0, _classtransformer.Expose)(),
186
170
  (0, _swagger.ApiProperty)(),
187
171
  _ts_metadata("design:type", Boolean)
188
172
  ], ActionResponseDto.prototype, "readOnly", void 0);
189
173
  _ts_decorate([
174
+ (0, _classtransformer.Expose)(),
190
175
  (0, _swagger.ApiProperty)(),
191
176
  _ts_metadata("design:type", String)
192
177
  ], ActionResponseDto.prototype, "name", void 0);
193
178
  _ts_decorate([
179
+ (0, _classtransformer.Expose)(),
194
180
  (0, _swagger.ApiProperty)(),
195
181
  _ts_metadata("design:type", Object)
196
182
  ], ActionResponseDto.prototype, "description", void 0);
197
183
  _ts_decorate([
184
+ (0, _classtransformer.Expose)(),
198
185
  (0, _swagger.ApiProperty)(),
199
186
  _ts_metadata("design:type", Object)
200
187
  ], ActionResponseDto.prototype, "code", void 0);
201
188
  _ts_decorate([
189
+ (0, _classtransformer.Expose)(),
202
190
  (0, _swagger.ApiProperty)({
203
191
  enum: _enums.ActionType
204
192
  }),
205
193
  _ts_metadata("design:type", typeof _enums.ActionType === "undefined" ? Object : _enums.ActionType)
206
194
  ], ActionResponseDto.prototype, "actionType", void 0);
207
195
  _ts_decorate([
196
+ (0, _classtransformer.Expose)(),
208
197
  (0, _swagger.ApiProperty)(),
209
198
  _ts_metadata("design:type", Object)
210
199
  ], ActionResponseDto.prototype, "permissionLogic", void 0);
211
200
  _ts_decorate([
201
+ (0, _classtransformer.Expose)(),
212
202
  (0, _swagger.ApiProperty)(),
213
203
  _ts_metadata("design:type", Object)
214
204
  ], ActionResponseDto.prototype, "parentId", void 0);
215
205
  _ts_decorate([
206
+ (0, _classtransformer.Expose)(),
216
207
  (0, _swagger.ApiProperty)(),
217
208
  _ts_metadata("design:type", Object)
218
209
  ], ActionResponseDto.prototype, "serial", void 0);
219
210
  _ts_decorate([
211
+ (0, _classtransformer.Expose)(),
220
212
  (0, _swagger.ApiProperty)(),
221
213
  _ts_metadata("design:type", Boolean)
222
214
  ], ActionResponseDto.prototype, "isActive", void 0);
223
- _ts_decorate([
224
- (0, _swagger.ApiProperty)(),
225
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
226
- ], ActionResponseDto.prototype, "createdAt", void 0);
227
- _ts_decorate([
228
- (0, _swagger.ApiProperty)(),
229
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
230
- ], ActionResponseDto.prototype, "updatedAt", void 0);
231
- _ts_decorate([
232
- (0, _swagger.ApiProperty)({
233
- required: false
234
- }),
235
- _ts_metadata("design:type", Object)
236
- ], ActionResponseDto.prototype, "deletedAt", void 0);
237
- _ts_decorate([
238
- (0, _swagger.ApiProperty)({
239
- required: false
240
- }),
241
- _ts_metadata("design:type", Object)
242
- ], ActionResponseDto.prototype, "createdById", void 0);
243
- _ts_decorate([
244
- (0, _swagger.ApiProperty)({
245
- required: false
246
- }),
247
- _ts_metadata("design:type", Object)
248
- ], ActionResponseDto.prototype, "updatedById", void 0);
249
- _ts_decorate([
250
- (0, _swagger.ApiProperty)({
251
- required: false
252
- }),
253
- _ts_metadata("design:type", Object)
254
- ], ActionResponseDto.prototype, "deletedById", void 0);
255
215
  let ActionTreeDto = class ActionTreeDto extends ActionResponseDto {
256
216
  constructor(...args){
257
217
  super(...args), _define_property(this, "children", void 0);
258
218
  }
259
219
  };
260
220
  _ts_decorate([
221
+ (0, _classtransformer.Expose)(),
261
222
  (0, _swagger.ApiProperty)({
262
223
  type: ()=>[
263
224
  ActionTreeDto
@@ -19,7 +19,9 @@ _export(exports, {
19
19
  return UpdateRoleDto;
20
20
  }
21
21
  });
22
+ const _dtos = require("@flusys/nestjs-shared/dtos");
22
23
  const _swagger = require("@nestjs/swagger");
24
+ const _classtransformer = require("class-transformer");
23
25
  const _classvalidator = require("class-validator");
24
26
  function _define_property(obj, key, value) {
25
27
  if (key in obj) {
@@ -116,80 +118,38 @@ _ts_decorate([
116
118
  (0, _classvalidator.IsNotEmpty)(),
117
119
  _ts_metadata("design:type", String)
118
120
  ], UpdateRoleDto.prototype, "id", void 0);
119
- let RoleResponseDto = class RoleResponseDto {
120
- constructor(){
121
- _define_property(this, "id", void 0);
122
- _define_property(this, "readOnly", void 0);
123
- _define_property(this, "name", void 0);
124
- _define_property(this, "description", void 0);
125
- _define_property(this, "companyId", void 0);
126
- _define_property(this, "isActive", void 0);
127
- _define_property(this, "serial", void 0);
128
- _define_property(this, "createdAt", void 0);
129
- _define_property(this, "updatedAt", void 0);
130
- _define_property(this, "deletedAt", void 0);
131
- _define_property(this, "createdById", void 0);
132
- _define_property(this, "updatedById", void 0);
133
- _define_property(this, "deletedById", void 0);
121
+ let RoleResponseDto = class RoleResponseDto extends _dtos.IdentityResponseDto {
122
+ constructor(...args){
123
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "companyId", void 0), _define_property(this, "isActive", void 0), _define_property(this, "serial", void 0);
134
124
  }
135
125
  };
136
126
  _ts_decorate([
137
- (0, _swagger.ApiProperty)(),
138
- _ts_metadata("design:type", String)
139
- ], RoleResponseDto.prototype, "id", void 0);
140
- _ts_decorate([
127
+ (0, _classtransformer.Expose)(),
141
128
  (0, _swagger.ApiProperty)(),
142
129
  _ts_metadata("design:type", Boolean)
143
130
  ], RoleResponseDto.prototype, "readOnly", void 0);
144
131
  _ts_decorate([
132
+ (0, _classtransformer.Expose)(),
145
133
  (0, _swagger.ApiProperty)(),
146
134
  _ts_metadata("design:type", String)
147
135
  ], RoleResponseDto.prototype, "name", void 0);
148
136
  _ts_decorate([
137
+ (0, _classtransformer.Expose)(),
149
138
  (0, _swagger.ApiProperty)(),
150
139
  _ts_metadata("design:type", Object)
151
140
  ], RoleResponseDto.prototype, "description", void 0);
152
141
  _ts_decorate([
142
+ (0, _classtransformer.Expose)(),
153
143
  (0, _swagger.ApiProperty)(),
154
144
  _ts_metadata("design:type", Object)
155
145
  ], RoleResponseDto.prototype, "companyId", void 0);
156
146
  _ts_decorate([
147
+ (0, _classtransformer.Expose)(),
157
148
  (0, _swagger.ApiProperty)(),
158
149
  _ts_metadata("design:type", Boolean)
159
150
  ], RoleResponseDto.prototype, "isActive", void 0);
160
151
  _ts_decorate([
152
+ (0, _classtransformer.Expose)(),
161
153
  (0, _swagger.ApiProperty)(),
162
154
  _ts_metadata("design:type", Object)
163
155
  ], RoleResponseDto.prototype, "serial", void 0);
164
- _ts_decorate([
165
- (0, _swagger.ApiProperty)(),
166
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
167
- ], RoleResponseDto.prototype, "createdAt", void 0);
168
- _ts_decorate([
169
- (0, _swagger.ApiProperty)(),
170
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
171
- ], RoleResponseDto.prototype, "updatedAt", void 0);
172
- _ts_decorate([
173
- (0, _swagger.ApiProperty)({
174
- required: false
175
- }),
176
- _ts_metadata("design:type", Object)
177
- ], RoleResponseDto.prototype, "deletedAt", void 0);
178
- _ts_decorate([
179
- (0, _swagger.ApiProperty)({
180
- required: false
181
- }),
182
- _ts_metadata("design:type", Object)
183
- ], RoleResponseDto.prototype, "createdById", void 0);
184
- _ts_decorate([
185
- (0, _swagger.ApiProperty)({
186
- required: false
187
- }),
188
- _ts_metadata("design:type", Object)
189
- ], RoleResponseDto.prototype, "updatedById", void 0);
190
- _ts_decorate([
191
- (0, _swagger.ApiProperty)({
192
- required: false
193
- }),
194
- _ts_metadata("design:type", Object)
195
- ], RoleResponseDto.prototype, "deletedById", void 0);
@@ -44,13 +44,7 @@ function _ts_param(paramIndex, decorator) {
44
44
  decorator(target, key, paramIndex);
45
45
  };
46
46
  }
47
- let ActionService = class ActionService extends _classes.RequestScopedApiService {
48
- resolveEntity() {
49
- return _actionentity.Action;
50
- }
51
- getDataSourceProvider() {
52
- return this.dataSourceProvider;
53
- }
47
+ let ActionService = class ActionService extends _classes.ApiService {
54
48
  // Query Customization
55
49
  async getSelectQuery(query, _user, select) {
56
50
  if (!select?.length) {
@@ -115,7 +109,7 @@ let ActionService = class ActionService extends _classes.RequestScopedApiService
115
109
  }
116
110
  }
117
111
  /** Get actions available for permission assignment (filtered by company whitelist) */ async getActionsForPermission(user) {
118
- await this.ensureRepositoryInitialized();
112
+ await this.ensureDataSourceRepository();
119
113
  this.requireUser(user, 'getActionsForPermission');
120
114
  let whereClause = {};
121
115
  if (this.iamConfigService.isCompanyFeatureEnabled() && user.companyId) {
@@ -134,7 +128,7 @@ let ActionService = class ActionService extends _classes.RequestScopedApiService
134
128
  return actions.map((action)=>this.convertEntityToResponseDto(action, false));
135
129
  }
136
130
  /** Get actions in hierarchical tree structure */ async getActionTree(user, search, isActive, withDeleted = false) {
137
- await this.ensureRepositoryInitialized();
131
+ await this.ensureDataSourceRepository();
138
132
  this.requireUser(user, 'getActionTree');
139
133
  const query = this.repository.createQueryBuilder('action');
140
134
  if (!withDeleted) {
@@ -183,8 +177,8 @@ let ActionService = class ActionService extends _classes.RequestScopedApiService
183
177
  return rootNodes;
184
178
  }
185
179
  constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider, permissionService){
186
- super('action', null, cacheManager, utilsService, ActionService.name, true, 'iam'), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "dataSourceProvider", void 0), _define_property(this, "permissionService", void 0), // Custom Methods
187
- _define_property(this, "actionSelectFields", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.dataSourceProvider = dataSourceProvider, this.permissionService = permissionService, this.actionSelectFields = [
180
+ super('action', cacheManager, utilsService, ActionService.name, true, 'iam', _actionentity.Action, dataSourceProvider), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "permissionService", void 0), // Custom Methods
181
+ _define_property(this, "actionSelectFields", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.permissionService = permissionService, this.actionSelectFields = [
188
182
  'id',
189
183
  'code',
190
184
  'name',
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "IAMDataSourceService", {
9
9
  }
10
10
  });
11
11
  const _modules = require("@flusys/nestjs-shared/modules");
12
- const _constants = require("@flusys/nestjs-shared/constants");
13
12
  const _common = require("@nestjs/common");
14
13
  const _core = require("@nestjs/core");
15
14
  const _express = require("express");
@@ -84,7 +83,6 @@ function _ts_param(paramIndex, decorator) {
84
83
  };
85
84
  }
86
85
  let IAMDataSourceService = class IAMDataSourceService extends _modules.MultiTenantDataSourceService {
87
- // Factory Methods
88
86
  static buildParentOptions(options) {
89
87
  return {
90
88
  bootstrapAppConfig: options.bootstrapAppConfig,
@@ -93,80 +91,26 @@ let IAMDataSourceService = class IAMDataSourceService extends _modules.MultiTena
93
91
  tenants: options.config?.tenants
94
92
  };
95
93
  }
96
- // Feature Flags
97
94
  getEnableCompanyFeatureForTenant(tenant) {
98
95
  return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
99
96
  }
100
97
  getEnableCompanyFeatureForCurrentTenant() {
101
98
  return this.getEnableCompanyFeatureForTenant(this.getCurrentTenant() ?? undefined);
102
99
  }
103
- // Entity Management
104
100
  async getIAMEntities() {
105
101
  const { getIAMEntitiesByConfig } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
106
102
  const enableCompanyFeature = this.getEnableCompanyFeatureForCurrentTenant();
107
103
  const permissionMode = _helpers.PermissionModeHelper.toString(this.configService.getPermissionMode());
108
104
  return getIAMEntitiesByConfig(enableCompanyFeature, permissionMode);
109
105
  }
110
- // Overrides
111
106
  async createDataSourceFromConfig(config) {
112
107
  const entities = await this.getIAMEntities();
113
108
  return await super.createDataSourceFromConfig(config, entities);
114
109
  }
115
- async getSingleDataSource() {
116
- if (!IAMDataSourceService.singleDataSource) {
117
- if (IAMDataSourceService.singleConnectionLock) {
118
- return IAMDataSourceService.singleConnectionLock;
119
- }
120
- const lockPromise = (async ()=>{
121
- const config = this.getDefaultDatabaseConfig();
122
- if (!config) {
123
- throw new _common.InternalServerErrorException({
124
- message: 'Default database config is not available',
125
- messageKey: _constants.SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE
126
- });
127
- }
128
- const ds = await this.createDataSourceFromConfig(config);
129
- IAMDataSourceService.singleDataSource = ds;
130
- IAMDataSourceService.initialized = true;
131
- return ds;
132
- })();
133
- IAMDataSourceService.singleConnectionLock = lockPromise;
134
- try {
135
- return await lockPromise;
136
- } finally{
137
- IAMDataSourceService.singleConnectionLock = null;
138
- }
139
- }
140
- return IAMDataSourceService.singleDataSource;
141
- }
142
- async getOrCreateTenantConnection(tenant) {
143
- // Return existing initialized connection from IAM-specific cache
144
- const existing = IAMDataSourceService.tenantConnections.get(tenant.id);
145
- if (existing?.isInitialized) {
146
- return existing;
147
- }
148
- // If another request is creating this tenant's connection, wait for it
149
- const pendingConnection = IAMDataSourceService.connectionLocks.get(tenant.id);
150
- if (pendingConnection) {
151
- return pendingConnection;
152
- }
153
- // Create connection with lock to prevent race conditions
154
- const config = this.buildTenantDatabaseConfig(tenant);
155
- const connectionPromise = this.createDataSourceFromConfig(config);
156
- IAMDataSourceService.connectionLocks.set(tenant.id, connectionPromise);
157
- try {
158
- const dataSource = await connectionPromise;
159
- IAMDataSourceService.tenantConnections.set(tenant.id, dataSource);
160
- return dataSource;
161
- } finally{
162
- IAMDataSourceService.connectionLocks.delete(tenant.id);
163
- }
164
- }
165
110
  constructor(configService, request){
166
111
  super(IAMDataSourceService.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
167
112
  }
168
113
  };
169
- // Override parent's static properties to have IAM-specific cache
170
114
  _define_property(IAMDataSourceService, "tenantConnections", new Map());
171
115
  _define_property(IAMDataSourceService, "singleDataSource", null);
172
116
  _define_property(IAMDataSourceService, "tenantsRegistry", new Map());
@@ -43,13 +43,10 @@ function _ts_param(paramIndex, decorator) {
43
43
  decorator(target, key, paramIndex);
44
44
  };
45
45
  }
46
- let RoleService = class RoleService extends _classes.RequestScopedApiService {
46
+ let RoleService = class RoleService extends _classes.ApiService {
47
47
  resolveEntity() {
48
48
  return this.iamConfigService.isCompanyFeatureEnabled() ? _rolewithcompanyentity.RoleWithCompany : _roleentity.Role;
49
49
  }
50
- getDataSourceProvider() {
51
- return this.dataSourceProvider;
52
- }
53
50
  // Entity Conversion
54
51
  async convertSingleDtoToEntity(dto, user) {
55
52
  const entity = await super.convertSingleDtoToEntity(dto, user);
@@ -121,7 +118,7 @@ let RoleService = class RoleService extends _classes.RequestScopedApiService {
121
118
  };
122
119
  }
123
120
  constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider){
124
- super('role', null, cacheManager, utilsService, RoleService.name, true, 'iam'), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "dataSourceProvider", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.dataSourceProvider = dataSourceProvider;
121
+ super('role', cacheManager, utilsService, RoleService.name, true, 'iam', undefined, dataSourceProvider), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService;
125
122
  }
126
123
  };
127
124
  RoleService = _ts_decorate([
@@ -1,3 +1,4 @@
1
+ import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
1
2
  import { ActionType } from '../enums';
2
3
  import { LogicNode } from '../types';
3
4
  export declare class CreateActionDto {
@@ -14,8 +15,7 @@ declare const UpdateActionDto_base: import("@nestjs/common").Type<Partial<Create
14
15
  export declare class UpdateActionDto extends UpdateActionDto_base {
15
16
  id: string;
16
17
  }
17
- export declare class ActionResponseDto {
18
- id: string;
18
+ export declare class ActionResponseDto extends IdentityResponseDto {
19
19
  readOnly: boolean;
20
20
  name: string;
21
21
  description: string | null;
@@ -25,12 +25,6 @@ export declare class ActionResponseDto {
25
25
  parentId: string | null;
26
26
  serial: number | null;
27
27
  isActive: boolean;
28
- createdAt: Date;
29
- updatedAt: Date;
30
- deletedAt: Date | null;
31
- createdById: string | null;
32
- updatedById: string | null;
33
- deletedById: string | null;
34
28
  }
35
29
  export declare class ActionTreeDto extends ActionResponseDto {
36
30
  children: ActionTreeDto[];
@@ -1,3 +1,4 @@
1
+ import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
1
2
  export declare class CreateRoleDto {
2
3
  name: string;
3
4
  description?: string;
@@ -9,19 +10,12 @@ declare const UpdateRoleDto_base: import("@nestjs/common").Type<Partial<CreateRo
9
10
  export declare class UpdateRoleDto extends UpdateRoleDto_base {
10
11
  id: string;
11
12
  }
12
- export declare class RoleResponseDto {
13
- id: string;
13
+ export declare class RoleResponseDto extends IdentityResponseDto {
14
14
  readOnly: boolean;
15
15
  name: string;
16
16
  description: string | null;
17
17
  companyId: string | null;
18
18
  isActive: boolean;
19
19
  serial: number | null;
20
- createdAt: Date;
21
- updatedAt: Date;
22
- deletedAt: Date | null;
23
- createdById: string | null;
24
- updatedById: string | null;
25
- deletedById: string | null;
26
20
  }
27
21
  export {};
@@ -20,7 +20,9 @@ function _ts_decorate(decorators, target, key, desc) {
20
20
  function _ts_metadata(k, v) {
21
21
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
22
  }
23
+ import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
23
24
  import { ApiProperty, PartialType } from '@nestjs/swagger';
25
+ import { Expose } from 'class-transformer';
24
26
  import { IsBoolean, IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator';
25
27
  import { ActionType } from '../enums';
26
28
  import { LogicNode } from '../types';
@@ -131,106 +133,65 @@ _ts_decorate([
131
133
  IsNotEmpty(),
132
134
  _ts_metadata("design:type", String)
133
135
  ], UpdateActionDto.prototype, "id", void 0);
134
- export class ActionResponseDto {
135
- constructor(){
136
- _define_property(this, "id", void 0);
137
- _define_property(this, "readOnly", void 0);
138
- _define_property(this, "name", void 0);
139
- _define_property(this, "description", void 0);
140
- _define_property(this, "code", void 0);
141
- _define_property(this, "actionType", void 0);
142
- _define_property(this, "permissionLogic", void 0);
143
- _define_property(this, "parentId", void 0);
144
- _define_property(this, "serial", void 0);
145
- _define_property(this, "isActive", void 0);
146
- _define_property(this, "createdAt", void 0);
147
- _define_property(this, "updatedAt", void 0);
148
- _define_property(this, "deletedAt", void 0);
149
- _define_property(this, "createdById", void 0);
150
- _define_property(this, "updatedById", void 0);
151
- _define_property(this, "deletedById", void 0);
136
+ export class ActionResponseDto extends IdentityResponseDto {
137
+ constructor(...args){
138
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "code", void 0), _define_property(this, "actionType", void 0), _define_property(this, "permissionLogic", void 0), _define_property(this, "parentId", void 0), _define_property(this, "serial", void 0), _define_property(this, "isActive", void 0);
152
139
  }
153
140
  }
154
141
  _ts_decorate([
155
- ApiProperty(),
156
- _ts_metadata("design:type", String)
157
- ], ActionResponseDto.prototype, "id", void 0);
158
- _ts_decorate([
142
+ Expose(),
159
143
  ApiProperty(),
160
144
  _ts_metadata("design:type", Boolean)
161
145
  ], ActionResponseDto.prototype, "readOnly", void 0);
162
146
  _ts_decorate([
147
+ Expose(),
163
148
  ApiProperty(),
164
149
  _ts_metadata("design:type", String)
165
150
  ], ActionResponseDto.prototype, "name", void 0);
166
151
  _ts_decorate([
152
+ Expose(),
167
153
  ApiProperty(),
168
154
  _ts_metadata("design:type", Object)
169
155
  ], ActionResponseDto.prototype, "description", void 0);
170
156
  _ts_decorate([
157
+ Expose(),
171
158
  ApiProperty(),
172
159
  _ts_metadata("design:type", Object)
173
160
  ], ActionResponseDto.prototype, "code", void 0);
174
161
  _ts_decorate([
162
+ Expose(),
175
163
  ApiProperty({
176
164
  enum: ActionType
177
165
  }),
178
166
  _ts_metadata("design:type", typeof ActionType === "undefined" ? Object : ActionType)
179
167
  ], ActionResponseDto.prototype, "actionType", void 0);
180
168
  _ts_decorate([
169
+ Expose(),
181
170
  ApiProperty(),
182
171
  _ts_metadata("design:type", Object)
183
172
  ], ActionResponseDto.prototype, "permissionLogic", void 0);
184
173
  _ts_decorate([
174
+ Expose(),
185
175
  ApiProperty(),
186
176
  _ts_metadata("design:type", Object)
187
177
  ], ActionResponseDto.prototype, "parentId", void 0);
188
178
  _ts_decorate([
179
+ Expose(),
189
180
  ApiProperty(),
190
181
  _ts_metadata("design:type", Object)
191
182
  ], ActionResponseDto.prototype, "serial", void 0);
192
183
  _ts_decorate([
184
+ Expose(),
193
185
  ApiProperty(),
194
186
  _ts_metadata("design:type", Boolean)
195
187
  ], ActionResponseDto.prototype, "isActive", void 0);
196
- _ts_decorate([
197
- ApiProperty(),
198
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
199
- ], ActionResponseDto.prototype, "createdAt", void 0);
200
- _ts_decorate([
201
- ApiProperty(),
202
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
203
- ], ActionResponseDto.prototype, "updatedAt", void 0);
204
- _ts_decorate([
205
- ApiProperty({
206
- required: false
207
- }),
208
- _ts_metadata("design:type", Object)
209
- ], ActionResponseDto.prototype, "deletedAt", void 0);
210
- _ts_decorate([
211
- ApiProperty({
212
- required: false
213
- }),
214
- _ts_metadata("design:type", Object)
215
- ], ActionResponseDto.prototype, "createdById", void 0);
216
- _ts_decorate([
217
- ApiProperty({
218
- required: false
219
- }),
220
- _ts_metadata("design:type", Object)
221
- ], ActionResponseDto.prototype, "updatedById", void 0);
222
- _ts_decorate([
223
- ApiProperty({
224
- required: false
225
- }),
226
- _ts_metadata("design:type", Object)
227
- ], ActionResponseDto.prototype, "deletedById", void 0);
228
188
  export class ActionTreeDto extends ActionResponseDto {
229
189
  constructor(...args){
230
190
  super(...args), _define_property(this, "children", void 0);
231
191
  }
232
192
  }
233
193
  _ts_decorate([
194
+ Expose(),
234
195
  ApiProperty({
235
196
  type: ()=>[
236
197
  ActionTreeDto
@@ -20,7 +20,9 @@ function _ts_decorate(decorators, target, key, desc) {
20
20
  function _ts_metadata(k, v) {
21
21
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
22
  }
23
+ import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
23
24
  import { ApiProperty, PartialType } from '@nestjs/swagger';
25
+ import { Expose } from 'class-transformer';
24
26
  import { IsBoolean, IsInt, IsNotEmpty, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator';
25
27
  export class CreateRoleDto {
26
28
  constructor(){
@@ -95,80 +97,38 @@ _ts_decorate([
95
97
  IsNotEmpty(),
96
98
  _ts_metadata("design:type", String)
97
99
  ], UpdateRoleDto.prototype, "id", void 0);
98
- export class RoleResponseDto {
99
- constructor(){
100
- _define_property(this, "id", void 0);
101
- _define_property(this, "readOnly", void 0);
102
- _define_property(this, "name", void 0);
103
- _define_property(this, "description", void 0);
104
- _define_property(this, "companyId", void 0);
105
- _define_property(this, "isActive", void 0);
106
- _define_property(this, "serial", void 0);
107
- _define_property(this, "createdAt", void 0);
108
- _define_property(this, "updatedAt", void 0);
109
- _define_property(this, "deletedAt", void 0);
110
- _define_property(this, "createdById", void 0);
111
- _define_property(this, "updatedById", void 0);
112
- _define_property(this, "deletedById", void 0);
100
+ export class RoleResponseDto extends IdentityResponseDto {
101
+ constructor(...args){
102
+ super(...args), _define_property(this, "readOnly", void 0), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "companyId", void 0), _define_property(this, "isActive", void 0), _define_property(this, "serial", void 0);
113
103
  }
114
104
  }
115
105
  _ts_decorate([
116
- ApiProperty(),
117
- _ts_metadata("design:type", String)
118
- ], RoleResponseDto.prototype, "id", void 0);
119
- _ts_decorate([
106
+ Expose(),
120
107
  ApiProperty(),
121
108
  _ts_metadata("design:type", Boolean)
122
109
  ], RoleResponseDto.prototype, "readOnly", void 0);
123
110
  _ts_decorate([
111
+ Expose(),
124
112
  ApiProperty(),
125
113
  _ts_metadata("design:type", String)
126
114
  ], RoleResponseDto.prototype, "name", void 0);
127
115
  _ts_decorate([
116
+ Expose(),
128
117
  ApiProperty(),
129
118
  _ts_metadata("design:type", Object)
130
119
  ], RoleResponseDto.prototype, "description", void 0);
131
120
  _ts_decorate([
121
+ Expose(),
132
122
  ApiProperty(),
133
123
  _ts_metadata("design:type", Object)
134
124
  ], RoleResponseDto.prototype, "companyId", void 0);
135
125
  _ts_decorate([
126
+ Expose(),
136
127
  ApiProperty(),
137
128
  _ts_metadata("design:type", Boolean)
138
129
  ], RoleResponseDto.prototype, "isActive", void 0);
139
130
  _ts_decorate([
131
+ Expose(),
140
132
  ApiProperty(),
141
133
  _ts_metadata("design:type", Object)
142
134
  ], RoleResponseDto.prototype, "serial", void 0);
143
- _ts_decorate([
144
- ApiProperty(),
145
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
146
- ], RoleResponseDto.prototype, "createdAt", void 0);
147
- _ts_decorate([
148
- ApiProperty(),
149
- _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
150
- ], RoleResponseDto.prototype, "updatedAt", void 0);
151
- _ts_decorate([
152
- ApiProperty({
153
- required: false
154
- }),
155
- _ts_metadata("design:type", Object)
156
- ], RoleResponseDto.prototype, "deletedAt", void 0);
157
- _ts_decorate([
158
- ApiProperty({
159
- required: false
160
- }),
161
- _ts_metadata("design:type", Object)
162
- ], RoleResponseDto.prototype, "createdById", void 0);
163
- _ts_decorate([
164
- ApiProperty({
165
- required: false
166
- }),
167
- _ts_metadata("design:type", Object)
168
- ], RoleResponseDto.prototype, "updatedById", void 0);
169
- _ts_decorate([
170
- ApiProperty({
171
- required: false
172
- }),
173
- _ts_metadata("design:type", Object)
174
- ], RoleResponseDto.prototype, "deletedById", void 0);
@@ -25,7 +25,7 @@ function _ts_param(paramIndex, decorator) {
25
25
  decorator(target, key, paramIndex);
26
26
  };
27
27
  }
28
- import { HybridCache, RequestScopedApiService } from '@flusys/nestjs-shared/classes';
28
+ import { HybridCache, ApiService } from '@flusys/nestjs-shared/classes';
29
29
  import { UtilsService } from '@flusys/nestjs-shared/modules';
30
30
  import { BadRequestException, Inject, Injectable, Scope } from '@nestjs/common';
31
31
  import { In } from 'typeorm';
@@ -34,13 +34,7 @@ import { Action } from '../entities/action.entity';
34
34
  import { IAMConfigService } from './iam-config.service';
35
35
  import { IAMDataSourceService } from './iam-datasource.service';
36
36
  import { PermissionService } from './permission.service';
37
- export class ActionService extends RequestScopedApiService {
38
- resolveEntity() {
39
- return Action;
40
- }
41
- getDataSourceProvider() {
42
- return this.dataSourceProvider;
43
- }
37
+ export class ActionService extends ApiService {
44
38
  // Query Customization
45
39
  async getSelectQuery(query, _user, select) {
46
40
  if (!select?.length) {
@@ -105,7 +99,7 @@ export class ActionService extends RequestScopedApiService {
105
99
  }
106
100
  }
107
101
  /** Get actions available for permission assignment (filtered by company whitelist) */ async getActionsForPermission(user) {
108
- await this.ensureRepositoryInitialized();
102
+ await this.ensureDataSourceRepository();
109
103
  this.requireUser(user, 'getActionsForPermission');
110
104
  let whereClause = {};
111
105
  if (this.iamConfigService.isCompanyFeatureEnabled() && user.companyId) {
@@ -124,7 +118,7 @@ export class ActionService extends RequestScopedApiService {
124
118
  return actions.map((action)=>this.convertEntityToResponseDto(action, false));
125
119
  }
126
120
  /** Get actions in hierarchical tree structure */ async getActionTree(user, search, isActive, withDeleted = false) {
127
- await this.ensureRepositoryInitialized();
121
+ await this.ensureDataSourceRepository();
128
122
  this.requireUser(user, 'getActionTree');
129
123
  const query = this.repository.createQueryBuilder('action');
130
124
  if (!withDeleted) {
@@ -173,8 +167,8 @@ export class ActionService extends RequestScopedApiService {
173
167
  return rootNodes;
174
168
  }
175
169
  constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider, permissionService){
176
- super('action', null, cacheManager, utilsService, ActionService.name, true, 'iam'), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "dataSourceProvider", void 0), _define_property(this, "permissionService", void 0), // Custom Methods
177
- _define_property(this, "actionSelectFields", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.dataSourceProvider = dataSourceProvider, this.permissionService = permissionService, this.actionSelectFields = [
170
+ super('action', cacheManager, utilsService, ActionService.name, true, 'iam', Action, dataSourceProvider), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "permissionService", void 0), // Custom Methods
171
+ _define_property(this, "actionSelectFields", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.permissionService = permissionService, this.actionSelectFields = [
178
172
  'id',
179
173
  'code',
180
174
  'name',
@@ -26,14 +26,12 @@ function _ts_param(paramIndex, decorator) {
26
26
  };
27
27
  }
28
28
  import { MultiTenantDataSourceService } from '@flusys/nestjs-shared/modules';
29
- import { SYSTEM_MESSAGES } from '@flusys/nestjs-shared/constants';
30
- import { Inject, Injectable, InternalServerErrorException, Optional, Scope } from '@nestjs/common';
29
+ import { Inject, Injectable, Optional, Scope } from '@nestjs/common';
31
30
  import { REQUEST } from '@nestjs/core';
32
31
  import { Request } from 'express';
33
32
  import { PermissionModeHelper } from '../helpers';
34
33
  import { IAMConfigService } from './iam-config.service';
35
34
  export class IAMDataSourceService extends MultiTenantDataSourceService {
36
- // Factory Methods
37
35
  static buildParentOptions(options) {
38
36
  return {
39
37
  bootstrapAppConfig: options.bootstrapAppConfig,
@@ -42,80 +40,26 @@ export class IAMDataSourceService extends MultiTenantDataSourceService {
42
40
  tenants: options.config?.tenants
43
41
  };
44
42
  }
45
- // Feature Flags
46
43
  getEnableCompanyFeatureForTenant(tenant) {
47
44
  return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
48
45
  }
49
46
  getEnableCompanyFeatureForCurrentTenant() {
50
47
  return this.getEnableCompanyFeatureForTenant(this.getCurrentTenant() ?? undefined);
51
48
  }
52
- // Entity Management
53
49
  async getIAMEntities() {
54
50
  const { getIAMEntitiesByConfig } = await import('../entities');
55
51
  const enableCompanyFeature = this.getEnableCompanyFeatureForCurrentTenant();
56
52
  const permissionMode = PermissionModeHelper.toString(this.configService.getPermissionMode());
57
53
  return getIAMEntitiesByConfig(enableCompanyFeature, permissionMode);
58
54
  }
59
- // Overrides
60
55
  async createDataSourceFromConfig(config) {
61
56
  const entities = await this.getIAMEntities();
62
57
  return await super.createDataSourceFromConfig(config, entities);
63
58
  }
64
- async getSingleDataSource() {
65
- if (!IAMDataSourceService.singleDataSource) {
66
- if (IAMDataSourceService.singleConnectionLock) {
67
- return IAMDataSourceService.singleConnectionLock;
68
- }
69
- const lockPromise = (async ()=>{
70
- const config = this.getDefaultDatabaseConfig();
71
- if (!config) {
72
- throw new InternalServerErrorException({
73
- message: 'Default database config is not available',
74
- messageKey: SYSTEM_MESSAGES.DATABASE_CONFIG_NOT_AVAILABLE
75
- });
76
- }
77
- const ds = await this.createDataSourceFromConfig(config);
78
- IAMDataSourceService.singleDataSource = ds;
79
- IAMDataSourceService.initialized = true;
80
- return ds;
81
- })();
82
- IAMDataSourceService.singleConnectionLock = lockPromise;
83
- try {
84
- return await lockPromise;
85
- } finally{
86
- IAMDataSourceService.singleConnectionLock = null;
87
- }
88
- }
89
- return IAMDataSourceService.singleDataSource;
90
- }
91
- async getOrCreateTenantConnection(tenant) {
92
- // Return existing initialized connection from IAM-specific cache
93
- const existing = IAMDataSourceService.tenantConnections.get(tenant.id);
94
- if (existing?.isInitialized) {
95
- return existing;
96
- }
97
- // If another request is creating this tenant's connection, wait for it
98
- const pendingConnection = IAMDataSourceService.connectionLocks.get(tenant.id);
99
- if (pendingConnection) {
100
- return pendingConnection;
101
- }
102
- // Create connection with lock to prevent race conditions
103
- const config = this.buildTenantDatabaseConfig(tenant);
104
- const connectionPromise = this.createDataSourceFromConfig(config);
105
- IAMDataSourceService.connectionLocks.set(tenant.id, connectionPromise);
106
- try {
107
- const dataSource = await connectionPromise;
108
- IAMDataSourceService.tenantConnections.set(tenant.id, dataSource);
109
- return dataSource;
110
- } finally{
111
- IAMDataSourceService.connectionLocks.delete(tenant.id);
112
- }
113
- }
114
59
  constructor(configService, request){
115
60
  super(IAMDataSourceService.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
116
61
  }
117
62
  }
118
- // Override parent's static properties to have IAM-specific cache
119
63
  _define_property(IAMDataSourceService, "tenantConnections", new Map());
120
64
  _define_property(IAMDataSourceService, "singleDataSource", null);
121
65
  _define_property(IAMDataSourceService, "tenantsRegistry", new Map());
@@ -25,7 +25,7 @@ function _ts_param(paramIndex, decorator) {
25
25
  decorator(target, key, paramIndex);
26
26
  };
27
27
  }
28
- import { HybridCache, RequestScopedApiService } from '@flusys/nestjs-shared/classes';
28
+ import { HybridCache, ApiService } from '@flusys/nestjs-shared/classes';
29
29
  import { UtilsService } from '@flusys/nestjs-shared/modules';
30
30
  import { applyCompanyFilter } from '@flusys/nestjs-shared/utils';
31
31
  import { Inject, Injectable, Scope } from '@nestjs/common';
@@ -33,13 +33,10 @@ import { RoleWithCompany } from '../entities/role-with-company.entity';
33
33
  import { Role } from '../entities/role.entity';
34
34
  import { IAMConfigService } from './iam-config.service';
35
35
  import { IAMDataSourceService } from './iam-datasource.service';
36
- export class RoleService extends RequestScopedApiService {
36
+ export class RoleService extends ApiService {
37
37
  resolveEntity() {
38
38
  return this.iamConfigService.isCompanyFeatureEnabled() ? RoleWithCompany : Role;
39
39
  }
40
- getDataSourceProvider() {
41
- return this.dataSourceProvider;
42
- }
43
40
  // Entity Conversion
44
41
  async convertSingleDtoToEntity(dto, user) {
45
42
  const entity = await super.convertSingleDtoToEntity(dto, user);
@@ -111,7 +108,7 @@ export class RoleService extends RequestScopedApiService {
111
108
  };
112
109
  }
113
110
  constructor(cacheManager, utilsService, iamConfigService, dataSourceProvider){
114
- super('role', null, cacheManager, utilsService, RoleService.name, true, 'iam'), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), _define_property(this, "dataSourceProvider", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService, this.dataSourceProvider = dataSourceProvider;
111
+ super('role', cacheManager, utilsService, RoleService.name, true, 'iam', undefined, dataSourceProvider), _define_property(this, "cacheManager", void 0), _define_property(this, "utilsService", void 0), _define_property(this, "iamConfigService", void 0), this.cacheManager = cacheManager, this.utilsService = utilsService, this.iamConfigService = iamConfigService;
115
112
  }
116
113
  }
117
114
  RoleService = _ts_decorate([
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flusys/nestjs-iam",
3
- "version": "5.1.1",
3
+ "version": "5.1.3",
4
4
  "description": "Identity and Access Management (IAM) module for NestJS applications",
5
5
  "main": "cjs/index.js",
6
6
  "module": "fesm/index.js",
@@ -79,18 +79,18 @@
79
79
  }
80
80
  },
81
81
  "peerDependencies": {
82
- "@nestjs/common": "^10.0.0 || ^11.0.0",
83
- "@nestjs/config": "^3.0.0 || ^4.0.0",
84
- "@nestjs/core": "^10.0.0 || ^11.0.0",
85
- "@nestjs/swagger": "^7.0.0 || ^11.0.0",
86
- "@nestjs/typeorm": "^10.0.0 || ^11.0.0",
87
- "class-transformer": "^0.5.0",
88
- "class-validator": "^0.14.0",
82
+ "@nestjs/common": "^11.0.0",
83
+ "@nestjs/config": "^4.0.0",
84
+ "@nestjs/core": "^11.0.0",
85
+ "@nestjs/swagger": "^11.0.0",
86
+ "@nestjs/typeorm": "^11.0.0",
87
+ "class-transformer": "^0.5.1",
88
+ "class-validator": "^0.14.0 || ^0.15.0",
89
89
  "typeorm": "^0.3.0",
90
- "express": "^4.18.0"
90
+ "express": "^4.18.0 || ^5.0.0"
91
91
  },
92
92
  "dependencies": {
93
- "@flusys/nestjs-core": "5.1.1",
94
- "@flusys/nestjs-shared": "5.1.1"
93
+ "@flusys/nestjs-core": "5.1.3",
94
+ "@flusys/nestjs-shared": "5.1.3"
95
95
  }
96
96
  }
@@ -1,22 +1,19 @@
1
- import { HybridCache, RequestScopedApiService } from '@flusys/nestjs-shared/classes';
1
+ import { HybridCache, ApiService } from '@flusys/nestjs-shared/classes';
2
2
  import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
3
3
  import { UtilsService } from '@flusys/nestjs-shared/modules';
4
- import { EntityTarget, SelectQueryBuilder } from 'typeorm';
4
+ import { SelectQueryBuilder } from 'typeorm';
5
5
  import { CreateActionDto, UpdateActionDto } from '../dtos/action.dto';
6
6
  import { ActionBase } from '../entities/action-base.entity';
7
7
  import { IAction, IActionTree } from '../interfaces/action.interface';
8
8
  import { IAMConfigService } from './iam-config.service';
9
9
  import { IAMDataSourceService } from './iam-datasource.service';
10
10
  import { PermissionService } from './permission.service';
11
- export declare class ActionService extends RequestScopedApiService<CreateActionDto, UpdateActionDto, IAction, ActionBase> {
11
+ export declare class ActionService extends ApiService<CreateActionDto, UpdateActionDto, IAction, ActionBase> {
12
12
  protected cacheManager: HybridCache;
13
13
  protected utilsService: UtilsService;
14
14
  private readonly iamConfigService;
15
- private readonly dataSourceProvider;
16
15
  private readonly permissionService;
17
16
  constructor(cacheManager: HybridCache, utilsService: UtilsService, iamConfigService: IAMConfigService, dataSourceProvider: IAMDataSourceService, permissionService: PermissionService);
18
- protected resolveEntity(): EntityTarget<ActionBase>;
19
- protected getDataSourceProvider(): IAMDataSourceService;
20
17
  getSelectQuery(query: SelectQueryBuilder<ActionBase>, _user: ILoggedUserInfo | null, select?: string[]): Promise<{
21
18
  query: SelectQueryBuilder<ActionBase>;
22
19
  isRaw: boolean;
@@ -17,6 +17,4 @@ export declare class IAMDataSourceService extends MultiTenantDataSourceService {
17
17
  getEnableCompanyFeatureForCurrentTenant(): boolean;
18
18
  getIAMEntities(): Promise<any[]>;
19
19
  protected createDataSourceFromConfig(config: IDatabaseConfig): Promise<DataSource>;
20
- protected getSingleDataSource(): Promise<DataSource>;
21
- protected getOrCreateTenantConnection(tenant: ITenantDatabaseConfig): Promise<DataSource>;
22
20
  }
@@ -1,4 +1,4 @@
1
- import { HybridCache, RequestScopedApiService } from '@flusys/nestjs-shared/classes';
1
+ import { HybridCache, ApiService } from '@flusys/nestjs-shared/classes';
2
2
  import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
3
3
  import { UtilsService } from '@flusys/nestjs-shared/modules';
4
4
  import { EntityTarget, SelectQueryBuilder } from 'typeorm';
@@ -7,14 +7,12 @@ import { RoleBase } from '../entities/role-base.entity';
7
7
  import { IRole } from '../interfaces/role.interface';
8
8
  import { IAMConfigService } from './iam-config.service';
9
9
  import { IAMDataSourceService } from './iam-datasource.service';
10
- export declare class RoleService extends RequestScopedApiService<CreateRoleDto, UpdateRoleDto, IRole, RoleBase> {
10
+ export declare class RoleService extends ApiService<CreateRoleDto, UpdateRoleDto, IRole, RoleBase> {
11
11
  protected cacheManager: HybridCache;
12
12
  protected utilsService: UtilsService;
13
13
  private readonly iamConfigService;
14
- private readonly dataSourceProvider;
15
14
  constructor(cacheManager: HybridCache, utilsService: UtilsService, iamConfigService: IAMConfigService, dataSourceProvider: IAMDataSourceService);
16
15
  protected resolveEntity(): EntityTarget<RoleBase>;
17
- protected getDataSourceProvider(): IAMDataSourceService;
18
16
  convertSingleDtoToEntity(dto: CreateRoleDto | UpdateRoleDto, user: ILoggedUserInfo | null): Promise<RoleBase>;
19
17
  getSelectQuery(query: SelectQueryBuilder<RoleBase>, _user: ILoggedUserInfo | null, select?: string[]): Promise<{
20
18
  query: SelectQueryBuilder<RoleBase>;