@nauth-toolkit/core 0.1.14 → 0.1.18
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 +1780 -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 +62 -0
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +189 -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 +152 -12
- 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,24 +7,105 @@ const auth_challenge_dto_1 = require("../dto/auth-challenge.dto");
|
|
|
7
7
|
const auth_audit_event_type_enum_1 = require("../enums/auth-audit-event-type.enum");
|
|
8
8
|
const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
9
9
|
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
10
|
+
/**
|
|
11
|
+
* Challenge Session Service
|
|
12
|
+
*
|
|
13
|
+
* Manages authentication challenge sessions for the challenge-response flow.
|
|
14
|
+
* Challenge sessions are temporary, short-lived sessions (typically 15 minutes)
|
|
15
|
+
* that track pending authentication challenges similar to AWS Cognito.
|
|
16
|
+
*
|
|
17
|
+
* Handles:
|
|
18
|
+
* - Challenge session creation and validation
|
|
19
|
+
* - Session expiration and cleanup
|
|
20
|
+
* - Attempt tracking and rate limiting
|
|
21
|
+
* - Secure session token generation
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Create a challenge session
|
|
26
|
+
* const session = await challengeService.createChallengeSession(
|
|
27
|
+
* user,
|
|
28
|
+
* AuthChallenge.VERIFY_EMAIL,
|
|
29
|
+
* { email: user.email }
|
|
30
|
+
* );
|
|
31
|
+
*
|
|
32
|
+
* // Validate and consume a challenge session
|
|
33
|
+
* const validSession = await challengeService.validateAndConsumeSession(
|
|
34
|
+
* sessionToken,
|
|
35
|
+
* AuthChallenge.VERIFY_EMAIL
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
10
39
|
class ChallengeService {
|
|
11
40
|
challengeSessionRepository;
|
|
12
41
|
clientInfoService;
|
|
13
42
|
logger;
|
|
14
43
|
auditService;
|
|
15
44
|
config;
|
|
45
|
+
/**
|
|
46
|
+
* Default challenge session expiration time (15 minutes)
|
|
47
|
+
*/
|
|
16
48
|
DEFAULT_EXPIRATION_MINUTES = 15;
|
|
49
|
+
/**
|
|
50
|
+
* Default maximum attempts per challenge session
|
|
51
|
+
*/
|
|
17
52
|
DEFAULT_MAX_ATTEMPTS = 3;
|
|
18
|
-
constructor(challengeSessionRepository, clientInfoService, logger, auditService, config)
|
|
53
|
+
constructor(challengeSessionRepository, clientInfoService, logger, auditService, // Optional - audit trail service (enabled via config.auditLogs.enabled)
|
|
54
|
+
config) {
|
|
19
55
|
this.challengeSessionRepository = challengeSessionRepository;
|
|
20
56
|
this.clientInfoService = clientInfoService;
|
|
21
57
|
this.logger = logger;
|
|
22
58
|
this.auditService = auditService;
|
|
23
59
|
this.config = config;
|
|
24
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Per-user cleanup throttle map to avoid frequent cleanup writes
|
|
63
|
+
*/
|
|
25
64
|
lastCleanupByUserId = new Map();
|
|
65
|
+
// ============================================================================
|
|
66
|
+
// Challenge Session Creation
|
|
67
|
+
// ============================================================================
|
|
68
|
+
/**
|
|
69
|
+
* Create a new challenge session
|
|
70
|
+
*
|
|
71
|
+
* Generates a unique session token and stores challenge metadata.
|
|
72
|
+
* The session token is returned to the client and must be submitted
|
|
73
|
+
* when responding to the challenge.
|
|
74
|
+
*
|
|
75
|
+
* **Deduplication:**
|
|
76
|
+
* If an active (non-completed, non-expired) session already exists for the same user
|
|
77
|
+
* and challenge type, this method returns the existing session instead of creating
|
|
78
|
+
* a duplicate. This prevents:
|
|
79
|
+
* - Excessive `CHALLENGE_CREATED` audit events
|
|
80
|
+
* - Database bloat from duplicate sessions
|
|
81
|
+
* - User confusion from multiple active sessions for the same challenge
|
|
82
|
+
*
|
|
83
|
+
* @param user - User the challenge session belongs to
|
|
84
|
+
* @param challengeName - Type of challenge (VERIFY_EMAIL, VERIFY_PHONE, etc.)
|
|
85
|
+
* @param metadata - Challenge-specific data
|
|
86
|
+
* @returns Challenge session with session token (new or existing)
|
|
87
|
+
* @remarks Client info (ipAddress, userAgent) is automatically extracted from ClientInfoService context
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* const session = await challengeService.createChallengeSession(
|
|
92
|
+
* user,
|
|
93
|
+
* AuthChallenge.VERIFY_EMAIL,
|
|
94
|
+
* { email: user.email, verificationTokenId: tokenId }
|
|
95
|
+
* );
|
|
96
|
+
* // Returns: { sessionToken: 'uuid-here', expiresAt: Date, ... }
|
|
97
|
+
* // If called again before completion, returns same session (no duplicate audit event)
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
26
100
|
async createChallengeSession(user, challengeName, metadata) {
|
|
101
|
+
// Get client info from context (transparent access)
|
|
27
102
|
const clientInfo = this.clientInfoService.get();
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// DEDUPLICATION: Check for existing active challenge session
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// If an active (non-completed, non-expired) session already exists for this
|
|
107
|
+
// user and challenge type, return it instead of creating a duplicate.
|
|
108
|
+
// This prevents excessive audit logging and database bloat.
|
|
28
109
|
const existingSession = await this.challengeSessionRepository.findOne({
|
|
29
110
|
where: {
|
|
30
111
|
userId: user.id,
|
|
@@ -36,16 +117,23 @@ class ChallengeService {
|
|
|
36
117
|
});
|
|
37
118
|
if (existingSession) {
|
|
38
119
|
const session = existingSession;
|
|
120
|
+
// Get current maxAttempts from config
|
|
39
121
|
const currentMaxAttempts = this.config?.challenge?.maxAttempts ?? this.DEFAULT_MAX_ATTEMPTS;
|
|
122
|
+
// Check if session is still valid (not expired and not max attempts exceeded)
|
|
40
123
|
const isExpired = session.expiresAt <= new Date();
|
|
41
124
|
const isMaxAttemptsExceeded = session.attempts >= session.maxAttempts;
|
|
42
125
|
if (!isExpired && !isMaxAttemptsExceeded) {
|
|
126
|
+
// Update maxAttempts to match current config if different
|
|
127
|
+
// This ensures sessions created with old config values are updated
|
|
43
128
|
if (session.maxAttempts !== currentMaxAttempts) {
|
|
44
129
|
session.maxAttempts = currentMaxAttempts;
|
|
45
130
|
await this.challengeSessionRepository.save(session);
|
|
46
131
|
this.logger?.debug?.(`Updated maxAttempts for existing session: user=${user.sub}, old=${session.maxAttempts}, new=${currentMaxAttempts}`);
|
|
47
132
|
}
|
|
48
133
|
this.logger?.debug?.(`Reusing existing challenge session: user=${user.sub}, challenge=${challengeName}, session=${session.sessionToken}`);
|
|
134
|
+
// ============================================================================
|
|
135
|
+
// Audit: Record challenge reuse for complete audit trail
|
|
136
|
+
// ============================================================================
|
|
49
137
|
try {
|
|
50
138
|
await this.auditService?.recordEvent({
|
|
51
139
|
userId: user.id,
|
|
@@ -55,11 +143,12 @@ class ChallengeService {
|
|
|
55
143
|
metadata: {
|
|
56
144
|
challengeName,
|
|
57
145
|
sessionToken: session.sessionToken,
|
|
58
|
-
reused: true,
|
|
146
|
+
reused: true, // Indicate this was an existing session
|
|
59
147
|
},
|
|
60
148
|
});
|
|
61
149
|
}
|
|
62
150
|
catch (auditError) {
|
|
151
|
+
// Non-blocking: Log but continue
|
|
63
152
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
64
153
|
this.logger?.error?.(`Failed to record CHALLENGE_CREATED (reused) audit event: ${errorMessage}`, {
|
|
65
154
|
error: auditError,
|
|
@@ -69,18 +158,22 @@ class ChallengeService {
|
|
|
69
158
|
}
|
|
70
159
|
return session;
|
|
71
160
|
}
|
|
161
|
+
// If expired or max attempts exceeded, delete it and create a new one
|
|
72
162
|
const reason = isExpired ? 'expired' : 'max attempts exceeded';
|
|
73
163
|
this.logger?.debug?.(`Existing challenge session ${reason}, creating new one: user=${user.sub}, challenge=${challengeName}`);
|
|
74
164
|
await this.challengeSessionRepository.delete({ id: session.id });
|
|
75
165
|
}
|
|
166
|
+
// Clean up any expired or completed sessions for this user (throttled)
|
|
76
167
|
const now = Date.now();
|
|
77
168
|
const lastCleanup = this.lastCleanupByUserId.get(user.id) || 0;
|
|
169
|
+
// Run at most once per 5 minutes per user to reduce write load
|
|
78
170
|
if (now - lastCleanup > 5 * 60 * 1000) {
|
|
79
171
|
await this.cleanupExpiredSessions(user.id);
|
|
80
172
|
this.lastCleanupByUserId.set(user.id, now);
|
|
81
173
|
}
|
|
82
174
|
const sessionToken = (0, crypto_1.randomUUID)();
|
|
83
175
|
const expiresAt = new Date(Date.now() + this.DEFAULT_EXPIRATION_MINUTES * 60 * 1000);
|
|
176
|
+
// Get maxAttempts from config or use default
|
|
84
177
|
const maxAttempts = this.config?.challenge?.maxAttempts ?? this.DEFAULT_MAX_ATTEMPTS;
|
|
85
178
|
const challengeSession = this.challengeSessionRepository.create({
|
|
86
179
|
userId: user.id,
|
|
@@ -88,19 +181,24 @@ class ChallengeService {
|
|
|
88
181
|
sessionToken,
|
|
89
182
|
expiresAt,
|
|
90
183
|
metadata,
|
|
184
|
+
// Client info automatically extracted from ClientInfoService (transparent access)
|
|
91
185
|
ipAddress: clientInfo.ipAddress || null,
|
|
92
186
|
userAgent: clientInfo.userAgent || null,
|
|
93
|
-
attempts: 0,
|
|
187
|
+
attempts: 0, // Explicitly initialize attempts to 0
|
|
94
188
|
maxAttempts,
|
|
95
189
|
});
|
|
96
190
|
await this.challengeSessionRepository.save(challengeSession);
|
|
97
191
|
this.logger?.log?.(`Challenge session created: user=${user.sub}, challenge=${challengeName}, maxAttempts=${maxAttempts}`);
|
|
192
|
+
// ============================================================================
|
|
193
|
+
// Audit: Record challenge creation
|
|
194
|
+
// ============================================================================
|
|
98
195
|
try {
|
|
99
196
|
await this.auditService?.recordEvent({
|
|
100
197
|
userId: user.id,
|
|
101
198
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.CHALLENGE_CREATED,
|
|
102
199
|
eventStatus: 'INFO',
|
|
103
200
|
challengeSessionId: challengeSession.id,
|
|
201
|
+
// Client info automatically included from context (no need to pass explicitly)
|
|
104
202
|
metadata: {
|
|
105
203
|
challengeName,
|
|
106
204
|
sessionToken: challengeSession.sessionToken,
|
|
@@ -108,6 +206,7 @@ class ChallengeService {
|
|
|
108
206
|
});
|
|
109
207
|
}
|
|
110
208
|
catch (auditError) {
|
|
209
|
+
// Non-blocking: Log but continue
|
|
111
210
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
112
211
|
this.logger?.error?.(`Failed to record CHALLENGE_CREATED audit event: ${errorMessage}`, {
|
|
113
212
|
error: auditError,
|
|
@@ -117,13 +216,72 @@ class ChallengeService {
|
|
|
117
216
|
}
|
|
118
217
|
return challengeSession;
|
|
119
218
|
}
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// Challenge Session Validation
|
|
221
|
+
// ============================================================================
|
|
222
|
+
/**
|
|
223
|
+
* Validate a challenge session token for code requests
|
|
224
|
+
*
|
|
225
|
+
* Validates session for requesting new verification codes (SMS, email, etc.).
|
|
226
|
+
* Skips max attempts check since requesting a new code is not a verification attempt.
|
|
227
|
+
* This method is used internally by nauth when sending verification codes.
|
|
228
|
+
*
|
|
229
|
+
* @param sessionToken - Session token to validate
|
|
230
|
+
* @param expectedChallenge - Expected challenge type (optional, for additional verification)
|
|
231
|
+
* @returns Valid challenge session
|
|
232
|
+
* @throws {UnauthorizedException} If session is invalid, expired, or already completed
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```typescript
|
|
236
|
+
* // Used internally by nauth when sending verification codes
|
|
237
|
+
* const session = await challengeService.validateSessionForCodeRequest(
|
|
238
|
+
* 'session-token-123',
|
|
239
|
+
* AuthChallenge.MFA_REQUIRED
|
|
240
|
+
* );
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
120
243
|
async validateSessionForCodeRequest(sessionToken, expectedChallenge) {
|
|
121
244
|
return this.validateSessionInternal(sessionToken, expectedChallenge, true);
|
|
122
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Validate a challenge session token
|
|
248
|
+
*
|
|
249
|
+
* Checks if the session token is valid, not expired, not completed,
|
|
250
|
+
* and matches the expected challenge type. Does NOT consume the session.
|
|
251
|
+
* Enforces max attempts check for verification attempts.
|
|
252
|
+
*
|
|
253
|
+
* @param sessionToken - Session token to validate
|
|
254
|
+
* @param expectedChallenge - Expected challenge type (optional, for additional verification)
|
|
255
|
+
* @returns Valid challenge session
|
|
256
|
+
* @throws {UnauthorizedException} If session is invalid, expired, or already completed
|
|
257
|
+
*
|
|
258
|
+
* @example
|
|
259
|
+
* ```typescript
|
|
260
|
+
* try {
|
|
261
|
+
* const session = await challengeService.validateSession(
|
|
262
|
+
* 'session-token-123',
|
|
263
|
+
* AuthChallenge.VERIFY_EMAIL
|
|
264
|
+
* );
|
|
265
|
+
* // Session is valid, proceed with verification
|
|
266
|
+
* } catch (error) {
|
|
267
|
+
* // Session is invalid
|
|
268
|
+
* }
|
|
269
|
+
* ```
|
|
270
|
+
*/
|
|
123
271
|
async validateSession(sessionToken, expectedChallenge) {
|
|
124
272
|
return this.validateSessionInternal(sessionToken, expectedChallenge, false);
|
|
125
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Internal method to validate challenge session
|
|
276
|
+
*
|
|
277
|
+
* @param sessionToken - Session token to validate
|
|
278
|
+
* @param expectedChallenge - Expected challenge type (optional)
|
|
279
|
+
* @param skipMaxAttemptsCheck - If true, skip max attempts check (for code requests)
|
|
280
|
+
* @returns Valid challenge session
|
|
281
|
+
* @private
|
|
282
|
+
*/
|
|
126
283
|
async validateSessionInternal(sessionToken, expectedChallenge, skipMaxAttemptsCheck = false) {
|
|
284
|
+
// Load session with ALL user fields (needed for challenge determination and MFA setup)
|
|
127
285
|
const session = await this.challengeSessionRepository.findOne({
|
|
128
286
|
where: { sessionToken },
|
|
129
287
|
relations: ['user'],
|
|
@@ -132,28 +290,57 @@ class ChallengeService {
|
|
|
132
290
|
this.logger?.warn?.('Invalid challenge session token');
|
|
133
291
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_INVALID, 'Invalid or expired challenge session');
|
|
134
292
|
}
|
|
293
|
+
// Check expiration
|
|
135
294
|
const challengeSession = session;
|
|
136
295
|
if (challengeSession.expiresAt < new Date()) {
|
|
137
296
|
this.logger?.warn?.(`Expired challenge session: user=${challengeSession.user?.sub}`);
|
|
138
297
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_EXPIRED, 'Challenge session has expired');
|
|
139
298
|
}
|
|
299
|
+
// Check if already completed
|
|
140
300
|
if (session.isCompleted) {
|
|
141
301
|
this.logger?.warn?.(`Already completed challenge session: user=${challengeSession.user?.sub}`);
|
|
142
302
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_ALREADY_COMPLETED, 'Challenge has already been completed');
|
|
143
303
|
}
|
|
304
|
+
// Check max attempts (skip if requesting new code, but enforce for verification attempts)
|
|
305
|
+
// Ensure attempts is initialized (should be 0, but handle edge cases)
|
|
144
306
|
const currentAttempts = challengeSession.attempts ?? 0;
|
|
145
307
|
if (!skipMaxAttemptsCheck && currentAttempts >= challengeSession.maxAttempts) {
|
|
146
308
|
this.logger?.warn?.(`Max attempts exceeded for challenge session: user=${challengeSession.user?.sub}, attempts=${currentAttempts}/${challengeSession.maxAttempts}`);
|
|
147
309
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_MAX_ATTEMPTS, 'Maximum challenge attempts exceeded');
|
|
148
310
|
}
|
|
311
|
+
// Verify challenge type if specified
|
|
149
312
|
if (expectedChallenge && session.challengeName !== expectedChallenge) {
|
|
150
313
|
this.logger?.warn?.(`Challenge type mismatch: expected=${expectedChallenge}, actual=${session.challengeName}`);
|
|
151
314
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.CHALLENGE_TYPE_MISMATCH, 'Invalid challenge type');
|
|
152
315
|
}
|
|
153
316
|
return session;
|
|
154
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* Increment attempt counter for a challenge session
|
|
320
|
+
*
|
|
321
|
+
* Tracks failed attempts to complete a challenge.
|
|
322
|
+
* Used to prevent brute-force attacks on verification codes.
|
|
323
|
+
*
|
|
324
|
+
* @param session - Challenge session to increment
|
|
325
|
+
* @returns Updated session
|
|
326
|
+
*
|
|
327
|
+
* @example
|
|
328
|
+
* ```typescript
|
|
329
|
+
* await challengeService.incrementAttempts(session);
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
155
332
|
async incrementAttempts(session) {
|
|
333
|
+
// ============================================================================
|
|
334
|
+
// CRITICAL: Atomic Increment to Prevent Race Conditions
|
|
335
|
+
// ============================================================================
|
|
336
|
+
// Use TypeORM's increment() for atomic UPDATE attempts = attempts + 1
|
|
337
|
+
// This is concurrency-safe even under high load:
|
|
338
|
+
// - Database executes: UPDATE challenge_session SET attempts = attempts + 1 WHERE id = ?
|
|
339
|
+
// - No read-modify-write race condition
|
|
340
|
+
// - Single database round-trip (better performance than SELECT + UPDATE)
|
|
341
|
+
// - Works across all databases (MySQL, PostgreSQL, SQLite)
|
|
156
342
|
await this.challengeSessionRepository.increment({ id: session.id }, 'attempts', 1);
|
|
343
|
+
// Reload session to get updated attempts count and user for audit logging
|
|
157
344
|
const freshSession = await this.challengeSessionRepository.findOne({
|
|
158
345
|
where: { id: session.id },
|
|
159
346
|
relations: ['user'],
|
|
@@ -164,6 +351,9 @@ class ChallengeService {
|
|
|
164
351
|
}
|
|
165
352
|
const freshChallengeSession = freshSession;
|
|
166
353
|
this.logger?.debug?.(`Challenge attempt incremented: session=${freshChallengeSession.sessionToken}, attempts=${freshChallengeSession.attempts}/${freshChallengeSession.maxAttempts}`);
|
|
354
|
+
// ============================================================================
|
|
355
|
+
// Audit: Record challenge attempt failure if max attempts exceeded
|
|
356
|
+
// ============================================================================
|
|
167
357
|
if (freshChallengeSession.attempts >= freshChallengeSession.maxAttempts) {
|
|
168
358
|
try {
|
|
169
359
|
const user = freshChallengeSession.user;
|
|
@@ -174,6 +364,7 @@ class ChallengeService {
|
|
|
174
364
|
eventStatus: 'FAILURE',
|
|
175
365
|
challengeSessionId: freshChallengeSession.id,
|
|
176
366
|
reason: 'max_attempts_exceeded',
|
|
367
|
+
// Client info (ipAddress, userAgent, etc.) automatically included from context
|
|
177
368
|
description: `Challenge attempt failed - maximum attempts (${freshChallengeSession.maxAttempts}) exceeded`,
|
|
178
369
|
metadata: {
|
|
179
370
|
challengeName: freshChallengeSession.challengeName,
|
|
@@ -184,6 +375,7 @@ class ChallengeService {
|
|
|
184
375
|
}
|
|
185
376
|
}
|
|
186
377
|
catch (auditError) {
|
|
378
|
+
// Non-blocking: Log but continue
|
|
187
379
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
188
380
|
const sessionUser = freshChallengeSession.user;
|
|
189
381
|
this.logger?.error?.(`Failed to record CHALLENGE_ATTEMPT_FAILED audit event: ${errorMessage}`, {
|
|
@@ -195,8 +387,29 @@ class ChallengeService {
|
|
|
195
387
|
}
|
|
196
388
|
return freshChallengeSession;
|
|
197
389
|
}
|
|
390
|
+
/**
|
|
391
|
+
* Validate and consume a challenge session
|
|
392
|
+
*
|
|
393
|
+
* Validates the session and marks it as completed if validation succeeds.
|
|
394
|
+
* This method should be called only after successful challenge completion.
|
|
395
|
+
*
|
|
396
|
+
* @param sessionToken - Session token to validate and consume
|
|
397
|
+
* @param expectedChallenge - Expected challenge type
|
|
398
|
+
* @returns Valid, completed challenge session with user
|
|
399
|
+
* @throws {UnauthorizedException} If session is invalid
|
|
400
|
+
*
|
|
401
|
+
* @example
|
|
402
|
+
* ```typescript
|
|
403
|
+
* const session = await challengeService.validateAndConsumeSession(
|
|
404
|
+
* 'session-token-123',
|
|
405
|
+
* AuthChallenge.VERIFY_EMAIL
|
|
406
|
+
* );
|
|
407
|
+
* // Session is now marked complete and cannot be reused
|
|
408
|
+
* ```
|
|
409
|
+
*/
|
|
198
410
|
async validateAndConsumeSession(sessionToken, expectedChallenge) {
|
|
199
411
|
const session = await this.validateSession(sessionToken, expectedChallenge);
|
|
412
|
+
// Mark session as completed
|
|
200
413
|
session.isCompleted = true;
|
|
201
414
|
session.completedAt = new Date();
|
|
202
415
|
await this.challengeSessionRepository.save(session);
|
|
@@ -205,10 +418,16 @@ class ChallengeService {
|
|
|
205
418
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found in challenge session');
|
|
206
419
|
}
|
|
207
420
|
this.logger?.log?.(`Challenge session completed: user=${user.sub}, challenge=${session.challengeName}`);
|
|
421
|
+
// ============================================================================
|
|
422
|
+
// Audit: Record challenge completion
|
|
423
|
+
// ============================================================================
|
|
208
424
|
try {
|
|
425
|
+
// Build metadata with challenge name and MFA method (if applicable)
|
|
209
426
|
const auditMetadata = {
|
|
427
|
+
// Client info automatically included from context
|
|
210
428
|
challengeName: session.challengeName,
|
|
211
429
|
};
|
|
430
|
+
// For MFA challenges, include the MFA method used
|
|
212
431
|
if ((session.challengeName === auth_challenge_dto_1.AuthChallenge.MFA_REQUIRED ||
|
|
213
432
|
session.challengeName === auth_challenge_dto_1.AuthChallenge.MFA_SETUP_REQUIRED) &&
|
|
214
433
|
session.metadata?.mfaMethod) {
|
|
@@ -219,10 +438,12 @@ class ChallengeService {
|
|
|
219
438
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.CHALLENGE_COMPLETED,
|
|
220
439
|
eventStatus: 'SUCCESS',
|
|
221
440
|
challengeSessionId: session.id,
|
|
441
|
+
// Client info (ipAddress, userAgent, etc.) automatically included from context
|
|
222
442
|
metadata: auditMetadata,
|
|
223
443
|
});
|
|
224
444
|
}
|
|
225
445
|
catch (auditError) {
|
|
446
|
+
// Non-blocking: Log but continue
|
|
226
447
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
227
448
|
this.logger?.error?.(`Failed to record CHALLENGE_COMPLETED audit event: ${errorMessage}`, {
|
|
228
449
|
error: auditError,
|
|
@@ -232,11 +453,32 @@ class ChallengeService {
|
|
|
232
453
|
}
|
|
233
454
|
return session;
|
|
234
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* Update challenge session metadata
|
|
458
|
+
*
|
|
459
|
+
* Updates the metadata field of an existing challenge session.
|
|
460
|
+
* Used to store additional challenge-specific data (e.g., passkey challenge).
|
|
461
|
+
*
|
|
462
|
+
* @param sessionToken - Session token to update
|
|
463
|
+
* @param metadata - Metadata to merge into existing metadata
|
|
464
|
+
* @returns Updated challenge session
|
|
465
|
+
* @throws {NAuthException} If session not found or invalid
|
|
466
|
+
*
|
|
467
|
+
* @example
|
|
468
|
+
* ```typescript
|
|
469
|
+
* await challengeService.updateMetadata('session-token-123', {
|
|
470
|
+
* passkeyChallenge: 'base64-challenge-string'
|
|
471
|
+
* });
|
|
472
|
+
* ```
|
|
473
|
+
*/
|
|
235
474
|
async updateMetadata(sessionToken, metadata) {
|
|
236
475
|
const session = await this.validateSession(sessionToken);
|
|
476
|
+
// Merge new metadata with existing metadata
|
|
237
477
|
const existingMetadata = session.metadata || {};
|
|
238
478
|
const updatedMetadata = { ...existingMetadata, ...metadata };
|
|
479
|
+
// Update session metadata
|
|
239
480
|
await this.challengeSessionRepository.update({ sessionToken }, { metadata: updatedMetadata });
|
|
481
|
+
// Return updated session
|
|
240
482
|
const updatedSession = await this.challengeSessionRepository.findOne({
|
|
241
483
|
where: { sessionToken },
|
|
242
484
|
relations: ['user'],
|
|
@@ -246,6 +488,22 @@ class ChallengeService {
|
|
|
246
488
|
}
|
|
247
489
|
return updatedSession;
|
|
248
490
|
}
|
|
491
|
+
// ============================================================================
|
|
492
|
+
// Challenge Session Cleanup
|
|
493
|
+
// ============================================================================
|
|
494
|
+
/**
|
|
495
|
+
* Clean up expired or completed challenge sessions for a user
|
|
496
|
+
*
|
|
497
|
+
* Removes old sessions to prevent database bloat.
|
|
498
|
+
* Called automatically when creating new challenge sessions.
|
|
499
|
+
*
|
|
500
|
+
* @param userId - User ID to clean up sessions for
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* ```typescript
|
|
504
|
+
* await challengeService.cleanupExpiredSessions(user.id);
|
|
505
|
+
* ```
|
|
506
|
+
*/
|
|
249
507
|
async cleanupExpiredSessions(userId) {
|
|
250
508
|
await this.challengeSessionRepository.delete({
|
|
251
509
|
userId,
|
|
@@ -256,6 +514,21 @@ class ChallengeService {
|
|
|
256
514
|
isCompleted: true,
|
|
257
515
|
});
|
|
258
516
|
}
|
|
517
|
+
/**
|
|
518
|
+
* Clean up all expired challenge sessions (for all users)
|
|
519
|
+
*
|
|
520
|
+
* Should be called periodically (e.g., via cron job) to maintain
|
|
521
|
+
* database health.
|
|
522
|
+
*
|
|
523
|
+
* @returns Number of sessions deleted
|
|
524
|
+
*
|
|
525
|
+
* @example
|
|
526
|
+
* ```typescript
|
|
527
|
+
* // In a scheduled job
|
|
528
|
+
* const deleted = await challengeService.cleanupAllExpiredSessions();
|
|
529
|
+
* logger.log(`Cleaned up ${deleted} expired challenge sessions`);
|
|
530
|
+
* ```
|
|
531
|
+
*/
|
|
259
532
|
async cleanupAllExpiredSessions() {
|
|
260
533
|
const result = await this.challengeSessionRepository.delete({
|
|
261
534
|
expiresAt: (0, typeorm_1.LessThan)(new Date()),
|
|
@@ -264,6 +537,26 @@ class ChallengeService {
|
|
|
264
537
|
this.logger?.log?.(`Cleaned up ${deletedCount} expired challenge sessions`);
|
|
265
538
|
return deletedCount;
|
|
266
539
|
}
|
|
540
|
+
/**
|
|
541
|
+
* Delete challenge sessions by challenge name for a user
|
|
542
|
+
*
|
|
543
|
+
* Removes all active (not completed, not expired) challenge sessions
|
|
544
|
+
* of the specified type for a user. Used to clean up phantom challenges
|
|
545
|
+
* when user completes the requirement (e.g., sets up MFA).
|
|
546
|
+
*
|
|
547
|
+
* @param userId - Internal user ID
|
|
548
|
+
* @param challengeName - Challenge type to delete
|
|
549
|
+
* @returns Number of sessions deleted
|
|
550
|
+
*
|
|
551
|
+
* @example
|
|
552
|
+
* ```typescript
|
|
553
|
+
* // Clear MFA_SETUP_REQUIRED challenge when user sets up MFA
|
|
554
|
+
* const deleted = await challengeService.deleteUserChallengeSessions(
|
|
555
|
+
* user.id,
|
|
556
|
+
* AuthChallenge.MFA_SETUP_REQUIRED
|
|
557
|
+
* );
|
|
558
|
+
* ```
|
|
559
|
+
*/
|
|
267
560
|
async deleteUserChallengeSessions(userId, challengeName) {
|
|
268
561
|
const result = await this.challengeSessionRepository.delete({
|
|
269
562
|
userId,
|
|
@@ -276,12 +569,43 @@ class ChallengeService {
|
|
|
276
569
|
}
|
|
277
570
|
return deletedCount;
|
|
278
571
|
}
|
|
572
|
+
// ============================================================================
|
|
573
|
+
// Helper Methods
|
|
574
|
+
// ============================================================================
|
|
575
|
+
/**
|
|
576
|
+
* Mask email address for display in challenge parameters
|
|
577
|
+
*
|
|
578
|
+
* Shows first character and domain, hides the rest.
|
|
579
|
+
*
|
|
580
|
+
* @param email - Email to mask
|
|
581
|
+
* @returns Masked email
|
|
582
|
+
*
|
|
583
|
+
* @example
|
|
584
|
+
* ```typescript
|
|
585
|
+
* maskEmail('john.doe@example.com')
|
|
586
|
+
* // Returns: 'j***@example.com'
|
|
587
|
+
* ```
|
|
588
|
+
*/
|
|
279
589
|
maskEmail(email) {
|
|
280
590
|
const [localPart, domain] = email.split('@');
|
|
281
591
|
if (!domain)
|
|
282
592
|
return email;
|
|
283
593
|
return `${localPart[0]}***@${domain}`;
|
|
284
594
|
}
|
|
595
|
+
/**
|
|
596
|
+
* Mask phone number for display in challenge parameters
|
|
597
|
+
*
|
|
598
|
+
* Shows last 4 digits, hides the rest.
|
|
599
|
+
*
|
|
600
|
+
* @param phone - Phone to mask
|
|
601
|
+
* @returns Masked phone
|
|
602
|
+
*
|
|
603
|
+
* @example
|
|
604
|
+
* ```typescript
|
|
605
|
+
* maskPhone('+1234567890')
|
|
606
|
+
* // Returns: '***-***-7890'
|
|
607
|
+
* ```
|
|
608
|
+
*/
|
|
285
609
|
maskPhone(phone) {
|
|
286
610
|
const digits = phone.replace(/\D/g, '');
|
|
287
611
|
if (digits.length < 4)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challenge.service.js","sourceRoot":"","sources":["../../src/services/challenge.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"challenge.service.js","sourceRoot":"","sources":["../../src/services/challenge.service.ts"],"names":[],"mappings":"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"}
|