@vynelix/nestjs-multi-auth 0.3.1 → 1.0.0

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 (196) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +309 -18
  3. package/dist/auth/auth.controller.d.ts +3 -2
  4. package/dist/auth/auth.controller.js +32 -5
  5. package/dist/auth/auth.controller.js.map +1 -1
  6. package/dist/auth/auth.module.js +116 -68
  7. package/dist/auth/auth.module.js.map +1 -1
  8. package/dist/auth/auth.service.d.ts +53 -26
  9. package/dist/auth/auth.service.js +239 -328
  10. package/dist/auth/auth.service.js.map +1 -1
  11. package/dist/auth/core/auth-mapper.d.ts +1 -1
  12. package/dist/auth/core/database-otp.provider.d.ts +12 -0
  13. package/dist/auth/core/database-otp.provider.js +122 -0
  14. package/dist/auth/core/database-otp.provider.js.map +1 -0
  15. package/dist/auth/dto/requests/magic-link.dto.d.ts +1 -0
  16. package/dist/auth/dto/requests/magic-link.dto.js +6 -0
  17. package/dist/auth/dto/requests/magic-link.dto.js.map +1 -1
  18. package/dist/auth/dto/requests/mfa.dto.d.ts +5 -1
  19. package/dist/auth/dto/requests/mfa.dto.js +29 -8
  20. package/dist/auth/dto/requests/mfa.dto.js.map +1 -1
  21. package/dist/auth/enums/identifier-type.enum.d.ts +11 -0
  22. package/dist/auth/enums/identifier-type.enum.js +17 -0
  23. package/dist/auth/enums/identifier-type.enum.js.map +1 -0
  24. package/dist/auth/enums/mfa-type.enum.d.ts +5 -0
  25. package/dist/auth/enums/mfa-type.enum.js +10 -0
  26. package/dist/auth/enums/mfa-type.enum.js.map +1 -0
  27. package/dist/auth/enums/otp-purpose.enum.d.ts +8 -0
  28. package/dist/auth/enums/otp-purpose.enum.js +13 -0
  29. package/dist/auth/enums/otp-purpose.enum.js.map +1 -0
  30. package/dist/auth/enums/session-event.enum.d.ts +7 -0
  31. package/dist/auth/enums/session-event.enum.js +12 -0
  32. package/dist/auth/enums/session-event.enum.js.map +1 -0
  33. package/dist/auth/interfaces/auth-module-options.interface.d.ts +36 -1
  34. package/dist/auth/interfaces/auth-notification-provider.interface.d.ts +7 -1
  35. package/dist/auth/interfaces/auth-otp-provider.interface.d.ts +60 -0
  36. package/dist/auth/interfaces/auth-otp-provider.interface.js +7 -0
  37. package/dist/auth/interfaces/auth-otp-provider.interface.js.map +1 -0
  38. package/dist/auth/interfaces/models.interface.d.ts +91 -0
  39. package/dist/auth/interfaces/models.interface.js +3 -0
  40. package/dist/auth/interfaces/models.interface.js.map +1 -0
  41. package/dist/auth/interfaces/oauth-strategy.interface.d.ts +2 -2
  42. package/dist/auth/interfaces/repositories.interface.d.ts +70 -0
  43. package/dist/auth/interfaces/repositories.interface.js +3 -0
  44. package/dist/auth/interfaces/repositories.interface.js.map +1 -0
  45. package/dist/auth/interfaces/repository-tokens.d.ts +7 -0
  46. package/dist/auth/interfaces/repository-tokens.js +11 -0
  47. package/dist/auth/interfaces/repository-tokens.js.map +1 -0
  48. package/dist/auth/interfaces/signup-event-body.interface.d.ts +1 -1
  49. package/dist/auth/strategies/local-auth.strategy.d.ts +3 -5
  50. package/dist/auth/strategies/local-auth.strategy.js +64 -99
  51. package/dist/auth/strategies/local-auth.strategy.js.map +1 -1
  52. package/dist/auth/strategies/oauth/apple.strategy.d.ts +4 -6
  53. package/dist/auth/strategies/oauth/apple.strategy.js +57 -70
  54. package/dist/auth/strategies/oauth/apple.strategy.js.map +1 -1
  55. package/dist/auth/strategies/oauth/facebook.strategy.d.ts +4 -6
  56. package/dist/auth/strategies/oauth/facebook.strategy.js +58 -71
  57. package/dist/auth/strategies/oauth/facebook.strategy.js.map +1 -1
  58. package/dist/auth/strategies/oauth/google.strategy.d.ts +4 -6
  59. package/dist/auth/strategies/oauth/google.strategy.js +84 -155
  60. package/dist/auth/strategies/oauth/google.strategy.js.map +1 -1
  61. package/dist/auth/strategies/oauth/oauth.strategy.d.ts +2 -2
  62. package/dist/database/prisma/prisma-auth.adapter.d.ts +11 -0
  63. package/dist/database/prisma/prisma-auth.adapter.js +64 -0
  64. package/dist/database/prisma/prisma-auth.adapter.js.map +1 -0
  65. package/dist/database/prisma/repositories/auth-identifier.repository.d.ts +16 -0
  66. package/dist/database/prisma/repositories/auth-identifier.repository.js +41 -0
  67. package/dist/database/prisma/repositories/auth-identifier.repository.js.map +1 -0
  68. package/dist/database/prisma/repositories/auth.repository.d.ts +19 -0
  69. package/dist/database/prisma/repositories/auth.repository.js +49 -0
  70. package/dist/database/prisma/repositories/auth.repository.js.map +1 -0
  71. package/dist/database/prisma/repositories/index.d.ts +7 -0
  72. package/dist/database/prisma/repositories/index.js +24 -0
  73. package/dist/database/prisma/repositories/index.js.map +1 -0
  74. package/dist/database/prisma/repositories/mfa-method.repository.d.ts +11 -0
  75. package/dist/database/prisma/repositories/mfa-method.repository.js +33 -0
  76. package/dist/database/prisma/repositories/mfa-method.repository.js.map +1 -0
  77. package/dist/database/prisma/repositories/oauth-provider.repository.d.ts +14 -0
  78. package/dist/database/prisma/repositories/oauth-provider.repository.js +39 -0
  79. package/dist/database/prisma/repositories/oauth-provider.repository.js.map +1 -0
  80. package/dist/database/prisma/repositories/otp-token.repository.d.ts +13 -0
  81. package/dist/database/prisma/repositories/otp-token.repository.js +52 -0
  82. package/dist/database/prisma/repositories/otp-token.repository.js.map +1 -0
  83. package/dist/database/prisma/repositories/session-log.repository.d.ts +12 -0
  84. package/dist/database/prisma/repositories/session-log.repository.js +42 -0
  85. package/dist/database/prisma/repositories/session-log.repository.js.map +1 -0
  86. package/dist/database/prisma/repositories/session.repository.d.ts +16 -0
  87. package/dist/database/prisma/repositories/session.repository.js +41 -0
  88. package/dist/database/prisma/repositories/session.repository.js.map +1 -0
  89. package/dist/database/typeorm/entities/auth-identify.entity.d.ts +23 -0
  90. package/dist/database/typeorm/entities/auth-identify.entity.js +61 -0
  91. package/dist/database/typeorm/entities/auth-identify.entity.js.map +1 -0
  92. package/dist/database/typeorm/entities/auth.entity.d.ts +45 -0
  93. package/dist/database/typeorm/entities/auth.entity.js +129 -0
  94. package/dist/database/typeorm/entities/auth.entity.js.map +1 -0
  95. package/dist/database/typeorm/entities/base.entity.d.ts +7 -0
  96. package/dist/database/typeorm/entities/base.entity.js +44 -0
  97. package/dist/database/typeorm/entities/base.entity.js.map +1 -0
  98. package/dist/database/typeorm/entities/entities.d.ts +7 -0
  99. package/dist/database/typeorm/entities/entities.js +18 -0
  100. package/dist/database/typeorm/entities/entities.js.map +1 -0
  101. package/dist/database/typeorm/entities/mfa-method.entity.d.ts +10 -0
  102. package/dist/database/typeorm/entities/mfa-method.entity.js +47 -0
  103. package/dist/database/typeorm/entities/mfa-method.entity.js.map +1 -0
  104. package/dist/database/typeorm/entities/oauth-provider.entity.d.ts +38 -0
  105. package/dist/database/typeorm/entities/oauth-provider.entity.js +88 -0
  106. package/dist/database/typeorm/entities/oauth-provider.entity.js.map +1 -0
  107. package/dist/database/typeorm/entities/otp-token.entity.d.ts +15 -0
  108. package/dist/database/typeorm/entities/otp-token.entity.js +53 -0
  109. package/dist/database/typeorm/entities/otp-token.entity.js.map +1 -0
  110. package/dist/database/typeorm/entities/session.entity.d.ts +21 -0
  111. package/dist/database/typeorm/entities/session.entity.js +71 -0
  112. package/dist/database/typeorm/entities/session.entity.js.map +1 -0
  113. package/dist/database/typeorm/entities/session_log.entity.d.ts +25 -0
  114. package/dist/database/typeorm/entities/session_log.entity.js +78 -0
  115. package/dist/database/typeorm/entities/session_log.entity.js.map +1 -0
  116. package/dist/database/typeorm/migrations/auth-entities.d.ts +7 -0
  117. package/dist/database/typeorm/migrations/auth-entities.js +18 -0
  118. package/dist/database/typeorm/migrations/auth-entities.js.map +1 -0
  119. package/dist/database/typeorm/migrations/auth-schema.initializer.d.ts +9 -0
  120. package/dist/database/typeorm/migrations/auth-schema.initializer.js +36 -0
  121. package/dist/database/typeorm/migrations/auth-schema.initializer.js.map +1 -0
  122. package/dist/database/typeorm/migrations/auth.migration.v1.d.ts +12 -0
  123. package/dist/database/typeorm/migrations/auth.migration.v1.js +157 -0
  124. package/dist/database/typeorm/migrations/auth.migration.v1.js.map +1 -0
  125. package/dist/database/typeorm/migrations/auth.migration.v2.d.ts +8 -0
  126. package/dist/database/typeorm/migrations/auth.migration.v2.js +23 -0
  127. package/dist/database/typeorm/migrations/auth.migration.v2.js.map +1 -0
  128. package/dist/database/typeorm/migrations/auth.migrations.d.ts +2 -0
  129. package/dist/database/typeorm/migrations/auth.migrations.js +10 -0
  130. package/dist/database/typeorm/migrations/auth.migrations.js.map +1 -0
  131. package/dist/database/typeorm/migrations/migration.service.d.ts +9 -0
  132. package/dist/database/typeorm/migrations/migration.service.js +75 -0
  133. package/dist/database/typeorm/migrations/migration.service.js.map +1 -0
  134. package/dist/database/typeorm/repositories/auth-identifier.repository.d.ts +18 -0
  135. package/dist/database/typeorm/repositories/auth-identifier.repository.js +64 -0
  136. package/dist/database/typeorm/repositories/auth-identifier.repository.js.map +1 -0
  137. package/dist/database/typeorm/repositories/auth.repository.d.ts +21 -0
  138. package/dist/database/typeorm/repositories/auth.repository.js +71 -0
  139. package/dist/database/typeorm/repositories/auth.repository.js.map +1 -0
  140. package/dist/database/typeorm/repositories/index.d.ts +7 -0
  141. package/dist/database/typeorm/repositories/index.js +24 -0
  142. package/dist/database/typeorm/repositories/index.js.map +1 -0
  143. package/dist/database/typeorm/repositories/mfa-method.repository.d.ts +13 -0
  144. package/dist/database/typeorm/repositories/mfa-method.repository.js +46 -0
  145. package/dist/database/typeorm/repositories/mfa-method.repository.js.map +1 -0
  146. package/dist/database/typeorm/repositories/oauth-provider.repository.d.ts +16 -0
  147. package/dist/database/typeorm/repositories/oauth-provider.repository.js +52 -0
  148. package/dist/database/typeorm/repositories/oauth-provider.repository.js.map +1 -0
  149. package/dist/database/typeorm/repositories/otp-token.repository.d.ts +13 -0
  150. package/dist/database/typeorm/repositories/otp-token.repository.js +52 -0
  151. package/dist/database/typeorm/repositories/otp-token.repository.js.map +1 -0
  152. package/dist/database/typeorm/repositories/session-log.repository.d.ts +12 -0
  153. package/dist/database/typeorm/repositories/session-log.repository.js +47 -0
  154. package/dist/database/typeorm/repositories/session-log.repository.js.map +1 -0
  155. package/dist/database/typeorm/repositories/session.repository.d.ts +18 -0
  156. package/dist/database/typeorm/repositories/session.repository.js +84 -0
  157. package/dist/database/typeorm/repositories/session.repository.js.map +1 -0
  158. package/dist/database/typeorm/typeorm-auth.adapter.d.ts +2 -0
  159. package/dist/database/typeorm/typeorm-auth.adapter.js +50 -0
  160. package/dist/database/typeorm/typeorm-auth.adapter.js.map +1 -0
  161. package/dist/index.d.ts +11 -9
  162. package/dist/index.js +18 -10
  163. package/dist/index.js.map +1 -1
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/fix-imports.js +46 -0
  166. package/fix-syntax.js +66 -0
  167. package/package.json +22 -20
  168. package/patch-local-specs.js +52 -0
  169. package/patch-oauth-specs.js +41 -0
  170. package/patch-specs.js +36 -0
  171. package/prompts/database_adapter.md +157 -0
  172. package/prompts/otp_provider.md +292 -0
  173. package/scratch/create-prisma-repos-final.js +139 -0
  174. package/scratch/create-prisma-repos.js +280 -0
  175. package/scratch/fix-events-spec.js +12 -0
  176. package/scratch/fix-imports.js +53 -0
  177. package/scratch/fix-prisma-interfaces.js +41 -0
  178. package/scratch/fix-prisma-interfaces2.js +36 -0
  179. package/scratch/fix-prisma-interfaces3.js +26 -0
  180. package/scratch/fix-prisma.js +28 -0
  181. package/scratch/fix-test-imports.js +51 -0
  182. package/scratch/fix-tests-advanced.js +68 -0
  183. package/scratch/fix-tests-advanced2.js +23 -0
  184. package/scratch/fix-tests-concrete.js +40 -0
  185. package/scratch/fix-tests-final.js +35 -0
  186. package/scratch/fix-tests-final2.js +28 -0
  187. package/scratch/fix-tests-final3.js +26 -0
  188. package/scratch/fix-tests-methods.js +40 -0
  189. package/scratch/fix-tests-proxy.js +67 -0
  190. package/scratch/fix-tests-types.js +24 -0
  191. package/scratch/rewrite-tests.js +110 -0
  192. package/tsc_errors.txt +60 -0
  193. package/tsc_errors2.txt +93 -0
  194. package/tmp-cv-test/package-lock.json +0 -250
  195. package/tmp-cv-test/package.json +0 -17
  196. package/tmp-cv-test/test.ts +0 -11
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # v1.0.0
2
+ ## Features & Testing Enhancements
3
+ 1. **Granular OTP Providers Map**: Introduced `otpProviders` in `AuthModuleOptions` to allow specifying different OTP backend implementations per identifier type (e.g., Twilio Verify for phone and `DatabaseOtpProvider` for email), eliminating the need for custom routing classes.
4
+ 2. **MFA Complete Flow**: Added `POST /auth/mfa/verify` endpoint to allow users to submit TOTP codes and receive session tokens after an `mfaRequired` login response.
5
+ 3. **Test Accounts**: Added granular `testAccounts` configuration for OTPs to facilitate secure, targeted app store reviews and automated E2E testing without triggering notifications.
6
+ 4. **Debug Mode OTP**: Enhanced `debugMode` in `AuthModuleOptions` to support a static `defaultOtp` for bypassing delivery logic during local development.
7
+
8
+ ## Breaking Changes
9
+ 1. **Database Adapters**: Added support for TypeORM, Prisma, and Custom Adapters.
10
+
11
+ # v0.3.2
12
+ ## Patch Session Logs Method Signature
13
+ Made namespace optional
14
+
1
15
  # v0.3.1
2
16
  ## Fixed Build Issue
3
17
  Added the missing `SessionLog` entity for successful build
package/README.md CHANGED
@@ -71,7 +71,12 @@ npm install nestjs-multi-auth
71
71
  Ensure you have the required peer dependencies installed in your NestJS project:
72
72
 
73
73
  ```bash
74
- npm install @nestjs/passport @nestjs/jwt passport passport-jwt class-validator bcrypt typeorm
74
+ npm install @nestjs/passport @nestjs/jwt passport passport-jwt class-validator bcrypt
75
+ ```
76
+
77
+ If you are using the default **TypeORM** adapter, also install:
78
+ ```bash
79
+ npm install typeorm @nestjs/typeorm
75
80
  ```
76
81
 
77
82
  #### Optional Dependencies
@@ -82,11 +87,13 @@ npm install @nestjs/event-emitter
82
87
 
83
88
  ```typescript
84
89
  import { Module } from '@nestjs/common';
85
- import { AuthModule, AuthStrategy } from 'nestjs-multi-auth';
90
+ import { AuthModule, AuthStrategy, TypeOrmAuthAdapter } from 'nestjs-multi-auth';
86
91
 
87
92
  @Module({
88
93
  imports: [
94
+ // Register the AuthModule with your chosen adapter
89
95
  AuthModule.register({
96
+ adapter: TypeOrmAuthAdapter,
90
97
  jwtSecret: process.env.JWT_SECRET,
91
98
  jwtRefreshSecret: process.env.JWT_REFRESH_SECRET,
92
99
  }),
@@ -114,7 +121,7 @@ Use `AuthModule.forRootAsync()` when your configuration depends on other provide
114
121
  ```typescript
115
122
  import { Module } from '@nestjs/common';
116
123
  import { ConfigModule, ConfigService } from '@nestjs/config';
117
- import { AuthModule } from 'nestjs-multi-auth';
124
+ import { AuthModule, TypeOrmAuthAdapter } from 'nestjs-multi-auth';
118
125
 
119
126
  @Module({
120
127
  imports: [
@@ -123,6 +130,7 @@ import { AuthModule } from 'nestjs-multi-auth';
123
130
  imports: [ConfigModule],
124
131
  inject: [ConfigService],
125
132
  useFactory: async (config: ConfigService) => ({
133
+ adapter: TypeOrmAuthAdapter,
126
134
  jwtSecret: config.get('JWT_SECRET'),
127
135
  jwtRefreshSecret: config.get('JWT_REFRESH_SECRET'),
128
136
  appName: config.get('APP_NAME'),
@@ -181,8 +189,6 @@ import type { AuthCredential } from 'nestjs-multi-auth';
181
189
  // AuthCredential = { uid: string; sessionId: string }
182
190
  ```
183
191
 
184
- ---
185
-
186
192
  ## Identity Verification (OTPs) & MFA
187
193
 
188
194
  The library includes a pluggable verification system to confirm identities via Email or Phone. OTPs are triggered in the following scenarios:
@@ -199,24 +205,259 @@ If a user authenticates via a non-verifiable method (like a **USERNAME**), the s
199
205
  - Prioritizes verified **EMAIL** or **PHONE** numbers for delivery.
200
206
  - Marks all identifiers for the current auth method as verified once the OTP is confirmed.
201
207
 
208
+ ### OTP Providers
209
+
210
+ The library uses a two-layer system to manage OTPs:
211
+
212
+ | Layer | Responsibility |
213
+ |---|---|
214
+ | **OTP Provider** (`otpProvider`) | Generates, stores, and verifies OTP codes. |
215
+ | **Notification Provider** (`notificationProvider`) | Delivers OTP codes to the user (SMS, email, etc.). |
216
+
217
+ #### Built-in: `DatabaseOtpProvider` (Default)
218
+
219
+ By default, the library uses the `DatabaseOtpProvider`, which stores hashed OTP codes in your database. You do **not** need to configure anything to use it — it works out of the box with whichever database adapter you register.
220
+
221
+ It supports two special bypass modes that are useful during development and testing:
222
+
223
+ **Debug Mode** — Use a static OTP for all identifiers. Useful during local development to avoid sending real notifications.
224
+
225
+ ```typescript
226
+ AuthModule.register({
227
+ adapter: TypeOrmAuthAdapter,
228
+ debugMode: true,
229
+ defaultOtp: '111111', // Every OTP request will use this code
230
+ // ...
231
+ })
232
+ ```
233
+
234
+ > [!WARNING]
235
+ > Never enable `debugMode` in production. It disables real OTP generation for all users.
236
+
237
+ **Test Accounts** — Assign static OTPs to specific identifiers. Ideal for app store review automation or E2E tests, without affecting real users.
238
+
239
+ ```typescript
240
+ AuthModule.register({
241
+ adapter: TypeOrmAuthAdapter,
242
+ testAccounts: [
243
+ { identifier: '+15550000000', otp: '000000' },
244
+ { identifier: 'reviewer@apple.com', otp: '123456' },
245
+ ],
246
+ // ...
247
+ })
248
+ ```
249
+
250
+ When a test account identifier requests an OTP, the static code is used and the notification provider is **skipped entirely** (no SMS or email is sent).
251
+
252
+ #### Custom OTP Provider
253
+
254
+ If you need to integrate a third-party OTP service (e.g. Twilio Verify, Firebase Phone Auth, Vonage), implement the `AuthOtpProvider` interface and register it via the `otpProvider` option.
255
+
256
+ **Step 1: Implement `AuthOtpProvider`**
257
+
258
+ ```typescript
259
+ import {
260
+ AuthOtpProvider,
261
+ IssueOtpRequest,
262
+ IssueOtpResult,
263
+ VerifyOtpRequest,
264
+ VerifyOtpResult,
265
+ ResendOtpRequest,
266
+ ResendOtpResult,
267
+ } from 'nestjs-multi-auth';
268
+
269
+ @Injectable()
270
+ export class TwilioOtpProvider implements AuthOtpProvider {
271
+ constructor(private readonly twilioClient: TwilioClient) {}
272
+
273
+ async issue(request: IssueOtpRequest): Promise<IssueOtpResult> {
274
+ await this.twilioClient.verify.v2
275
+ .services(process.env.TWILIO_SERVICE_SID)
276
+ .verifications.create({ to: request.identifier, channel: request.identifierType });
277
+
278
+ // Return handledDelivery: true to tell the library NOT to call
279
+ // notificationProvider.sendVerificationCode() — Twilio already sent it.
280
+ return { handledDelivery: true };
281
+ }
282
+
283
+ async verify(request: VerifyOtpRequest): Promise<VerifyOtpResult> {
284
+ const check = await this.twilioClient.verify.v2
285
+ .services(process.env.TWILIO_SERVICE_SID)
286
+ .verificationChecks.create({ to: request.uid, code: request.code });
287
+
288
+ return { success: check.status === 'approved' };
289
+ }
290
+
291
+ // Optional — implement only if you want to support /auth/resend-verification
292
+ async resend(request: ResendOtpRequest): Promise<ResendOtpResult> {
293
+ await this.twilioClient.verify.v2
294
+ .services(process.env.TWILIO_SERVICE_SID)
295
+ .verifications.create({ to: request.uid, channel: 'sms' });
296
+
297
+ return { handledDelivery: true };
298
+ }
299
+ }
300
+ ```
301
+
302
+ > [!NOTE]
303
+ > When `handledDelivery` is `true`, the library will skip calling `notificationProvider.sendVerificationCode()`. Return `handledDelivery: false` (and include `code`) if you still want the library to dispatch the notification.
304
+
305
+ **Step 2: Register in `AuthModule`**
306
+
307
+ Pass your custom class to the `otpProvider` option. Also ensure the module that provides your service (e.g. `TwilioModule`) is listed in `imports`:
308
+
309
+ ```typescript
310
+ AuthModule.register({
311
+ adapter: TypeOrmAuthAdapter,
312
+ otpProvider: TwilioOtpProvider,
313
+ imports: [TwilioModule], // provides TwilioClient
314
+ // notificationProvider is optional when handledDelivery is always true
315
+ })
316
+ ```
317
+
318
+ #### Routing by Identifier Type (Email + Phone)
319
+
320
+ There are two strategies depending on how much control you need. Choose the one that fits your stack:
321
+
322
+ ---
323
+
324
+ **Option A — Recommended for most cases: Keep `DatabaseOtpProvider`, route delivery in `notificationProvider`**
325
+
326
+ When your app uses both email and phone auth, the simplest approach is to keep the built-in `DatabaseOtpProvider` (which handles generation, storage, and verification for you) and only implement routing logic in your `notificationProvider`. The `sendVerificationCode` method always receives a `type: 'email' | 'phone'` field you can use to dispatch via the right channel:
327
+
328
+ ```typescript
329
+ @Injectable()
330
+ export class MyNotificationProvider implements AuthNotificationProvider {
331
+ constructor(
332
+ private readonly mailer: MailerService,
333
+ private readonly sms: SmsService,
334
+ ) {}
335
+
336
+ async sendVerificationCode(request: { to: string; code: string; type: 'email' | 'phone' }) {
337
+ if (request.type === 'phone') {
338
+ await this.sms.send(request.to, `Your code: ${request.code}`);
339
+ } else {
340
+ await this.mailer.send({ to: request.to, subject: 'Your Code', text: `Code: ${request.code}` });
341
+ }
342
+ }
343
+ }
344
+ ```
345
+
346
+ ```typescript
347
+ // No otpProvider needed — DatabaseOtpProvider is the default
348
+ AuthModule.register({
349
+ adapter: TypeOrmAuthAdapter,
350
+ notificationProvider: MyNotificationProvider,
351
+ imports: [MailerModule, SmsModule],
352
+ })
353
+ ```
354
+
355
+ This is the recommended approach when you manage delivery yourself (e.g. Twilio Programmable SMS + SendGrid) but don't need an external service to own the verification lifecycle.
356
+
357
+ ---
358
+
359
+ **Option B — Fully custom: Use an external verification service per channel**
360
+
361
+ Some services like **Twilio Verify** or **Firebase Phone Auth** own the entire OTP lifecycle (they generate, store, and verify the code on their servers). If you want to use such a service for phone auth, you can split your OTP providers using the `otpProviders` configuration map.
362
+
363
+ With this approach, you create a focused `TwilioOtpProvider` that only handles phone, and let the library fall back to the built-in `DatabaseOtpProvider` for email.
364
+
365
+ ```typescript
366
+ @Injectable()
367
+ export class TwilioOtpProvider implements AuthOtpProvider {
368
+ constructor(private readonly twilioClient: TwilioClient) {}
369
+
370
+ async issue(request: IssueOtpRequest): Promise<IssueOtpResult> {
371
+ await this.twilioClient.verify.v2
372
+ .services(process.env.TWILIO_SERVICE_SID)
373
+ .verifications.create({ to: request.identifier, channel: 'sms' });
374
+
375
+ return { handledDelivery: true }; // Twilio handles the SMS delivery
376
+ }
377
+
378
+ async verify(request: VerifyOtpRequest): Promise<VerifyOtpResult> {
379
+ const check = await this.twilioClient.verify.v2
380
+ .services(process.env.TWILIO_SERVICE_SID)
381
+ .verificationChecks.create({ to: request.uid, code: request.code });
382
+
383
+ if (check.status === 'approved') return { success: true };
384
+ return { success: false };
385
+ }
386
+ }
387
+ ```
388
+
389
+ #### Responsibility Split: `otpProviders` vs `notificationProvider`
390
+
391
+ These two providers have **distinct, non-overlapping responsibilities**. A service like Twilio Verify only replaces the OTP lifecycle — it does **not** handle magic links or security alerts:
392
+
393
+ | Notification | Handled by |
394
+ |---|---|
395
+ | OTP issue / verify / resend (login, signup, verification) | `otpProviders.phone` or `otpProviders.email` |
396
+ | OTP code delivery (when `handledDelivery: false`) | `notificationProvider.sendVerificationCode()` |
397
+ | Magic link emails | `notificationProvider.sendMagicLink()` |
398
+ | Password-changed security alerts | `notificationProvider.sendPasswordChangedNotification()` |
399
+
400
+ You will almost always configure the **granular `otpProviders` map** alongside your `notificationProvider`:
401
+
402
+ ```typescript
403
+ AuthModule.register({
404
+ adapter: TypeOrmAuthAdapter,
405
+
406
+ // Route OTP lifecycle dynamically per channel
407
+ otpProviders: {
408
+ phone: TwilioOtpProvider, // Twilio Verify owns phone auth
409
+ email: DatabaseOtpProvider, // Built-in database owns email auth
410
+ },
411
+
412
+ // Owns magic links & security alerts
413
+ notificationProvider: MyNotificationProvider,
414
+
415
+ imports: [TwilioModule, MailerModule],
416
+ })
417
+ ```
418
+
419
+ #### `AuthOtpProvider` Interface Reference
420
+
421
+ | Method | Required | Description |
422
+ |---|:---:|---|
423
+ | `issue(request)` | ✅ | Generate and dispatch a new OTP. `request.identifierType` is `'email'` or `'phone'`. |
424
+ | `verify(request)` | ✅ | Validate a submitted OTP code. |
425
+ | `resend(request)` | - | Re-send an OTP (powers `POST /auth/resend-verification`). |
426
+
202
427
  ### 1. Implement `AuthNotificationProvider`
203
428
 
204
- Create a service to deliver the verification codes (SMS or Email). You can use any service, such as [notifyc-nestjs](https://github.com/IsaiahTek/notifyc-nestjs):
429
+ Create a service to deliver verification codes and other security notifications. The `type` field in `sendVerificationCode` is always `'email'` or `'phone'`, allowing you to route to the correct transport:
205
430
 
206
431
  ```typescript
207
432
  import { AuthNotificationProvider } from 'nestjs-multi-auth';
208
- import { NotifycService } from 'notifyc-nestjs';
209
433
 
210
434
  @Injectable()
211
435
  export class MyNotificationProvider implements AuthNotificationProvider {
212
- constructor(private notifyc: NotifycService) {}
436
+ constructor(
437
+ private readonly mailer: MailerService,
438
+ private readonly sms: SmsService,
439
+ ) {}
440
+
441
+ // Called when otpProvider returns handledDelivery: false
442
+ async sendVerificationCode(request: { to: string; code: string; type: 'email' | 'phone'; purpose?: string; expiresAt?: Date }) {
443
+ if (request.type === 'phone') {
444
+ await this.sms.send(request.to, `Your code: ${request.code}`);
445
+ } else {
446
+ await this.mailer.send({ to: request.to, subject: 'Your Code', text: `Code: ${request.code}` });
447
+ }
448
+ }
213
449
 
214
- async sendVerificationCode(to: string, code: string, type: 'email' | 'phone') {
215
- await this.notifyc.send({
450
+ // Optional powers Magic Link login
451
+ async sendMagicLink(to: string, link: string) {
452
+ await this.mailer.send({ to, subject: 'Your login link', html: `<a href="${link}">Log in</a>` });
453
+ }
454
+
455
+ // Optional — triggers on PATCH /auth/password
456
+ async sendPasswordChangedNotification(to: string, context: { ip: string; userAgent: string; secureAccountLink: string }) {
457
+ await this.mailer.send({
216
458
  to,
217
- subject: 'Your Verification Code',
218
- message: `Your code is: ${code}`,
219
- transport: type === 'email' ? 'SMTP' : 'SMS',
459
+ subject: 'Your password was changed',
460
+ html: `<p>Changed from IP <strong>${context.ip}</strong>. <a href="${context.secureAccountLink}">Secure account</a>.</p>`,
220
461
  });
221
462
  }
222
463
  }
@@ -230,8 +471,8 @@ AuthModule.register({
230
471
  notificationProvider: MyNotificationProvider,
231
472
  verificationRequired: true, // If true, login is blocked until verified
232
473
 
233
- // Pass the module that provides NotifycService
234
- imports: [NotifycModule],
474
+ // Pass the modules that provide your services
475
+ imports: [MailerModule, SmsModule],
235
476
  })
236
477
  ```
237
478
 
@@ -527,6 +768,7 @@ The library automatically mounts the following endpoints under the `/auth` prefi
527
768
  | `POST` | `/auth/link` | ✅ | `SignupDto` | Link a new auth method to the current account. |
528
769
  | `POST` | `/auth/mfa/enroll` | ✅ | `EnrollMfaDto` | Begin TOTP MFA enrollment. |
529
770
  | `POST` | `/auth/mfa/activate` | ✅ | `ActivateMfaDto` | Confirm TOTP setup with a live code. |
771
+ | `POST` | `/auth/mfa/verify` | - | `VerifyMfaLoginDto` | Submit TOTP code to complete MFA login and receive session tokens. |
530
772
  | `GET` | `/auth` | Optional | — | List all auth identities (admin/debug). |
531
773
  | `GET` | `/auth/me` | ✅ | — | View current identity details. |
532
774
  | `GET` | `/auth/me/methods` | ✅ | — | View all auth methods for the current user. |
@@ -631,6 +873,14 @@ Used to finalize MFA activation (`/auth/mfa/activate`).
631
873
  | `type` | `MfaType` | ✅ | The type of MFA to activate. |
632
874
  | `code` | `string` | ✅ | The 6-digit code from the authenticator app. |
633
875
 
876
+ ### `VerifyMfaLoginDto`
877
+ Used to submit an MFA code during login (`/auth/mfa/verify`).
878
+
879
+ | Field | Type | Required | Description |
880
+ |---|---|---|---|
881
+ | `uid` | `string` | ✅ | The unique identity ID. |
882
+ | `code` | `string` | ✅ | The 6-digit code from the authenticator app. |
883
+
634
884
  ---
635
885
 
636
886
  ## Enumerations (Enums)
@@ -775,6 +1025,7 @@ All options for `AuthModule.register()` / `AuthModule.forRootAsync()`:
775
1025
  | `defaultOtp` | `string` | — | A static OTP value to use when `debugMode` is enabled. |
776
1026
  | `forceVerificationOnGoogleSignup` | `boolean` | `false` | Force OTP validation for Google OAuth during signup, bypassing Google's `email_verified`. |
777
1027
  | `forceVerificationOnGoogleLogin` | `boolean` | `false` | Force OTP validation for Google OAuth during login if not already verified. |
1028
+ | `testAccounts` | `TestAccount[]` | — | Array of `{ identifier: string, otp: string }` to bypass OTP delivery for app review/testing. |
778
1029
 
779
1030
  ---
780
1031
  ## Advanced Config
@@ -863,11 +1114,51 @@ If you are getting 401 errors on routes marked with `@Public()`, ensure that the
863
1114
 
864
1115
  ---
865
1116
 
866
- ## Entity Requirements
1117
+ ## Database Adapters
1118
+
1119
+ Because this library is completely decoupled from your user schema, it manages its own internal tables (`Auth`, `Session`, `MfaMethod`, `OtpToken`, `OAuthProvider`, `AuthIdentifier`). These entities use an opaque `uid: string` to identify users.
1120
+
1121
+ You can use the provided **TypeORM** or **Prisma** adapters, or build your own **custom adapter** to manage these tables.
1122
+
1123
+ ### TypeORM (Default)
1124
+ The library provides the `TypeOrmAuthAdapter` which automatically registers the necessary entities.
867
1125
 
868
- Because this library is decoupled, it manages its own tracking entities (`Auth`, `Session`, `MfaMethod`, `OtpToken`, `OAuthProvider`, `AuthIdentifier`). These entities use an opaque `uid: string` to identify users.
1126
+ 1. Register `TypeOrmAuthAdapter` inside the `AuthModule`:
1127
+ ```typescript
1128
+ import { TypeOrmAuthAdapter, AuthModule } from 'nestjs-multi-auth';
1129
+
1130
+ @Module({
1131
+ imports: [
1132
+ AuthModule.register({
1133
+ adapter: TypeOrmAuthAdapter,
1134
+ /* options */
1135
+ })
1136
+ ]
1137
+ })
1138
+ export class AppModule {}
1139
+ ```
1140
+ 2. You must have `@nestjs/typeorm` and `TypeOrmModule.forRoot()` configured in your application. Ensure that `autoLoadEntities: true` is enabled so the adapter's entities are automatically picked up.
1141
+
1142
+ ### Prisma
1143
+ The library provides full "Bring Your Own Prisma" support.
869
1144
 
870
- To use the Auth functionality, ensure `TypeOrmModule.forRoot()` is initialized in your consuming app.
1145
+ 1. **Copy the Schema**: First, copy the library's required [schema.prisma models](https://github.com/IsaiahTek/nestjs-multi-auth/blob/main/src/database/prisma/schema.prisma) into your own `schema.prisma` file and run `npx prisma generate` & `npx prisma db push` (or `migrate dev`).
1146
+ 2. **Register the Adapter**: Import the `PrismaAuthAdapter` and pass it to the `adapter` option.
1147
+
1148
+ ```typescript
1149
+ import { PrismaAuthAdapter, AuthModule } from 'nestjs-multi-auth';
1150
+ import { PrismaService } from './prisma.service'; // Your custom Prisma client wrapper
1151
+
1152
+ @Module({
1153
+ imports: [
1154
+ AuthModule.register({
1155
+ adapter: PrismaAuthAdapter.register({ prismaServiceToken: PrismaService }),
1156
+ /* options */
1157
+ })
1158
+ ]
1159
+ })
1160
+ export class AppModule {}
1161
+ ```
871
1162
 
872
1163
  ---
873
1164
 
@@ -2,7 +2,7 @@ import { AuthService } from './auth.service';
2
2
  import { LoginDto } from './dto/requests/login.dto';
3
3
  import { SignupDto } from './dto/requests/signup.dto';
4
4
  import { VerifyDto, ResendVerificationDto } from './dto/requests/verify.dto';
5
- import { EnrollMfaDto, ActivateMfaDto } from './dto/requests/mfa.dto';
5
+ import { EnrollMfaDto, ActivateMfaDto, VerifyMfaLoginDto } from './dto/requests/mfa.dto';
6
6
  import { RefreshTokenDto } from './dto/requests/refresh-token.dto';
7
7
  import { ForgotPasswordDto } from './dto/requests/forgot-password.dto';
8
8
  import { ResetPasswordDto } from './dto/requests/reset-password.dto';
@@ -41,7 +41,7 @@ export declare class AuthController {
41
41
  requestMagicLink(dto: MagicLinkRequestDto): Promise<{
42
42
  message: string;
43
43
  }>;
44
- verifyMagicLink(token: string, res: Response, req: Request): Promise<any>;
44
+ verifyMagicLink(token: string, email: string, res: Response, req: Request): Promise<any>;
45
45
  link(dto: SignupDto, req: any, res: Response): Promise<any>;
46
46
  refresh(req: Request, res: Response, dto: RefreshTokenDto): Promise<{
47
47
  message: string;
@@ -60,6 +60,7 @@ export declare class AuthController {
60
60
  activateMfa(req: any, dto: ActivateMfaDto): Promise<{
61
61
  message: string;
62
62
  }>;
63
+ verifyMfa(dto: VerifyMfaLoginDto, res: Response, req: Request): Promise<any>;
63
64
  logout(req: Request, res: Response, dto: RefreshTokenDto): Promise<{
64
65
  message: string;
65
66
  }>;
@@ -150,9 +150,9 @@ let AuthController = class AuthController {
150
150
  async requestMagicLink(dto) {
151
151
  return this.authService.requestMagicLink(dto);
152
152
  }
153
- async verifyMagicLink(token, res, req) {
153
+ async verifyMagicLink(token, email, res, req) {
154
154
  const namespace = this.authContext.getNamespace(req);
155
- const result = await this.authService.verifyMagicLink({ dto: { token }, userAgent: req.headers['user-agent'], ip: req.ip, namespace });
155
+ const result = await this.authService.verifyMagicLink({ dto: { token, email }, userAgent: req.headers['user-agent'], ip: req.ip, namespace });
156
156
  const transports = this.getTransports();
157
157
  if (result.tokens) {
158
158
  if (transports.includes(auth_type_enum_1.AuthTransport.COOKIE) || transports.includes(auth_type_enum_1.AuthTransport.BOTH)) {
@@ -224,6 +224,21 @@ let AuthController = class AuthController {
224
224
  async activateMfa(req, dto) {
225
225
  return this.authService.activateMfa(req.user.uid, dto.type, dto.code);
226
226
  }
227
+ async verifyMfa(dto, res, req) {
228
+ const namespace = this.authContext.getNamespace(req);
229
+ const result = await this.authService.mfaLogin(dto.uid, dto.code, req.headers['user-agent'], req.ip, namespace);
230
+ const transports = this.getTransports();
231
+ if (result.tokens) {
232
+ if (transports.includes(auth_type_enum_1.AuthTransport.COOKIE) || transports.includes(auth_type_enum_1.AuthTransport.BOTH)) {
233
+ this.setCookies(res, req, result.tokens.accessToken, result.tokens.refreshToken);
234
+ }
235
+ }
236
+ const response = { message: result.message, auth: result.auth };
237
+ if (result.tokens && (transports.includes(auth_type_enum_1.AuthTransport.BEARER) || transports.includes(auth_type_enum_1.AuthTransport.BOTH))) {
238
+ response.tokens = result.tokens;
239
+ }
240
+ return response;
241
+ }
227
242
  async logout(req, res, dto) {
228
243
  const cookies = this.authContext.get(req);
229
244
  let token = req.cookies?.[cookies.refreshTokenName] || dto.refreshToken;
@@ -355,10 +370,11 @@ __decorate([
355
370
  (0, public_decorator_1.Public)(),
356
371
  (0, swagger_1.ApiOperation)({ summary: 'Verify magic link and login' }),
357
372
  __param(0, (0, common_2.Query)('token')),
358
- __param(1, (0, common_1.Res)({ passthrough: true })),
359
- __param(2, (0, common_1.Req)()),
373
+ __param(1, (0, common_2.Query)('email')),
374
+ __param(2, (0, common_1.Res)({ passthrough: true })),
375
+ __param(3, (0, common_1.Req)()),
360
376
  __metadata("design:type", Function),
361
- __metadata("design:paramtypes", [String, Object, Object]),
377
+ __metadata("design:paramtypes", [String, String, Object, Object]),
362
378
  __metadata("design:returntype", Promise)
363
379
  ], AuthController.prototype, "verifyMagicLink", null);
364
380
  __decorate([
@@ -400,6 +416,17 @@ __decorate([
400
416
  __metadata("design:paramtypes", [Object, mfa_dto_1.ActivateMfaDto]),
401
417
  __metadata("design:returntype", Promise)
402
418
  ], AuthController.prototype, "activateMfa", null);
419
+ __decorate([
420
+ (0, common_1.Post)('mfa/verify'),
421
+ (0, public_decorator_1.Public)(),
422
+ (0, swagger_1.ApiOperation)({ summary: 'Verify MFA code to complete login' }),
423
+ __param(0, (0, common_1.Body)()),
424
+ __param(1, (0, common_1.Res)({ passthrough: true })),
425
+ __param(2, (0, common_1.Req)()),
426
+ __metadata("design:type", Function),
427
+ __metadata("design:paramtypes", [mfa_dto_1.VerifyMfaLoginDto, Object, Object]),
428
+ __metadata("design:returntype", Promise)
429
+ ], AuthController.prototype, "verifyMfa", null);
403
430
  __decorate([
404
431
  (0, common_1.Post)('logout'),
405
432
  (0, swagger_1.ApiOperation)({ summary: 'User logout' }),
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":"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"}