@nauth-toolkit/core 0.1.13 → 0.1.17
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.
- package/dist/adapters/database-columns.d.ts +70 -0
- package/dist/adapters/database-columns.d.ts.map +1 -1
- package/dist/adapters/database-columns.js +76 -2
- package/dist/adapters/database-columns.js.map +1 -1
- package/dist/adapters/express.adapter.d.ts +66 -0
- package/dist/adapters/express.adapter.d.ts.map +1 -1
- package/dist/adapters/express.adapter.js +80 -0
- package/dist/adapters/express.adapter.js.map +1 -1
- package/dist/adapters/fastify.adapter.d.ts +42 -0
- package/dist/adapters/fastify.adapter.d.ts.map +1 -1
- package/dist/adapters/fastify.adapter.js +86 -0
- package/dist/adapters/fastify.adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/storage.factory.d.ts +107 -0
- package/dist/adapters/storage.factory.d.ts.map +1 -1
- package/dist/adapters/storage.factory.js +114 -0
- package/dist/adapters/storage.factory.js.map +1 -1
- package/dist/adapters.d.ts +8 -0
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +8 -0
- package/dist/adapters.js.map +1 -1
- package/dist/bootstrap.d.ts +82 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +106 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/dto/admin-set-password.dto.d.ts +90 -0
- package/dist/dto/admin-set-password.dto.d.ts.map +1 -1
- package/dist/dto/admin-set-password.dto.js +91 -0
- package/dist/dto/admin-set-password.dto.js.map +1 -1
- package/dist/dto/auth-challenge.dto.d.ts +170 -0
- package/dist/dto/auth-challenge.dto.d.ts.map +1 -1
- package/dist/dto/auth-challenge.dto.js +170 -0
- package/dist/dto/auth-challenge.dto.js.map +1 -1
- package/dist/dto/auth-response.dto.d.ts +196 -0
- package/dist/dto/auth-response.dto.d.ts.map +1 -1
- package/dist/dto/auth-response.dto.js +149 -0
- package/dist/dto/auth-response.dto.js.map +1 -1
- package/dist/dto/challenge-response.dto.d.ts +155 -0
- package/dist/dto/challenge-response.dto.d.ts.map +1 -1
- package/dist/dto/challenge-response.dto.js +8 -0
- package/dist/dto/challenge-response.dto.js.map +1 -1
- package/dist/dto/change-password-request.dto.d.ts +35 -0
- package/dist/dto/change-password-request.dto.d.ts.map +1 -1
- package/dist/dto/change-password-request.dto.js +35 -0
- package/dist/dto/change-password-request.dto.js.map +1 -1
- package/dist/dto/change-password-response.dto.d.ts +25 -0
- package/dist/dto/change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/change-password-response.dto.js +25 -0
- package/dist/dto/change-password-response.dto.js.map +1 -1
- package/dist/dto/change-password.dto.d.ts +45 -0
- package/dist/dto/change-password.dto.d.ts.map +1 -1
- package/dist/dto/change-password.dto.js +45 -0
- package/dist/dto/change-password.dto.js.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.d.ts +59 -0
- package/dist/dto/confirm-forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.js +59 -0
- package/dist/dto/confirm-forgot-password.dto.js.map +1 -1
- package/dist/dto/error-response.dto.d.ts +103 -0
- package/dist/dto/error-response.dto.d.ts.map +1 -1
- package/dist/dto/error-response.dto.js +103 -0
- package/dist/dto/error-response.dto.js.map +1 -1
- package/dist/dto/forgot-password.dto.d.ts +58 -0
- package/dist/dto/forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/forgot-password.dto.js +58 -0
- package/dist/dto/forgot-password.dto.js.map +1 -1
- package/dist/dto/get-available-methods.dto.d.ts +37 -0
- package/dist/dto/get-available-methods.dto.d.ts.map +1 -1
- package/dist/dto/get-available-methods.dto.js +37 -0
- package/dist/dto/get-available-methods.dto.js.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.d.ts +24 -0
- package/dist/dto/get-challenge-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.js +24 -0
- package/dist/dto/get-challenge-data-response.dto.js.map +1 -1
- package/dist/dto/get-challenge-data.dto.d.ts +46 -0
- package/dist/dto/get-challenge-data.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data.dto.js +46 -0
- package/dist/dto/get-challenge-data.dto.js.map +1 -1
- package/dist/dto/get-client-info.dto.d.ts +74 -0
- package/dist/dto/get-client-info.dto.d.ts.map +1 -1
- package/dist/dto/get-client-info.dto.js +74 -0
- package/dist/dto/get-client-info.dto.js.map +1 -1
- package/dist/dto/get-device-token-response.dto.d.ts +21 -0
- package/dist/dto/get-device-token-response.dto.d.ts.map +1 -1
- package/dist/dto/get-device-token-response.dto.js +21 -0
- package/dist/dto/get-device-token-response.dto.js.map +1 -1
- package/dist/dto/get-events-by-type.dto.d.ts +50 -0
- package/dist/dto/get-events-by-type.dto.d.ts.map +1 -1
- package/dist/dto/get-events-by-type.dto.js +50 -0
- package/dist/dto/get-events-by-type.dto.js.map +1 -1
- package/dist/dto/get-ip-address-response.dto.d.ts +20 -0
- package/dist/dto/get-ip-address-response.dto.d.ts.map +1 -1
- package/dist/dto/get-ip-address-response.dto.js +20 -0
- package/dist/dto/get-ip-address-response.dto.js.map +1 -1
- package/dist/dto/get-mfa-status.dto.d.ts +59 -0
- package/dist/dto/get-mfa-status.dto.d.ts.map +1 -1
- package/dist/dto/get-mfa-status.dto.js +59 -0
- package/dist/dto/get-mfa-status.dto.js.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.d.ts +28 -0
- package/dist/dto/get-risk-assessment-history.dto.d.ts.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.js +28 -0
- package/dist/dto/get-risk-assessment-history.dto.js.map +1 -1
- package/dist/dto/get-session-id-response.dto.d.ts +21 -0
- package/dist/dto/get-session-id-response.dto.d.ts.map +1 -1
- package/dist/dto/get-session-id-response.dto.js +21 -0
- package/dist/dto/get-session-id-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data-response.dto.d.ts +27 -0
- package/dist/dto/get-setup-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data-response.dto.js +27 -0
- package/dist/dto/get-setup-data-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data.dto.d.ts +51 -0
- package/dist/dto/get-setup-data.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data.dto.js +51 -0
- package/dist/dto/get-setup-data.dto.js.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.d.ts +31 -0
- package/dist/dto/get-suspicious-activity.dto.d.ts.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.js +31 -0
- package/dist/dto/get-suspicious-activity.dto.js.map +1 -1
- package/dist/dto/get-user-agent-response.dto.d.ts +19 -0
- package/dist/dto/get-user-agent-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-agent-response.dto.js +19 -0
- package/dist/dto/get-user-agent-response.dto.js.map +1 -1
- package/dist/dto/get-user-auth-history.dto.d.ts +64 -0
- package/dist/dto/get-user-auth-history.dto.d.ts.map +1 -1
- package/dist/dto/get-user-auth-history.dto.js +64 -0
- package/dist/dto/get-user-auth-history.dto.js.map +1 -1
- package/dist/dto/get-user-by-email.dto.d.ts +42 -0
- package/dist/dto/get-user-by-email.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-email.dto.js +42 -0
- package/dist/dto/get-user-by-email.dto.js.map +1 -1
- package/dist/dto/get-user-by-id.dto.d.ts +32 -0
- package/dist/dto/get-user-by-id.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-id.dto.js +32 -0
- package/dist/dto/get-user-by-id.dto.js.map +1 -1
- package/dist/dto/get-user-devices.dto.d.ts +34 -0
- package/dist/dto/get-user-devices.dto.d.ts.map +1 -1
- package/dist/dto/get-user-devices.dto.js +34 -0
- package/dist/dto/get-user-devices.dto.js.map +1 -1
- package/dist/dto/get-user-response.dto.d.ts +14 -0
- package/dist/dto/get-user-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-response.dto.js +15 -0
- package/dist/dto/get-user-response.dto.js.map +1 -1
- package/dist/dto/has-provider.dto.d.ts +33 -0
- package/dist/dto/has-provider.dto.d.ts.map +1 -1
- package/dist/dto/has-provider.dto.js +33 -0
- package/dist/dto/has-provider.dto.js.map +1 -1
- package/dist/dto/index.js +5 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.d.ts +28 -0
- package/dist/dto/is-trusted-device-response.dto.d.ts.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.js +28 -0
- package/dist/dto/is-trusted-device-response.dto.js.map +1 -1
- package/dist/dto/list-providers-response.dto.d.ts +19 -0
- package/dist/dto/list-providers-response.dto.d.ts.map +1 -1
- package/dist/dto/list-providers-response.dto.js +19 -0
- package/dist/dto/list-providers-response.dto.js.map +1 -1
- package/dist/dto/login.dto.d.ts +48 -0
- package/dist/dto/login.dto.d.ts.map +1 -1
- package/dist/dto/login.dto.js +50 -1
- package/dist/dto/login.dto.js.map +1 -1
- package/dist/dto/logout-all-response.dto.d.ts +20 -0
- package/dist/dto/logout-all-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-all-response.dto.js +20 -0
- package/dist/dto/logout-all-response.dto.js.map +1 -1
- package/dist/dto/logout-all.dto.d.ts +42 -0
- package/dist/dto/logout-all.dto.d.ts.map +1 -1
- package/dist/dto/logout-all.dto.js +42 -0
- package/dist/dto/logout-all.dto.js.map +1 -1
- package/dist/dto/logout-response.dto.d.ts +21 -0
- package/dist/dto/logout-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-response.dto.js +21 -0
- package/dist/dto/logout-response.dto.js.map +1 -1
- package/dist/dto/logout.dto.d.ts +45 -0
- package/dist/dto/logout.dto.d.ts.map +1 -1
- package/dist/dto/logout.dto.js +45 -0
- package/dist/dto/logout.dto.js.map +1 -1
- package/dist/dto/refresh-token.dto.d.ts +28 -0
- package/dist/dto/refresh-token.dto.d.ts.map +1 -1
- package/dist/dto/refresh-token.dto.js +28 -0
- package/dist/dto/refresh-token.dto.js.map +1 -1
- package/dist/dto/remove-devices.dto.d.ts +51 -0
- package/dist/dto/remove-devices.dto.d.ts.map +1 -1
- package/dist/dto/remove-devices.dto.js +51 -0
- package/dist/dto/remove-devices.dto.js.map +1 -1
- package/dist/dto/resend-code-response.dto.d.ts +28 -0
- package/dist/dto/resend-code-response.dto.d.ts.map +1 -1
- package/dist/dto/resend-code-response.dto.js +28 -0
- package/dist/dto/resend-code-response.dto.js.map +1 -1
- package/dist/dto/resend-code.dto.d.ts +37 -0
- package/dist/dto/resend-code.dto.d.ts.map +1 -1
- package/dist/dto/resend-code.dto.js +37 -0
- package/dist/dto/resend-code.dto.js.map +1 -1
- package/dist/dto/reset-password.dto.d.ts +74 -0
- package/dist/dto/reset-password.dto.d.ts.map +1 -1
- package/dist/dto/reset-password.dto.js +76 -1
- package/dist/dto/reset-password.dto.js.map +1 -1
- package/dist/dto/respond-challenge.dto.d.ts +147 -0
- package/dist/dto/respond-challenge.dto.d.ts.map +1 -1
- package/dist/dto/respond-challenge.dto.js +162 -0
- package/dist/dto/respond-challenge.dto.js.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.d.ts +65 -0
- package/dist/dto/set-mfa-exemption.dto.d.ts.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.js +65 -0
- package/dist/dto/set-mfa-exemption.dto.js.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.d.ts +23 -0
- package/dist/dto/set-must-change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.js +23 -0
- package/dist/dto/set-must-change-password-response.dto.js.map +1 -1
- package/dist/dto/set-must-change-password.dto.d.ts +32 -0
- package/dist/dto/set-must-change-password.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password.dto.js +32 -0
- package/dist/dto/set-must-change-password.dto.js.map +1 -1
- package/dist/dto/set-preferred-method.dto.d.ts +48 -0
- package/dist/dto/set-preferred-method.dto.d.ts.map +1 -1
- package/dist/dto/set-preferred-method.dto.js +48 -0
- package/dist/dto/set-preferred-method.dto.js.map +1 -1
- package/dist/dto/setup-mfa.dto.d.ts +62 -0
- package/dist/dto/setup-mfa.dto.d.ts.map +1 -1
- package/dist/dto/setup-mfa.dto.js +62 -0
- package/dist/dto/setup-mfa.dto.js.map +1 -1
- package/dist/dto/signup.dto.d.ts +92 -0
- package/dist/dto/signup.dto.d.ts.map +1 -1
- package/dist/dto/signup.dto.js +93 -0
- package/dist/dto/signup.dto.js.map +1 -1
- package/dist/dto/social-auth.dto.d.ts +234 -0
- package/dist/dto/social-auth.dto.d.ts.map +1 -1
- package/dist/dto/social-auth.dto.js +234 -0
- package/dist/dto/social-auth.dto.js.map +1 -1
- package/dist/dto/trust-device-response.dto.d.ts +26 -0
- package/dist/dto/trust-device-response.dto.d.ts.map +1 -1
- package/dist/dto/trust-device-response.dto.js +26 -0
- package/dist/dto/trust-device-response.dto.js.map +1 -1
- package/dist/dto/trust-device.dto.d.ts +9 -0
- package/dist/dto/trust-device.dto.d.ts.map +1 -1
- package/dist/dto/trust-device.dto.js +9 -0
- package/dist/dto/trust-device.dto.js.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.d.ts +36 -0
- package/dist/dto/update-user-attributes-request.dto.d.ts.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.js +36 -0
- package/dist/dto/update-user-attributes-request.dto.js.map +1 -1
- package/dist/dto/user-response.dto.d.ts +81 -0
- package/dist/dto/user-response.dto.d.ts.map +1 -1
- package/dist/dto/user-response.dto.js +84 -2
- package/dist/dto/user-response.dto.js.map +1 -1
- package/dist/dto/user-update.dto.d.ts +132 -0
- package/dist/dto/user-update.dto.d.ts.map +1 -1
- package/dist/dto/user-update.dto.js +133 -0
- package/dist/dto/user-update.dto.js.map +1 -1
- package/dist/dto/verify-email.dto.d.ts +171 -0
- package/dist/dto/verify-email.dto.d.ts.map +1 -1
- package/dist/dto/verify-email.dto.js +173 -1
- package/dist/dto/verify-email.dto.js.map +1 -1
- package/dist/dto/verify-mfa-code.dto.d.ts +65 -0
- package/dist/dto/verify-mfa-code.dto.d.ts.map +1 -1
- package/dist/dto/verify-mfa-code.dto.js +65 -0
- package/dist/dto/verify-mfa-code.dto.js.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.d.ts +49 -0
- package/dist/dto/verify-phone-by-sub.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.js +49 -0
- package/dist/dto/verify-phone-by-sub.dto.js.map +1 -1
- package/dist/dto/verify-phone.dto.d.ts +139 -0
- package/dist/dto/verify-phone.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone.dto.js +142 -1
- package/dist/dto/verify-phone.dto.js.map +1 -1
- package/dist/dto.d.ts +10 -0
- package/dist/dto.d.ts.map +1 -1
- package/dist/dto.js +10 -0
- package/dist/dto.js.map +1 -1
- package/dist/entities/auth-audit.entity.d.ts +159 -0
- package/dist/entities/auth-audit.entity.d.ts.map +1 -1
- package/dist/entities/auth-audit.entity.js +166 -0
- package/dist/entities/auth-audit.entity.js.map +1 -1
- package/dist/entities/challenge-session.entity.d.ts +87 -0
- package/dist/entities/challenge-session.entity.d.ts.map +1 -1
- package/dist/entities/challenge-session.entity.js +87 -0
- package/dist/entities/challenge-session.entity.js.map +1 -1
- package/dist/entities/index.d.ts +18 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +18 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/login-attempt.entity.d.ts +43 -0
- package/dist/entities/login-attempt.entity.d.ts.map +1 -1
- package/dist/entities/login-attempt.entity.js +43 -0
- package/dist/entities/login-attempt.entity.js.map +1 -1
- package/dist/entities/mfa-device.entity.d.ts +112 -0
- package/dist/entities/mfa-device.entity.d.ts.map +1 -1
- package/dist/entities/mfa-device.entity.js +112 -0
- package/dist/entities/mfa-device.entity.js.map +1 -1
- package/dist/entities/rate-limit.entity.d.ts +31 -0
- package/dist/entities/rate-limit.entity.d.ts.map +1 -1
- package/dist/entities/rate-limit.entity.js +31 -0
- package/dist/entities/rate-limit.entity.js.map +1 -1
- package/dist/entities/session.entity.d.ts +121 -0
- package/dist/entities/session.entity.d.ts.map +1 -1
- package/dist/entities/session.entity.js +121 -0
- package/dist/entities/session.entity.js.map +1 -1
- package/dist/entities/social-account.entity.d.ts +75 -0
- package/dist/entities/social-account.entity.d.ts.map +1 -1
- package/dist/entities/social-account.entity.js +75 -0
- package/dist/entities/social-account.entity.js.map +1 -1
- package/dist/entities/storage-lock.entity.d.ts +28 -0
- package/dist/entities/storage-lock.entity.d.ts.map +1 -1
- package/dist/entities/storage-lock.entity.js +28 -0
- package/dist/entities/storage-lock.entity.js.map +1 -1
- package/dist/entities/trusted-device.entity.d.ts +83 -0
- package/dist/entities/trusted-device.entity.d.ts.map +1 -1
- package/dist/entities/trusted-device.entity.js +83 -0
- package/dist/entities/trusted-device.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +166 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +166 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/verification-token.entity.d.ts +102 -0
- package/dist/entities/verification-token.entity.d.ts.map +1 -1
- package/dist/entities/verification-token.entity.js +102 -0
- package/dist/entities/verification-token.entity.js.map +1 -1
- package/dist/entities.d.ts +8 -0
- package/dist/entities.d.ts.map +1 -1
- package/dist/entities.js +8 -0
- package/dist/entities.js.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.d.ts +211 -0
- package/dist/enums/auth-audit-event-type.enum.d.ts.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.js +244 -0
- package/dist/enums/auth-audit-event-type.enum.js.map +1 -1
- package/dist/enums/error-codes.enum.d.ts +296 -0
- package/dist/enums/error-codes.enum.d.ts.map +1 -1
- package/dist/enums/error-codes.enum.js +332 -0
- package/dist/enums/error-codes.enum.js.map +1 -1
- package/dist/enums/mfa-method.enum.d.ts +74 -0
- package/dist/enums/mfa-method.enum.d.ts.map +1 -1
- package/dist/enums/mfa-method.enum.js +64 -0
- package/dist/enums/mfa-method.enum.js.map +1 -1
- package/dist/enums/risk-factor.enum.d.ts +91 -0
- package/dist/enums/risk-factor.enum.d.ts.map +1 -1
- package/dist/enums/risk-factor.enum.js +97 -0
- package/dist/enums/risk-factor.enum.js.map +1 -1
- package/dist/exceptions/nauth.exception.d.ts +149 -0
- package/dist/exceptions/nauth.exception.d.ts.map +1 -1
- package/dist/exceptions/nauth.exception.js +159 -0
- package/dist/exceptions/nauth.exception.js.map +1 -1
- package/dist/handlers/auth.handler.d.ts +32 -0
- package/dist/handlers/auth.handler.d.ts.map +1 -1
- package/dist/handlers/auth.handler.js +47 -1
- package/dist/handlers/auth.handler.js.map +1 -1
- package/dist/handlers/client-info.handler.d.ts +25 -0
- package/dist/handlers/client-info.handler.d.ts.map +1 -1
- package/dist/handlers/client-info.handler.js +36 -2
- package/dist/handlers/client-info.handler.js.map +1 -1
- package/dist/handlers/csrf.handler.d.ts +32 -0
- package/dist/handlers/csrf.handler.d.ts.map +1 -1
- package/dist/handlers/csrf.handler.js +49 -1
- package/dist/handlers/csrf.handler.js.map +1 -1
- package/dist/handlers/token-delivery.handler.d.ts +16 -0
- package/dist/handlers/token-delivery.handler.d.ts.map +1 -1
- package/dist/handlers/token-delivery.handler.js +22 -1
- package/dist/handlers/token-delivery.handler.js.map +1 -1
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/client-info.interface.d.ts +58 -0
- package/dist/interfaces/client-info.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.d.ts +1774 -0
- package/dist/interfaces/config.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.js +16 -0
- package/dist/interfaces/config.interface.js.map +1 -1
- package/dist/interfaces/entities.interface.d.ts +48 -0
- package/dist/interfaces/entities.interface.d.ts.map +1 -1
- package/dist/interfaces/entities.interface.js +8 -0
- package/dist/interfaces/entities.interface.js.map +1 -1
- package/dist/interfaces/index.js +5 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/logger.interface.d.ts +213 -0
- package/dist/interfaces/logger.interface.d.ts.map +1 -1
- package/dist/interfaces/logger.interface.js +35 -0
- package/dist/interfaces/logger.interface.js.map +1 -1
- package/dist/interfaces/mfa-provider.interface.d.ts +134 -0
- package/dist/interfaces/mfa-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/oauth.interface.d.ts +110 -0
- package/dist/interfaces/oauth.interface.d.ts.map +1 -1
- package/dist/interfaces/provider.interface.d.ts +83 -0
- package/dist/interfaces/provider.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.d.ts +246 -0
- package/dist/interfaces/sms-template.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.js +26 -0
- package/dist/interfaces/sms-template.interface.js.map +1 -1
- package/dist/interfaces/social-auth-provider.interface.d.ts +115 -0
- package/dist/interfaces/social-auth-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/storage-adapter.interface.d.ts +37 -0
- package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.d.ts +351 -0
- package/dist/interfaces/template.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.js +13 -0
- package/dist/interfaces/template.interface.js.map +1 -1
- package/dist/interfaces/token-verifier.interface.d.ts +101 -0
- package/dist/interfaces/token-verifier.interface.d.ts.map +1 -1
- package/dist/interfaces.d.ts +8 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +8 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/internal.d.ts +120 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +138 -0
- package/dist/internal.js.map +1 -1
- package/dist/platform/interfaces.d.ts +187 -0
- package/dist/platform/interfaces.d.ts.map +1 -1
- package/dist/platform/interfaces.js +11 -0
- package/dist/platform/interfaces.js.map +1 -1
- package/dist/schemas/auth-config.schema.d.ts +48 -0
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +188 -9
- package/dist/schemas/auth-config.schema.js.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.d.ts +144 -0
- package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.js +151 -5
- package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
- package/dist/services/auth-audit.service.d.ts +195 -0
- package/dist/services/auth-audit.service.d.ts.map +1 -1
- package/dist/services/auth-audit.service.js +228 -1
- package/dist/services/auth-audit.service.js.map +1 -1
- package/dist/services/auth-challenge-helper.service.d.ts +144 -1
- package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
- package/dist/services/auth-challenge-helper.service.js +295 -16
- package/dist/services/auth-challenge-helper.service.js.map +1 -1
- package/dist/services/auth-flow-context-builder.service.d.ts +120 -1
- package/dist/services/auth-flow-context-builder.service.d.ts.map +1 -1
- package/dist/services/auth-flow-context-builder.service.js +184 -5
- package/dist/services/auth-flow-context-builder.service.js.map +1 -1
- package/dist/services/auth-flow-rules.d.ts +136 -0
- package/dist/services/auth-flow-rules.d.ts.map +1 -1
- package/dist/services/auth-flow-rules.js +137 -0
- package/dist/services/auth-flow-rules.js.map +1 -1
- package/dist/services/auth-flow-state-definitions.d.ts +40 -0
- package/dist/services/auth-flow-state-definitions.d.ts.map +1 -1
- package/dist/services/auth-flow-state-definitions.js +98 -0
- package/dist/services/auth-flow-state-definitions.js.map +1 -1
- package/dist/services/auth-flow-state-machine.service.d.ts +91 -0
- package/dist/services/auth-flow-state-machine.service.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.service.js +102 -0
- package/dist/services/auth-flow-state-machine.service.js.map +1 -1
- package/dist/services/auth-flow-state-machine.types.d.ts +221 -0
- package/dist/services/auth-flow-state-machine.types.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.types.js +47 -0
- package/dist/services/auth-flow-state-machine.types.js.map +1 -1
- package/dist/services/auth.service.d.ts +397 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +943 -27
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/challenge.service.d.ts +255 -1
- package/dist/services/challenge.service.d.ts.map +1 -1
- package/dist/services/challenge.service.js +327 -3
- package/dist/services/challenge.service.js.map +1 -1
- package/dist/services/client-info.service.d.ts +143 -0
- package/dist/services/client-info.service.d.ts.map +1 -1
- package/dist/services/client-info.service.js +161 -0
- package/dist/services/client-info.service.js.map +1 -1
- package/dist/services/csrf.service.d.ts +15 -0
- package/dist/services/csrf.service.d.ts.map +1 -1
- package/dist/services/csrf.service.js +16 -0
- package/dist/services/csrf.service.js.map +1 -1
- package/dist/services/email-verification.service.d.ts +52 -0
- package/dist/services/email-verification.service.d.ts.map +1 -1
- package/dist/services/email-verification.service.js +149 -10
- package/dist/services/email-verification.service.js.map +1 -1
- package/dist/services/geo-location.service.d.ts +105 -0
- package/dist/services/geo-location.service.d.ts.map +1 -1
- package/dist/services/geo-location.service.js +188 -2
- package/dist/services/geo-location.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +257 -0
- package/dist/services/jwt.service.d.ts.map +1 -1
- package/dist/services/jwt.service.js +284 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/mfa-base.service.d.ts +179 -1
- package/dist/services/mfa-base.service.d.ts.map +1 -1
- package/dist/services/mfa-base.service.js +256 -2
- package/dist/services/mfa-base.service.js.map +1 -1
- package/dist/services/mfa.service.d.ts +304 -0
- package/dist/services/mfa.service.d.ts.map +1 -1
- package/dist/services/mfa.service.js +380 -0
- package/dist/services/mfa.service.js.map +1 -1
- package/dist/services/password-reset.service.d.ts +46 -0
- package/dist/services/password-reset.service.d.ts.map +1 -1
- package/dist/services/password-reset.service.js +79 -0
- package/dist/services/password-reset.service.js.map +1 -1
- package/dist/services/password.service.d.ts +139 -0
- package/dist/services/password.service.d.ts.map +1 -1
- package/dist/services/password.service.js +167 -9
- package/dist/services/password.service.js.map +1 -1
- package/dist/services/phone-verification.service.d.ts +75 -0
- package/dist/services/phone-verification.service.d.ts.map +1 -1
- package/dist/services/phone-verification.service.js +188 -6
- package/dist/services/phone-verification.service.js.map +1 -1
- package/dist/services/risk-detection.service.d.ts +198 -0
- package/dist/services/risk-detection.service.d.ts.map +1 -1
- package/dist/services/risk-detection.service.js +358 -11
- package/dist/services/risk-detection.service.js.map +1 -1
- package/dist/services/risk-scoring.service.d.ts +84 -0
- package/dist/services/risk-scoring.service.d.ts.map +1 -1
- package/dist/services/risk-scoring.service.js +87 -0
- package/dist/services/risk-scoring.service.js.map +1 -1
- package/dist/services/session.service.d.ts +204 -0
- package/dist/services/session.service.d.ts.map +1 -1
- package/dist/services/session.service.js +289 -4
- package/dist/services/session.service.js.map +1 -1
- package/dist/services/social-auth-base.service.d.ts +123 -1
- package/dist/services/social-auth-base.service.d.ts.map +1 -1
- package/dist/services/social-auth-base.service.js +155 -2
- package/dist/services/social-auth-base.service.js.map +1 -1
- package/dist/services/social-auth.service.d.ts +191 -0
- package/dist/services/social-auth.service.d.ts.map +1 -1
- package/dist/services/social-auth.service.js +215 -2
- package/dist/services/social-auth.service.js.map +1 -1
- package/dist/services/social-provider-registry.service.d.ts +86 -0
- package/dist/services/social-provider-registry.service.d.ts.map +1 -1
- package/dist/services/social-provider-registry.service.js +86 -0
- package/dist/services/social-provider-registry.service.js.map +1 -1
- package/dist/services/trusted-device.service.d.ts +105 -0
- package/dist/services/trusted-device.service.d.ts.map +1 -1
- package/dist/services/trusted-device.service.js +133 -4
- package/dist/services/trusted-device.service.js.map +1 -1
- package/dist/storage/account-lockout-storage.service.d.ts +35 -0
- package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
- package/dist/storage/account-lockout-storage.service.js +35 -0
- package/dist/storage/account-lockout-storage.service.js.map +1 -1
- package/dist/storage/memory-storage.adapter.d.ts +148 -0
- package/dist/storage/memory-storage.adapter.d.ts.map +1 -1
- package/dist/storage/memory-storage.adapter.js +201 -6
- package/dist/storage/memory-storage.adapter.js.map +1 -1
- package/dist/storage/rate-limit-storage.service.d.ts +3 -0
- package/dist/storage/rate-limit-storage.service.d.ts.map +1 -1
- package/dist/storage/rate-limit-storage.service.js +4 -0
- package/dist/storage/rate-limit-storage.service.js.map +1 -1
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -0
- package/dist/storage.js.map +1 -1
- package/dist/templates/html-template.engine.d.ts +110 -0
- package/dist/templates/html-template.engine.d.ts.map +1 -1
- package/dist/templates/html-template.engine.js +147 -0
- package/dist/templates/html-template.engine.js.map +1 -1
- package/dist/templates/index.d.ts +5 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +5 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/sms-template.engine.d.ts +151 -0
- package/dist/templates/sms-template.engine.d.ts.map +1 -1
- package/dist/templates/sms-template.engine.js +171 -0
- package/dist/templates/sms-template.engine.js.map +1 -1
- package/dist/templates.d.ts +8 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +8 -0
- package/dist/templates.js.map +1 -1
- package/dist/utils/common-passwords.d.ts +42 -0
- package/dist/utils/common-passwords.d.ts.map +1 -1
- package/dist/utils/common-passwords.js +88 -0
- package/dist/utils/common-passwords.js.map +1 -1
- package/dist/utils/context-storage.d.ts +129 -0
- package/dist/utils/context-storage.d.ts.map +1 -1
- package/dist/utils/context-storage.js +129 -0
- package/dist/utils/context-storage.js.map +1 -1
- package/dist/utils/cookie-names.util.d.ts +35 -0
- package/dist/utils/cookie-names.util.d.ts.map +1 -1
- package/dist/utils/cookie-names.util.js +37 -0
- package/dist/utils/cookie-names.util.js.map +1 -1
- package/dist/utils/cookies.util.d.ts +19 -0
- package/dist/utils/cookies.util.d.ts.map +1 -1
- package/dist/utils/cookies.util.js +30 -3
- package/dist/utils/cookies.util.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ip-extractor.d.ts +88 -0
- package/dist/utils/ip-extractor.d.ts.map +1 -1
- package/dist/utils/ip-extractor.js +109 -16
- package/dist/utils/ip-extractor.js.map +1 -1
- package/dist/utils/nauth-logger.d.ts +70 -0
- package/dist/utils/nauth-logger.d.ts.map +1 -1
- package/dist/utils/nauth-logger.js +82 -4
- package/dist/utils/nauth-logger.js.map +1 -1
- package/dist/utils/pii-redactor.d.ts +70 -0
- package/dist/utils/pii-redactor.d.ts.map +1 -1
- package/dist/utils/pii-redactor.js +102 -0
- package/dist/utils/pii-redactor.js.map +1 -1
- package/dist/utils/setup/get-repositories.d.ts +16 -0
- package/dist/utils/setup/get-repositories.d.ts.map +1 -1
- package/dist/utils/setup/get-repositories.js +21 -0
- package/dist/utils/setup/get-repositories.js.map +1 -1
- package/dist/utils/setup/init-services.d.ts +40 -1
- package/dist/utils/setup/init-services.d.ts.map +1 -1
- package/dist/utils/setup/init-services.js +98 -0
- package/dist/utils/setup/init-services.js.map +1 -1
- package/dist/utils/setup/init-social.d.ts +27 -0
- package/dist/utils/setup/init-social.d.ts.map +1 -1
- package/dist/utils/setup/init-social.js +49 -0
- package/dist/utils/setup/init-social.js.map +1 -1
- package/dist/utils/setup/init-storage.d.ts +22 -0
- package/dist/utils/setup/init-storage.d.ts.map +1 -1
- package/dist/utils/setup/init-storage.js +36 -0
- package/dist/utils/setup/init-storage.js.map +1 -1
- package/dist/utils/setup/register-mfa.d.ts +22 -0
- package/dist/utils/setup/register-mfa.d.ts.map +1 -1
- package/dist/utils/setup/register-mfa.js +41 -0
- package/dist/utils/setup/register-mfa.js.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.d.ts +7 -0
- package/dist/utils/setup/run-nauth-migrations.d.ts.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.js +8 -0
- package/dist/utils/setup/run-nauth-migrations.js.map +1 -1
- package/dist/utils/token-delivery-policy.d.ts +17 -0
- package/dist/utils/token-delivery-policy.d.ts.map +1 -1
- package/dist/utils/token-delivery-policy.js +17 -0
- package/dist/utils/token-delivery-policy.js.map +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -0
- package/dist/utils.js.map +1 -1
- package/dist/validators/template.validator.d.ts +80 -0
- package/dist/validators/template.validator.d.ts.map +1 -1
- package/dist/validators/template.validator.js +94 -0
- package/dist/validators/template.validator.js.map +1 -1
- package/package.json +7 -2
|
@@ -7,15 +7,73 @@ import { RiskScoringService } from './risk-scoring.service';
|
|
|
7
7
|
import { ClientInfoService } from './client-info.service';
|
|
8
8
|
import { NAuthConfig, AdaptiveMFARiskEventPayload } from '../interfaces/config.interface';
|
|
9
9
|
import { NAuthLogger } from '../utils/nauth-logger';
|
|
10
|
+
/**
|
|
11
|
+
* Adaptive MFA decision result
|
|
12
|
+
*/
|
|
10
13
|
export interface AdaptiveMFADecision {
|
|
14
|
+
/**
|
|
15
|
+
* Action to take
|
|
16
|
+
*/
|
|
11
17
|
action: 'allow' | 'require_mfa' | 'block_signin';
|
|
18
|
+
/**
|
|
19
|
+
* Risk score (0-100)
|
|
20
|
+
*/
|
|
12
21
|
riskScore: number;
|
|
22
|
+
/**
|
|
23
|
+
* Risk level classification
|
|
24
|
+
*/
|
|
13
25
|
riskLevel: 'low' | 'medium' | 'high';
|
|
26
|
+
/**
|
|
27
|
+
* Detected risk factors
|
|
28
|
+
* Array of RiskFactor enum values (stored as strings at runtime)
|
|
29
|
+
*/
|
|
14
30
|
riskFactors: RiskFactor[];
|
|
31
|
+
/**
|
|
32
|
+
* Whether user should be notified
|
|
33
|
+
*/
|
|
15
34
|
notifyUser: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Whether lifecycle hook overrode the decision
|
|
37
|
+
*/
|
|
16
38
|
hookOverride: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Risk event payload (included when action requires it or notifyUser is true)
|
|
41
|
+
* Contains full client context for use in blockUserSignIn or audit logging
|
|
42
|
+
*/
|
|
17
43
|
payload?: AdaptiveMFARiskEventPayload;
|
|
18
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Adaptive MFA Decision Service
|
|
47
|
+
*
|
|
48
|
+
* Makes context-aware MFA requirement decisions based on risk analysis.
|
|
49
|
+
* Supports multiple actions (allow, require_mfa, block_signin) based on risk level.
|
|
50
|
+
*
|
|
51
|
+
* **Decision Flow:**
|
|
52
|
+
* 1. Detect risk factors (via RiskDetectionService)
|
|
53
|
+
* 2. Calculate risk score (via RiskScoringService)
|
|
54
|
+
* 3. Determine risk level and action from configuration
|
|
55
|
+
* 4. Call lifecycle hooks if notifyUser is true
|
|
56
|
+
* 5. Record audit event (non-blocking)
|
|
57
|
+
* 6. Return decision object
|
|
58
|
+
*
|
|
59
|
+
* **Default Risk Levels:**
|
|
60
|
+
* - Low (0-20): action 'allow', notifyUser false
|
|
61
|
+
* - Medium (21-50): action 'require_mfa', notifyUser true
|
|
62
|
+
* - High (51-100): action 'require_mfa', notifyUser true (conservative default)
|
|
63
|
+
*
|
|
64
|
+
* **User Blocking:**
|
|
65
|
+
* When action is 'block_signin', user is blocked in storage adapter with optional TTL.
|
|
66
|
+
* Block status is checked before evaluation to prevent blocked users from attempting sign-in.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const decision = await adaptiveMFADecisionService.evaluateAdaptiveMFA(user, 'password');
|
|
71
|
+
* if (decision.action === 'block_signin') {
|
|
72
|
+
* throw new NAuthException(AuthErrorCode.SIGNIN_BLOCKED_HIGH_RISK, 'Sign-in blocked');
|
|
73
|
+
* }
|
|
74
|
+
* return decision.action === 'require_mfa';
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
19
77
|
export declare class AdaptiveMFADecisionService {
|
|
20
78
|
private readonly riskDetectionService;
|
|
21
79
|
private readonly riskScoringService;
|
|
@@ -24,16 +82,102 @@ export declare class AdaptiveMFADecisionService {
|
|
|
24
82
|
private readonly config;
|
|
25
83
|
private readonly logger;
|
|
26
84
|
private readonly auditService?;
|
|
85
|
+
/**
|
|
86
|
+
* Default risk level configuration
|
|
87
|
+
*
|
|
88
|
+
* Conservative defaults that prioritize security:
|
|
89
|
+
* - Low risk: Allow without MFA (normal flow)
|
|
90
|
+
* - Medium risk: Require MFA
|
|
91
|
+
* - High risk: Require MFA (conservative - don't block by default)
|
|
92
|
+
*/
|
|
27
93
|
private readonly defaultRiskLevels;
|
|
28
94
|
constructor(riskDetectionService: RiskDetectionService, riskScoringService: RiskScoringService, storageAdapter: StorageAdapter, clientInfoService: ClientInfoService, config: NAuthConfig, logger: NAuthLogger, auditService?: AuthAuditService | undefined);
|
|
95
|
+
/**
|
|
96
|
+
* Evaluate adaptive MFA requirement with risk-based actions
|
|
97
|
+
*
|
|
98
|
+
* Main entry point for adaptive MFA evaluation. Analyzes current login context,
|
|
99
|
+
* calculates risk score, determines action, and calls lifecycle hooks.
|
|
100
|
+
*
|
|
101
|
+
* @param user - User being authenticated
|
|
102
|
+
* @param authMethod - Authentication method ('password', 'google', 'apple', etc.)
|
|
103
|
+
* @returns Decision object with action, risk details, and hook override status
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const decision = await adaptiveMFADecisionService.evaluateAdaptiveMFA(user, 'password');
|
|
108
|
+
* if (decision.action === 'block_signin') {
|
|
109
|
+
* // Handle blocking
|
|
110
|
+
* }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
29
113
|
evaluateAdaptiveMFA(user: IUser, authMethod: string): Promise<AdaptiveMFADecision>;
|
|
114
|
+
/**
|
|
115
|
+
* Determine risk level and action based on score and configured thresholds
|
|
116
|
+
*
|
|
117
|
+
* Evaluates risk score against configured thresholds in order: low → medium → high.
|
|
118
|
+
* Returns the first level that the score falls within.
|
|
119
|
+
*
|
|
120
|
+
* @param riskScore - Calculated risk score (0-100)
|
|
121
|
+
* @param riskLevels - Configured risk level thresholds
|
|
122
|
+
* @returns Risk level, action, and notifyUser flag
|
|
123
|
+
* @private
|
|
124
|
+
*/
|
|
30
125
|
private determineRiskLevelAndAction;
|
|
126
|
+
/**
|
|
127
|
+
* Check if user is currently blocked due to high-risk sign-in
|
|
128
|
+
*
|
|
129
|
+
* Uses storage adapter to check for existing block. Block is stored with
|
|
130
|
+
* key format: `adaptive_mfa_block:{userId}`.
|
|
131
|
+
*
|
|
132
|
+
* @param userId - Internal user ID (integer)
|
|
133
|
+
* @returns Block status with expiration and message if blocked
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const blockStatus = await adaptiveMFADecisionService.isUserBlocked(user.id);
|
|
138
|
+
* if (blockStatus.blocked) {
|
|
139
|
+
* throw new NAuthException(AuthErrorCode.SIGNIN_BLOCKED_HIGH_RISK, blockStatus.message);
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
31
143
|
isUserBlocked(userId: number): Promise<{
|
|
32
144
|
blocked: boolean;
|
|
33
145
|
expiresAt?: Date;
|
|
34
146
|
message?: string;
|
|
35
147
|
}>;
|
|
148
|
+
/**
|
|
149
|
+
* Block user sign-in due to high risk
|
|
150
|
+
*
|
|
151
|
+
* Stores block in storage adapter with optional TTL. Block data includes:
|
|
152
|
+
* - userId, userSub (for reference)
|
|
153
|
+
* - message (shown to user)
|
|
154
|
+
* - riskScore, riskFactors (for audit)
|
|
155
|
+
* - blockedAt, expiresAt (timestamps)
|
|
156
|
+
*
|
|
157
|
+
* Also calls onSignInBlocked lifecycle hook if configured.
|
|
158
|
+
*
|
|
159
|
+
* @param user - User to block
|
|
160
|
+
* @param payload - Risk event payload with all context
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* await adaptiveMFADecisionService.blockUserSignIn(user, payload);
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
36
167
|
blockUserSignIn(user: IUser, payload: AdaptiveMFARiskEventPayload): Promise<void>;
|
|
168
|
+
/**
|
|
169
|
+
* Clear user block (manual unblock)
|
|
170
|
+
*
|
|
171
|
+
* Removes the block from storage adapter, allowing user to sign in again.
|
|
172
|
+
* Useful for admin actions or when risk situation has improved.
|
|
173
|
+
*
|
|
174
|
+
* @param userId - Internal user ID (integer)
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```typescript
|
|
178
|
+
* await adaptiveMFADecisionService.clearUserBlock(user.id);
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
37
181
|
clearUserBlock(userId: number): Promise<void>;
|
|
38
182
|
}
|
|
39
183
|
//# sourceMappingURL=adaptive-mfa-decision.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-mfa-decision.service.d.ts","sourceRoot":"","sources":["../../src/services/adaptive-mfa-decision.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,wBAAwB,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAwB,MAAM,gCAAgC,CAAC;AAChH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"adaptive-mfa-decision.service.d.ts","sourceRoot":"","sources":["../../src/services/adaptive-mfa-decision.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,wBAAwB,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAwB,MAAM,gCAAgC,CAAC;AAChH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,cAAc,CAAC;IAEjD;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAErC;;;OAGG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,2BAA2B,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,0BAA0B;IAgCnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IArChC;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAoBhC;gBAGiB,oBAAoB,EAAE,oBAAoB,EAC1C,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,EACnB,YAAY,CAAC,EAAE,gBAAgB,YAAA;IAGlD;;;;;;;;;;;;;;;;;OAiBG;IACG,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA6HxF;;;;;;;;;;OAUG;IACH,OAAO,CAAC,2BAA2B;IAoCnC;;;;;;;;;;;;;;;;OAgBG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3C,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAgCF;;;;;;;;;;;;;;;;;;OAkBG;IACG,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CvF;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAWpD"}
|
|
@@ -3,6 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AdaptiveMFADecisionService = void 0;
|
|
4
4
|
const auth_audit_event_type_enum_1 = require("../enums/auth-audit-event-type.enum");
|
|
5
5
|
const risk_factor_enum_1 = require("../enums/risk-factor.enum");
|
|
6
|
+
/**
|
|
7
|
+
* Adaptive MFA Decision Service
|
|
8
|
+
*
|
|
9
|
+
* Makes context-aware MFA requirement decisions based on risk analysis.
|
|
10
|
+
* Supports multiple actions (allow, require_mfa, block_signin) based on risk level.
|
|
11
|
+
*
|
|
12
|
+
* **Decision Flow:**
|
|
13
|
+
* 1. Detect risk factors (via RiskDetectionService)
|
|
14
|
+
* 2. Calculate risk score (via RiskScoringService)
|
|
15
|
+
* 3. Determine risk level and action from configuration
|
|
16
|
+
* 4. Call lifecycle hooks if notifyUser is true
|
|
17
|
+
* 5. Record audit event (non-blocking)
|
|
18
|
+
* 6. Return decision object
|
|
19
|
+
*
|
|
20
|
+
* **Default Risk Levels:**
|
|
21
|
+
* - Low (0-20): action 'allow', notifyUser false
|
|
22
|
+
* - Medium (21-50): action 'require_mfa', notifyUser true
|
|
23
|
+
* - High (51-100): action 'require_mfa', notifyUser true (conservative default)
|
|
24
|
+
*
|
|
25
|
+
* **User Blocking:**
|
|
26
|
+
* When action is 'block_signin', user is blocked in storage adapter with optional TTL.
|
|
27
|
+
* Block status is checked before evaluation to prevent blocked users from attempting sign-in.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const decision = await adaptiveMFADecisionService.evaluateAdaptiveMFA(user, 'password');
|
|
32
|
+
* if (decision.action === 'block_signin') {
|
|
33
|
+
* throw new NAuthException(AuthErrorCode.SIGNIN_BLOCKED_HIGH_RISK, 'Sign-in blocked');
|
|
34
|
+
* }
|
|
35
|
+
* return decision.action === 'require_mfa';
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
6
38
|
class AdaptiveMFADecisionService {
|
|
7
39
|
riskDetectionService;
|
|
8
40
|
riskScoringService;
|
|
@@ -11,6 +43,14 @@ class AdaptiveMFADecisionService {
|
|
|
11
43
|
config;
|
|
12
44
|
logger;
|
|
13
45
|
auditService;
|
|
46
|
+
/**
|
|
47
|
+
* Default risk level configuration
|
|
48
|
+
*
|
|
49
|
+
* Conservative defaults that prioritize security:
|
|
50
|
+
* - Low risk: Allow without MFA (normal flow)
|
|
51
|
+
* - Medium risk: Require MFA
|
|
52
|
+
* - High risk: Require MFA (conservative - don't block by default)
|
|
53
|
+
*/
|
|
14
54
|
defaultRiskLevels = {
|
|
15
55
|
low: {
|
|
16
56
|
maxScore: 20,
|
|
@@ -24,7 +64,7 @@ class AdaptiveMFADecisionService {
|
|
|
24
64
|
},
|
|
25
65
|
high: {
|
|
26
66
|
maxScore: 100,
|
|
27
|
-
action: 'require_mfa',
|
|
67
|
+
action: 'require_mfa', // Conservative default (don't block)
|
|
28
68
|
notifyUser: true,
|
|
29
69
|
},
|
|
30
70
|
};
|
|
@@ -37,7 +77,26 @@ class AdaptiveMFADecisionService {
|
|
|
37
77
|
this.logger = logger;
|
|
38
78
|
this.auditService = auditService;
|
|
39
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Evaluate adaptive MFA requirement with risk-based actions
|
|
82
|
+
*
|
|
83
|
+
* Main entry point for adaptive MFA evaluation. Analyzes current login context,
|
|
84
|
+
* calculates risk score, determines action, and calls lifecycle hooks.
|
|
85
|
+
*
|
|
86
|
+
* @param user - User being authenticated
|
|
87
|
+
* @param authMethod - Authentication method ('password', 'google', 'apple', etc.)
|
|
88
|
+
* @returns Decision object with action, risk details, and hook override status
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const decision = await adaptiveMFADecisionService.evaluateAdaptiveMFA(user, 'password');
|
|
93
|
+
* if (decision.action === 'block_signin') {
|
|
94
|
+
* // Handle blocking
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
40
98
|
async evaluateAdaptiveMFA(user, authMethod) {
|
|
99
|
+
// Validate email is present (required by IUser interface but runtime check for safety)
|
|
41
100
|
if (!user.email) {
|
|
42
101
|
this.logger?.error?.(`User ${user.sub} missing email - cannot evaluate adaptive MFA`, {
|
|
43
102
|
userId: user.id,
|
|
@@ -45,16 +104,22 @@ class AdaptiveMFADecisionService {
|
|
|
45
104
|
});
|
|
46
105
|
throw new Error(`User email is required for adaptive MFA evaluation`);
|
|
47
106
|
}
|
|
107
|
+
// Get current client context
|
|
48
108
|
const clientInfo = this.clientInfoService.get();
|
|
109
|
+
// Detect risk factors
|
|
49
110
|
const riskFactors = await this.riskDetectionService.detectRiskFactors(user, clientInfo);
|
|
111
|
+
// Calculate risk score
|
|
50
112
|
const riskScore = this.riskScoringService.calculateRiskScore(riskFactors);
|
|
113
|
+
// Determine risk level and action
|
|
51
114
|
const riskLevels = this.config.mfa?.adaptive?.riskLevels || this.defaultRiskLevels;
|
|
52
115
|
const { level, action, notifyUser } = this.determineRiskLevelAndAction(riskScore, riskLevels);
|
|
53
116
|
this.logger?.log?.(`Adaptive MFA evaluation: user=${user.sub}, score=${riskScore}, level=${level}, action=${action}, notify=${notifyUser}, factors=[${riskFactors.join(', ')}]`);
|
|
117
|
+
// Prepare payload for hooks and audit
|
|
118
|
+
// Include payload when action requires it (block_signin) or when notifyUser is true
|
|
54
119
|
const payload = {
|
|
55
120
|
user: {
|
|
56
121
|
sub: user.sub,
|
|
57
|
-
email: user.email,
|
|
122
|
+
email: user.email, // Safe after validation above
|
|
58
123
|
username: user.username || undefined,
|
|
59
124
|
phoneNumber: user.phone || undefined,
|
|
60
125
|
},
|
|
@@ -66,7 +131,7 @@ class AdaptiveMFADecisionService {
|
|
|
66
131
|
ipAddress: clientInfo.ipAddress,
|
|
67
132
|
ipCountry: clientInfo.ipCountry,
|
|
68
133
|
ipCity: clientInfo.ipCity,
|
|
69
|
-
deviceId: clientInfo.deviceToken,
|
|
134
|
+
deviceId: clientInfo.deviceToken, // deviceToken maps to deviceId in sessions
|
|
70
135
|
deviceName: clientInfo.deviceName,
|
|
71
136
|
deviceType: clientInfo.deviceType,
|
|
72
137
|
userAgent: clientInfo.userAgent,
|
|
@@ -76,20 +141,30 @@ class AdaptiveMFADecisionService {
|
|
|
76
141
|
authMethod,
|
|
77
142
|
timestamp: new Date(),
|
|
78
143
|
};
|
|
144
|
+
// Call lifecycle hook if configured and user should be notified
|
|
79
145
|
let hookOverride = false;
|
|
80
146
|
if (notifyUser && this.config.hooks?.onAdaptiveMFATriggered) {
|
|
81
147
|
try {
|
|
82
148
|
const result = await this.config.hooks.onAdaptiveMFATriggered(payload);
|
|
149
|
+
// Hook can return false to override and allow sign-in
|
|
83
150
|
if (result === false) {
|
|
84
151
|
hookOverride = true;
|
|
85
152
|
this.logger?.warn?.(`Adaptive MFA action overridden by hook: user=${user.sub}`);
|
|
86
153
|
}
|
|
87
154
|
}
|
|
88
155
|
catch (error) {
|
|
156
|
+
// Non-blocking: Log error but continue with original action
|
|
89
157
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
90
158
|
this.logger?.error?.(`Adaptive MFA hook failed: ${errorMessage}`, { error, userId: user.sub });
|
|
91
159
|
}
|
|
92
160
|
}
|
|
161
|
+
// Record in audit trail (non-blocking)
|
|
162
|
+
// This logs the risk assessment result
|
|
163
|
+
// Determine event status based on risk level and action:
|
|
164
|
+
// - block_signin: SUSPICIOUS (security violation)
|
|
165
|
+
// - require_mfa with high/medium risk or suspicious factors: SUSPICIOUS
|
|
166
|
+
// - require_mfa with low risk: INFO (normal security measure)
|
|
167
|
+
// - allow: INFO (no risk detected)
|
|
93
168
|
const hasSuspiciousFactors = riskFactors.includes(risk_factor_enum_1.RiskFactor.SUSPICIOUS_ACTIVITY) ||
|
|
94
169
|
riskFactors.includes(risk_factor_enum_1.RiskFactor.IMPOSSIBLE_TRAVEL) ||
|
|
95
170
|
level === 'high';
|
|
@@ -114,6 +189,7 @@ class AdaptiveMFADecisionService {
|
|
|
114
189
|
action,
|
|
115
190
|
riskFactors,
|
|
116
191
|
},
|
|
192
|
+
// Client info automatically included from context
|
|
117
193
|
})
|
|
118
194
|
.catch((err) => {
|
|
119
195
|
this.logger?.warn?.(`Failed to record ADAPTIVE_MFA_RISK_ASSESSED audit: ${err.message}`);
|
|
@@ -125,10 +201,24 @@ class AdaptiveMFADecisionService {
|
|
|
125
201
|
riskFactors,
|
|
126
202
|
notifyUser,
|
|
127
203
|
hookOverride,
|
|
204
|
+
// Include payload when action requires it or when notifyUser is true
|
|
205
|
+
// This ensures consistent clientInfo data for blockUserSignIn and audit logs
|
|
128
206
|
payload: action === 'block_signin' || notifyUser ? payload : undefined,
|
|
129
207
|
};
|
|
130
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Determine risk level and action based on score and configured thresholds
|
|
211
|
+
*
|
|
212
|
+
* Evaluates risk score against configured thresholds in order: low → medium → high.
|
|
213
|
+
* Returns the first level that the score falls within.
|
|
214
|
+
*
|
|
215
|
+
* @param riskScore - Calculated risk score (0-100)
|
|
216
|
+
* @param riskLevels - Configured risk level thresholds
|
|
217
|
+
* @returns Risk level, action, and notifyUser flag
|
|
218
|
+
* @private
|
|
219
|
+
*/
|
|
131
220
|
determineRiskLevelAndAction(riskScore, riskLevels) {
|
|
221
|
+
// Check in order: low → medium → high
|
|
132
222
|
if (riskScore <= (riskLevels.low?.maxScore ?? 20)) {
|
|
133
223
|
return {
|
|
134
224
|
level: 'low',
|
|
@@ -149,6 +239,23 @@ class AdaptiveMFADecisionService {
|
|
|
149
239
|
notifyUser: riskLevels.high?.notifyUser ?? true,
|
|
150
240
|
};
|
|
151
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Check if user is currently blocked due to high-risk sign-in
|
|
244
|
+
*
|
|
245
|
+
* Uses storage adapter to check for existing block. Block is stored with
|
|
246
|
+
* key format: `adaptive_mfa_block:{userId}`.
|
|
247
|
+
*
|
|
248
|
+
* @param userId - Internal user ID (integer)
|
|
249
|
+
* @returns Block status with expiration and message if blocked
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* const blockStatus = await adaptiveMFADecisionService.isUserBlocked(user.id);
|
|
254
|
+
* if (blockStatus.blocked) {
|
|
255
|
+
* throw new NAuthException(AuthErrorCode.SIGNIN_BLOCKED_HIGH_RISK, blockStatus.message);
|
|
256
|
+
* }
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
152
259
|
async isUserBlocked(userId) {
|
|
153
260
|
try {
|
|
154
261
|
const blockKey = `adaptive_mfa_block:${userId}`;
|
|
@@ -158,7 +265,9 @@ class AdaptiveMFADecisionService {
|
|
|
158
265
|
}
|
|
159
266
|
const parsed = JSON.parse(blockData);
|
|
160
267
|
const expiresAt = parsed.expiresAt ? new Date(parsed.expiresAt) : undefined;
|
|
268
|
+
// Check if block has expired (if temporary)
|
|
161
269
|
if (expiresAt && expiresAt < new Date()) {
|
|
270
|
+
// Block expired - clean up
|
|
162
271
|
await this.storageAdapter.del(blockKey);
|
|
163
272
|
return { blocked: false };
|
|
164
273
|
}
|
|
@@ -169,15 +278,36 @@ class AdaptiveMFADecisionService {
|
|
|
169
278
|
};
|
|
170
279
|
}
|
|
171
280
|
catch (error) {
|
|
281
|
+
// Non-blocking: Log error but assume not blocked (safer for UX)
|
|
172
282
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
173
283
|
this.logger?.warn?.(`Failed to check user block status: ${errorMessage}`, { error, userId });
|
|
174
284
|
return { blocked: false };
|
|
175
285
|
}
|
|
176
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Block user sign-in due to high risk
|
|
289
|
+
*
|
|
290
|
+
* Stores block in storage adapter with optional TTL. Block data includes:
|
|
291
|
+
* - userId, userSub (for reference)
|
|
292
|
+
* - message (shown to user)
|
|
293
|
+
* - riskScore, riskFactors (for audit)
|
|
294
|
+
* - blockedAt, expiresAt (timestamps)
|
|
295
|
+
*
|
|
296
|
+
* Also calls onSignInBlocked lifecycle hook if configured.
|
|
297
|
+
*
|
|
298
|
+
* @param user - User to block
|
|
299
|
+
* @param payload - Risk event payload with all context
|
|
300
|
+
*
|
|
301
|
+
* @example
|
|
302
|
+
* ```typescript
|
|
303
|
+
* await adaptiveMFADecisionService.blockUserSignIn(user, payload);
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
177
306
|
async blockUserSignIn(user, payload) {
|
|
178
307
|
const blockConfig = this.config.mfa?.adaptive?.blockedSignIn;
|
|
179
|
-
const blockDuration = blockConfig?.blockDuration;
|
|
308
|
+
const blockDuration = blockConfig?.blockDuration; // minutes
|
|
180
309
|
const message = blockConfig?.message || 'Sign-in blocked due to suspicious activity. Please contact support.';
|
|
310
|
+
// Store block in storage adapter
|
|
181
311
|
const blockKey = `adaptive_mfa_block:${user.id}`;
|
|
182
312
|
const blockData = {
|
|
183
313
|
userId: user.id,
|
|
@@ -188,9 +318,10 @@ class AdaptiveMFADecisionService {
|
|
|
188
318
|
blockedAt: new Date().toISOString(),
|
|
189
319
|
expiresAt: blockDuration ? new Date(Date.now() + blockDuration * 60 * 1000).toISOString() : undefined,
|
|
190
320
|
};
|
|
191
|
-
const ttl = blockDuration ? blockDuration * 60 : undefined;
|
|
321
|
+
const ttl = blockDuration ? blockDuration * 60 : undefined; // Convert to seconds
|
|
192
322
|
await this.storageAdapter.set(blockKey, JSON.stringify(blockData), ttl);
|
|
193
323
|
this.logger?.warn?.(`User sign-in blocked: user=${user.sub}, score=${payload.riskScore}, duration=${blockDuration ? `${blockDuration}min` : 'permanent'}`);
|
|
324
|
+
// Call sign-in blocked hook if configured
|
|
194
325
|
if (this.config.hooks?.onSignInBlocked) {
|
|
195
326
|
const blockedPayload = {
|
|
196
327
|
...payload,
|
|
@@ -202,11 +333,25 @@ class AdaptiveMFADecisionService {
|
|
|
202
333
|
await this.config.hooks.onSignInBlocked(blockedPayload);
|
|
203
334
|
}
|
|
204
335
|
catch (error) {
|
|
336
|
+
// Non-blocking
|
|
205
337
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
206
338
|
this.logger?.error?.(`Sign-in blocked hook failed: ${errorMessage}`, { error, userId: user.sub });
|
|
207
339
|
}
|
|
208
340
|
}
|
|
209
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Clear user block (manual unblock)
|
|
344
|
+
*
|
|
345
|
+
* Removes the block from storage adapter, allowing user to sign in again.
|
|
346
|
+
* Useful for admin actions or when risk situation has improved.
|
|
347
|
+
*
|
|
348
|
+
* @param userId - Internal user ID (integer)
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* ```typescript
|
|
352
|
+
* await adaptiveMFADecisionService.clearUserBlock(user.id);
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
210
355
|
async clearUserBlock(userId) {
|
|
211
356
|
try {
|
|
212
357
|
const blockKey = `adaptive_mfa_block:${userId}`;
|
|
@@ -214,6 +359,7 @@ class AdaptiveMFADecisionService {
|
|
|
214
359
|
this.logger?.log?.(`User block cleared: userId=${userId}`);
|
|
215
360
|
}
|
|
216
361
|
catch (error) {
|
|
362
|
+
// Non-blocking: Log error but continue
|
|
217
363
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
218
364
|
this.logger?.warn?.(`Failed to clear user block: ${errorMessage}`, { error, userId });
|
|
219
365
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adaptive-mfa-decision.service.js","sourceRoot":"","sources":["../../src/services/adaptive-mfa-decision.service.ts"],"names":[],"mappings":";;;AAGA,oFAAyE;AACzE,gEAAuD;
|
|
1
|
+
{"version":3,"file":"adaptive-mfa-decision.service.js","sourceRoot":"","sources":["../../src/services/adaptive-mfa-decision.service.ts"],"names":[],"mappings":"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"}
|