@ackplus/nest-auth 0.0.39 → 0.0.40

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 (178) hide show
  1. package/README.md +226 -0
  2. package/package.json +2 -2
  3. package/src/index.js +12 -0
  4. package/src/index.js.map +1 -0
  5. package/src/lib/auth/auth.module.js +52 -0
  6. package/src/lib/auth/auth.module.js.map +1 -0
  7. package/src/lib/auth/controllers/auth.controller.js +189 -0
  8. package/src/lib/auth/controllers/auth.controller.js.map +1 -0
  9. package/src/lib/auth/controllers/mfa.controller.js +130 -0
  10. package/src/lib/auth/controllers/mfa.controller.js.map +1 -0
  11. package/src/lib/auth/dto/index.js +1 -0
  12. package/src/lib/auth/dto/index.js.map +1 -0
  13. package/src/lib/auth/dto/requests/forgot-password.request.dto.js +30 -0
  14. package/src/lib/auth/dto/requests/forgot-password.request.dto.js.map +1 -0
  15. package/src/lib/auth/dto/requests/login.request.dto.js +34 -0
  16. package/src/lib/auth/dto/requests/login.request.dto.js.map +1 -0
  17. package/src/lib/auth/dto/requests/refresh-token.request.dto.js +15 -0
  18. package/src/lib/auth/dto/requests/refresh-token.request.dto.js.map +1 -0
  19. package/src/lib/auth/dto/requests/reset-password.request.dto.js +42 -0
  20. package/src/lib/auth/dto/requests/reset-password.request.dto.js.map +1 -0
  21. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.js +16 -0
  22. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.js.map +1 -0
  23. package/src/lib/auth/dto/requests/signup.request.dto.js +37 -0
  24. package/src/lib/auth/dto/requests/signup.request.dto.js.map +1 -0
  25. package/src/lib/auth/dto/requests/social-login.request.dto.js +16 -0
  26. package/src/lib/auth/dto/requests/social-login.request.dto.js.map +1 -0
  27. package/src/lib/auth/dto/requests/verify-2fa.request.dto.js +21 -0
  28. package/src/lib/auth/dto/requests/verify-2fa.request.dto.js.map +1 -0
  29. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.js +20 -0
  30. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.js.map +1 -0
  31. package/src/lib/auth/dto/responses/auth.response.dto.js +50 -0
  32. package/src/lib/auth/dto/responses/auth.response.dto.js.map +1 -0
  33. package/src/lib/auth/entities/mfa-secret.entity.js +50 -0
  34. package/src/lib/auth/entities/mfa-secret.entity.js.map +1 -0
  35. package/src/lib/auth/entities/otp.entity.js +50 -0
  36. package/src/lib/auth/entities/otp.entity.js.map +1 -0
  37. package/src/lib/auth/events/logged-out-all.event.js +10 -0
  38. package/src/lib/auth/events/logged-out-all.event.js.map +1 -0
  39. package/src/lib/auth/events/logged-out.event.js +10 -0
  40. package/src/lib/auth/events/logged-out.event.js.map +1 -0
  41. package/src/lib/auth/events/password-reset-requested.event.js +10 -0
  42. package/src/lib/auth/events/password-reset-requested.event.js.map +1 -0
  43. package/src/lib/auth/events/password-reset.event.js +10 -0
  44. package/src/lib/auth/events/password-reset.event.js.map +1 -0
  45. package/src/lib/auth/events/user-2fa-verified.event.js +10 -0
  46. package/src/lib/auth/events/user-2fa-verified.event.js.map +1 -0
  47. package/src/lib/auth/events/user-logged-in.event.js +10 -0
  48. package/src/lib/auth/events/user-logged-in.event.js.map +1 -0
  49. package/src/lib/auth/events/user-refresh-token.event.js +10 -0
  50. package/src/lib/auth/events/user-refresh-token.event.js.map +1 -0
  51. package/src/lib/auth/index.js +20 -0
  52. package/src/lib/auth/index.js.map +1 -0
  53. package/src/lib/auth/services/auth.service.js +396 -0
  54. package/src/lib/auth/services/auth.service.js.map +1 -0
  55. package/src/lib/auth/services/cookie.service.js +43 -0
  56. package/src/lib/auth/services/cookie.service.js.map +1 -0
  57. package/src/lib/auth/services/mfa.service.js +255 -0
  58. package/src/lib/auth/services/mfa.service.js.map +1 -0
  59. package/src/lib/auth.constants.js +43 -0
  60. package/src/lib/auth.constants.js.map +1 -0
  61. package/src/lib/core/core.module.js +67 -0
  62. package/src/lib/core/core.module.js.map +1 -0
  63. package/src/lib/core/decorators/role.decorator.js +14 -0
  64. package/src/lib/core/decorators/role.decorator.js.map +1 -0
  65. package/src/lib/core/decorators/skip-mfa.decorator.js +8 -0
  66. package/src/lib/core/decorators/skip-mfa.decorator.js.map +1 -0
  67. package/src/lib/core/dto/message.response.dto.js +13 -0
  68. package/src/lib/core/dto/message.response.dto.js.map +1 -0
  69. package/src/lib/core/entities.d.ts +1 -1
  70. package/src/lib/core/entities.js +34 -0
  71. package/src/lib/core/entities.js.map +1 -0
  72. package/src/lib/core/guards/auth.guard.js +135 -0
  73. package/src/lib/core/guards/auth.guard.js.map +1 -0
  74. package/src/lib/core/guards/role.guard.js +40 -0
  75. package/src/lib/core/guards/role.guard.js.map +1 -0
  76. package/src/lib/core/index.js +27 -0
  77. package/src/lib/core/index.js.map +1 -0
  78. package/src/lib/core/interfaces/auth-module-options.interface.js +3 -0
  79. package/src/lib/core/interfaces/auth-module-options.interface.js.map +1 -0
  80. package/src/lib/core/interfaces/mfa-options.interface.js +10 -0
  81. package/src/lib/core/interfaces/mfa-options.interface.js.map +1 -0
  82. package/src/lib/core/interfaces/otp.interface.js +10 -0
  83. package/src/lib/core/interfaces/otp.interface.js.map +1 -0
  84. package/src/lib/core/interfaces/session-options.interface.js +9 -0
  85. package/src/lib/core/interfaces/session-options.interface.js.map +1 -0
  86. package/src/lib/core/interfaces/token-payload.interface.js +3 -0
  87. package/src/lib/core/interfaces/token-payload.interface.js.map +1 -0
  88. package/src/lib/core/providers/apple-auth.provider.js +58 -0
  89. package/src/lib/core/providers/apple-auth.provider.js.map +1 -0
  90. package/src/lib/core/providers/base-auth.provider.js +41 -0
  91. package/src/lib/core/providers/base-auth.provider.js.map +1 -0
  92. package/src/lib/core/providers/email-auth.provider.js +42 -0
  93. package/src/lib/core/providers/email-auth.provider.js.map +1 -0
  94. package/src/lib/core/providers/facebook-auth.provider.js +58 -0
  95. package/src/lib/core/providers/facebook-auth.provider.js.map +1 -0
  96. package/src/lib/core/providers/google-auth.provider.js +60 -0
  97. package/src/lib/core/providers/google-auth.provider.js.map +1 -0
  98. package/src/lib/core/providers/jwt-auth.provider.js +51 -0
  99. package/src/lib/core/providers/jwt-auth.provider.js.map +1 -0
  100. package/src/lib/core/providers/phone-auth.provider.js +45 -0
  101. package/src/lib/core/providers/phone-auth.provider.js.map +1 -0
  102. package/src/lib/core/services/auth-provider-registry.service.js +72 -0
  103. package/src/lib/core/services/auth-provider-registry.service.js.map +1 -0
  104. package/src/lib/core/services/jwt.service.js +93 -0
  105. package/src/lib/core/services/jwt.service.js.map +1 -0
  106. package/src/lib/nest-auth.module.js +118 -0
  107. package/src/lib/nest-auth.module.js.map +1 -0
  108. package/src/lib/request-context/request-context.js +108 -0
  109. package/src/lib/request-context/request-context.js.map +1 -0
  110. package/src/lib/request-context/request-context.middleware.js +16 -0
  111. package/src/lib/request-context/request-context.middleware.js.map +1 -0
  112. package/src/lib/role/entities/permission.entity.js +42 -0
  113. package/src/lib/role/entities/permission.entity.js.map +1 -0
  114. package/src/lib/role/entities/role.entity.js +106 -0
  115. package/src/lib/role/entities/role.entity.js.map +1 -0
  116. package/src/lib/role/index.js +6 -0
  117. package/src/lib/role/index.js.map +1 -0
  118. package/src/lib/role/role.module.js +22 -0
  119. package/src/lib/role/role.module.js.map +1 -0
  120. package/src/lib/role/services/role.service.js +220 -0
  121. package/src/lib/role/services/role.service.js.map +1 -0
  122. package/src/lib/session/entities/session.entity.js +63 -0
  123. package/src/lib/session/entities/session.entity.js.map +1 -0
  124. package/src/lib/session/index.js +8 -0
  125. package/src/lib/session/index.js.map +1 -0
  126. package/src/lib/session/services/base-session.service.js +66 -0
  127. package/src/lib/session/services/base-session.service.js.map +1 -0
  128. package/src/lib/session/services/database-session.service.js +55 -0
  129. package/src/lib/session/services/database-session.service.js.map +1 -0
  130. package/src/lib/session/services/redis-session.service.js +120 -0
  131. package/src/lib/session/services/redis-session.service.js.map +1 -0
  132. package/src/lib/session/session.module.js +33 -0
  133. package/src/lib/session/session.module.js.map +1 -0
  134. package/src/lib/tenant/entities/tenant.entity.js +44 -0
  135. package/src/lib/tenant/entities/tenant.entity.js.map +1 -0
  136. package/src/lib/tenant/events/tenant-created.event.js +10 -0
  137. package/src/lib/tenant/events/tenant-created.event.js.map +1 -0
  138. package/src/lib/tenant/events/tenant-deleted.event.js +10 -0
  139. package/src/lib/tenant/events/tenant-deleted.event.js.map +1 -0
  140. package/src/lib/tenant/events/tenant-updated.event.js +10 -0
  141. package/src/lib/tenant/events/tenant-updated.event.js.map +1 -0
  142. package/src/lib/tenant/index.js +7 -0
  143. package/src/lib/tenant/index.js.map +1 -0
  144. package/src/lib/tenant/services/tenant.service.js +136 -0
  145. package/src/lib/tenant/services/tenant.service.js.map +1 -0
  146. package/src/lib/tenant/tenant.module.js +27 -0
  147. package/src/lib/tenant/tenant.module.js.map +1 -0
  148. package/src/lib/user/dto/requests/update-user.dto.js +24 -0
  149. package/src/lib/user/dto/requests/update-user.dto.js.map +1 -0
  150. package/src/lib/user/entities/access-key.entity.js +63 -0
  151. package/src/lib/user/entities/access-key.entity.js.map +1 -0
  152. package/src/lib/user/entities/auth-identity.entity.js +47 -0
  153. package/src/lib/user/entities/auth-identity.entity.js.map +1 -0
  154. package/src/lib/user/entities/user.entity.js +189 -0
  155. package/src/lib/user/entities/user.entity.js.map +1 -0
  156. package/src/lib/user/events/user-created.event.js +10 -0
  157. package/src/lib/user/events/user-created.event.js.map +1 -0
  158. package/src/lib/user/events/user-deleted.event.js +10 -0
  159. package/src/lib/user/events/user-deleted.event.js.map +1 -0
  160. package/src/lib/user/events/user-registered.event.js +10 -0
  161. package/src/lib/user/events/user-registered.event.js.map +1 -0
  162. package/src/lib/user/events/user-updated.event.js +10 -0
  163. package/src/lib/user/events/user-updated.event.js.map +1 -0
  164. package/src/lib/user/index.js +8 -0
  165. package/src/lib/user/index.js.map +1 -0
  166. package/src/lib/user/services/access-key.service.js +119 -0
  167. package/src/lib/user/services/access-key.service.js.map +1 -0
  168. package/src/lib/user/services/user.service.js +217 -0
  169. package/src/lib/user/services/user.service.js.map +1 -0
  170. package/src/lib/user/user.module.js +32 -0
  171. package/src/lib/user/user.module.js.map +1 -0
  172. package/src/lib/utils/database.utils.js +8 -0
  173. package/src/lib/utils/database.utils.js.map +1 -0
  174. package/src/lib/utils/otp.js +7 -0
  175. package/src/lib/utils/otp.js.map +1 -0
  176. package/tsconfig.tsbuildinfo +1 -0
  177. package/index.cjs.d.ts +0 -1
  178. package/index.cjs.js +0 -28350
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthService = 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("../../user/entities/user.entity");
9
+ const otp_entity_1 = require("../../auth/entities/otp.entity");
10
+ const otp_interface_1 = require("../../core/interfaces/otp.interface");
11
+ const auth_constants_1 = require("../../auth.constants");
12
+ const typeorm_3 = require("typeorm");
13
+ const mfa_service_1 = require("./mfa.service");
14
+ const jwt_service_1 = require("../../core/services/jwt.service");
15
+ const event_emitter_1 = require("@nestjs/event-emitter");
16
+ const base_session_service_1 = require("../../session/services/base-session.service");
17
+ const request_context_1 = require("../../request-context/request-context");
18
+ const otp_1 = require("../../utils/otp");
19
+ const user_registered_event_1 = require("../../user/events/user-registered.event");
20
+ const user_logged_in_event_1 = require("../events/user-logged-in.event");
21
+ const user_2fa_verified_event_1 = require("../events/user-2fa-verified.event");
22
+ const user_refresh_token_event_1 = require("../events/user-refresh-token.event");
23
+ const logged_out_event_1 = require("../events/logged-out.event");
24
+ const logged_out_all_event_1 = require("../events/logged-out-all.event");
25
+ const password_reset_requested_event_1 = require("../events/password-reset-requested.event");
26
+ const password_reset_event_1 = require("../events/password-reset.event");
27
+ let AuthService = class AuthService {
28
+ constructor(userRepository, otpRepository, authProviders, mfaService, sessionService, jwtService, eventEmitter) {
29
+ this.userRepository = userRepository;
30
+ this.otpRepository = otpRepository;
31
+ this.authProviders = authProviders;
32
+ this.mfaService = mfaService;
33
+ this.sessionService = sessionService;
34
+ this.jwtService = jwtService;
35
+ this.eventEmitter = eventEmitter;
36
+ }
37
+ getUserWithRolesAndPermissions(userId, relations = []) {
38
+ return this.userRepository.findOne({
39
+ where: { id: userId },
40
+ relations: [
41
+ 'roles',
42
+ 'roles.permissions',
43
+ ...relations
44
+ ],
45
+ });
46
+ }
47
+ async getUser() {
48
+ const user = request_context_1.RequestContext.currentUser();
49
+ if (!user) {
50
+ return null;
51
+ }
52
+ return this.getUserWithRolesAndPermissions(user.id);
53
+ }
54
+ async signup(input) {
55
+ const { email, phone, password, tenantId = null } = input;
56
+ if (!email && !phone) {
57
+ throw new common_1.BadRequestException('Either email or phone must be provided');
58
+ }
59
+ let provider = null;
60
+ let providerUserId = null;
61
+ if (email) {
62
+ provider = this.authProviders.find(p => p.providerId === auth_constants_1.EMAIL_AUTH_PROVIDER);
63
+ providerUserId = email;
64
+ }
65
+ else if (phone) {
66
+ provider = this.authProviders.find(p => p.providerId === auth_constants_1.PHONE_AUTH_PROVIDER);
67
+ providerUserId = phone;
68
+ }
69
+ if (!provider) {
70
+ throw new common_1.InternalServerErrorException('Phone or email authentication is not enabled');
71
+ }
72
+ const identity = await provider.findIdentity(providerUserId);
73
+ if (identity) {
74
+ if (email) {
75
+ throw new common_1.BadRequestException('Email already exists in this tenant');
76
+ }
77
+ if (phone) {
78
+ throw new common_1.BadRequestException('Phone number already exists in this tenant');
79
+ }
80
+ }
81
+ let user = this.userRepository.create({
82
+ email,
83
+ phone,
84
+ tenantId,
85
+ isVerified: false,
86
+ });
87
+ await user.setPassword(password);
88
+ await this.userRepository.save(user);
89
+ user = await this.getUserWithRolesAndPermissions(user.id);
90
+ await provider.linkToUser(user.id, providerUserId);
91
+ const session = await this.sessionService.createSessionFromUser(user);
92
+ const tokens = await this.generateTokensFromSession(session);
93
+ const isRequiresMfa = await this.mfaService.isRequiresMfa(user.id);
94
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.REGISTERED, new user_registered_event_1.UserRegisteredEvent({
95
+ user,
96
+ tenantId: user.tenantId,
97
+ input,
98
+ provider,
99
+ session,
100
+ tokens,
101
+ isRequiresMfa
102
+ }));
103
+ return {
104
+ accessToken: tokens.accessToken,
105
+ refreshToken: tokens.refreshToken,
106
+ isRequiresMfa: isRequiresMfa,
107
+ };
108
+ }
109
+ async login(input) {
110
+ const { credentials, providerId, tenantId = null, createUserIfNotExists = false } = input;
111
+ const provider = this.authProviders.find(p => p.providerId === providerId);
112
+ if (!provider) {
113
+ throw new common_1.UnauthorizedException('Invalid authentication providerId or provider is not enabled');
114
+ }
115
+ const requiredFields = provider.getRequiredFields();
116
+ if (!requiredFields.every(field => credentials[field])) {
117
+ throw new common_1.BadRequestException(`Missing ${requiredFields.join(', ')} required fields`);
118
+ }
119
+ const authProviderUser = await provider.validate(credentials);
120
+ const identity = await provider.findIdentity(authProviderUser.userId);
121
+ let user = identity?.user || null;
122
+ if (!user) {
123
+ if (!createUserIfNotExists) {
124
+ throw new common_1.UnauthorizedException('Invalid credentials');
125
+ }
126
+ user = await this.handleSocialLogin(provider, authProviderUser);
127
+ }
128
+ if (user.isActive === false) {
129
+ throw new common_1.UnauthorizedException({
130
+ message: 'Your account is suspended, please contact support',
131
+ code: auth_constants_1.USER_NOT_ACTIVE_ERROR,
132
+ });
133
+ }
134
+ user = await this.getUserWithRolesAndPermissions(user.id);
135
+ const session = await this.sessionService.createSessionFromUser(user);
136
+ const tokens = await this.generateTokensFromSession(session);
137
+ const isRequiresMfa = await this.mfaService.isRequiresMfa(user.id);
138
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.LOGGED_IN, new user_logged_in_event_1.UserLoggedInEvent({
139
+ user,
140
+ tenantId: user.tenantId,
141
+ input,
142
+ provider,
143
+ session,
144
+ tokens,
145
+ isRequiresMfa
146
+ }));
147
+ return {
148
+ accessToken: tokens.accessToken,
149
+ refreshToken: tokens.refreshToken,
150
+ isRequiresMfa: isRequiresMfa,
151
+ };
152
+ }
153
+ async verify2fa(input) {
154
+ const session = request_context_1.RequestContext.currentSession();
155
+ if (!session) {
156
+ throw new common_1.UnauthorizedException({
157
+ message: 'Session not found',
158
+ code: auth_constants_1.SESSION_NOT_FOUND_ERROR,
159
+ });
160
+ }
161
+ const isValid = await this.mfaService.verifyMfa(session.userId, input.otp, input.method);
162
+ if (!isValid) {
163
+ throw new common_1.UnauthorizedException({
164
+ message: 'Invalid MFA code',
165
+ code: auth_constants_1.INVALID_MFA_EXCEPTION_CODE,
166
+ });
167
+ }
168
+ const payload = await this.sessionService.updateSession(session.id, {
169
+ data: {
170
+ ...session.data,
171
+ isMfaVerified: true,
172
+ }
173
+ });
174
+ const tokens = await this.generateTokensFromSession(payload);
175
+ const user = await this.getUser();
176
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.TWO_FACTOR_VERIFIED, new user_2fa_verified_event_1.User2faVerifiedEvent({
177
+ user,
178
+ tenantId: user.tenantId,
179
+ input,
180
+ session,
181
+ tokens
182
+ }));
183
+ return {
184
+ accessToken: tokens.accessToken,
185
+ refreshToken: tokens.refreshToken,
186
+ };
187
+ }
188
+ async send2faCode(userId, method) {
189
+ const user = await this.userRepository.findOne({ where: { id: userId } });
190
+ if (!user) {
191
+ throw new common_1.UnauthorizedException('User not found');
192
+ }
193
+ await this.mfaService.sendMfaCode(user.id, method);
194
+ return true;
195
+ }
196
+ async handleSocialLogin(provider, providerUser) {
197
+ let identity = await provider.findIdentity(providerUser.userId);
198
+ if (identity) {
199
+ return identity.user;
200
+ }
201
+ const linkUserWith = provider.linkUserWith();
202
+ let user = await this.userRepository.findOne({ where: { [linkUserWith]: providerUser.userId } });
203
+ if (!user) {
204
+ user = this.userRepository.create({
205
+ [linkUserWith]: providerUser.userId,
206
+ isVerified: true,
207
+ metadata: providerUser.metadata || {},
208
+ });
209
+ await this.userRepository.save(user);
210
+ }
211
+ await provider.linkToUser(user.id, providerUser.userId, providerUser.metadata || {});
212
+ return user;
213
+ }
214
+ async refreshToken(refreshToken) {
215
+ if (!refreshToken) {
216
+ throw new common_1.UnauthorizedException({
217
+ message: 'No refresh token provided',
218
+ code: auth_constants_1.REFRESH_TOKEN_INVALID,
219
+ });
220
+ }
221
+ let payload;
222
+ try {
223
+ payload = await this.jwtService.verifyToken(refreshToken);
224
+ }
225
+ catch (error) {
226
+ throw new common_1.UnauthorizedException({
227
+ message: 'Invalid or expired refresh token',
228
+ code: auth_constants_1.REFRESH_TOKEN_EXPIRED,
229
+ });
230
+ }
231
+ const session = await this.sessionService.getSession(payload.sessionId);
232
+ if (!session) {
233
+ throw new common_1.UnauthorizedException({
234
+ message: 'Invalid refresh token',
235
+ code: auth_constants_1.REFRESH_TOKEN_INVALID,
236
+ });
237
+ }
238
+ const newSession = await this.sessionService.createSessionFromSession(session);
239
+ await this.sessionService.revokeSession(session.id);
240
+ const tokens = await this.generateTokensFromSession(newSession);
241
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.REFRESH_TOKEN, new user_refresh_token_event_1.UserRefreshTokenEvent({
242
+ oldRefreshToken: refreshToken,
243
+ session: newSession,
244
+ tokens,
245
+ }));
246
+ return tokens;
247
+ }
248
+ async forgotPassword(input) {
249
+ const { email, phone, tenantId = null } = input;
250
+ let provider = null;
251
+ if (phone) {
252
+ provider = this.authProviders.find(p => p.providerId === auth_constants_1.PHONE_AUTH_PROVIDER);
253
+ }
254
+ else if (email) {
255
+ provider = this.authProviders.find(p => p.providerId === auth_constants_1.EMAIL_AUTH_PROVIDER);
256
+ }
257
+ else {
258
+ throw new common_1.BadRequestException('Either email or phone must be provided');
259
+ }
260
+ if (!provider) {
261
+ throw new common_1.BadRequestException('Phone or email authentication is not enabled');
262
+ }
263
+ if (!provider.enabled) {
264
+ if (email) {
265
+ throw new common_1.BadRequestException('Email authentication is not enabled');
266
+ }
267
+ else if (phone) {
268
+ throw new common_1.BadRequestException('Phone authentication is not enabled');
269
+ }
270
+ }
271
+ const identity = await provider.findIdentity(email || phone);
272
+ if (!identity) {
273
+ return { message: 'If the account exists, a password reset code has been sent' };
274
+ }
275
+ const otp = (0, otp_1.generateOtp)();
276
+ const expiresAt = new Date();
277
+ expiresAt.setMinutes(expiresAt.getMinutes() + 15);
278
+ const otpEntity = await this.otpRepository.save({
279
+ userId: identity.user?.id,
280
+ code: otp,
281
+ expiresAt,
282
+ type: otp_interface_1.OTPTypeEnum.PASSWORD_RESET
283
+ });
284
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.PASSWORD_RESET_REQUESTED, new password_reset_requested_event_1.PasswordResetRequestedEvent({
285
+ user: identity.user,
286
+ tenantId: identity.user?.tenantId,
287
+ input,
288
+ otp: otpEntity,
289
+ provider,
290
+ }));
291
+ return true;
292
+ }
293
+ async resetPassword(input) {
294
+ const { email, phone, otp, newPassword, tenantId = null } = input;
295
+ if (!email && !phone) {
296
+ throw new common_1.BadRequestException('Either email or phone must be provided');
297
+ }
298
+ const user = await this.userRepository.findOne({
299
+ where: [
300
+ ...(email ? [{ email, tenantId }] : []),
301
+ ...(phone ? [{ phone, tenantId }] : [])
302
+ ]
303
+ });
304
+ if (!user) {
305
+ throw new common_1.BadRequestException('Invalid reset request');
306
+ }
307
+ const validOtp = await this.otpRepository.findOne({
308
+ where: {
309
+ userId: user.id,
310
+ code: otp,
311
+ type: otp_interface_1.OTPTypeEnum.PASSWORD_RESET,
312
+ expiresAt: (0, typeorm_3.MoreThan)(new Date()),
313
+ used: false
314
+ }
315
+ });
316
+ if (!validOtp) {
317
+ throw new common_1.BadRequestException('Invalid or expired OTP');
318
+ }
319
+ await user.setPassword(newPassword);
320
+ await this.userRepository.save(user);
321
+ validOtp.used = true;
322
+ await this.otpRepository.save(validOtp);
323
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.PASSWORD_RESET, new password_reset_event_1.PasswordResetEvent({
324
+ user,
325
+ tenantId: user.tenantId,
326
+ input,
327
+ }));
328
+ return true;
329
+ }
330
+ async logout(logoutType = 'user', reason) {
331
+ const session = request_context_1.RequestContext.currentSession();
332
+ const user = await this.getUser();
333
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.LOGGED_OUT, new logged_out_event_1.LoggedOutEvent({
334
+ user,
335
+ tenantId: user?.tenantId,
336
+ session,
337
+ logoutType,
338
+ reason,
339
+ }));
340
+ if (session) {
341
+ await this.sessionService.revokeSession(session.id);
342
+ }
343
+ return true;
344
+ }
345
+ async logoutAll(userId, logoutType = 'user', reason) {
346
+ const session = request_context_1.RequestContext.currentSession();
347
+ if (!session) {
348
+ throw new common_1.UnauthorizedException('Session not found');
349
+ }
350
+ const sessions = await this.sessionService.getUserSessions(userId);
351
+ await this.sessionService.revokeUserSessions(userId);
352
+ const user = await this.getUser();
353
+ await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.LOGGED_OUT_ALL, new logged_out_all_event_1.LoggedOutAllEvent({
354
+ user,
355
+ tenantId: user?.tenantId,
356
+ logoutType,
357
+ reason,
358
+ currentSessionId: session.id,
359
+ sessions,
360
+ }));
361
+ return true;
362
+ }
363
+ generateTokensPayload(session, otherPayload = {}) {
364
+ const payload = {
365
+ sub: session.userId,
366
+ sessionId: session.id,
367
+ email: session.data?.user?.email,
368
+ phone: session.data?.user?.phone,
369
+ isVerified: session.data?.user?.isVerified,
370
+ roles: session.data?.roles,
371
+ tenantId: session.data?.user?.tenantId,
372
+ isMfaEnabled: session.data?.user?.isMfaEnabled,
373
+ isMfaVerified: session.data?.isMfaVerified,
374
+ ...otherPayload,
375
+ };
376
+ return payload;
377
+ }
378
+ async generateTokensFromSession(session) {
379
+ const payload = this.generateTokensPayload(session);
380
+ const tokens = await this.jwtService.generateTokens(payload);
381
+ return tokens;
382
+ }
383
+ };
384
+ exports.AuthService = AuthService;
385
+ exports.AuthService = AuthService = tslib_1.__decorate([
386
+ (0, common_1.Injectable)(),
387
+ tslib_1.__param(0, (0, typeorm_1.InjectRepository)(user_entity_1.User)),
388
+ tslib_1.__param(1, (0, typeorm_1.InjectRepository)(otp_entity_1.OTP)),
389
+ tslib_1.__param(2, (0, common_1.Inject)(auth_constants_1.ENABLED_AUTH_PROVIDERS)),
390
+ tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
391
+ typeorm_2.Repository, Array, mfa_service_1.MfaService,
392
+ base_session_service_1.BaseSessionService,
393
+ jwt_service_1.JwtService,
394
+ event_emitter_1.EventEmitter2])
395
+ ], AuthService);
396
+ //# sourceMappingURL=auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/auth/services/auth.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CookieService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const auth_constants_1 = require("../../auth.constants");
7
+ const ms_1 = tslib_1.__importDefault(require("ms"));
8
+ let CookieService = class CookieService {
9
+ constructor(options) {
10
+ this.options = options;
11
+ }
12
+ setAccessTokenCookie(response, token) {
13
+ response.cookie(auth_constants_1.ACCESS_TOKEN_COOKIE_NAME, token, {
14
+ httpOnly: true,
15
+ secure: this.options.cookieOptions.secure,
16
+ sameSite: this.options.cookieOptions.sameSite,
17
+ maxAge: (0, ms_1.default)(this.options.session.sessionExpiry),
18
+ });
19
+ }
20
+ setRefreshTokenCookie(response, token) {
21
+ response.cookie(auth_constants_1.REFRESH_TOKEN_COOKIE_NAME, token, {
22
+ httpOnly: true,
23
+ secure: this.options.cookieOptions.secure,
24
+ sameSite: this.options.cookieOptions.sameSite,
25
+ maxAge: (0, ms_1.default)(this.options.session.refreshTokenExpiry),
26
+ });
27
+ }
28
+ clearCookies(response) {
29
+ response.clearCookie(auth_constants_1.ACCESS_TOKEN_COOKIE_NAME);
30
+ response.clearCookie(auth_constants_1.REFRESH_TOKEN_COOKIE_NAME);
31
+ }
32
+ setTokens(response, accessToken, refreshToken) {
33
+ this.setAccessTokenCookie(response, accessToken);
34
+ this.setRefreshTokenCookie(response, refreshToken);
35
+ }
36
+ };
37
+ exports.CookieService = CookieService;
38
+ exports.CookieService = CookieService = tslib_1.__decorate([
39
+ (0, common_1.Injectable)(),
40
+ tslib_1.__param(0, (0, common_1.Inject)(auth_constants_1.AUTH_MODULE_OPTIONS)),
41
+ tslib_1.__metadata("design:paramtypes", [Object])
42
+ ], CookieService);
43
+ //# sourceMappingURL=cookie.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.service.js","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/auth/services/cookie.service.ts"],"names":[],"mappings":";;;;AAAA,2CAAoD;AAEpD,yDAAgH;AAEhH,oDAAoB;AAGb,IAAM,aAAa,GAAnB,MAAM,aAAa;IACtB,YAEY,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAClC,CAAC;IAEL,oBAAoB,CAAC,QAAkB,EAAE,KAAa;QAClD,QAAQ,CAAC,MAAM,CAAC,yCAAwB,EAAE,KAAK,EAAE;YAC7C,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM;YACzC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ;YAC7C,MAAM,EAAE,IAAA,YAAE,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;SACjD,CAAC,CAAC;IACP,CAAC;IAED,qBAAqB,CAAC,QAAkB,EAAE,KAAa;QACnD,QAAQ,CAAC,MAAM,CAAC,0CAAyB,EAAE,KAAK,EAAE;YAC9C,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM;YACzC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ;YAC7C,MAAM,EAAE,IAAA,YAAE,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;SACtD,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,QAAkB;QAC3B,QAAQ,CAAC,WAAW,CAAC,yCAAwB,CAAC,CAAC;QAC/C,QAAQ,CAAC,WAAW,CAAC,0CAAyB,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,CAAC,QAAkB,EAAE,WAAmB,EAAE,YAAoB;QACnE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;CACJ,CAAA;AAjCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGJ,mBAAA,IAAA,eAAM,EAAC,oCAAmB,CAAC,CAAA;;GAFvB,aAAa,CAiCzB"}