@ackplus/nest-auth 1.1.18 → 1.1.20

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 (51) hide show
  1. package/package.json +1 -1
  2. package/src/lib/admin-console/static/index.html +697 -177
  3. package/src/lib/audit/services/audit.service.d.ts +15 -0
  4. package/src/lib/audit/services/audit.service.d.ts.map +1 -0
  5. package/src/lib/audit/services/audit.service.js +143 -0
  6. package/src/lib/auth/controllers/auth.controller.d.ts +1 -1
  7. package/src/lib/auth/controllers/mfa.controller.js +5 -5
  8. package/src/lib/auth/dto/responses/mfa-status.response.dto.d.ts +2 -2
  9. package/src/lib/auth/dto/responses/mfa-status.response.dto.d.ts.map +1 -1
  10. package/src/lib/auth/dto/responses/mfa-status.response.dto.js +5 -5
  11. package/src/lib/auth/events/index.d.ts +13 -0
  12. package/src/lib/auth/events/index.d.ts.map +1 -0
  13. package/src/lib/auth/events/index.js +15 -0
  14. package/src/lib/auth/events/user-2fa-disabled.event.d.ts +10 -0
  15. package/src/lib/auth/events/user-2fa-disabled.event.d.ts.map +1 -0
  16. package/src/lib/auth/events/user-2fa-disabled.event.js +12 -0
  17. package/src/lib/auth/events/user-2fa-enabled.event.d.ts +13 -0
  18. package/src/lib/auth/events/user-2fa-enabled.event.d.ts.map +1 -0
  19. package/src/lib/auth/events/user-2fa-enabled.event.js +15 -0
  20. package/src/lib/auth/events/user-password-changed.event.d.ts +12 -0
  21. package/src/lib/auth/events/user-password-changed.event.d.ts.map +1 -0
  22. package/src/lib/auth/events/user-password-changed.event.js +15 -0
  23. package/src/lib/auth/guards/auth.guard.d.ts +19 -1
  24. package/src/lib/auth/guards/auth.guard.d.ts.map +1 -1
  25. package/src/lib/auth/guards/auth.guard.js +113 -25
  26. package/src/lib/auth/services/auth.service.d.ts +10 -6
  27. package/src/lib/auth/services/auth.service.d.ts.map +1 -1
  28. package/src/lib/auth/services/auth.service.js +313 -133
  29. package/src/lib/auth/services/mfa.service.d.ts +1 -1
  30. package/src/lib/auth/services/mfa.service.d.ts.map +1 -1
  31. package/src/lib/auth/services/mfa.service.js +46 -10
  32. package/src/lib/auth.constants.d.ts +181 -8
  33. package/src/lib/auth.constants.d.ts.map +1 -1
  34. package/src/lib/auth.constants.js +142 -10
  35. package/src/lib/core/interfaces/auth-module-options.interface.d.ts +170 -0
  36. package/src/lib/core/interfaces/auth-module-options.interface.d.ts.map +1 -1
  37. package/src/lib/core/interfaces/session-options.interface.d.ts +52 -0
  38. package/src/lib/core/interfaces/session-options.interface.d.ts.map +1 -1
  39. package/src/lib/core/interfaces/token-payload.interface.d.ts +14 -6
  40. package/src/lib/core/interfaces/token-payload.interface.d.ts.map +1 -1
  41. package/src/lib/core/services/auth-config.service.js +1 -1
  42. package/src/lib/nest-auth.module.d.ts.map +1 -1
  43. package/src/lib/nest-auth.module.js +5 -2
  44. package/src/lib/session/services/session-manager.service.d.ts +6 -6
  45. package/src/lib/session/services/session-manager.service.d.ts.map +1 -1
  46. package/src/lib/session/services/session-manager.service.js +54 -21
  47. package/src/lib/user/entities/user.entity.d.ts.map +1 -1
  48. package/src/lib/user/entities/user.entity.js +19 -0
  49. package/src/lib/user/services/user.service.d.ts +8 -6
  50. package/src/lib/user/services/user.service.d.ts.map +1 -1
  51. package/src/lib/user/services/user.service.js +51 -46
@@ -13,71 +13,75 @@ const user_deleted_event_1 = require("../events/user-deleted.event");
13
13
  const user_created_event_1 = require("../events/user-created.event");
14
14
  const tenant_1 = require("../../tenant");
15
15
  const debug_logger_service_1 = require("../../core/services/debug-logger.service");
16
+ const auth_config_service_1 = require("../../core/services/auth-config.service");
16
17
  let UserService = class UserService {
17
- constructor(userRepository, eventEmitter, tenantService, debugLogger) {
18
+ constructor(userRepository, tenantService, eventEmitter, authConfigService, debugLogger) {
18
19
  this.userRepository = userRepository;
19
- this.eventEmitter = eventEmitter;
20
20
  this.tenantService = tenantService;
21
+ this.eventEmitter = eventEmitter;
22
+ this.authConfigService = authConfigService;
21
23
  this.debugLogger = debugLogger;
22
24
  }
23
- async createUser(data) {
25
+ async createUser(data, context) {
24
26
  this.debugLogger.logFunctionEntry('createUser', 'UserService', { email: data.email, phone: data.phone, hasPassword: !!data.password });
25
27
  try {
26
28
  const { email, phone } = data;
27
- const tenantId = await this.tenantService.resolveTenantId(data?.tenantId || null);
28
- this.debugLogger.logUserOperation('createUser', undefined, { email: !!email, phone: !!phone, resolvedTenantId: tenantId });
29
- if (!tenantId) {
30
- this.debugLogger.error('Tenant ID is required for user creation', 'UserService', { email: !!email, phone: !!phone });
31
- throw new common_1.BadRequestException('Tenant ID is required');
32
- }
33
- if (!email && !phone) {
34
- this.debugLogger.error('Neither email nor phone provided for user creation', 'UserService');
35
- throw new common_1.BadRequestException('Either email or phone must be provided');
29
+ let { tenantId = null } = data;
30
+ // Resolve tenant ID
31
+ tenantId = await this.tenantService.resolveTenantId(tenantId);
32
+ data.tenantId = tenantId;
33
+ // Check if user already exists
34
+ if (email) {
35
+ const existingUser = await this.getUserByEmail(email, tenantId);
36
+ if (existingUser) {
37
+ this.debugLogger.warn('User with email already exists', 'UserService', { email, tenantId });
38
+ throw new common_1.ConflictException({
39
+ message: 'User with this email already exists',
40
+ code: 'USER_ALREADY_EXISTS'
41
+ });
42
+ }
36
43
  }
37
- // Check for existing user with same email or phone in the same tenant
38
- this.debugLogger.debug('Checking for existing user', 'UserService', { email: !!email, phone: !!phone, tenantId });
39
- let existingUser = null;
40
- // Normalize email to lowercase for case-insensitive matching
41
- const normalizedEmail = email ? email.toLowerCase().trim() : email;
42
44
  if (phone) {
43
- existingUser = await this.userRepository.findOne({
44
- where: { phone, tenantId }
45
- });
45
+ const existingUser = await this.getUserByPhone(phone, tenantId);
46
+ if (existingUser) {
47
+ this.debugLogger.warn('User with phone already exists', 'UserService', { phone, tenantId });
48
+ throw new common_1.ConflictException({
49
+ message: 'User with this phone number already exists',
50
+ code: 'USER_ALREADY_EXISTS'
51
+ });
52
+ }
46
53
  }
47
- if (!existingUser && normalizedEmail) {
48
- existingUser = await this.userRepository.findOne({
49
- where: { email: normalizedEmail, tenantId }
50
- });
54
+ // Apply user.beforeCreate hook if configured
55
+ const config = this.authConfigService.getConfig();
56
+ if (config.user?.beforeCreate) {
57
+ this.debugLogger.debug('Applying user.beforeCreate hook', 'UserService');
58
+ data = await config.user.beforeCreate(data, context);
51
59
  }
52
- if (existingUser) {
53
- this.debugLogger.warn('User already exists', 'UserService', { email: !!email, phone: !!phone, tenantId, existingUserId: existingUser.id });
54
- throw new common_1.ConflictException({
55
- message: `User with ${email ? `email ${email}` : ''}${email && phone ? ' or ' : ''}${phone ? `phone ${phone}` : ''} already exists.`,
56
- code: 'USER_ALREADY_EXISTS'
57
- });
60
+ this.debugLogger.debug('Creating new user entity', 'UserService');
61
+ const user = this.userRepository.create(data);
62
+ // Handle password if provided in data (even though it's not a column)
63
+ if (data.password) {
64
+ await user.setPassword(data.password);
58
65
  }
59
- this.debugLogger.debug('Creating new user', 'UserService', { email: !!email, phone: !!phone, tenantId });
60
- const user = this.userRepository.create({
61
- ...data,
62
- email: normalizedEmail || data.email,
63
- tenantId
64
- });
65
66
  await this.userRepository.save(user);
66
- this.debugLogger.info('User created successfully', 'UserService', { userId: user.id, tenantId });
67
- // Create authentication identity for login
68
- if (normalizedEmail) {
69
- this.debugLogger.debug('Creating email identity', 'UserService', { userId: user.id });
67
+ this.debugLogger.info('User created successfully', 'UserService', { userId: user.id });
68
+ // Create identities
69
+ const normalizedEmail = email?.toLowerCase().trim();
70
+ if (normalizedEmail)
70
71
  await user.findOrCreateIdentity(auth_constants_1.EMAIL_AUTH_PROVIDER, normalizedEmail);
71
- }
72
- if (phone) {
73
- this.debugLogger.debug('Creating phone identity', 'UserService', { userId: user.id });
72
+ if (phone)
74
73
  await user.findOrCreateIdentity(auth_constants_1.PHONE_AUTH_PROVIDER, phone);
75
- }
76
74
  // Emit user created event
77
75
  this.debugLogger.debug('Emitting user created event', 'UserService', { userId: user.id });
78
76
  await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.USER_CREATED, new user_created_event_1.UserCreatedEvent({
79
- user
77
+ user,
78
+ tenantId: user.tenantId
80
79
  }));
80
+ // Apply user.afterCreate hook if configured
81
+ if (config.user?.afterCreate) {
82
+ this.debugLogger.debug('Applying user.afterCreate hook', 'UserService', { userId: user.id });
83
+ await config.user.afterCreate(user);
84
+ }
81
85
  this.debugLogger.logFunctionExit('createUser', 'UserService', { userId: user.id });
82
86
  return user;
83
87
  }
@@ -338,7 +342,8 @@ exports.UserService = UserService = tslib_1.__decorate([
338
342
  (0, common_1.Injectable)(),
339
343
  tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.NestAuthUser)),
340
344
  tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
341
- event_emitter_1.EventEmitter2,
342
345
  tenant_1.TenantService,
346
+ event_emitter_1.EventEmitter2,
347
+ auth_config_service_1.AuthConfigService,
343
348
  debug_logger_service_1.DebugLoggerService])
344
349
  ], UserService);