@ackplus/nest-auth 0.0.23 → 0.0.24

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 (104) hide show
  1. package/package.json +1 -1
  2. package/src/index.d.ts +1 -0
  3. package/src/index.js +1 -0
  4. package/src/index.js.map +1 -1
  5. package/src/lib/auth.constants.d.ts +1 -0
  6. package/src/lib/auth.constants.js +2 -1
  7. package/src/lib/auth.constants.js.map +1 -1
  8. package/src/lib/auth.module.d.ts +0 -0
  9. package/src/lib/auth.module.js +1 -0
  10. package/src/lib/auth.module.js.map +1 -0
  11. package/src/lib/decorators/nest-auth-role.decorator.d.ts +3 -0
  12. package/src/lib/decorators/nest-auth-role.decorator.js +14 -0
  13. package/src/lib/decorators/nest-auth-role.decorator.js.map +1 -0
  14. package/src/lib/dto/responses/auth.response.dto.d.ts +6 -6
  15. package/src/lib/dto/responses/auth.response.dto.js +14 -19
  16. package/src/lib/dto/responses/auth.response.dto.js.map +1 -1
  17. package/src/lib/entities/access-key.entity.d.ts +16 -0
  18. package/src/lib/entities/access-key.entity.js +63 -0
  19. package/src/lib/entities/access-key.entity.js.map +1 -0
  20. package/src/lib/entities/index.d.ts +3 -1
  21. package/src/lib/entities/index.js +2 -0
  22. package/src/lib/entities/index.js.map +1 -1
  23. package/src/lib/entities/permission.entity.d.ts +1 -0
  24. package/src/lib/entities/permission.entity.js +5 -0
  25. package/src/lib/entities/permission.entity.js.map +1 -1
  26. package/src/lib/entities/role-permission.entity.d.ts +2 -1
  27. package/src/lib/entities/role-permission.entity.js +1 -1
  28. package/src/lib/entities/role-permission.entity.js.map +1 -1
  29. package/src/lib/entities/role.entity.d.ts +12 -2
  30. package/src/lib/entities/role.entity.js +65 -4
  31. package/src/lib/entities/role.entity.js.map +1 -1
  32. package/src/lib/entities/tenant.entity.d.ts +3 -3
  33. package/src/lib/entities/tenant.entity.js +9 -6
  34. package/src/lib/entities/tenant.entity.js.map +1 -1
  35. package/src/lib/entities/user.entity.js +1 -1
  36. package/src/lib/entities/user.entity.js.map +1 -1
  37. package/src/lib/events/index.d.ts +34 -0
  38. package/src/lib/events/index.js +39 -0
  39. package/src/lib/events/index.js.map +1 -0
  40. package/src/lib/events/logged-out-all.event.d.ts +15 -0
  41. package/src/lib/events/logged-out-all.event.js +10 -0
  42. package/src/lib/events/logged-out-all.event.js.map +1 -0
  43. package/src/lib/events/logged-out.event.d.ts +13 -0
  44. package/src/lib/events/logged-out.event.js +10 -0
  45. package/src/lib/events/logged-out.event.js.map +1 -0
  46. package/src/lib/events/password-reset-requested.event.d.ts +15 -0
  47. package/src/lib/events/password-reset-requested.event.js +10 -0
  48. package/src/lib/events/password-reset-requested.event.js.map +1 -0
  49. package/src/lib/events/password-reset.event.d.ts +11 -0
  50. package/src/lib/events/password-reset.event.js +10 -0
  51. package/src/lib/events/password-reset.event.js.map +1 -0
  52. package/src/lib/events/tenant-created.event.d.ts +8 -0
  53. package/src/lib/events/tenant-created.event.js +10 -0
  54. package/src/lib/events/tenant-created.event.js.map +1 -0
  55. package/src/lib/events/tenant-deleted.event.d.ts +8 -0
  56. package/src/lib/events/tenant-deleted.event.js +10 -0
  57. package/src/lib/events/tenant-deleted.event.js.map +1 -0
  58. package/src/lib/events/tenant-updated.event.d.ts +9 -0
  59. package/src/lib/events/tenant-updated.event.js +10 -0
  60. package/src/lib/events/tenant-updated.event.js.map +1 -0
  61. package/src/lib/events/user-2fa-verified.event.d.ts +15 -0
  62. package/src/lib/events/user-2fa-verified.event.js +10 -0
  63. package/src/lib/events/user-2fa-verified.event.js.map +1 -0
  64. package/src/lib/events/user-created.event.d.ts +9 -0
  65. package/src/lib/events/user-created.event.js +10 -0
  66. package/src/lib/events/user-created.event.js.map +1 -0
  67. package/src/lib/events/user-deleted.event.d.ts +9 -0
  68. package/src/lib/events/user-deleted.event.js +10 -0
  69. package/src/lib/events/user-deleted.event.js.map +1 -0
  70. package/src/lib/events/user-logged-in.event.d.ts +17 -0
  71. package/src/lib/events/user-logged-in.event.js +10 -0
  72. package/src/lib/events/user-logged-in.event.js.map +1 -0
  73. package/src/lib/events/user-refresh-token.event.d.ts +11 -0
  74. package/src/lib/events/user-refresh-token.event.js +10 -0
  75. package/src/lib/events/user-refresh-token.event.js.map +1 -0
  76. package/src/lib/events/user-registered.event.d.ts +17 -0
  77. package/src/lib/events/user-registered.event.js +10 -0
  78. package/src/lib/events/user-registered.event.js.map +1 -0
  79. package/src/lib/events/user-updated.event.d.ts +10 -0
  80. package/src/lib/events/user-updated.event.js +10 -0
  81. package/src/lib/events/user-updated.event.js.map +1 -0
  82. package/src/lib/guards/auth.guard.d.ts +8 -5
  83. package/src/lib/guards/auth.guard.js +59 -32
  84. package/src/lib/guards/auth.guard.js.map +1 -1
  85. package/src/lib/guards/nest-auth-role.guard.d.ts +7 -0
  86. package/src/lib/guards/nest-auth-role.guard.js +37 -0
  87. package/src/lib/guards/nest-auth-role.guard.js.map +1 -0
  88. package/src/lib/nest-auth.module.js +26 -13
  89. package/src/lib/nest-auth.module.js.map +1 -1
  90. package/src/lib/services/access-key.service.d.ts +19 -0
  91. package/src/lib/services/access-key.service.js +119 -0
  92. package/src/lib/services/access-key.service.js.map +1 -0
  93. package/src/lib/services/auth.service.d.ts +5 -3
  94. package/src/lib/services/auth.service.js +80 -15
  95. package/src/lib/services/auth.service.js.map +1 -1
  96. package/src/lib/services/role.service.d.ts +16 -0
  97. package/src/lib/services/role.service.js +194 -0
  98. package/src/lib/services/role.service.js.map +1 -0
  99. package/src/lib/services/tenant.service.d.ts +16 -0
  100. package/src/lib/services/tenant.service.js +134 -0
  101. package/src/lib/services/tenant.service.js.map +1 -0
  102. package/src/lib/services/user.service.d.ts +20 -0
  103. package/src/lib/services/user.service.js +211 -0
  104. package/src/lib/services/user.service.js.map +1 -0
@@ -0,0 +1,16 @@
1
+ import { FindManyOptions, FindOneOptions, Repository } from 'typeorm';
2
+ import { Role } from '../entities/role.entity';
3
+ export declare class RoleService {
4
+ private roleRepository;
5
+ constructor(roleRepository: Repository<Role>);
6
+ createRole(name: string, guard: string, tenantId?: string, isSystem?: boolean, permissionIds?: string | string[]): Promise<Role>;
7
+ getRoleById(id: string, options?: FindOneOptions<Role>): Promise<Role>;
8
+ getRoleByName(name: string, guard?: string, tenantId?: string, options?: FindOneOptions<Role>): Promise<Role>;
9
+ getAllRoles(options?: FindManyOptions<Role>): Promise<Role[]>;
10
+ getRolesByGuard(guard: string, tenantId?: string, options?: FindManyOptions<Role>): Promise<Role[]>;
11
+ getRolesByTenant(tenantId: string, includeSystemRoles?: boolean, options?: FindManyOptions<Role>): Promise<Role[]>;
12
+ updateRole(id: string, data: Partial<Role>): Promise<Role>;
13
+ updateRolePermissions(id: string, permissionIds: string | string[]): Promise<Role>;
14
+ deleteRole(id: string): Promise<void>;
15
+ deleteSystemRole(id: string): Promise<void>;
16
+ }
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const typeorm_1 = require("@nestjs/typeorm");
7
+ const typeorm_2 = require("typeorm");
8
+ const role_entity_1 = require("../entities/role.entity");
9
+ let RoleService = class RoleService {
10
+ constructor(roleRepository) {
11
+ this.roleRepository = roleRepository;
12
+ }
13
+ async createRole(name, guard, tenantId = null, isSystem = false, permissionIds) {
14
+ const existingRole = await this.roleRepository.findOne({
15
+ where: {
16
+ name,
17
+ guard,
18
+ tenantId: tenantId || (0, typeorm_2.IsNull)()
19
+ },
20
+ });
21
+ if (existingRole) {
22
+ throw new common_1.ConflictException({
23
+ message: `Role with name '${name}' already exists in guard '${guard}'${tenantId ? ` for tenant '${tenantId}'` : ''}`,
24
+ code: 'ROLE_ALREADY_EXISTS'
25
+ });
26
+ }
27
+ const role = await role_entity_1.Role.createRole(name, guard, isSystem, tenantId);
28
+ if (permissionIds) {
29
+ await role.syncPermissions(permissionIds);
30
+ }
31
+ await this.roleRepository.save(role);
32
+ return role;
33
+ }
34
+ async getRoleById(id, options) {
35
+ if (!id) {
36
+ return null;
37
+ }
38
+ const role = await this.roleRepository.findOne({
39
+ ...(options ? options : {}),
40
+ where: { id }
41
+ });
42
+ if (!role) {
43
+ return null;
44
+ }
45
+ return role;
46
+ }
47
+ async getRoleByName(name, guard, tenantId, options) {
48
+ const systemRole = await this.roleRepository.findOne({
49
+ ...(options ? options : {}),
50
+ where: {
51
+ name,
52
+ ...(guard ? { guard } : {}),
53
+ isSystem: true
54
+ }
55
+ });
56
+ if (systemRole) {
57
+ return systemRole;
58
+ }
59
+ const role = await this.roleRepository.findOne({
60
+ ...(options ? options : {}),
61
+ where: {
62
+ name,
63
+ ...(guard ? { guard } : {}),
64
+ ...(tenantId ? { tenantId } : { tenantId: (0, typeorm_2.IsNull)() })
65
+ }
66
+ });
67
+ return role;
68
+ }
69
+ async getAllRoles(options) {
70
+ return this.roleRepository.find(options);
71
+ }
72
+ async getRolesByGuard(guard, tenantId, options) {
73
+ if (!guard) {
74
+ return [];
75
+ }
76
+ return this.roleRepository.find({
77
+ ...(options ? options : {}),
78
+ where: {
79
+ guard,
80
+ ...(tenantId ? { tenantId } : { tenantId: (0, typeorm_2.IsNull)() }),
81
+ ...(options?.where ? options.where : {})
82
+ },
83
+ });
84
+ }
85
+ async getRolesByTenant(tenantId, includeSystemRoles = true, options) {
86
+ if (!tenantId) {
87
+ return [];
88
+ }
89
+ const query = this.roleRepository.createQueryBuilder('role')
90
+ .leftJoinAndSelect('role.rolePermissions', 'rolePermission');
91
+ query.where('role.tenantId = :tenantId', { tenantId });
92
+ if (includeSystemRoles) {
93
+ query.orWhere('role.tenantId IS NULL AND role.isSystem = :isSystem', { isSystem: true });
94
+ }
95
+ if (options) {
96
+ if (options.where) {
97
+ query.andWhere(options.where);
98
+ }
99
+ if (options.order) {
100
+ Object.entries(options.order).forEach(([key, value]) => {
101
+ query.addOrderBy(`role.${key}`, value);
102
+ });
103
+ }
104
+ if (options.skip) {
105
+ query.skip(options.skip);
106
+ }
107
+ if (options.take) {
108
+ query.take(options.take);
109
+ }
110
+ }
111
+ return query.getMany();
112
+ }
113
+ async updateRole(id, data) {
114
+ const role = await this.getRoleById(id);
115
+ if (!role) {
116
+ throw new common_1.NotFoundException({
117
+ message: `Role with ID ${id} not found`,
118
+ code: 'ROLE_NOT_FOUND'
119
+ });
120
+ }
121
+ if (role.isSystem) {
122
+ throw new common_1.ConflictException({
123
+ message: 'Cannot update system role',
124
+ code: 'SYSTEM_ROLE_UPDATE_ERROR',
125
+ });
126
+ }
127
+ delete data.isSystem;
128
+ delete data.tenantId;
129
+ if ((data.name && data.name !== role.name) || (data.guard && data.guard !== role.guard)) {
130
+ const systemRole = await this.getRoleByName(data.name || role.name, data.guard || role.guard);
131
+ if (systemRole) {
132
+ throw new common_1.ConflictException({
133
+ message: `Cannot use name '${data.name || role.name}' as it conflicts with a system role`,
134
+ code: 'SYSTEM_ROLE_CONFLICT'
135
+ });
136
+ }
137
+ const existingRole = await this.getRoleByName(data.name || role.name, data.guard || role.guard, role.tenantId);
138
+ if (existingRole && existingRole.id !== role.id) {
139
+ throw new common_1.ConflictException({
140
+ message: `Role with name '${data.name || role.name}' already exists in guard '${data.guard || role.guard}'${role.tenantId ? ` for tenant '${role.tenantId}'` : ''}`,
141
+ code: 'ROLE_ALREADY_EXISTS'
142
+ });
143
+ }
144
+ }
145
+ Object.assign(role, data);
146
+ return this.roleRepository.save(role);
147
+ }
148
+ async updateRolePermissions(id, permissionIds) {
149
+ const role = await this.getRoleById(id);
150
+ if (!role) {
151
+ throw new common_1.NotFoundException({
152
+ message: `Role with ID ${id} not found`,
153
+ code: 'ROLE_NOT_FOUND'
154
+ });
155
+ }
156
+ if (role.isSystem) {
157
+ throw new common_1.BadRequestException({
158
+ message: 'Cannot update system role',
159
+ code: 'SYSTEM_ROLE_UPDATE_ERROR',
160
+ });
161
+ }
162
+ await role.syncPermissions(permissionIds);
163
+ return this.roleRepository.save(role);
164
+ }
165
+ async deleteRole(id) {
166
+ const role = await this.getRoleById(id);
167
+ if (!role) {
168
+ throw new common_1.NotFoundException({
169
+ message: `Role with ID ${id} not found`,
170
+ code: 'ROLE_NOT_FOUND'
171
+ });
172
+ }
173
+ if (role.isSystem) {
174
+ throw new common_1.BadRequestException({
175
+ message: 'Cannot delete system role',
176
+ code: 'SYSTEM_ROLE_DELETE_ERROR',
177
+ });
178
+ }
179
+ await this.roleRepository.remove(role);
180
+ }
181
+ async deleteSystemRole(id) {
182
+ const role = await this.getRoleById(id);
183
+ if (role?.isSystem) {
184
+ await this.roleRepository.remove(role);
185
+ }
186
+ }
187
+ };
188
+ exports.RoleService = RoleService;
189
+ exports.RoleService = RoleService = tslib_1.__decorate([
190
+ (0, common_1.Injectable)(),
191
+ tslib_1.__param(0, (0, typeorm_1.InjectRepository)(role_entity_1.Role)),
192
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository])
193
+ ], RoleService);
194
+ //# sourceMappingURL=role.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/services/role.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { FindManyOptions, FindOneOptions, Repository } from 'typeorm';
2
+ import { Tenant } from '../entities/tenant.entity';
3
+ import { EventEmitter2 } from '@nestjs/event-emitter';
4
+ export declare class TenantService {
5
+ private tenantRepository;
6
+ private eventEmitter;
7
+ constructor(tenantRepository: Repository<Tenant>, eventEmitter: EventEmitter2);
8
+ createTenant(data: Partial<Tenant>): Promise<Tenant>;
9
+ getTenantById(id: string, options?: FindOneOptions<Tenant>): Promise<Tenant>;
10
+ getTenantByDomain(domain: string, options?: FindOneOptions<Tenant>): Promise<Tenant>;
11
+ getAllTenants(options?: FindManyOptions<Tenant>): Promise<Tenant[]>;
12
+ updateTenant(id: string, data: Partial<Tenant>): Promise<Tenant>;
13
+ deleteTenant(id: string): Promise<void>;
14
+ updateTenantStatus(id: string, isActive: boolean): Promise<Tenant>;
15
+ updateTenantMetadata(id: string, metadata: Record<string, any>): Promise<Tenant>;
16
+ }
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TenantService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const typeorm_1 = require("@nestjs/typeorm");
7
+ const typeorm_2 = require("typeorm");
8
+ const tenant_entity_1 = require("../entities/tenant.entity");
9
+ const event_emitter_1 = require("@nestjs/event-emitter");
10
+ const events_1 = require("../events");
11
+ const events_2 = require("../events");
12
+ let TenantService = class TenantService {
13
+ constructor(tenantRepository, eventEmitter) {
14
+ this.tenantRepository = tenantRepository;
15
+ this.eventEmitter = eventEmitter;
16
+ }
17
+ async createTenant(data) {
18
+ const { domain } = data;
19
+ const existingTenant = await this.tenantRepository.findOne({
20
+ where: { domain }
21
+ });
22
+ if (existingTenant) {
23
+ throw new common_1.ConflictException({
24
+ message: `Tenant with domain '${domain}' already exists`,
25
+ code: 'TENANT_ALREADY_EXISTS'
26
+ });
27
+ }
28
+ const tenant = this.tenantRepository.create(data);
29
+ await this.tenantRepository.save(tenant);
30
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.TENANT_CREATED, new events_1.TenantCreatedEvent({
31
+ tenant
32
+ }));
33
+ return tenant;
34
+ }
35
+ async getTenantById(id, options) {
36
+ if (!id) {
37
+ return null;
38
+ }
39
+ const tenant = await this.tenantRepository.findOne({
40
+ ...(options ? options : {}),
41
+ where: { id }
42
+ });
43
+ if (!tenant) {
44
+ return null;
45
+ }
46
+ return tenant;
47
+ }
48
+ async getTenantByDomain(domain, options) {
49
+ if (!domain) {
50
+ return null;
51
+ }
52
+ const tenant = await this.tenantRepository.findOne({
53
+ ...(options ? options : {}),
54
+ where: { domain }
55
+ });
56
+ return tenant;
57
+ }
58
+ async getAllTenants(options) {
59
+ return this.tenantRepository.find(options);
60
+ }
61
+ async updateTenant(id, data) {
62
+ const tenant = await this.getTenantById(id);
63
+ if (!tenant) {
64
+ throw new common_1.NotFoundException({
65
+ message: `Tenant with ID ${id} not found`,
66
+ code: 'TENANT_NOT_FOUND'
67
+ });
68
+ }
69
+ if (data.domain && data.domain !== tenant.domain) {
70
+ const existingTenant = await this.getTenantByDomain(data.domain);
71
+ if (existingTenant && existingTenant.id !== tenant.id) {
72
+ throw new common_1.ConflictException({
73
+ message: `Tenant with domain '${data.domain}' already exists`,
74
+ code: 'TENANT_ALREADY_EXISTS'
75
+ });
76
+ }
77
+ }
78
+ Object.assign(tenant, data);
79
+ const updatedTenant = await this.tenantRepository.save(tenant);
80
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.TENANT_UPDATED, new events_2.TenantUpdatedEvent({
81
+ tenant: updatedTenant,
82
+ updatedFields: Object.keys(data)
83
+ }));
84
+ return updatedTenant;
85
+ }
86
+ async deleteTenant(id) {
87
+ const tenant = await this.getTenantById(id);
88
+ if (!tenant) {
89
+ throw new common_1.NotFoundException({
90
+ message: `Tenant with ID ${id} not found`,
91
+ code: 'TENANT_NOT_FOUND'
92
+ });
93
+ }
94
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.TENANT_DELETED, new events_2.TenantDeletedEvent({
95
+ tenant
96
+ }));
97
+ await this.tenantRepository.remove(tenant);
98
+ }
99
+ async updateTenantStatus(id, isActive) {
100
+ const tenant = await this.getTenantById(id);
101
+ if (!tenant) {
102
+ throw new common_1.NotFoundException({
103
+ message: `Tenant with ID ${id} not found`,
104
+ code: 'TENANT_NOT_FOUND'
105
+ });
106
+ }
107
+ tenant.isActive = isActive;
108
+ const updatedTenant = await this.tenantRepository.save(tenant);
109
+ return updatedTenant;
110
+ }
111
+ async updateTenantMetadata(id, metadata) {
112
+ const tenant = await this.getTenantById(id);
113
+ if (!tenant) {
114
+ throw new common_1.NotFoundException({
115
+ message: `Tenant with ID ${id} not found`,
116
+ code: 'TENANT_NOT_FOUND'
117
+ });
118
+ }
119
+ tenant.metadata = {
120
+ ...tenant.metadata,
121
+ ...metadata
122
+ };
123
+ const updatedTenant = await this.tenantRepository.save(tenant);
124
+ return updatedTenant;
125
+ }
126
+ };
127
+ exports.TenantService = TenantService;
128
+ exports.TenantService = TenantService = tslib_1.__decorate([
129
+ (0, common_1.Injectable)(),
130
+ tslib_1.__param(0, (0, typeorm_1.InjectRepository)(tenant_entity_1.Tenant)),
131
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
132
+ event_emitter_1.EventEmitter2])
133
+ ], TenantService);
134
+ //# sourceMappingURL=tenant.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/services/tenant.service.ts"],"names":[],"mappings":";;;;AAAA,2CAAuG;AACvG,6CAAmD;AACnD,qCAAsE;AACtE,6DAAmD;AACnD,yDAAsD;AACtD,sCAA+D;AAC/D,sCAAmE;AAG5D,IAAM,aAAa,GAAnB,MAAM,aAAa;IACtB,YAEY,gBAAoC,EACpC,YAA2B;QAD3B,qBAAgB,GAAhB,gBAAgB,CAAoB;QACpC,iBAAY,GAAZ,YAAY,CAAe;IACnC,CAAC;IAEL,KAAK,CAAC,YAAY,CAAC,IAAqB;QACpC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAGxB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,MAAM,EAAE;SACpB,CAAC,CAAC;QAEH,IAAI,cAAc,EAAE,CAAC;YACjB,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,uBAAuB,MAAM,kBAAkB;gBACxD,IAAI,EAAE,uBAAuB;aAChC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAGzC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,cAAc,EAC7B,IAAI,2BAAkB,CAAC;YACnB,MAAM;SACT,CAAC,CACL,CAAC;QAEF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,OAAgC;QAC5D,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,EAAE,EAAE,EAAE;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,OAAgC;QACpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,EAAE,MAAM,EAAE;SACpB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,IAAqB;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,kBAAkB,EAAE,YAAY;gBACzC,IAAI,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACP,CAAC;QAGD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEjE,IAAI,cAAc,IAAI,cAAc,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;gBACpD,MAAM,IAAI,0BAAiB,CAAC;oBACxB,OAAO,EAAE,uBAAuB,IAAI,CAAC,MAAM,kBAAkB;oBAC7D,IAAI,EAAE,uBAAuB;iBAChC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAG/D,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,cAAc,EAC7B,IAAI,2BAAkB,CAAC;YACnB,MAAM,EAAE,aAAa;YACrB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACnC,CAAC,CACL,CAAC;QAEF,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,kBAAkB,EAAE,YAAY;gBACzC,IAAI,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACP,CAAC;QAGD,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,cAAc,EAC7B,IAAI,2BAAkB,CAAC;YACnB,MAAM;SACT,CAAC,CACL,CAAC;QAEF,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,QAAiB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,kBAAkB,EAAE,YAAY;gBACzC,IAAI,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACP,CAAC;QAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,QAA6B;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,kBAAkB,EAAE,YAAY;gBACzC,IAAI,EAAE,kBAAkB;aAC3B,CAAC,CAAC;QACP,CAAC;QAED,MAAM,CAAC,QAAQ,GAAG;YACd,GAAG,MAAM,CAAC,QAAQ;YAClB,GAAG,QAAQ;SACd,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO,aAAa,CAAC;IACzB,CAAC;CAEJ,CAAA;AAjKY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGJ,mBAAA,IAAA,0BAAgB,EAAC,sBAAM,CAAC,CAAA;6CACC,oBAAU;QACd,6BAAa;GAJ9B,aAAa,CAiKzB"}
@@ -0,0 +1,20 @@
1
+ import { FindManyOptions, FindOneOptions, Repository } from 'typeorm';
2
+ import { User } from '../entities/user.entity';
3
+ import { EventEmitter2 } from '@nestjs/event-emitter';
4
+ export declare class UserService {
5
+ private userRepository;
6
+ private eventEmitter;
7
+ constructor(userRepository: Repository<User>, eventEmitter: EventEmitter2);
8
+ createUser(data: Partial<User>): Promise<User>;
9
+ getUserById(id: string, options?: FindOneOptions<User>): Promise<User>;
10
+ getUserByEmail(email: string, tenantId?: string, options?: FindOneOptions<User>): Promise<User>;
11
+ getUserByPhone(phone: string, tenantId?: string, options?: FindOneOptions<User>): Promise<User>;
12
+ getAllUsers(options?: FindManyOptions<User>): Promise<User[]>;
13
+ getUsersByTenant(tenantId: string, options?: FindManyOptions<User>): Promise<User[]>;
14
+ updateUser(id: string, data: Partial<User>): Promise<User>;
15
+ deleteUser(id: string): Promise<void>;
16
+ verifyUser(id: string, verificationType?: 'email' | 'phone' | 'none'): Promise<User>;
17
+ unverifyUser(id: string, verificationType?: 'email' | 'phone' | 'none'): Promise<User>;
18
+ updateUserStatus(id: string, isActive: boolean): Promise<User>;
19
+ updateUserMetadata(id: string, metadata: Record<string, any>): Promise<User>;
20
+ }
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const typeorm_1 = require("@nestjs/typeorm");
7
+ const typeorm_2 = require("typeorm");
8
+ const user_entity_1 = require("../entities/user.entity");
9
+ const event_emitter_1 = require("@nestjs/event-emitter");
10
+ const events_1 = require("../events");
11
+ const events_2 = require("../events");
12
+ const user_created_event_1 = require("../events/user-created.event");
13
+ let UserService = class UserService {
14
+ constructor(userRepository, eventEmitter) {
15
+ this.userRepository = userRepository;
16
+ this.eventEmitter = eventEmitter;
17
+ }
18
+ async createUser(data) {
19
+ const { email, phone, tenantId } = data;
20
+ if (!tenantId) {
21
+ throw new common_1.BadRequestException('Tenant ID is required');
22
+ }
23
+ if (!email && !phone) {
24
+ throw new common_1.BadRequestException('Either email or phone must be provided');
25
+ }
26
+ const existingUser = await this.userRepository.findOne({
27
+ where: [
28
+ { email, tenantId: tenantId || (0, typeorm_2.IsNull)() },
29
+ { phone, tenantId: tenantId || (0, typeorm_2.IsNull)() }
30
+ ],
31
+ });
32
+ if (existingUser) {
33
+ throw new common_1.ConflictException({
34
+ message: `User with email '${email}' or phone '${phone}' already exists in tenant '${tenantId}'`,
35
+ code: 'USER_ALREADY_EXISTS'
36
+ });
37
+ }
38
+ const user = this.userRepository.create(data);
39
+ await this.userRepository.save(user);
40
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.USER_CREATED, new user_created_event_1.UserCreatedEvent({
41
+ user
42
+ }));
43
+ return user;
44
+ }
45
+ async getUserById(id, options) {
46
+ if (!id) {
47
+ return null;
48
+ }
49
+ const user = await this.userRepository.findOne({
50
+ ...(options ? options : {}),
51
+ where: { id }
52
+ });
53
+ if (!user) {
54
+ return null;
55
+ }
56
+ return user;
57
+ }
58
+ async getUserByEmail(email, tenantId, options) {
59
+ if (!email) {
60
+ return null;
61
+ }
62
+ return this.userRepository.findOne({
63
+ ...(options ? options : {}),
64
+ where: {
65
+ email,
66
+ tenantId: tenantId || (0, typeorm_2.IsNull)()
67
+ }
68
+ });
69
+ }
70
+ async getUserByPhone(phone, tenantId, options) {
71
+ if (!phone) {
72
+ return null;
73
+ }
74
+ return this.userRepository.findOne({
75
+ ...(options ? options : {}),
76
+ where: {
77
+ phone,
78
+ tenantId: tenantId || (0, typeorm_2.IsNull)()
79
+ }
80
+ });
81
+ }
82
+ async getAllUsers(options) {
83
+ return this.userRepository.find(options);
84
+ }
85
+ async getUsersByTenant(tenantId, options) {
86
+ if (!tenantId) {
87
+ return [];
88
+ }
89
+ return this.userRepository.find({
90
+ ...(options ? options : {}),
91
+ where: {
92
+ tenantId,
93
+ ...(options?.where ? options.where : {})
94
+ }
95
+ });
96
+ }
97
+ async updateUser(id, data) {
98
+ const user = await this.getUserById(id);
99
+ if (!user) {
100
+ throw new common_1.NotFoundException({
101
+ message: `User with ID ${id} not found`,
102
+ code: 'USER_NOT_FOUND'
103
+ });
104
+ }
105
+ if (data.email || data.phone) {
106
+ const existingUser = await this.userRepository.findOne({
107
+ where: [
108
+ { email: data.email || user.email, tenantId: user.tenantId },
109
+ { phone: data.phone || user.phone, tenantId: user.tenantId }
110
+ ]
111
+ });
112
+ if (existingUser && existingUser.id !== user.id) {
113
+ throw new common_1.ConflictException({
114
+ message: `User with email '${data.email || user.email}' or phone '${data.phone || user.phone}' already exists in tenant '${user.tenantId}'`,
115
+ code: 'USER_ALREADY_EXISTS'
116
+ });
117
+ }
118
+ }
119
+ delete data.tenantId;
120
+ Object.assign(user, data);
121
+ const updatedUser = await this.userRepository.save(user);
122
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.USER_UPDATED, new events_2.UserUpdatedEvent({
123
+ user: updatedUser,
124
+ tenantId: updatedUser.tenantId,
125
+ updatedFields: Object.keys(data)
126
+ }));
127
+ return updatedUser;
128
+ }
129
+ async deleteUser(id) {
130
+ const user = await this.getUserById(id);
131
+ if (!user) {
132
+ throw new common_1.NotFoundException({
133
+ message: `User with ID ${id} not found`,
134
+ code: 'USER_NOT_FOUND'
135
+ });
136
+ }
137
+ await this.eventEmitter.emitAsync(events_1.NestAuthEvents.USER_DELETED, new events_2.UserDeletedEvent({
138
+ user,
139
+ tenantId: user.tenantId
140
+ }));
141
+ await this.userRepository.remove(user);
142
+ }
143
+ async verifyUser(id, verificationType) {
144
+ const user = await this.getUserById(id);
145
+ if (!user) {
146
+ throw new common_1.NotFoundException({
147
+ message: `User with ID ${id} not found`,
148
+ code: 'USER_NOT_FOUND'
149
+ });
150
+ }
151
+ if (verificationType === 'email') {
152
+ user.emailVerifiedAt = new Date();
153
+ }
154
+ else if (verificationType === 'phone') {
155
+ user.phoneVerifiedAt = new Date();
156
+ }
157
+ user.isVerified = true;
158
+ return this.userRepository.save(user);
159
+ }
160
+ async unverifyUser(id, verificationType) {
161
+ const user = await this.getUserById(id);
162
+ if (!user) {
163
+ throw new common_1.NotFoundException({
164
+ message: `User with ID ${id} not found`,
165
+ code: 'USER_NOT_FOUND'
166
+ });
167
+ }
168
+ if (verificationType === 'email') {
169
+ user.emailVerifiedAt = null;
170
+ }
171
+ else if (verificationType === 'phone') {
172
+ user.phoneVerifiedAt = null;
173
+ }
174
+ user.isVerified = false;
175
+ user.isVerified = Boolean(user.emailVerifiedAt || user.phoneVerifiedAt);
176
+ return this.userRepository.save(user);
177
+ }
178
+ async updateUserStatus(id, isActive) {
179
+ const user = await this.getUserById(id);
180
+ if (!user) {
181
+ throw new common_1.NotFoundException({
182
+ message: `User with ID ${id} not found`,
183
+ code: 'USER_NOT_FOUND'
184
+ });
185
+ }
186
+ user.isActive = isActive;
187
+ return this.userRepository.save(user);
188
+ }
189
+ async updateUserMetadata(id, metadata) {
190
+ const user = await this.getUserById(id);
191
+ if (!user) {
192
+ throw new common_1.NotFoundException({
193
+ message: `User with ID ${id} not found`,
194
+ code: 'USER_NOT_FOUND'
195
+ });
196
+ }
197
+ user.metadata = {
198
+ ...user.metadata,
199
+ ...metadata
200
+ };
201
+ return this.userRepository.save(user);
202
+ }
203
+ };
204
+ exports.UserService = UserService;
205
+ exports.UserService = UserService = tslib_1.__decorate([
206
+ (0, common_1.Injectable)(),
207
+ tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
208
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
209
+ event_emitter_1.EventEmitter2])
210
+ ], UserService);
211
+ //# sourceMappingURL=user.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-auth/src/lib/services/user.service.ts"],"names":[],"mappings":";;;;AAAA,2CAAuG;AACvG,6CAAmD;AACnD,qCAA8E;AAC9E,yDAA+C;AAC/C,yDAAsD;AACtD,sCAA2C;AAC3C,sCAA+D;AAC/D,qEAAgE;AAGzD,IAAM,WAAW,GAAjB,MAAM,WAAW;IACpB,YAEY,cAAgC,EAChC,YAA2B;QAD3B,mBAAc,GAAd,cAAc,CAAkB;QAChC,iBAAY,GAAZ,YAAY,CAAe;IACnC,CAAC;IAEL,KAAK,CAAC,UAAU,CAAC,IAAmB;QAChC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,MAAM,IAAI,4BAAmB,CAAC,uBAAuB,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,4BAAmB,CAAC,wCAAwC,CAAC,CAAC;QAC5E,CAAC;QAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACnD,KAAK,EAAE;gBACH,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAA,gBAAM,GAAE,EAAE;gBACzC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAA,gBAAM,GAAE,EAAE;aAC5C;SACJ,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,oBAAoB,KAAK,eAAe,KAAK,+BAA+B,QAAQ,GAAG;gBAChG,IAAI,EAAE,qBAAqB;aAC9B,CAAC,CAAC;QACP,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGrC,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,YAAY,EAC3B,IAAI,qCAAgB,CAAC;YACjB,IAAI;SACP,CAAC,CACL,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,OAA8B;QACxD,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC3C,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE,EAAE,EAAE,EAAE;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAiB,EAAE,OAA8B;QACjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE;gBACH,KAAK;gBACL,QAAQ,EAAE,QAAQ,IAAI,IAAA,gBAAM,GAAE;aACjC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAiB,EAAE,OAA8B;QACjF,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE;gBACH,KAAK;gBACL,QAAQ,EAAE,QAAQ,IAAI,IAAA,gBAAM,GAAE;aACjC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA+B;QAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,OAA+B;QACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,KAAK,EAAE;gBACH,QAAQ;gBACR,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAmB;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAGD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBACnD,KAAK,EAAE;oBACH,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;oBAC5D,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;iBAC/D;aACJ,CAAC,CAAC;YAEH,IAAI,YAAY,IAAI,YAAY,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC9C,MAAM,IAAI,0BAAiB,CAAC;oBACxB,OAAO,EAAE,oBAAoB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,+BAA+B,IAAI,CAAC,QAAQ,GAAG;oBAC3I,IAAI,EAAE,qBAAqB;iBAC9B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAGD,OAAO,IAAI,CAAC,QAAQ,CAAC;QAErB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGzD,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,YAAY,EAC3B,IAAI,yBAAgB,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACnC,CAAC,CACL,CAAC;QAEF,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAGD,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAC7B,uBAAc,CAAC,YAAY,EAC3B,IAAI,yBAAgB,CAAC;YACjB,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC,CACL,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,gBAA6C;QACtE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;aAAM,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,gBAA6C;QACxE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;aAAM,IAAI,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU,EAAE,QAAiB;QAChD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,QAA6B;QAC9D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,0BAAiB,CAAC;gBACxB,OAAO,EAAE,gBAAgB,EAAE,YAAY;gBACvC,IAAI,EAAE,gBAAgB;aACzB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG;YACZ,GAAG,IAAI,CAAC,QAAQ;YAChB,GAAG,QAAQ;SACd,CAAC;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ,CAAA;AA5PY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;IAGJ,mBAAA,IAAA,0BAAgB,EAAC,kBAAI,CAAC,CAAA;6CACC,oBAAU;QACZ,6BAAa;GAJ9B,WAAW,CA4PvB"}