@nauth-toolkit/core 0.1.60 → 0.1.62

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 (96) hide show
  1. package/dist/bootstrap.d.ts.map +1 -1
  2. package/dist/bootstrap.js +0 -22
  3. package/dist/bootstrap.js.map +1 -1
  4. package/dist/dto/change-password-request.dto.d.ts +5 -2
  5. package/dist/dto/change-password-request.dto.d.ts.map +1 -1
  6. package/dist/dto/change-password-request.dto.js +6 -1
  7. package/dist/dto/change-password-request.dto.js.map +1 -1
  8. package/dist/dto/logout-all.dto.d.ts +5 -2
  9. package/dist/dto/logout-all.dto.d.ts.map +1 -1
  10. package/dist/dto/logout-all.dto.js +6 -1
  11. package/dist/dto/logout-all.dto.js.map +1 -1
  12. package/dist/dto/refresh-token.dto.d.ts +19 -7
  13. package/dist/dto/refresh-token.dto.d.ts.map +1 -1
  14. package/dist/dto/refresh-token.dto.js +20 -6
  15. package/dist/dto/refresh-token.dto.js.map +1 -1
  16. package/dist/dto/setup-mfa.dto.d.ts +5 -2
  17. package/dist/dto/setup-mfa.dto.d.ts.map +1 -1
  18. package/dist/dto/setup-mfa.dto.js +6 -1
  19. package/dist/dto/setup-mfa.dto.js.map +1 -1
  20. package/dist/dto/update-user-attributes-request.dto.d.ts +5 -2
  21. package/dist/dto/update-user-attributes-request.dto.d.ts.map +1 -1
  22. package/dist/dto/update-user-attributes-request.dto.js +6 -1
  23. package/dist/dto/update-user-attributes-request.dto.js.map +1 -1
  24. package/dist/handlers/csrf.handler.d.ts.map +1 -1
  25. package/dist/handlers/csrf.handler.js +12 -1
  26. package/dist/handlers/csrf.handler.js.map +1 -1
  27. package/dist/interfaces/config.interface.d.ts +306 -76
  28. package/dist/interfaces/config.interface.d.ts.map +1 -1
  29. package/dist/interfaces/hooks.interface.d.ts +753 -7
  30. package/dist/interfaces/hooks.interface.d.ts.map +1 -1
  31. package/dist/interfaces/provider.interface.d.ts +143 -0
  32. package/dist/interfaces/provider.interface.d.ts.map +1 -1
  33. package/dist/interfaces/template.interface.d.ts +20 -43
  34. package/dist/interfaces/template.interface.d.ts.map +1 -1
  35. package/dist/interfaces/template.interface.js +8 -0
  36. package/dist/interfaces/template.interface.js.map +1 -1
  37. package/dist/internal.d.ts +5 -0
  38. package/dist/internal.d.ts.map +1 -1
  39. package/dist/internal.js +7 -1
  40. package/dist/internal.js.map +1 -1
  41. package/dist/schemas/auth-config.schema.d.ts +445 -104
  42. package/dist/schemas/auth-config.schema.d.ts.map +1 -1
  43. package/dist/schemas/auth-config.schema.js +55 -8
  44. package/dist/schemas/auth-config.schema.js.map +1 -1
  45. package/dist/services/adaptive-mfa-decision.service.d.ts +25 -1
  46. package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
  47. package/dist/services/adaptive-mfa-decision.service.js +91 -8
  48. package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
  49. package/dist/services/auth-audit.service.d.ts.map +1 -1
  50. package/dist/services/auth-audit.service.js +25 -4
  51. package/dist/services/auth-audit.service.js.map +1 -1
  52. package/dist/services/auth-flow-context-builder.service.d.ts.map +1 -1
  53. package/dist/services/auth-flow-context-builder.service.js +8 -1
  54. package/dist/services/auth-flow-context-builder.service.js.map +1 -1
  55. package/dist/services/auth-service-internal-helpers.d.ts +3 -1
  56. package/dist/services/auth-service-internal-helpers.d.ts.map +1 -1
  57. package/dist/services/auth-service-internal-helpers.js +28 -1
  58. package/dist/services/auth-service-internal-helpers.js.map +1 -1
  59. package/dist/services/auth.service.d.ts.map +1 -1
  60. package/dist/services/auth.service.js +84 -27
  61. package/dist/services/auth.service.js.map +1 -1
  62. package/dist/services/email-notifications.hook.d.ts +14 -0
  63. package/dist/services/email-notifications.hook.d.ts.map +1 -0
  64. package/dist/services/email-notifications.hook.js +254 -0
  65. package/dist/services/email-notifications.hook.js.map +1 -0
  66. package/dist/services/email-verification.service.d.ts.map +1 -1
  67. package/dist/services/email-verification.service.js +55 -0
  68. package/dist/services/email-verification.service.js.map +1 -1
  69. package/dist/services/hook-registry.service.d.ts +222 -1
  70. package/dist/services/hook-registry.service.d.ts.map +1 -1
  71. package/dist/services/hook-registry.service.js +391 -0
  72. package/dist/services/hook-registry.service.js.map +1 -1
  73. package/dist/services/mfa-base.service.d.ts +3 -1
  74. package/dist/services/mfa-base.service.d.ts.map +1 -1
  75. package/dist/services/mfa-base.service.js +70 -1
  76. package/dist/services/mfa-base.service.js.map +1 -1
  77. package/dist/services/mfa.service.d.ts +3 -1
  78. package/dist/services/mfa.service.d.ts.map +1 -1
  79. package/dist/services/mfa.service.js +32 -1
  80. package/dist/services/mfa.service.js.map +1 -1
  81. package/dist/services/password-reset.service.d.ts.map +1 -1
  82. package/dist/services/password-reset.service.js +5 -3
  83. package/dist/services/password-reset.service.js.map +1 -1
  84. package/dist/services/phone-verification.service.d.ts.map +1 -1
  85. package/dist/services/phone-verification.service.js +56 -2
  86. package/dist/services/phone-verification.service.js.map +1 -1
  87. package/dist/services/user.service.d.ts.map +1 -1
  88. package/dist/services/user.service.js +84 -1
  89. package/dist/services/user.service.js.map +1 -1
  90. package/dist/utils/setup/init-services.d.ts.map +1 -1
  91. package/dist/utils/setup/init-services.js +22 -23
  92. package/dist/utils/setup/init-services.js.map +1 -1
  93. package/dist/validators/template.validator.d.ts.map +1 -1
  94. package/dist/validators/template.validator.js +8 -0
  95. package/dist/validators/template.validator.js.map +1 -1
  96. package/package.json +1 -1
@@ -24,7 +24,17 @@ class HookRegistryService {
24
24
  logger;
25
25
  preSignupHooks = [];
26
26
  postSignupHooks = [];
27
+ onboardingCompletedHooks = [];
27
28
  userProfileUpdatedHooks = [];
29
+ passwordChangedHooks = [];
30
+ mfaDeviceRemovedHooks = [];
31
+ adaptiveMFARiskDetectedHooks = [];
32
+ accountStatusChangedHooks = [];
33
+ emailChangedHooks = [];
34
+ accountLockedHooks = [];
35
+ sessionsRevokedHooks = [];
36
+ mfaFirstEnabledHooks = [];
37
+ mfaMethodAddedHooks = [];
28
38
  constructor(logger) {
29
39
  this.logger = logger;
30
40
  }
@@ -55,6 +65,18 @@ class HookRegistryService {
55
65
  this.postSignupHooks.push(provider);
56
66
  this.logger?.debug?.(`[HookRegistry] Registered postSignup hook: ${provider.constructor.name}`);
57
67
  }
68
+ /**
69
+ * Register an onboarding completed hook
70
+ *
71
+ * Hooks are executed in registration order.
72
+ * Hook errors are logged but do not block user flows (non-blocking).
73
+ *
74
+ * @param provider - Onboarding completed hook instance
75
+ */
76
+ registerOnboardingCompleted(provider) {
77
+ this.onboardingCompletedHooks.push(provider);
78
+ this.logger?.debug?.(`[HookRegistry] Registered onboardingCompleted hook: ${provider.constructor.name}`);
79
+ }
58
80
  /**
59
81
  * Register a user profile updated hook
60
82
  *
@@ -67,6 +89,114 @@ class HookRegistryService {
67
89
  this.userProfileUpdatedHooks.push(provider);
68
90
  this.logger?.debug?.(`[HookRegistry] Registered userProfileUpdated hook: ${provider.constructor.name}`);
69
91
  }
92
+ /**
93
+ * Register a password changed hook
94
+ *
95
+ * Hooks are executed in registration order.
96
+ * Hook errors are logged but do not block password changes (non-blocking).
97
+ *
98
+ * @param provider - Password changed hook instance
99
+ */
100
+ registerPasswordChanged(provider) {
101
+ this.passwordChangedHooks.push(provider);
102
+ this.logger?.debug?.(`[HookRegistry] Registered passwordChanged hook: ${provider.constructor.name}`);
103
+ }
104
+ /**
105
+ * Register an MFA device removed hook
106
+ *
107
+ * Hooks are executed in registration order.
108
+ * Hook errors are logged but do not block device removal (non-blocking).
109
+ *
110
+ * @param provider - MFA device removed hook instance
111
+ */
112
+ registerMFADeviceRemoved(provider) {
113
+ this.mfaDeviceRemovedHooks.push(provider);
114
+ this.logger?.debug?.(`[HookRegistry] Registered mfaDeviceRemoved hook: ${provider.constructor.name}`);
115
+ }
116
+ /**
117
+ * Register an adaptive MFA risk detected hook
118
+ *
119
+ * Hooks are executed in registration order.
120
+ * Hook errors are logged but do not block authentication (non-blocking).
121
+ *
122
+ * @param provider - Adaptive MFA risk detected hook instance
123
+ */
124
+ registerAdaptiveMFARiskDetected(provider) {
125
+ this.adaptiveMFARiskDetectedHooks.push(provider);
126
+ this.logger?.debug?.(`[HookRegistry] Registered adaptiveMFARiskDetected hook: ${provider.constructor.name}`);
127
+ }
128
+ /**
129
+ * Register an account status changed hook
130
+ *
131
+ * Hooks are executed in registration order.
132
+ * Hook errors are logged but do not block status changes (non-blocking).
133
+ *
134
+ * @param provider - Account status changed hook instance
135
+ */
136
+ registerAccountStatusChanged(provider) {
137
+ this.accountStatusChangedHooks.push(provider);
138
+ this.logger?.debug?.(`[HookRegistry] Registered accountStatusChanged hook: ${provider.constructor.name}`);
139
+ }
140
+ /**
141
+ * Register an email changed hook
142
+ *
143
+ * Hooks are executed in registration order.
144
+ * Hook errors are logged but do not block email changes (non-blocking).
145
+ *
146
+ * @param provider - Email changed hook instance
147
+ */
148
+ registerEmailChanged(provider) {
149
+ this.emailChangedHooks.push(provider);
150
+ this.logger?.debug?.(`[HookRegistry] Registered emailChanged hook: ${provider.constructor.name}`);
151
+ }
152
+ /**
153
+ * Register an account locked hook
154
+ *
155
+ * Hooks are executed in registration order.
156
+ * Hook errors are logged but do not block lockout (non-blocking).
157
+ *
158
+ * @param provider - Account locked hook instance
159
+ */
160
+ registerAccountLocked(provider) {
161
+ this.accountLockedHooks.push(provider);
162
+ this.logger?.debug?.(`[HookRegistry] Registered accountLocked hook: ${provider.constructor.name}`);
163
+ }
164
+ /**
165
+ * Register a sessions revoked hook
166
+ *
167
+ * Hooks are executed in registration order.
168
+ * Hook errors are logged but do not block session revocation (non-blocking).
169
+ *
170
+ * @param provider - Sessions revoked hook instance
171
+ */
172
+ registerSessionsRevoked(provider) {
173
+ this.sessionsRevokedHooks.push(provider);
174
+ this.logger?.debug?.(`[HookRegistry] Registered sessionsRevoked hook: ${provider.constructor.name}`);
175
+ }
176
+ /**
177
+ * Register an MFA first enabled hook
178
+ *
179
+ * Hooks are executed in registration order.
180
+ * Hook errors are logged but do not block MFA enrollment (non-blocking).
181
+ *
182
+ * @param provider - MFA first enabled hook instance
183
+ */
184
+ registerMFAFirstEnabled(provider) {
185
+ this.mfaFirstEnabledHooks.push(provider);
186
+ this.logger?.debug?.(`[HookRegistry] Registered mfaFirstEnabled hook: ${provider.constructor.name}`);
187
+ }
188
+ /**
189
+ * Register an MFA method added hook
190
+ *
191
+ * Hooks are executed in registration order.
192
+ * Hook errors are logged but do not block MFA enrollment (non-blocking).
193
+ *
194
+ * @param provider - MFA method added hook instance
195
+ */
196
+ registerMFAMethodAdded(provider) {
197
+ this.mfaMethodAddedHooks.push(provider);
198
+ this.logger?.debug?.(`[HookRegistry] Registered mfaMethodAdded hook: ${provider.constructor.name}`);
199
+ }
70
200
  // ============================================================================
71
201
  // Execution Methods
72
202
  // ============================================================================
@@ -133,6 +263,33 @@ class HookRegistryService {
133
263
  }
134
264
  }
135
265
  }
266
+ /**
267
+ * Execute all registered onboarding completed hooks
268
+ *
269
+ * Hooks are executed sequentially in registration order.
270
+ * Hook errors are logged but do not stop execution (non-blocking).
271
+ *
272
+ * @param user - User entity (IUser interface)
273
+ * @param metadata - Completion metadata (verification method, source, timestamp)
274
+ *
275
+ * @internal
276
+ * @remarks This method is called internally by AuthService, EmailVerificationService, and PhoneVerificationService
277
+ */
278
+ async executeOnboardingCompleted(user, metadata) {
279
+ if (this.onboardingCompletedHooks.length === 0) {
280
+ return; // No hooks registered
281
+ }
282
+ for (const hook of this.onboardingCompletedHooks) {
283
+ try {
284
+ await hook.execute(user, metadata);
285
+ }
286
+ catch (hookError) {
287
+ // Non-blocking: log error and continue
288
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
289
+ this.logger?.error?.(`[HookRegistry] onboardingCompleted hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
290
+ }
291
+ }
292
+ }
136
293
  /**
137
294
  * Execute all registered user profile updated hooks
138
295
  *
@@ -159,6 +316,240 @@ class HookRegistryService {
159
316
  }
160
317
  }
161
318
  }
319
+ /**
320
+ * Execute all registered password changed hooks
321
+ *
322
+ * Hooks are executed sequentially in registration order.
323
+ * Hook errors are logged but do not stop execution (non-blocking).
324
+ *
325
+ * @param metadata - Password change context with user and change details
326
+ *
327
+ * @internal
328
+ * @remarks This method is called internally by AuthServiceInternalHelpers
329
+ */
330
+ async executePasswordChanged(metadata) {
331
+ if (this.passwordChangedHooks.length === 0) {
332
+ return; // No hooks registered
333
+ }
334
+ for (const hook of this.passwordChangedHooks) {
335
+ try {
336
+ await hook.execute(metadata);
337
+ }
338
+ catch (hookError) {
339
+ // Non-blocking: log error and continue
340
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
341
+ this.logger?.error?.(`[HookRegistry] passwordChanged hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
342
+ }
343
+ }
344
+ }
345
+ /**
346
+ * Execute all registered MFA device removed hooks
347
+ *
348
+ * Hooks are executed sequentially in registration order.
349
+ * Hook errors are logged but do not stop execution (non-blocking).
350
+ *
351
+ * @param metadata - Device removal context with user and device details
352
+ *
353
+ * @internal
354
+ * @remarks This method is called internally by UserService and MFAService
355
+ */
356
+ async executeMFADeviceRemoved(metadata) {
357
+ if (this.mfaDeviceRemovedHooks.length === 0) {
358
+ return; // No hooks registered
359
+ }
360
+ for (const hook of this.mfaDeviceRemovedHooks) {
361
+ try {
362
+ await hook.execute(metadata);
363
+ }
364
+ catch (hookError) {
365
+ // Non-blocking: log error and continue
366
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
367
+ this.logger?.error?.(`[HookRegistry] mfaDeviceRemoved hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
368
+ }
369
+ }
370
+ }
371
+ /**
372
+ * Execute all registered adaptive MFA risk detected hooks
373
+ *
374
+ * Hooks are executed sequentially in registration order.
375
+ * Hook errors are logged but do not stop execution (non-blocking).
376
+ *
377
+ * @param metadata - Risk evaluation context with user and risk details
378
+ *
379
+ * @internal
380
+ * @remarks This method is called internally by AdaptiveMFADecisionService
381
+ */
382
+ async executeAdaptiveMFARiskDetected(metadata) {
383
+ if (this.adaptiveMFARiskDetectedHooks.length === 0) {
384
+ return; // No hooks registered
385
+ }
386
+ for (const hook of this.adaptiveMFARiskDetectedHooks) {
387
+ try {
388
+ await hook.execute(metadata);
389
+ }
390
+ catch (hookError) {
391
+ // Non-blocking: log error and continue
392
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
393
+ this.logger?.error?.(`[HookRegistry] adaptiveMFARiskDetected hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
394
+ }
395
+ }
396
+ }
397
+ /**
398
+ * Execute all registered account status changed hooks
399
+ *
400
+ * Hooks are executed sequentially in registration order.
401
+ * Hook errors are logged but do not stop execution (non-blocking).
402
+ *
403
+ * @param metadata - Status change context with user and change details
404
+ *
405
+ * @internal
406
+ * @remarks This method is called internally by UserService
407
+ */
408
+ async executeAccountStatusChanged(metadata) {
409
+ if (this.accountStatusChangedHooks.length === 0) {
410
+ return; // No hooks registered
411
+ }
412
+ for (const hook of this.accountStatusChangedHooks) {
413
+ try {
414
+ await hook.execute(metadata);
415
+ }
416
+ catch (hookError) {
417
+ // Non-blocking: log error and continue
418
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
419
+ this.logger?.error?.(`[HookRegistry] accountStatusChanged hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
420
+ }
421
+ }
422
+ }
423
+ /**
424
+ * Execute all registered email changed hooks
425
+ *
426
+ * Hooks are executed sequentially in registration order.
427
+ * Hook errors are logged but do not stop execution (non-blocking).
428
+ *
429
+ * @param metadata - Email change context with old and new addresses
430
+ *
431
+ * @internal
432
+ * @remarks This method is called internally by UserService
433
+ */
434
+ async executeEmailChanged(metadata) {
435
+ if (this.emailChangedHooks.length === 0) {
436
+ return; // No hooks registered
437
+ }
438
+ for (const hook of this.emailChangedHooks) {
439
+ try {
440
+ await hook.execute(metadata);
441
+ }
442
+ catch (hookError) {
443
+ // Non-blocking: log error and continue
444
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
445
+ this.logger?.error?.(`[HookRegistry] emailChanged hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
446
+ }
447
+ }
448
+ }
449
+ /**
450
+ * Execute all registered account locked hooks
451
+ *
452
+ * Hooks are executed sequentially in registration order.
453
+ * Hook errors are logged but do not stop execution (non-blocking).
454
+ *
455
+ * @param metadata - Lockout context with user and lock details
456
+ *
457
+ * @internal
458
+ * @remarks This method is called internally by AuthServiceInternalHelpers
459
+ */
460
+ async executeAccountLocked(metadata) {
461
+ if (this.accountLockedHooks.length === 0) {
462
+ return; // No hooks registered
463
+ }
464
+ for (const hook of this.accountLockedHooks) {
465
+ try {
466
+ await hook.execute(metadata);
467
+ }
468
+ catch (hookError) {
469
+ // Non-blocking: log error and continue
470
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
471
+ this.logger?.error?.(`[HookRegistry] accountLocked hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
472
+ }
473
+ }
474
+ }
475
+ /**
476
+ * Execute all registered sessions revoked hooks
477
+ *
478
+ * Hooks are executed sequentially in registration order.
479
+ * Hook errors are logged but do not stop execution (non-blocking).
480
+ *
481
+ * @param metadata - Revocation context with user and session details
482
+ *
483
+ * @internal
484
+ * @remarks This method is called internally by SessionService
485
+ */
486
+ async executeSessionsRevoked(metadata) {
487
+ if (this.sessionsRevokedHooks.length === 0) {
488
+ return; // No hooks registered
489
+ }
490
+ for (const hook of this.sessionsRevokedHooks) {
491
+ try {
492
+ await hook.execute(metadata);
493
+ }
494
+ catch (hookError) {
495
+ // Non-blocking: log error and continue
496
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
497
+ this.logger?.error?.(`[HookRegistry] sessionsRevoked hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
498
+ }
499
+ }
500
+ }
501
+ /**
502
+ * Execute all registered MFA first enabled hooks
503
+ *
504
+ * Hooks are executed sequentially in registration order.
505
+ * Hook errors are logged but do not stop execution (non-blocking).
506
+ *
507
+ * @param metadata - MFA enrollment context with user and device details
508
+ *
509
+ * @internal
510
+ * @remarks This method is called internally by BaseMFAProviderService
511
+ */
512
+ async executeMFAFirstEnabled(metadata) {
513
+ if (this.mfaFirstEnabledHooks.length === 0) {
514
+ return; // No hooks registered
515
+ }
516
+ for (const hook of this.mfaFirstEnabledHooks) {
517
+ try {
518
+ await hook.execute(metadata);
519
+ }
520
+ catch (hookError) {
521
+ // Non-blocking: log error and continue
522
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
523
+ this.logger?.error?.(`[HookRegistry] mfaFirstEnabled hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
524
+ }
525
+ }
526
+ }
527
+ /**
528
+ * Execute all registered MFA method added hooks
529
+ *
530
+ * Hooks are executed sequentially in registration order.
531
+ * Hook errors are logged but do not stop execution (non-blocking).
532
+ *
533
+ * @param metadata - MFA method addition context
534
+ *
535
+ * @internal
536
+ * @remarks This method is called internally by BaseMFAProviderService
537
+ */
538
+ async executeMFAMethodAdded(metadata) {
539
+ if (this.mfaMethodAddedHooks.length === 0) {
540
+ return; // No hooks registered
541
+ }
542
+ for (const hook of this.mfaMethodAddedHooks) {
543
+ try {
544
+ await hook.execute(metadata);
545
+ }
546
+ catch (hookError) {
547
+ // Non-blocking: log error and continue
548
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
549
+ this.logger?.error?.(`[HookRegistry] mfaMethodAdded hook error: ${hook.constructor.name} - ${errorMessage}`, hookError instanceof Error ? { error: hookError } : undefined);
550
+ }
551
+ }
552
+ }
162
553
  }
163
554
  exports.HookRegistryService = HookRegistryService;
164
555
  //# sourceMappingURL=hook-registry.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook-registry.service.js","sourceRoot":"","sources":["../../src/services/hook-registry.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-registry.service.js","sourceRoot":"","sources":["../../src/services/hook-registry.service.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAgCH,mEAA+D;AAC/D,gEAA0D;AAE1D;;;;GAIG;AACH,MAAa,mBAAmB;IAeD;IAdZ,cAAc,GAA6B,EAAE,CAAC;IAC9C,eAAe,GAA8B,EAAE,CAAC;IAChD,wBAAwB,GAA+B,EAAE,CAAC;IAC1D,uBAAuB,GAA8B,EAAE,CAAC;IACxD,oBAAoB,GAA2B,EAAE,CAAC;IAClD,qBAAqB,GAA4B,EAAE,CAAC;IACpD,4BAA4B,GAAmC,EAAE,CAAC;IAClE,yBAAyB,GAAgC,EAAE,CAAC;IAC5D,iBAAiB,GAAwB,EAAE,CAAC;IAC5C,kBAAkB,GAAyB,EAAE,CAAC;IAC9C,oBAAoB,GAA2B,EAAE,CAAC;IAClD,oBAAoB,GAA2B,EAAE,CAAC;IAClD,mBAAmB,GAA0B,EAAE,CAAC;IAEjE,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;IAAG,CAAC;IAExD,+EAA+E;IAC/E,uBAAuB;IACvB,+EAA+E;IAE/E;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAgC;QAChD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,6CAA6C,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACjG,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAAC,QAAiC;QAClD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,8CAA8C,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAClG,CAAC;IAED;;;;;;;OAOG;IACH,2BAA2B,CAAC,QAAkC;QAC5D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,uDAAuD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED;;;;;;;OAOG;IACH,0BAA0B,CAAC,QAAiC;QAC1D,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,sDAAsD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;;;OAOG;IACH,uBAAuB,CAAC,QAA8B;QACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,mDAAmD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;;;;;;OAOG;IACH,wBAAwB,CAAC,QAA+B;QACtD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,oDAAoD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;IAED;;;;;;;OAOG;IACH,+BAA+B,CAAC,QAAsC;QACpE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,2DAA2D,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED;;;;;;;OAOG;IACH,4BAA4B,CAAC,QAAmC;QAC9D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,wDAAwD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,QAA2B;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,gDAAgD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;OAOG;IACH,qBAAqB,CAAC,QAA4B;QAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,iDAAiD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,CAAC;IAED;;;;;;;OAOG;IACH,uBAAuB,CAAC,QAA8B;QACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,mDAAmD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;;;;;;OAOG;IACH,uBAAuB,CAAC,QAA8B;QACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,mDAAmD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACvG,CAAC;IAED;;;;;;;OAOG;IACH,sBAAsB,CAAC,QAA6B;QAClD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,kDAAkD,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,+EAA+E;IAC/E,oBAAoB;IACpB,+EAA+E;IAE/E;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,gBAAgB,CACpB,IAAuB,EACvB,UAAiC,EACjC,QAAiB,EACjB,WAAqB;QAErB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,sEAAsE;gBACtE,IAAI,SAAS,YAAY,gCAAc,IAAI,SAAS,CAAC,IAAI,KAAK,gCAAa,CAAC,gBAAgB,EAAE,CAAC;oBAC7F,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,iDAAiD,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,SAAS,CAAC,OAAO,EAAE,CAChG,CAAC;oBACF,MAAM,SAAS,CAAC;gBAClB,CAAC;gBAED,6CAA6C;gBAC7C,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC;gBACrG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,wCAAwC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACjF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;gBACF,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAW,EAAE,QAAyB;QAC5D,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,yCAAyC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EAClF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,0BAA0B,CAAC,IAAW,EAAE,QAAqC;QACjF,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,kDAAkD,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EAC3F,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,yBAAyB,CAAC,QAAoC;QAClE,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,iDAAiD,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EAC1F,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,sBAAsB,CAAC,QAAiC;QAC5D,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,8CAA8C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACvF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,uBAAuB,CAAC,QAAkC;QAC9D,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,+CAA+C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACxF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,8BAA8B,CAAC,QAAyC;QAC5E,IAAI,IAAI,CAAC,4BAA4B,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,4BAA4B,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,sDAAsD,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EAC/F,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,2BAA2B,CAAC,QAAsC;QACtE,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,mDAAmD,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EAC5F,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAA8B;QACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,2CAA2C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACpF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,oBAAoB,CAAC,QAA+B;QACxD,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,4CAA4C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACrF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,sBAAsB,CAAC,QAAiC;QAC5D,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,8CAA8C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACvF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,sBAAsB,CAAC,QAAiC;QAC5D,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,8CAA8C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACvF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgC;QAC1D,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,sBAAsB;QAChC,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,SAAkB,EAAE,CAAC;gBAC5B,uCAAuC;gBACvC,MAAM,YAAY,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACtF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,6CAA6C,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,YAAY,EAAE,EACtF,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA3lBD,kDA2lBC"}
@@ -7,6 +7,7 @@ import { InternalAuthAuditService as AuthAuditService } from './auth-audit.servi
7
7
  import { ClientInfoService } from './client-info.service';
8
8
  import { IMFAProviderService } from '../interfaces/mfa-provider.interface';
9
9
  import { ChallengeService } from './challenge.service';
10
+ import { HookRegistryService } from './hook-registry.service';
10
11
  /**
11
12
  * Base MFA Provider Service
12
13
  *
@@ -59,9 +60,10 @@ export declare abstract class BaseMFAProviderService implements IMFAProviderServ
59
60
  protected readonly challengeService?: ChallengeService | undefined;
60
61
  protected readonly auditService?: AuthAuditService | undefined;
61
62
  protected readonly clientInfoService?: ClientInfoService | undefined;
63
+ protected readonly hookRegistry?: HookRegistryService | undefined;
62
64
  abstract readonly methodName: string;
63
65
  constructor(mfaDeviceRepository: Repository<BaseMFADevice>, userRepository: Repository<BaseUser>, config: NAuthConfig, logger: NAuthLogger, passwordService?: unknown | undefined, // Optional - from @nauth-toolkit/core
64
- challengeService?: ChallengeService | undefined, auditService?: AuthAuditService | undefined, clientInfoService?: ClientInfoService | undefined);
66
+ challengeService?: ChallengeService | undefined, auditService?: AuthAuditService | undefined, clientInfoService?: ClientInfoService | undefined, hookRegistry?: HookRegistryService | undefined);
65
67
  /**
66
68
  * Check if this MFA method is allowed by configuration
67
69
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mfa-base.service.d.ts","sourceRoot":"","sources":["../../src/services/mfa-base.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mfa-base.service.d.ts","sourceRoot":"","sources":["../../src/services/mfa-base.service.ts"],"names":[],"mappings":"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"}
@@ -58,8 +58,9 @@ class BaseMFAProviderService {
58
58
  challengeService;
59
59
  auditService;
60
60
  clientInfoService;
61
+ hookRegistry;
61
62
  constructor(mfaDeviceRepository, userRepository, config, logger, passwordService, // Optional - from @nauth-toolkit/core
62
- challengeService, auditService, clientInfoService) {
63
+ challengeService, auditService, clientInfoService, hookRegistry) {
63
64
  this.mfaDeviceRepository = mfaDeviceRepository;
64
65
  this.userRepository = userRepository;
65
66
  this.config = config;
@@ -68,6 +69,7 @@ class BaseMFAProviderService {
68
69
  this.challengeService = challengeService;
69
70
  this.auditService = auditService;
70
71
  this.clientInfoService = clientInfoService;
72
+ this.hookRegistry = hookRegistry;
71
73
  }
72
74
  /**
73
75
  * Check if this MFA method is allowed by configuration
@@ -258,6 +260,9 @@ class BaseMFAProviderService {
258
260
  }
259
261
  const userEntityRecord = userEntity;
260
262
  const isFirstDevice = !userEntityRecord.mfaEnabled;
263
+ const previousMethods = Array.isArray(userEntityRecord.mfaMethods)
264
+ ? userEntityRecord.mfaMethods
265
+ : [];
261
266
  if (!userEntityRecord.mfaEnabled) {
262
267
  userEntityRecord.mfaEnabled = true;
263
268
  userEntityRecord.mfaEnforcedAt = new Date();
@@ -265,6 +270,7 @@ class BaseMFAProviderService {
265
270
  // Update mfaMethods array
266
271
  const devices = await this.getUserDevices(userId);
267
272
  const methods = [...new Set(devices.filter((d) => d.isActive).map((d) => d.type))];
273
+ const newlyAddedMethods = methods.filter((m) => !previousMethods.includes(m));
268
274
  userEntityRecord.mfaMethods = methods;
269
275
  // Set preferred method if not set
270
276
  if (!userEntityRecord.preferredMfaMethod && methods.length > 0) {
@@ -272,6 +278,41 @@ class BaseMFAProviderService {
272
278
  userEntityRecord.preferredMfaMethod = primaryDevice?.type || methods[0];
273
279
  }
274
280
  await this.userRepository.save(userEntity);
281
+ // ============================================================================
282
+ // Lifecycle Hook: MFA Method Added (additional methods only)
283
+ // ============================================================================
284
+ // This complements (and avoids duplicating) the "first enabled" hook:
285
+ // - First ever method → `executeMFAFirstEnabled`
286
+ // - Subsequent new method → `executeMFAMethodAdded`
287
+ if (!isFirstDevice && newlyAddedMethods.length > 0 && this.hookRegistry && this.clientInfoService) {
288
+ try {
289
+ const clientInfo = this.clientInfoService.get();
290
+ for (const method of newlyAddedMethods) {
291
+ await this.hookRegistry.executeMFAMethodAdded({
292
+ user: userEntity,
293
+ method: method,
294
+ isFirstMethod: false,
295
+ enabledMethods: methods,
296
+ timestamp: new Date(),
297
+ clientInfo: {
298
+ ipAddress: clientInfo.ipAddress,
299
+ userAgent: clientInfo.userAgent,
300
+ ipCountry: clientInfo.ipCountry,
301
+ ipCity: clientInfo.ipCity,
302
+ },
303
+ });
304
+ }
305
+ }
306
+ catch (hookError) {
307
+ // Non-blocking: Log but continue
308
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
309
+ this.logger?.error?.(`Failed to execute mfaMethodAdded hooks: ${errorMessage}`, {
310
+ error: hookError,
311
+ userId: user.id,
312
+ methodName: this.methodName,
313
+ });
314
+ }
315
+ }
275
316
  // If this is the first MFA device being set up, clear any MFA_SETUP_REQUIRED challenges
276
317
  // This prevents phantom challenges when user sets up MFA while logged in
277
318
  // if (isFirstDevice && this.challengeService) {
@@ -309,6 +350,34 @@ class BaseMFAProviderService {
309
350
  });
310
351
  }
311
352
  }
353
+ // ============================================================================
354
+ // Lifecycle Hook: MFA First Enabled (only for first device)
355
+ // ============================================================================
356
+ if (isFirstDevice && this.hookRegistry && this.clientInfoService) {
357
+ try {
358
+ const clientInfo = this.clientInfoService.get();
359
+ await this.hookRegistry.executeMFAFirstEnabled({
360
+ user: userEntity,
361
+ firstMethod: this.methodName,
362
+ enforcedAt: new Date(),
363
+ clientInfo: {
364
+ ipAddress: clientInfo.ipAddress,
365
+ userAgent: clientInfo.userAgent,
366
+ ipCountry: clientInfo.ipCountry,
367
+ ipCity: clientInfo.ipCity,
368
+ },
369
+ });
370
+ }
371
+ catch (hookError) {
372
+ // Non-blocking: Log but continue
373
+ const errorMessage = hookError instanceof Error ? hookError.message : 'Unknown error';
374
+ this.logger?.error?.(`Failed to execute mfaFirstEnabled hooks: ${errorMessage}`, {
375
+ error: hookError,
376
+ userId: user.id,
377
+ methodName: this.methodName,
378
+ });
379
+ }
380
+ }
312
381
  }
313
382
  // ============================================================================
314
383
  // Backup Codes (Common Logic)