@nauth-toolkit/core 0.1.85 → 0.1.87

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.
@@ -166,31 +166,25 @@ export declare class AdminResetPasswordResponseDTO {
166
166
  /**
167
167
  * Confirm Admin Reset Password DTO
168
168
  *
169
- * User completes admin-initiated password reset with code OR token.
170
- * Accepts either short code from email/SMS OR long token from link.
169
+ * User completes admin-initiated password reset with a verification code.
170
+ *
171
+ * NOTE:
172
+ * - Link support is optional, but links carry the same verification `code` as a query parameter
173
+ * (e.g., `...?code=123456`) to keep consumer apps consistent (code-only).
171
174
  *
172
175
  * Security:
173
- * - One of code or token is required
174
- * - Token-based: No attempt tracking (single use, long random)
175
- * - Code-based: Attempt tracking (max 3 attempts)
176
+ * - Code is required
177
+ * - Attempt tracking enforced (max attempts configured in password reset service)
176
178
  * - Always revokes all sessions on completion
177
179
  * - Always sets mustChangePassword flag
178
180
  *
179
181
  * @example
180
182
  * ```typescript
181
- * // With code (from email/SMS)
182
183
  * await authService.confirmAdminResetPassword({
183
184
  * identifier: 'user@example.com',
184
185
  * code: '123456',
185
186
  * newPassword: 'NewSecurePass123!'
186
187
  * });
187
- *
188
- * // With token (from link)
189
- * await authService.confirmAdminResetPassword({
190
- * identifier: 'user@example.com',
191
- * token: '64-char-hex-token-from-link',
192
- * newPassword: 'NewSecurePass123!'
193
- * });
194
188
  * ```
195
189
  */
196
190
  export declare class ConfirmAdminResetPasswordDTO {
@@ -215,7 +209,7 @@ export declare class ConfirmAdminResetPasswordDTO {
215
209
  * Validation:
216
210
  * - Must be string
217
211
  * - Length 6-10 characters
218
- * - Optional (token OR code required)
212
+ * - Required
219
213
  *
220
214
  * Sanitization:
221
215
  * - Trimmed
@@ -224,22 +218,7 @@ export declare class ConfirmAdminResetPasswordDTO {
224
218
  *
225
219
  * @example "123456"
226
220
  */
227
- code?: string;
228
- /**
229
- * Verification token from link (64-char hex)
230
- *
231
- * Validation:
232
- * - Must be string
233
- * - Optional (token OR code required)
234
- *
235
- * Sanitization:
236
- * - Trimmed
237
- *
238
- * WHY: Long token from link, single-use, no attempt tracking needed
239
- *
240
- * @example "a1b2c3d4..."
241
- */
242
- token?: string;
221
+ code: string;
243
222
  /**
244
223
  * New password
245
224
  *
@@ -1 +1 @@
1
- {"version":3,"file":"admin-reset-password.dto.d.ts","sourceRoot":"","sources":["../../src/dto/admin-reset-password.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAkBH;;GAEG;AACH,qBAAa,qBAAqB;IAChC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,EAAG,MAAM,CAAC;IAEpB;;;;;;;;;OASG;IAGH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEjC;;;;;;;;;;;;;;;;;OAiBG;IAaH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IAKH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;;;;;OAYG;IAGH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;;;;OAYG;IAUH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,6BAA6B;IACxC;;;OAGG;IACH,OAAO,EAAG,OAAO,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,4BAA4B;IACvC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,EAAG,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IAUH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;;;OAaG;IASH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;;;OAcG;IAKH,WAAW,EAAG,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oCAAoC;IAC/C;;;OAGG;IACH,OAAO,EAAG,OAAO,CAAC;CACnB"}
1
+ {"version":3,"file":"admin-reset-password.dto.d.ts","sourceRoot":"","sources":["../../src/dto/admin-reset-password.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAkBH;;GAEG;AACH,qBAAa,qBAAqB;IAChC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,EAAG,MAAM,CAAC;IAEpB;;;;;;;;;OASG;IAGH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEjC;;;;;;;;;;;;;;;;;OAiBG;IAaH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;OAWG;IAKH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;;;;;;OAYG;IAGH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;;;;;OAYG;IAUH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,6BAA6B;IACxC;;;OAGG;IACH,OAAO,EAAG,OAAO,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAEjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,4BAA4B;IACvC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,EAAG,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IAUH,IAAI,EAAG,MAAM,CAAC;IAEd;;;;;;;;;;;;;;OAcG;IAKH,WAAW,EAAG,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,oCAAoC;IAC/C;;;OAGG;IACH,OAAO,EAAG,OAAO,CAAC;CACnB"}
@@ -241,31 +241,25 @@ exports.AdminResetPasswordResponseDTO = AdminResetPasswordResponseDTO;
241
241
  /**
242
242
  * Confirm Admin Reset Password DTO
243
243
  *
244
- * User completes admin-initiated password reset with code OR token.
245
- * Accepts either short code from email/SMS OR long token from link.
244
+ * User completes admin-initiated password reset with a verification code.
245
+ *
246
+ * NOTE:
247
+ * - Link support is optional, but links carry the same verification `code` as a query parameter
248
+ * (e.g., `...?code=123456`) to keep consumer apps consistent (code-only).
246
249
  *
247
250
  * Security:
248
- * - One of code or token is required
249
- * - Token-based: No attempt tracking (single use, long random)
250
- * - Code-based: Attempt tracking (max 3 attempts)
251
+ * - Code is required
252
+ * - Attempt tracking enforced (max attempts configured in password reset service)
251
253
  * - Always revokes all sessions on completion
252
254
  * - Always sets mustChangePassword flag
253
255
  *
254
256
  * @example
255
257
  * ```typescript
256
- * // With code (from email/SMS)
257
258
  * await authService.confirmAdminResetPassword({
258
259
  * identifier: 'user@example.com',
259
260
  * code: '123456',
260
261
  * newPassword: 'NewSecurePass123!'
261
262
  * });
262
- *
263
- * // With token (from link)
264
- * await authService.confirmAdminResetPassword({
265
- * identifier: 'user@example.com',
266
- * token: '64-char-hex-token-from-link',
267
- * newPassword: 'NewSecurePass123!'
268
- * });
269
263
  * ```
270
264
  */
271
265
  class ConfirmAdminResetPasswordDTO {
@@ -290,7 +284,7 @@ class ConfirmAdminResetPasswordDTO {
290
284
  * Validation:
291
285
  * - Must be string
292
286
  * - Length 6-10 characters
293
- * - Optional (token OR code required)
287
+ * - Required
294
288
  *
295
289
  * Sanitization:
296
290
  * - Trimmed
@@ -300,21 +294,6 @@ class ConfirmAdminResetPasswordDTO {
300
294
  * @example "123456"
301
295
  */
302
296
  code;
303
- /**
304
- * Verification token from link (64-char hex)
305
- *
306
- * Validation:
307
- * - Must be string
308
- * - Optional (token OR code required)
309
- *
310
- * Sanitization:
311
- * - Trimmed
312
- *
313
- * WHY: Long token from link, single-use, no attempt tracking needed
314
- *
315
- * @example "a1b2c3d4..."
316
- */
317
- token;
318
297
  /**
319
298
  * New password
320
299
  *
@@ -352,8 +331,8 @@ __decorate([
352
331
  __metadata("design:type", String)
353
332
  ], ConfirmAdminResetPasswordDTO.prototype, "identifier", void 0);
354
333
  __decorate([
355
- (0, class_validator_1.IsOptional)(),
356
334
  (0, class_validator_1.IsString)({ message: 'Code must be a string' }),
335
+ (0, class_validator_1.IsNotEmpty)({ message: 'Code is required' }),
357
336
  (0, class_validator_1.Length)(6, 10, { message: 'Code must be between 6 and 10 characters' }),
358
337
  (0, class_transformer_1.Transform)(({ value }) => {
359
338
  if (typeof value === 'string') {
@@ -363,17 +342,6 @@ __decorate([
363
342
  }),
364
343
  __metadata("design:type", String)
365
344
  ], ConfirmAdminResetPasswordDTO.prototype, "code", void 0);
366
- __decorate([
367
- (0, class_validator_1.IsOptional)(),
368
- (0, class_validator_1.IsString)({ message: 'Token must be a string' }),
369
- (0, class_transformer_1.Transform)(({ value }) => {
370
- if (typeof value === 'string') {
371
- return value.trim();
372
- }
373
- return value;
374
- }),
375
- __metadata("design:type", String)
376
- ], ConfirmAdminResetPasswordDTO.prototype, "token", void 0);
377
345
  __decorate([
378
346
  (0, class_validator_1.IsString)({ message: 'New password must be a string' }),
379
347
  (0, class_validator_1.IsNotEmpty)({ message: 'New password is required' }),
@@ -1 +1 @@
1
- {"version":3,"file":"admin-reset-password.dto.js","sourceRoot":"","sources":["../../src/dto/admin-reset-password.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;;;;;;;;;;;;AAEH,qDAayB;AACzB,yDAA8C;AAE9C;;GAEG;AACH,MAAa,qBAAqB;IAChC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,CAAU;IAEpB;;;;;;;;;OASG;IAGH,cAAc,CAAmB;IAEjC;;;;;;;;;;;;;;;;;OAiBG;IAaH,OAAO,CAAU;IAEjB;;;;;;;;;;;OAWG;IAKH,aAAa,CAAU;IAEvB;;;;;;;;;;;;OAYG;IAGH,cAAc,CAAW;IAEzB;;;;;;;;;;;;OAYG;IAUH,MAAM,CAAU;CACjB;AAxID,sDAwIC;AA1GC;IAfC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACjD,IAAA,2BAAS,EAAC,CAAC,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACnD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,iDAAiD;YACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;yDACkB;AAcpB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,sBAAI,EAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;;6DAC3C;AAgCjC;IAZC,IAAA,4BAAU,GAAE;IACZ,IAAA,uBAAK,EACJ,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAC5E,EAAE,OAAO,EAAE,qDAAqD,EAAE,CACnE;IACA,IAAA,2BAAS,EAAC,IAAI,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;sDACe;AAkBjB;IAJC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,EAAE,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC;IACzD,IAAA,qBAAG,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;IAC7E,IAAA,qBAAG,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;;4DACzD;AAiBvB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;;6DAClC;AAwBzB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAChD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IACpE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;qDACc;AAGlB;;;;;;;;;;;;;;;GAeG;AACH,MAAa,6BAA6B;IACxC;;;OAGG;IACH,OAAO,CAAW;IAElB;;;OAGG;IACH,WAAW,CAAU;IAErB;;;OAGG;IACH,cAAc,CAAmB;IAEjC;;;OAGG;IACH,SAAS,CAAU;IAEnB;;;OAGG;IACH,eAAe,CAAU;CAC1B;AA9BD,sEA8BC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAa,4BAA4B;IACvC;;;;;;;;;;;;;OAaG;IAgBH,UAAU,CAAU;IAEpB;;;;;;;;;;;;;;OAcG;IAUH,IAAI,CAAU;IAEd;;;;;;;;;;;;;OAaG;IASH,KAAK,CAAU;IAEf;;;;;;;;;;;;;;OAcG;IAKH,WAAW,CAAU;CACtB;AAtGD,oEAsGC;AAxEC;IAfC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACjD,IAAA,2BAAS,EAAC,CAAC,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACnD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;QAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,iDAAiD;YACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;YAC/B,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;gEACkB;AA0BpB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IAC9C,IAAA,wBAAM,EAAC,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;IACtE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;0DACY;AAwBd;IARC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC/C,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;2DACa;AAqBf;IAJC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACtD,IAAA,4BAAU,EAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACnD,IAAA,2BAAS,EAAC,CAAC,EAAE,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC;IACnE,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;;iEAClD;AAGvB;;;;;;;;;;;GAWG;AACH,MAAa,oCAAoC;IAC/C;;;OAGG;IACH,OAAO,CAAW;CACnB;AAND,oFAMC"}
1
+ {"version":3,"file":"admin-reset-password.dto.js","sourceRoot":"","sources":["../../src/dto/admin-reset-password.dto.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,33 @@
2
2
  * Response DTO for getting MFA challenge data
3
3
  *
4
4
  * Used to return method-specific challenge data during MFA verification.
5
- * Currently only passkey method requires challenge data (WebAuthn options).
5
+ * Supports multiple MFA methods:
6
+ * - Passkey: Returns WebAuthn authentication options (object)
7
+ * - SMS: Returns masked phone number where code was sent (string)
8
+ * - Email: Returns masked email address where code was sent (string)
6
9
  *
7
10
  * @example
8
11
  * ```typescript
12
+ * // Passkey: WebAuthn options
9
13
  * const challengeData = await mfaService.getChallengeData({
10
14
  * session: 'challenge-session-token',
11
15
  * method: 'passkey'
12
16
  * });
13
- * // Returns: { publicKey: { challenge: '...', ... } }
17
+ * // Returns: { challengeData: { publicKey: { challenge: '...', ... } } }
18
+ *
19
+ * // SMS: Masked phone number
20
+ * const challengeData = await mfaService.getChallengeData({
21
+ * session: 'challenge-session-token',
22
+ * method: 'sms'
23
+ * });
24
+ * // Returns: { challengeData: '***-***-1234' }
25
+ *
26
+ * // Email: Masked email address
27
+ * const challengeData = await mfaService.getChallengeData({
28
+ * session: 'challenge-session-token',
29
+ * method: 'email'
30
+ * });
31
+ * // Returns: { challengeData: 'u***r@example.com' }
14
32
  * ```
15
33
  */
16
34
  /**
@@ -20,8 +38,14 @@ export declare class GetChallengeDataResponseDTO {
20
38
  /**
21
39
  * Provider-specific challenge data
22
40
  *
23
- * For passkey: WebAuthn public key options
24
- * Structure: { publicKey: { challenge: string, allowCredentials: [...], ... } }
41
+ * Type varies by method:
42
+ * - Passkey: WebAuthn public key options object
43
+ * Structure: { publicKey: { challenge: string, allowCredentials: [...], ... } }
44
+ * - SMS: Masked phone number string (e.g., '***-***-1234')
45
+ * - Email: Masked email address string (e.g., 'u***r@example.com')
46
+ *
47
+ * Note: Type is `Record<string, unknown>` which accommodates both object and string types.
48
+ * Frontend should check `typeof challengeData === 'string'` to determine if it's SMS/Email (string) or Passkey (object).
25
49
  */
26
50
  challengeData: Record<string, unknown>;
27
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-challenge-data-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/get-challenge-data-response.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;GAEG;AACH,qBAAa,2BAA2B;IACtC;;;;;OAKG;IACH,aAAa,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
1
+ {"version":3,"file":"get-challenge-data-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/get-challenge-data-response.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;GAEG;AACH,qBAAa,2BAA2B;IACtC;;;;;;;;;;;OAWG;IACH,aAAa,EAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
@@ -3,15 +3,33 @@
3
3
  * Response DTO for getting MFA challenge data
4
4
  *
5
5
  * Used to return method-specific challenge data during MFA verification.
6
- * Currently only passkey method requires challenge data (WebAuthn options).
6
+ * Supports multiple MFA methods:
7
+ * - Passkey: Returns WebAuthn authentication options (object)
8
+ * - SMS: Returns masked phone number where code was sent (string)
9
+ * - Email: Returns masked email address where code was sent (string)
7
10
  *
8
11
  * @example
9
12
  * ```typescript
13
+ * // Passkey: WebAuthn options
10
14
  * const challengeData = await mfaService.getChallengeData({
11
15
  * session: 'challenge-session-token',
12
16
  * method: 'passkey'
13
17
  * });
14
- * // Returns: { publicKey: { challenge: '...', ... } }
18
+ * // Returns: { challengeData: { publicKey: { challenge: '...', ... } } }
19
+ *
20
+ * // SMS: Masked phone number
21
+ * const challengeData = await mfaService.getChallengeData({
22
+ * session: 'challenge-session-token',
23
+ * method: 'sms'
24
+ * });
25
+ * // Returns: { challengeData: '***-***-1234' }
26
+ *
27
+ * // Email: Masked email address
28
+ * const challengeData = await mfaService.getChallengeData({
29
+ * session: 'challenge-session-token',
30
+ * method: 'email'
31
+ * });
32
+ * // Returns: { challengeData: 'u***r@example.com' }
15
33
  * ```
16
34
  */
17
35
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -23,8 +41,14 @@ class GetChallengeDataResponseDTO {
23
41
  /**
24
42
  * Provider-specific challenge data
25
43
  *
26
- * For passkey: WebAuthn public key options
27
- * Structure: { publicKey: { challenge: string, allowCredentials: [...], ... } }
44
+ * Type varies by method:
45
+ * - Passkey: WebAuthn public key options object
46
+ * Structure: { publicKey: { challenge: string, allowCredentials: [...], ... } }
47
+ * - SMS: Masked phone number string (e.g., '***-***-1234')
48
+ * - Email: Masked email address string (e.g., 'u***r@example.com')
49
+ *
50
+ * Note: Type is `Record<string, unknown>` which accommodates both object and string types.
51
+ * Frontend should check `typeof challengeData === 'string'` to determine if it's SMS/Email (string) or Passkey (object).
28
52
  */
29
53
  challengeData;
30
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-challenge-data-response.dto.js","sourceRoot":"","sources":["../../src/dto/get-challenge-data-response.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH;;GAEG;AACH,MAAa,2BAA2B;IACtC;;;;;OAKG;IACH,aAAa,CAA2B;CACzC;AARD,kEAQC"}
1
+ {"version":3,"file":"get-challenge-data-response.dto.js","sourceRoot":"","sources":["../../src/dto/get-challenge-data-response.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;;;AAEH;;GAEG;AACH,MAAa,2BAA2B;IACtC;;;;;;;;;;;OAWG;IACH,aAAa,CAA2B;CACzC;AAdD,kEAcC"}
@@ -2,7 +2,10 @@
2
2
  * DTO for requesting MFA challenge data
3
3
  *
4
4
  * Used to get method-specific challenge information during MFA verification.
5
- * Currently only passkey method requires challenge data (WebAuthn options).
5
+ * Supports:
6
+ * - Passkey: Returns WebAuthn authentication options
7
+ * - SMS: Sends SMS code and returns masked phone number
8
+ * - Email: Sends email code and returns masked email address
6
9
  *
7
10
  * Security:
8
11
  * - Session token length limited (prevents DoS)
@@ -10,19 +13,36 @@
10
13
  *
11
14
  * @example
12
15
  * ```typescript
16
+ * // Passkey: Get WebAuthn options
13
17
  * const challengeData = await authService.getChallengeData({
14
18
  * session: 'challenge-session-token',
15
19
  * method: 'passkey'
16
20
  * });
17
- * // Returns: { publicKey: { challenge: '...', ... } }
21
+ * // Returns: { challengeData: { challenge: '...', allowCredentials: [...], ... } }
22
+ *
23
+ * // SMS: Send code and get masked phone
24
+ * const challengeData = await authService.getChallengeData({
25
+ * session: 'challenge-session-token',
26
+ * method: 'sms'
27
+ * });
28
+ * // Returns: { challengeData: '***-***-1234' }
29
+ *
30
+ * // Email: Send code and get masked email
31
+ * const challengeData = await authService.getChallengeData({
32
+ * session: 'challenge-session-token',
33
+ * method: 'email'
34
+ * });
35
+ * // Returns: { challengeData: 'u***r@example.com' }
18
36
  * ```
19
37
  */
20
38
  /**
21
39
  * MFA method enum for challenge data
22
- * Currently only passkey requires challenge data
40
+ * Supports passkey (WebAuthn options), SMS (sends code), and Email (sends code)
23
41
  */
24
42
  export declare enum MFAChallengeMethod {
25
- PASSKEY = "passkey"
43
+ PASSKEY = "passkey",
44
+ SMS = "sms",
45
+ EMAIL = "email"
26
46
  }
27
47
  /**
28
48
  * DTO for getting MFA challenge data
@@ -47,7 +67,7 @@ export declare class GetChallengeDataDTO {
47
67
  * MFA method requiring challenge data
48
68
  *
49
69
  * Validation:
50
- * - Must be 'passkey' (only method that needs challenge data)
70
+ * - Must be 'passkey' (WebAuthn options), 'sms' (sends code), or 'email' (sends code)
51
71
  */
52
72
  method: MFAChallengeMethod;
53
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-challenge-data.dto.d.ts","sourceRoot":"","sources":["../../src/dto/get-challenge-data.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;;;;;;OAaG;IAQH,OAAO,EAAG,MAAM,CAAC;IAEjB;;;;;OAKG;IAIH,MAAM,EAAG,kBAAkB,CAAC;CAC7B"}
1
+ {"version":3,"file":"get-challenge-data.dto.d.ts","sourceRoot":"","sources":["../../src/dto/get-challenge-data.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH;;;GAGG;AACH,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;;;;;;OAaG;IAQH,OAAO,EAAG,MAAM,CAAC;IAEjB;;;;;OAKG;IAIH,MAAM,EAAG,kBAAkB,CAAC;CAC7B"}
@@ -3,7 +3,10 @@
3
3
  * DTO for requesting MFA challenge data
4
4
  *
5
5
  * Used to get method-specific challenge information during MFA verification.
6
- * Currently only passkey method requires challenge data (WebAuthn options).
6
+ * Supports:
7
+ * - Passkey: Returns WebAuthn authentication options
8
+ * - SMS: Sends SMS code and returns masked phone number
9
+ * - Email: Sends email code and returns masked email address
7
10
  *
8
11
  * Security:
9
12
  * - Session token length limited (prevents DoS)
@@ -11,11 +14,26 @@
11
14
  *
12
15
  * @example
13
16
  * ```typescript
17
+ * // Passkey: Get WebAuthn options
14
18
  * const challengeData = await authService.getChallengeData({
15
19
  * session: 'challenge-session-token',
16
20
  * method: 'passkey'
17
21
  * });
18
- * // Returns: { publicKey: { challenge: '...', ... } }
22
+ * // Returns: { challengeData: { challenge: '...', allowCredentials: [...], ... } }
23
+ *
24
+ * // SMS: Send code and get masked phone
25
+ * const challengeData = await authService.getChallengeData({
26
+ * session: 'challenge-session-token',
27
+ * method: 'sms'
28
+ * });
29
+ * // Returns: { challengeData: '***-***-1234' }
30
+ *
31
+ * // Email: Send code and get masked email
32
+ * const challengeData = await authService.getChallengeData({
33
+ * session: 'challenge-session-token',
34
+ * method: 'email'
35
+ * });
36
+ * // Returns: { challengeData: 'u***r@example.com' }
19
37
  * ```
20
38
  */
21
39
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
@@ -33,11 +51,13 @@ const class_validator_1 = require("class-validator");
33
51
  const class_transformer_1 = require("class-transformer");
34
52
  /**
35
53
  * MFA method enum for challenge data
36
- * Currently only passkey requires challenge data
54
+ * Supports passkey (WebAuthn options), SMS (sends code), and Email (sends code)
37
55
  */
38
56
  var MFAChallengeMethod;
39
57
  (function (MFAChallengeMethod) {
40
58
  MFAChallengeMethod["PASSKEY"] = "passkey";
59
+ MFAChallengeMethod["SMS"] = "sms";
60
+ MFAChallengeMethod["EMAIL"] = "email";
41
61
  })(MFAChallengeMethod || (exports.MFAChallengeMethod = MFAChallengeMethod = {}));
42
62
  /**
43
63
  * DTO for getting MFA challenge data
@@ -62,7 +82,7 @@ class GetChallengeDataDTO {
62
82
  * MFA method requiring challenge data
63
83
  *
64
84
  * Validation:
65
- * - Must be 'passkey' (only method that needs challenge data)
85
+ * - Must be 'passkey' (WebAuthn options), 'sms' (sends code), or 'email' (sends code)
66
86
  */
67
87
  method;
68
88
  }
@@ -79,7 +99,7 @@ __decorate([
79
99
  ], GetChallengeDataDTO.prototype, "session", void 0);
80
100
  __decorate([
81
101
  (0, class_validator_1.IsEnum)(MFAChallengeMethod, {
82
- message: 'Method must be: passkey',
102
+ message: 'Method must be: passkey, sms, or email',
83
103
  }),
84
104
  __metadata("design:type", String)
85
105
  ], GetChallengeDataDTO.prototype, "method", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"get-challenge-data.dto.js","sourceRoot":"","sources":["../../src/dto/get-challenge-data.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;AAEH,qDAAiD;AACjD,yDAA8C;AAE9C;;;GAGG;AACH,IAAY,kBAEX;AAFD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;AACrB,CAAC,EAFW,kBAAkB,kCAAlB,kBAAkB,QAE7B;AAED;;GAEG;AACH,MAAa,mBAAmB;IAC9B;;;;;;;;;;;;;OAaG;IAQH,OAAO,CAAU;IAEjB;;;;;OAKG;IAIH,MAAM,CAAsB;CAC7B;AAlCD,kDAkCC;AAZC;IAPC,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;oDACe;AAWjB;IAHC,IAAA,wBAAM,EAAC,kBAAkB,EAAE;QAC1B,OAAO,EAAE,yBAAyB;KACnC,CAAC;;mDAC0B"}
1
+ {"version":3,"file":"get-challenge-data.dto.js","sourceRoot":"","sources":["../../src/dto/get-challenge-data.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;;;;;;;;;;;;AAEH,qDAAiD;AACjD,yDAA8C;AAE9C;;;GAGG;AACH,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,iCAAW,CAAA;IACX,qCAAe,CAAA;AACjB,CAAC,EAJW,kBAAkB,kCAAlB,kBAAkB,QAI7B;AAED;;GAEG;AACH,MAAa,mBAAmB;IAC9B;;;;;;;;;;;;;OAaG;IAQH,OAAO,CAAU;IAEjB;;;;;OAKG;IAIH,MAAM,CAAsB;CAC7B;AAlCD,kDAkCC;AAZC;IAPC,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;oDACe;AAWjB;IAHC,IAAA,wBAAM,EAAC,kBAAkB,EAAE;QAC1B,OAAO,EAAE,wCAAwC;KAClD,CAAC;;mDAC0B"}
@@ -7,7 +7,7 @@
7
7
  * @example
8
8
  * ```typescript
9
9
  * const result = await mfaService.setMFAExemption({
10
- * userSub: 'user-uuid',
10
+ * identifier: 'user@example.com', // email, username, phone, or user sub (UUID)
11
11
  * exempt: true,
12
12
  * reason: 'Business partner requires MFA bypass',
13
13
  * grantedBy: 'admin@example.com'
@@ -16,22 +16,25 @@
16
16
  */
17
17
  /**
18
18
  * DTO for setting MFA exemption
19
+ *
20
+ * SECURITY: This DTO targets an arbitrary user; it must only be accepted by admin-protected APIs.
19
21
  */
20
22
  export declare class SetMFAExemptionDTO {
21
23
  /**
22
- * User's unique identifier (UUID v4)
24
+ * Target user identifier
23
25
  *
24
- * Validation:
25
- * - Must be a valid UUID v4 format
26
- * - Matches DB constraint: char(36) or uuid
26
+ * Can be any supported identifier:
27
+ * - user sub (UUID)
28
+ * - email
29
+ * - username
30
+ * - phone (E.164)
27
31
  *
28
32
  * Sanitization:
29
33
  * - Trimmed
30
- * - Lowercased for consistency
31
34
  *
32
- * @example "a21b654c-2746-4168-acee-c175083a65cd"
35
+ * @example "user@example.com"
33
36
  */
34
- userSub: string;
37
+ identifier: string;
35
38
  /**
36
39
  * Whether to grant exemption (true) or revoke exemption (false)
37
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"set-mfa-exemption.dto.d.ts","sourceRoot":"","sources":["../../src/dto/set-mfa-exemption.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;;;;;;;OAYG;IAQH,OAAO,EAAG,MAAM,CAAC;IAEjB;;OAEG;IAEH,MAAM,EAAG,OAAO,CAAC;IAEjB;;;;;;;;OAQG;IAUH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;;;;;;OAQG;IAUH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC;;OAEG;IACH,SAAS,EAAG,OAAO,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAG,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,kBAAkB,EAAG,IAAI,GAAG,IAAI,CAAC;CAClC"}
1
+ {"version":3,"file":"set-mfa-exemption.dto.d.ts","sourceRoot":"","sources":["../../src/dto/set-mfa-exemption.dto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;;;;;;;;OAaG;IASH,UAAU,EAAG,MAAM,CAAC;IAEpB;;OAEG;IAEH,MAAM,EAAG,OAAO,CAAC;IAEjB;;;;;;;;OAQG;IAUH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;;;;;;OAQG;IAUH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC;;OAEG;IACH,SAAS,EAAG,OAAO,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAG,MAAM,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,kBAAkB,EAAG,IAAI,GAAG,IAAI,CAAC;CAClC"}
@@ -8,7 +8,7 @@
8
8
  * @example
9
9
  * ```typescript
10
10
  * const result = await mfaService.setMFAExemption({
11
- * userSub: 'user-uuid',
11
+ * identifier: 'user@example.com', // email, username, phone, or user sub (UUID)
12
12
  * exempt: true,
13
13
  * reason: 'Business partner requires MFA bypass',
14
14
  * grantedBy: 'admin@example.com'
@@ -30,22 +30,25 @@ const class_validator_1 = require("class-validator");
30
30
  const class_transformer_1 = require("class-transformer");
31
31
  /**
32
32
  * DTO for setting MFA exemption
33
+ *
34
+ * SECURITY: This DTO targets an arbitrary user; it must only be accepted by admin-protected APIs.
33
35
  */
34
36
  class SetMFAExemptionDTO {
35
37
  /**
36
- * User's unique identifier (UUID v4)
38
+ * Target user identifier
37
39
  *
38
- * Validation:
39
- * - Must be a valid UUID v4 format
40
- * - Matches DB constraint: char(36) or uuid
40
+ * Can be any supported identifier:
41
+ * - user sub (UUID)
42
+ * - email
43
+ * - username
44
+ * - phone (E.164)
41
45
  *
42
46
  * Sanitization:
43
47
  * - Trimmed
44
- * - Lowercased for consistency
45
48
  *
46
- * @example "a21b654c-2746-4168-acee-c175083a65cd"
49
+ * @example "user@example.com"
47
50
  */
48
- userSub;
51
+ identifier;
49
52
  /**
50
53
  * Whether to grant exemption (true) or revoke exemption (false)
51
54
  */
@@ -73,15 +76,16 @@ class SetMFAExemptionDTO {
73
76
  }
74
77
  exports.SetMFAExemptionDTO = SetMFAExemptionDTO;
75
78
  __decorate([
76
- (0, class_validator_1.IsUUID)('4', { message: 'User sub must be a valid UUID v4 format' }),
79
+ (0, class_validator_1.IsString)({ message: 'Identifier must be a string' }),
80
+ (0, class_validator_1.MaxLength)(255, { message: 'Identifier must not exceed 255 characters' }),
77
81
  (0, class_transformer_1.Transform)(({ value }) => {
78
82
  if (typeof value === 'string') {
79
- return value.trim().toLowerCase();
83
+ return value.trim();
80
84
  }
81
85
  return value;
82
86
  }),
83
87
  __metadata("design:type", String)
84
- ], SetMFAExemptionDTO.prototype, "userSub", void 0);
88
+ ], SetMFAExemptionDTO.prototype, "identifier", void 0);
85
89
  __decorate([
86
90
  (0, class_validator_1.IsBoolean)({ message: 'Exempt must be a boolean' }),
87
91
  __metadata("design:type", Boolean)
@@ -1 +1 @@
1
- {"version":3,"file":"set-mfa-exemption.dto.js","sourceRoot":"","sources":["../../src/dto/set-mfa-exemption.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;AAEH,qDAAqF;AACrF,yDAA8C;AAE9C;;GAEG;AACH,MAAa,kBAAkB;IAC7B;;;;;;;;;;;;OAYG;IAQH,OAAO,CAAU;IAEjB;;OAEG;IAEH,MAAM,CAAW;IAEjB;;;;;;;;OAQG;IAUH,MAAM,CAAiB;IAEvB;;;;;;;;OAQG;IAUH,SAAS,CAAiB;CAC3B;AApED,gDAoEC;AA/CC;IAPC,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IACnE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;mDACe;AAMjB;IADC,IAAA,2BAAS,EAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;;kDAClC;AAoBjB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAChD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IACpE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;kDACqB;AAoBvB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;qDACwB;AAG5B;;GAEG;AACH,MAAa,0BAA0B;IACrC;;OAEG;IACH,SAAS,CAAW;IAEpB;;OAEG;IACH,eAAe,CAAiB;IAEhC;;OAEG;IACH,kBAAkB,CAAe;CAClC;AAfD,gEAeC"}
1
+ {"version":3,"file":"set-mfa-exemption.dto.js","sourceRoot":"","sources":["../../src/dto/set-mfa-exemption.dto.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;AAEH,qDAA6E;AAC7E,yDAA8C;AAE9C;;;;GAIG;AACH,MAAa,kBAAkB;IAC7B;;;;;;;;;;;;;OAaG;IASH,UAAU,CAAU;IAEpB;;OAEG;IAEH,MAAM,CAAW;IAEjB;;;;;;;;OAQG;IAUH,MAAM,CAAiB;IAEvB;;;;;;;;OAQG;IAUH,SAAS,CAAiB;CAC3B;AAtED,gDAsEC;AA/CC;IARC,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;sDACkB;AAMpB;IADC,IAAA,2BAAS,EAAC,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;;kDAClC;AAoBjB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAChD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IACpE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;kDACqB;AAoBvB;IATC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IACxE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;;qDACwB;AAG5B;;GAEG;AACH,MAAa,0BAA0B;IACrC;;OAEG;IACH,SAAS,CAAW;IAEpB;;OAEG;IACH,eAAe,CAAiB;IAEhC;;OAEG;IACH,kBAAkB,CAAe;CAClC;AAfD,gEAeC"}
@@ -806,14 +806,14 @@ export declare class AuthService {
806
806
  */
807
807
  adminResetPassword(dto: AdminResetPasswordDTO): Promise<AdminResetPasswordResponseDTO>;
808
808
  /**
809
- * Complete admin-initiated password reset with verification code or token.
809
+ * Complete admin-initiated password reset with a verification code.
810
810
  *
811
- * Accepts either:
812
- * - code: Short numeric code from email/SMS (6-10 digits, attempt tracking)
813
- * - token: Long hex token from link (64 chars, single use, no attempts)
811
+ * NOTE:
812
+ * - Links (when provided) should include the same verification code as a query parameter
813
+ * (e.g., `...?code=123456`) to keep consumer apps code-only and consistent.
814
814
  *
815
815
  * Security:
816
- * - Verifies code/token via PasswordResetService
816
+ * - Verifies code via PasswordResetService
817
817
  * - Enforces password policy and history
818
818
  * - Always revokes all sessions on completion
819
819
  * - Does not force password change (user already set new password)
@@ -825,19 +825,11 @@ export declare class AuthService {
825
825
  *
826
826
  * @example
827
827
  * ```typescript
828
- * // With code
829
828
  * await authService.confirmAdminResetPassword({
830
829
  * identifier: 'user@example.com',
831
830
  * code: '123456',
832
831
  * newPassword: 'NewSecurePass123!'
833
832
  * });
834
- *
835
- * // With token from link
836
- * await authService.confirmAdminResetPassword({
837
- * identifier: 'user@example.com',
838
- * token: '64-char-hex-token',
839
- * newPassword: 'NewSecurePass123!'
840
- * });
841
833
  * ```
842
834
  */
843
835
  confirmAdminResetPassword(dto: ConfirmAdminResetPasswordDTO): Promise<ConfirmAdminResetPasswordResponseDTO>;