@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
|
@@ -40,6 +40,27 @@ const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
|
40
40
|
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
41
41
|
const verify_phone_dto_1 = require("../dto/verify-phone.dto");
|
|
42
42
|
const crypto = __importStar(require("crypto"));
|
|
43
|
+
/**
|
|
44
|
+
* Phone Verification Service (Core)
|
|
45
|
+
*
|
|
46
|
+
* Database-agnostic phone verification workflow with provider-driven SMS delivery.
|
|
47
|
+
*
|
|
48
|
+
* WHY: Keeps core business logic independent of database and SMS vendors. Databases are
|
|
49
|
+
* injected via repository tokens and SMS via an `SMSProvider` adapter so consumers
|
|
50
|
+
* can plug in Postgres, MySQL, or any SMS provider without code changes.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* // Send OTP
|
|
55
|
+
* const tokenId = await phoneVerificationService.sendVerificationSMS('user-sub');
|
|
56
|
+
*
|
|
57
|
+
* // Verify by sub
|
|
58
|
+
* await phoneVerificationService.verifyPhoneWithCodeBySub('user-sub', '123456');
|
|
59
|
+
*
|
|
60
|
+
* // Resend
|
|
61
|
+
* await phoneVerificationService.resendVerificationSMS('user-sub');
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
43
64
|
class PhoneVerificationService {
|
|
44
65
|
verificationTokenRepo;
|
|
45
66
|
userRepo;
|
|
@@ -59,20 +80,37 @@ class PhoneVerificationService {
|
|
|
59
80
|
this.logger = logger;
|
|
60
81
|
this.auditService = auditService;
|
|
61
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Send verification SMS to user identified by `sub`.
|
|
85
|
+
* Applies rate limits and resend delay, stores hashed token + OTP, and sends via SMS provider.
|
|
86
|
+
*
|
|
87
|
+
* @param dto - Request DTO containing sub and skipAlreadyVerifiedCheck
|
|
88
|
+
* @returns Response DTO with verification token ID
|
|
89
|
+
* @throws {NAuthException} RATE_LIMIT_SMS | NOT_FOUND | PHONE_REQUIRED | ALREADY_VERIFIED | RATE_LIMIT_RESEND
|
|
90
|
+
*/
|
|
62
91
|
async sendVerificationSMS(dto) {
|
|
63
92
|
const { sub, skipAlreadyVerifiedCheck = true, challengeSessionId } = dto;
|
|
64
93
|
const rateLimitKey = `phone-verification:${sub}`;
|
|
94
|
+
// Get rate limit configuration from config (moved to signup.phoneVerification)
|
|
65
95
|
const rateLimitMax = this.config.signup?.phoneVerification?.rateLimitMax || 3;
|
|
66
|
-
const rateLimitWindow = this.config.signup?.phoneVerification?.rateLimitWindow || 3600;
|
|
96
|
+
const rateLimitWindow = this.config.signup?.phoneVerification?.rateLimitWindow || 3600; // 1 hour in seconds
|
|
97
|
+
// Check if key exists and has valid TTL (not expired)
|
|
67
98
|
const ttlBefore = await this.storageAdapter.ttl(rateLimitKey);
|
|
99
|
+
// Window is expired if: key doesn't exist (-1), expired (<0), or TTL is longer than configured window (config changed)
|
|
68
100
|
const isWindowExpired = ttlBefore === -1 || ttlBefore < 0 || ttlBefore > rateLimitWindow;
|
|
101
|
+
// If TTL is longer than configured window (config changed), delete the old key to reset it
|
|
102
|
+
// This ensures the new window uses the current rateLimitWindow instead of preserving old expiry
|
|
69
103
|
if (ttlBefore > rateLimitWindow) {
|
|
70
104
|
await this.storageAdapter.del(rateLimitKey);
|
|
71
105
|
}
|
|
106
|
+
// Increment counter (will reset to 1 if key expired or doesn't exist)
|
|
107
|
+
// Pass TTL so new records are created with correct expiry immediately
|
|
72
108
|
const currentCount = await this.storageAdapter.incr(rateLimitKey, isWindowExpired ? rateLimitWindow : undefined);
|
|
109
|
+
// If we created a new window, log it
|
|
73
110
|
if (isWindowExpired && currentCount === 1) {
|
|
74
111
|
this.logger?.debug?.(`Rate limit window reset for phone verification: sub=${sub}, window=${rateLimitWindow}s, max=${rateLimitMax}`);
|
|
75
112
|
}
|
|
113
|
+
// Get actual TTL after setting expiry (for error message)
|
|
76
114
|
const actualTtl = await this.storageAdapter.ttl(rateLimitKey);
|
|
77
115
|
this.logger?.debug?.(`Phone verification rate limit check: sub=${sub}, count=${currentCount}/${rateLimitMax}, ttl=${actualTtl}s`);
|
|
78
116
|
if (currentCount > rateLimitMax) {
|
|
@@ -83,6 +121,7 @@ class PhoneVerificationService {
|
|
|
83
121
|
maxAttempts: rateLimitMax,
|
|
84
122
|
});
|
|
85
123
|
}
|
|
124
|
+
// Load user by external identifier
|
|
86
125
|
const user = (await this.userRepo.findOne({ where: { sub } }));
|
|
87
126
|
if (!user) {
|
|
88
127
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
@@ -90,9 +129,11 @@ class PhoneVerificationService {
|
|
|
90
129
|
if (!user.phone) {
|
|
91
130
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.PHONE_REQUIRED, 'No phone number associated with this account');
|
|
92
131
|
}
|
|
132
|
+
// Only check "already verified" if not skipping (skip for MFA contexts where codes are needed even if phone is verified)
|
|
93
133
|
if (!skipAlreadyVerifiedCheck && user.isPhoneVerified) {
|
|
94
134
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.ALREADY_VERIFIED, 'Phone already verified');
|
|
95
135
|
}
|
|
136
|
+
// Enforce resend delay to prevent abuse
|
|
96
137
|
const resendDelay = this.config.signup?.phoneVerification?.resendDelay ?? 60;
|
|
97
138
|
const lastToken = (await this.verificationTokenRepo.findOne({
|
|
98
139
|
where: { userId: user.id, type: 'phone' },
|
|
@@ -108,15 +149,18 @@ class PhoneVerificationService {
|
|
|
108
149
|
});
|
|
109
150
|
}
|
|
110
151
|
}
|
|
152
|
+
// Invalidate existing unused tokens for this user
|
|
111
153
|
await this.verificationTokenRepo.update({ userId: user.id, type: 'phone', usedAt: (0, typeorm_1.IsNull)() }, { usedAt: new Date() });
|
|
154
|
+
// Generate OTP and hashed token
|
|
112
155
|
const code = this.generateCode();
|
|
113
156
|
const token = this.generateToken();
|
|
114
157
|
const tokenHash = this.hashToken(token);
|
|
158
|
+
// Capture client info for auditability
|
|
115
159
|
const clientInfo = this.clientInfoService.get();
|
|
116
160
|
const { ipAddress, userAgent } = clientInfo;
|
|
117
161
|
const verificationToken = this.verificationTokenRepo.create({
|
|
118
162
|
userId: user.id,
|
|
119
|
-
challengeSessionId: challengeSessionId ?? null,
|
|
163
|
+
challengeSessionId: challengeSessionId ?? null, // Link to challenge session if provided
|
|
120
164
|
type: 'phone',
|
|
121
165
|
token: tokenHash,
|
|
122
166
|
code,
|
|
@@ -127,11 +171,18 @@ class PhoneVerificationService {
|
|
|
127
171
|
});
|
|
128
172
|
const saved = (await this.verificationTokenRepo.save(verificationToken));
|
|
129
173
|
this.logger?.log?.(`SMS token created: sub=${sub}, tokenId=${saved.id}, code=${code}, codeType=${typeof code}, userId=${user.id}, usedAt=${saved.usedAt || 'null'}`);
|
|
174
|
+
// Calculate expiry minutes for template variables
|
|
130
175
|
const expiresInSeconds = this.config.signup?.phoneVerification?.expiresIn || 300;
|
|
131
176
|
const expiryMinutes = Math.ceil(expiresInSeconds / 60);
|
|
177
|
+
// Determine template type: 'mfa' if called from MFA context, otherwise 'verification'
|
|
178
|
+
// MFA context is detected by skipAlreadyVerifiedCheck being explicitly true AND phone already verified
|
|
179
|
+
// (MFA always sends codes even if phone is verified, while verification only sends if not verified)
|
|
180
|
+
// Default to 'verification' for phone verification flows
|
|
132
181
|
const templateType = dto.skipAlreadyVerifiedCheck && user.isPhoneVerified ? 'mfa' : 'verification';
|
|
182
|
+
// Get appName from email config or SMS templates global variables
|
|
133
183
|
const smsConfig = this.config.sms;
|
|
134
184
|
const appName = this.config.email?.appName || smsConfig?.templates?.globalVariables?.appName;
|
|
185
|
+
// Send SMS with template support
|
|
135
186
|
await this.smsProvider.sendOTP(user.phone, code, templateType, {
|
|
136
187
|
expiryMinutes,
|
|
137
188
|
appName,
|
|
@@ -142,18 +193,23 @@ class PhoneVerificationService {
|
|
|
142
193
|
phone: user.phone,
|
|
143
194
|
});
|
|
144
195
|
this.logger?.log?.(`SMS verification code sent: sub=${sub}, tokenId=${saved.id}, phone=${this.maskPhone(user.phone)}`);
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// Audit: Record phone verification request
|
|
198
|
+
// ============================================================================
|
|
145
199
|
try {
|
|
146
200
|
await this.auditService?.recordEvent({
|
|
147
201
|
userId: user.id,
|
|
148
202
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.PHONE_VERIFICATION_REQUESTED,
|
|
149
203
|
eventStatus: 'INFO',
|
|
150
204
|
metadata: {
|
|
205
|
+
// Client info automatically included from context
|
|
151
206
|
verificationTokenId: saved.id,
|
|
152
207
|
phone: this.maskPhone(user.phone),
|
|
153
208
|
},
|
|
154
209
|
});
|
|
155
210
|
}
|
|
156
211
|
catch (auditError) {
|
|
212
|
+
// Non-blocking: Log but continue
|
|
157
213
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
158
214
|
this.logger?.error?.(`Failed to record PHONE_VERIFICATION_REQUESTED audit event: ${errorMessage}`, {
|
|
159
215
|
error: auditError,
|
|
@@ -162,18 +218,29 @@ class PhoneVerificationService {
|
|
|
162
218
|
}
|
|
163
219
|
return { tokenId: saved.id };
|
|
164
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Verify phone by phone number and code.
|
|
223
|
+
* Handles duplicate phone numbers by selecting the token whose user matches the phone provided.
|
|
224
|
+
*
|
|
225
|
+
* @param dto - Request DTO containing phone and code
|
|
226
|
+
* @returns Response DTO with success message
|
|
227
|
+
* @throws {NAuthException} VERIFICATION_CODE_INVALID | VERIFICATION_CODE_EXPIRED | VERIFICATION_TOO_MANY_ATTEMPTS
|
|
228
|
+
*/
|
|
165
229
|
async verifyPhoneWithCode(dto) {
|
|
166
230
|
const { phone, code, challengeSessionId } = dto;
|
|
231
|
+
// Find all unused tokens matching the code and type
|
|
232
|
+
// If challengeSessionId is provided, ensure token belongs to specific session
|
|
167
233
|
const whereClause = {
|
|
168
234
|
type: 'phone',
|
|
169
235
|
code,
|
|
170
236
|
usedAt: (0, typeorm_1.IsNull)(),
|
|
171
|
-
...(challengeSessionId !== undefined && { challengeSessionId }),
|
|
237
|
+
...(challengeSessionId !== undefined && { challengeSessionId }), // Include if provided
|
|
172
238
|
};
|
|
173
239
|
const candidateTokens = (await this.verificationTokenRepo.find({
|
|
174
240
|
where: whereClause,
|
|
175
241
|
order: { createdAt: 'DESC' },
|
|
176
242
|
}));
|
|
243
|
+
// Resolve the token whose user has the given phone
|
|
177
244
|
let matched = null;
|
|
178
245
|
for (const token of candidateTokens) {
|
|
179
246
|
const user = (await this.userRepo.findOne({ where: { id: token.userId } }));
|
|
@@ -186,9 +253,11 @@ class PhoneVerificationService {
|
|
|
186
253
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid or expired verification code');
|
|
187
254
|
}
|
|
188
255
|
const { token, user } = matched;
|
|
256
|
+
// Get verification attempt rate limit configuration from config
|
|
189
257
|
const maxAttemptsPerUser = this.config.signup?.phoneVerification?.maxAttemptsPerUser ?? 10;
|
|
190
258
|
const maxAttemptsPerIP = this.config.signup?.phoneVerification?.maxAttemptsPerIP ?? 20;
|
|
191
|
-
const attemptWindow = this.config.signup?.phoneVerification?.attemptWindow ?? 3600;
|
|
259
|
+
const attemptWindow = this.config.signup?.phoneVerification?.attemptWindow ?? 3600; // 1 hour
|
|
260
|
+
// Rate limit verification attempts per user (not just per token)
|
|
192
261
|
const userRateLimitKey = `verify-attempts:user:${user.id}`;
|
|
193
262
|
const userAttempts = await this.storageAdapter.incr(userRateLimitKey);
|
|
194
263
|
if (userAttempts === 1) {
|
|
@@ -197,6 +266,7 @@ class PhoneVerificationService {
|
|
|
197
266
|
if (userAttempts > maxAttemptsPerUser) {
|
|
198
267
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many verification attempts. Please try again later.');
|
|
199
268
|
}
|
|
269
|
+
// Also rate limit by IP
|
|
200
270
|
const clientInfo = this.clientInfoService.get();
|
|
201
271
|
if (clientInfo.ipAddress) {
|
|
202
272
|
const ipRateLimitKey = `verify-attempts:ip:${clientInfo.ipAddress}`;
|
|
@@ -208,10 +278,12 @@ class PhoneVerificationService {
|
|
|
208
278
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many verification attempts from this IP. Please try again later.');
|
|
209
279
|
}
|
|
210
280
|
}
|
|
281
|
+
// Expiry check (use entity method if provided)
|
|
211
282
|
const isExpired = typeof token.isExpired === 'function' ? !!token.isExpired() : token.expiresAt.getTime() <= Date.now();
|
|
212
283
|
if (isExpired) {
|
|
213
284
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_EXPIRED, 'Verification code has expired');
|
|
214
285
|
}
|
|
286
|
+
// Attempts check (use entity method if provided)
|
|
215
287
|
const maxAttempts = this.config.signup?.phoneVerification?.maxAttempts ?? 3;
|
|
216
288
|
const tooManyAttempts = typeof token.maxAttemptsExceeded === 'function'
|
|
217
289
|
? !!token.maxAttemptsExceeded(maxAttempts)
|
|
@@ -222,16 +294,21 @@ class PhoneVerificationService {
|
|
|
222
294
|
currentAttempts: token.attempts,
|
|
223
295
|
});
|
|
224
296
|
}
|
|
297
|
+
// Increment attempts even on success to prevent reuse by race
|
|
225
298
|
token.attempts += 1;
|
|
226
299
|
if (token.code !== code) {
|
|
227
300
|
await this.verificationTokenRepo.save(token);
|
|
228
301
|
this.logger?.debug?.(`Phone verification failed: phone=${this.maskPhone(phone)}, attempts=${token.attempts}/${maxAttempts}`);
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// Audit: Record phone verification failure
|
|
304
|
+
// ============================================================================
|
|
229
305
|
try {
|
|
230
306
|
await this.auditService?.recordEvent({
|
|
231
307
|
userId: user.id,
|
|
232
308
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.PHONE_VERIFICATION_FAILED,
|
|
233
309
|
eventStatus: 'FAILURE',
|
|
234
310
|
reason: 'invalid_code',
|
|
311
|
+
// Client info automatically included from context
|
|
235
312
|
description: 'Invalid verification code provided',
|
|
236
313
|
metadata: {
|
|
237
314
|
verificationTokenId: token.id,
|
|
@@ -241,6 +318,7 @@ class PhoneVerificationService {
|
|
|
241
318
|
});
|
|
242
319
|
}
|
|
243
320
|
catch (auditError) {
|
|
321
|
+
// Non-blocking: Log but continue
|
|
244
322
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
245
323
|
this.logger?.error?.(`Failed to record PHONE_VERIFICATION_FAILED audit event: ${errorMessage}`, {
|
|
246
324
|
error: auditError,
|
|
@@ -251,19 +329,27 @@ class PhoneVerificationService {
|
|
|
251
329
|
attemptsRemaining: Math.max(0, maxAttempts - token.attempts),
|
|
252
330
|
});
|
|
253
331
|
}
|
|
332
|
+
// Mark token used
|
|
254
333
|
token.usedAt = new Date();
|
|
255
334
|
await this.verificationTokenRepo.save(token);
|
|
335
|
+
// Update user flags
|
|
256
336
|
await this.userRepo.update(user.id, {
|
|
257
337
|
isPhoneVerified: true,
|
|
258
338
|
isActive: true,
|
|
259
339
|
});
|
|
260
340
|
this.logger?.log?.(`Phone verification successful: userId=${user.id}, phone=${this.maskPhone(phone)}`);
|
|
341
|
+
// ============================================================================
|
|
342
|
+
// Audit: Record phone verification success
|
|
343
|
+
// ============================================================================
|
|
261
344
|
try {
|
|
345
|
+
// Client info (ipAddress, userAgent) automatically extracted from ClientInfoService
|
|
346
|
+
// Note: ClientInfoService is used transparently by AuditService
|
|
262
347
|
await this.auditService?.recordEvent({
|
|
263
348
|
userId: user.id,
|
|
264
349
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.PHONE_VERIFIED,
|
|
265
350
|
eventStatus: 'SUCCESS',
|
|
266
351
|
metadata: {
|
|
352
|
+
// Client info automatically included from context
|
|
267
353
|
verificationTokenId: token.id,
|
|
268
354
|
verificationMethod: 'code',
|
|
269
355
|
phone: this.maskPhone(phone),
|
|
@@ -271,6 +357,7 @@ class PhoneVerificationService {
|
|
|
271
357
|
});
|
|
272
358
|
}
|
|
273
359
|
catch (auditError) {
|
|
360
|
+
// Non-blocking: Log but continue
|
|
274
361
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
275
362
|
this.logger?.error?.(`Failed to record PHONE_VERIFIED audit event: ${errorMessage}`, {
|
|
276
363
|
error: auditError,
|
|
@@ -279,8 +366,16 @@ class PhoneVerificationService {
|
|
|
279
366
|
}
|
|
280
367
|
return { message: 'Phone verified successfully. Please log in to continue.' };
|
|
281
368
|
}
|
|
369
|
+
/**
|
|
370
|
+
* Verify phone by user sub and code.
|
|
371
|
+
*
|
|
372
|
+
* @param dto - Request DTO containing sub and code
|
|
373
|
+
* @returns Response DTO with success message
|
|
374
|
+
*/
|
|
282
375
|
async verifyPhoneWithCodeBySub(dto) {
|
|
283
376
|
const { sub, code, challengeSessionId } = dto;
|
|
377
|
+
// Load user to get current phone verification status
|
|
378
|
+
// This ensures we have the latest state from the database
|
|
284
379
|
const user = (await this.userRepo.findOne({ where: { sub } }));
|
|
285
380
|
if (!user) {
|
|
286
381
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
@@ -288,23 +383,38 @@ class PhoneVerificationService {
|
|
|
288
383
|
if (!user.phone) {
|
|
289
384
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.PHONE_REQUIRED, 'No phone number associated with this account');
|
|
290
385
|
}
|
|
386
|
+
// Store initial verification status to avoid unnecessary updates
|
|
291
387
|
const wasPhoneVerified = Boolean(user.isPhoneVerified);
|
|
388
|
+
// ============================================================================
|
|
389
|
+
// Security: Rate limit configuration
|
|
390
|
+
// IP-based rate limiting applies only to INVALID attempts to prevent brute force
|
|
391
|
+
// Valid codes should not be blocked by IP rate limits
|
|
392
|
+
// ============================================================================
|
|
292
393
|
const maxAttemptsPerIP = this.config.signup?.phoneVerification?.maxAttemptsPerIP ?? 20;
|
|
293
|
-
const attemptWindow = this.config.signup?.phoneVerification?.attemptWindow ?? 3600;
|
|
394
|
+
const attemptWindow = this.config.signup?.phoneVerification?.attemptWindow ?? 3600; // 1 hour
|
|
294
395
|
const clientInfo = this.clientInfoService.get();
|
|
396
|
+
// Find verification token
|
|
397
|
+
// Query for unused tokens matching the code (order by newest first)
|
|
398
|
+
// Ensure code is a string (database stores as varchar/string)
|
|
399
|
+
// TypeORM may receive code as number from JSON, so convert to string for query
|
|
295
400
|
const codeString = String(code);
|
|
296
401
|
this.logger?.log?.(`Looking for verification token: sub=${sub}, code=${codeString}, codeType=${typeof code}, userId=${user.id}`);
|
|
402
|
+
// If challengeSessionId is provided, ensure token belongs to specific session
|
|
297
403
|
const whereClause = {
|
|
298
404
|
userId: user.id,
|
|
299
405
|
type: 'phone',
|
|
300
406
|
code: codeString,
|
|
301
407
|
usedAt: (0, typeorm_1.IsNull)(),
|
|
302
|
-
...(challengeSessionId !== undefined && { challengeSessionId }),
|
|
408
|
+
...(challengeSessionId !== undefined && { challengeSessionId }), // Include if provided
|
|
303
409
|
};
|
|
304
410
|
const verificationToken = (await this.verificationTokenRepo.findOne({
|
|
305
411
|
where: whereClause,
|
|
306
412
|
order: { createdAt: 'DESC' },
|
|
307
413
|
}));
|
|
414
|
+
// ============================================================================
|
|
415
|
+
// Security: Increment IP rate limit for invalid attempts only
|
|
416
|
+
// This prevents brute force attacks while allowing valid codes through
|
|
417
|
+
// ============================================================================
|
|
308
418
|
const incrementIPRateLimit = async () => {
|
|
309
419
|
if (clientInfo.ipAddress) {
|
|
310
420
|
const ipRateLimitKey = `verify-attempts:ip:${clientInfo.ipAddress}`;
|
|
@@ -319,6 +429,7 @@ class PhoneVerificationService {
|
|
|
319
429
|
};
|
|
320
430
|
if (!verificationToken) {
|
|
321
431
|
this.logger?.warn?.(`Phone verification token not found: sub=${sub}, code=${codeString}, originalCodeType=${typeof code}, userId=${user.id}`);
|
|
432
|
+
// Invalid attempt - increment IP rate limit
|
|
322
433
|
await incrementIPRateLimit();
|
|
323
434
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid or expired verification code');
|
|
324
435
|
}
|
|
@@ -326,6 +437,7 @@ class PhoneVerificationService {
|
|
|
326
437
|
? !!verificationToken.isExpired()
|
|
327
438
|
: verificationToken.expiresAt.getTime() <= Date.now();
|
|
328
439
|
if (isExpired) {
|
|
440
|
+
// Expired token - increment IP rate limit
|
|
329
441
|
await incrementIPRateLimit();
|
|
330
442
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_EXPIRED, 'Verification code has expired');
|
|
331
443
|
}
|
|
@@ -334,13 +446,20 @@ class PhoneVerificationService {
|
|
|
334
446
|
? !!verificationToken.maxAttemptsExceeded(maxAttempts)
|
|
335
447
|
: verificationToken.attempts >= maxAttempts;
|
|
336
448
|
if (tooManyAttempts) {
|
|
449
|
+
// Token exceeded max attempts - increment IP rate limit
|
|
337
450
|
await incrementIPRateLimit();
|
|
338
451
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many failed attempts. Request a new code.', {
|
|
339
452
|
maxAttempts,
|
|
340
453
|
currentAttempts: verificationToken.attempts,
|
|
341
454
|
});
|
|
342
455
|
}
|
|
456
|
+
// ============================================================================
|
|
457
|
+
// Security: Rate limit verification attempts per user (for invalid attempts only)
|
|
458
|
+
// This prevents users from exhausting their own tokens through repeated attempts
|
|
459
|
+
// Valid codes should not be blocked by user rate limits
|
|
460
|
+
// ============================================================================
|
|
343
461
|
const maxAttemptsPerUser = this.config.signup?.phoneVerification?.maxAttemptsPerUser ?? 10;
|
|
462
|
+
// Helper to increment user rate limit (only for invalid attempts)
|
|
344
463
|
const incrementUserRateLimit = async () => {
|
|
345
464
|
const userRateLimitKey = `verify-attempts:user:${user.id}`;
|
|
346
465
|
const userAttempts = await this.storageAdapter.incr(userRateLimitKey);
|
|
@@ -352,19 +471,25 @@ class PhoneVerificationService {
|
|
|
352
471
|
}
|
|
353
472
|
};
|
|
354
473
|
verificationToken.attempts += 1;
|
|
474
|
+
// Compare normalized codes (trim whitespace for comparison)
|
|
355
475
|
const storedCode = String(verificationToken.code).trim();
|
|
356
476
|
const providedCode = String(code).trim();
|
|
357
477
|
if (storedCode !== providedCode) {
|
|
478
|
+
// Invalid code - increment both IP and user rate limits
|
|
358
479
|
await incrementIPRateLimit();
|
|
359
480
|
await incrementUserRateLimit();
|
|
360
481
|
await this.verificationTokenRepo.save(verificationToken);
|
|
361
482
|
this.logger?.debug?.(`Phone verification failed: sub=${sub}, attempts=${verificationToken.attempts}/${maxAttempts}`);
|
|
483
|
+
// ============================================================================
|
|
484
|
+
// Audit: Record phone verification failure (by sub)
|
|
485
|
+
// ============================================================================
|
|
362
486
|
try {
|
|
363
487
|
await this.auditService?.recordEvent({
|
|
364
488
|
userId: user.id,
|
|
365
489
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.PHONE_VERIFICATION_FAILED,
|
|
366
490
|
eventStatus: 'FAILURE',
|
|
367
491
|
reason: 'invalid_code',
|
|
492
|
+
// Client info automatically included from context
|
|
368
493
|
description: 'Invalid verification code provided',
|
|
369
494
|
metadata: {
|
|
370
495
|
verificationTokenId: verificationToken.id,
|
|
@@ -374,6 +499,7 @@ class PhoneVerificationService {
|
|
|
374
499
|
});
|
|
375
500
|
}
|
|
376
501
|
catch (auditError) {
|
|
502
|
+
// Non-blocking: Log but continue
|
|
377
503
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
378
504
|
this.logger?.error?.(`Failed to record PHONE_VERIFICATION_FAILED audit event (by sub): ${errorMessage}`, {
|
|
379
505
|
error: auditError,
|
|
@@ -384,9 +510,20 @@ class PhoneVerificationService {
|
|
|
384
510
|
attemptsRemaining: Math.max(0, maxAttempts - verificationToken.attempts),
|
|
385
511
|
});
|
|
386
512
|
}
|
|
513
|
+
// ============================================================================
|
|
514
|
+
// Code is valid - proceed without rate limit checks
|
|
515
|
+
// Valid codes should always be allowed through
|
|
516
|
+
// ============================================================================
|
|
387
517
|
verificationToken.usedAt = new Date();
|
|
388
518
|
await this.verificationTokenRepo.save(verificationToken);
|
|
519
|
+
// ============================================================================
|
|
520
|
+
// Only update user if phone is not already verified to avoid unnecessary DB write
|
|
521
|
+
// This prevents updating updatedAt timestamp when phone is already verified
|
|
522
|
+
// We use the verification status from when user was loaded at the start
|
|
523
|
+
// ============================================================================
|
|
389
524
|
if (!wasPhoneVerified) {
|
|
525
|
+
// Use update() with explicit WHERE clause to ensure the change is persisted
|
|
526
|
+
// This bypasses entity tracking issues and ensures the update is committed
|
|
390
527
|
await this.userRepo.update({ sub }, {
|
|
391
528
|
isPhoneVerified: true,
|
|
392
529
|
isActive: true,
|
|
@@ -394,14 +531,21 @@ class PhoneVerificationService {
|
|
|
394
531
|
this.logger?.log?.(`Phone verification successful: sub=${sub}, userId=${user.id} - phone marked as verified`);
|
|
395
532
|
}
|
|
396
533
|
else {
|
|
534
|
+
// Phone already verified - just mark token as used, no user update needed
|
|
397
535
|
this.logger?.log?.(`Phone verification code validated: sub=${sub}, userId=${user.id} - phone already verified`);
|
|
398
536
|
}
|
|
537
|
+
// ============================================================================
|
|
538
|
+
// Audit: Record phone verification success (by sub)
|
|
539
|
+
// ============================================================================
|
|
399
540
|
try {
|
|
541
|
+
// Client info (ipAddress, userAgent) automatically extracted from ClientInfoService
|
|
542
|
+
// Note: ClientInfoService is used transparently by AuditService
|
|
400
543
|
await this.auditService?.recordEvent({
|
|
401
544
|
userId: user.id,
|
|
402
545
|
eventType: auth_audit_event_type_enum_1.AuthAuditEventType.PHONE_VERIFIED,
|
|
403
546
|
eventStatus: 'SUCCESS',
|
|
404
547
|
metadata: {
|
|
548
|
+
// Client info automatically included from context
|
|
405
549
|
verificationTokenId: verificationToken.id,
|
|
406
550
|
verificationMethod: 'code',
|
|
407
551
|
phone: this.maskPhone(user.phone || ''),
|
|
@@ -409,6 +553,7 @@ class PhoneVerificationService {
|
|
|
409
553
|
});
|
|
410
554
|
}
|
|
411
555
|
catch (auditError) {
|
|
556
|
+
// Non-blocking: Log but continue
|
|
412
557
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
413
558
|
this.logger?.error?.(`Failed to record PHONE_VERIFIED audit event (by sub): ${errorMessage}`, {
|
|
414
559
|
error: auditError,
|
|
@@ -417,7 +562,15 @@ class PhoneVerificationService {
|
|
|
417
562
|
}
|
|
418
563
|
return { message: 'Phone verified successfully. Please log in to continue.' };
|
|
419
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* Resend verification SMS
|
|
567
|
+
* Supports both sub and phone-based resend
|
|
568
|
+
*
|
|
569
|
+
* @param dto - Request DTO containing sub or phone
|
|
570
|
+
* @returns Response DTO with verification token ID
|
|
571
|
+
*/
|
|
420
572
|
async resendVerificationSMS(dto) {
|
|
573
|
+
// Validate that either sub or phone is provided
|
|
421
574
|
if (!dto.sub && !dto.phone) {
|
|
422
575
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VALIDATION_FAILED, 'Either sub or phone must be provided');
|
|
423
576
|
}
|
|
@@ -426,6 +579,12 @@ class PhoneVerificationService {
|
|
|
426
579
|
}
|
|
427
580
|
return this.resendVerificationSMSForPhone(dto.phone);
|
|
428
581
|
}
|
|
582
|
+
/**
|
|
583
|
+
* Resend verification SMS by user sub (private helper)
|
|
584
|
+
*
|
|
585
|
+
* @param sub - External user identifier
|
|
586
|
+
* @returns New verification token id
|
|
587
|
+
*/
|
|
429
588
|
async resendVerificationSMSBySub(sub) {
|
|
430
589
|
const user = (await this.userRepo.findOne({ where: { sub } }));
|
|
431
590
|
if (!user) {
|
|
@@ -448,6 +607,7 @@ class PhoneVerificationService {
|
|
|
448
607
|
}
|
|
449
608
|
}
|
|
450
609
|
this.logger?.debug?.(`Resending SMS verification code: sub=${sub}`);
|
|
610
|
+
// Preserve challengeSessionId from the last token to ensure verification succeeds
|
|
451
611
|
const sendDto = Object.assign(new verify_phone_dto_1.SendVerificationSMSDTO(), {
|
|
452
612
|
sub,
|
|
453
613
|
challengeSessionId: lastToken?.challengeSessionId ?? undefined,
|
|
@@ -455,6 +615,12 @@ class PhoneVerificationService {
|
|
|
455
615
|
const result = await this.sendVerificationSMS(sendDto);
|
|
456
616
|
return { tokenId: result.tokenId };
|
|
457
617
|
}
|
|
618
|
+
/**
|
|
619
|
+
* Resend verification SMS by phone number (private helper)
|
|
620
|
+
*
|
|
621
|
+
* @param phone - Phone number
|
|
622
|
+
* @returns New verification token id
|
|
623
|
+
*/
|
|
458
624
|
async resendVerificationSMSForPhone(phone) {
|
|
459
625
|
const user = (await this.userRepo.findOne({ where: { phone } }));
|
|
460
626
|
if (!user) {
|
|
@@ -465,18 +631,34 @@ class PhoneVerificationService {
|
|
|
465
631
|
}
|
|
466
632
|
return this.resendVerificationSMSBySub(user.sub);
|
|
467
633
|
}
|
|
634
|
+
// ============================================================================
|
|
635
|
+
// Helpers
|
|
636
|
+
// ============================================================================
|
|
637
|
+
/**
|
|
638
|
+
* Generate N-digit OTP code (default 6)
|
|
639
|
+
*/
|
|
468
640
|
generateCode() {
|
|
469
641
|
const codeLength = this.config.signup?.phoneVerification?.codeLength || 6;
|
|
470
642
|
const min = Math.pow(10, codeLength - 1);
|
|
471
643
|
const max = Math.pow(10, codeLength) - 1;
|
|
472
644
|
return Math.floor(min + Math.random() * (max - min + 1)).toString();
|
|
473
645
|
}
|
|
646
|
+
/**
|
|
647
|
+
* Generate secure random token
|
|
648
|
+
*/
|
|
474
649
|
generateToken() {
|
|
475
650
|
return crypto.randomBytes(32).toString('hex');
|
|
476
651
|
}
|
|
652
|
+
/**
|
|
653
|
+
* Hash token with SHA-256
|
|
654
|
+
*/
|
|
477
655
|
hashToken(token) {
|
|
478
656
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
479
657
|
}
|
|
658
|
+
/**
|
|
659
|
+
* Mask phone number for logging (preserves last 4 digits)
|
|
660
|
+
* @private
|
|
661
|
+
*/
|
|
480
662
|
maskPhone(phone) {
|
|
481
663
|
if (!phone || phone.length < 4)
|
|
482
664
|
return '***';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone-verification.service.js","sourceRoot":"","sources":["../../src/services/phone-verification.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA6C;AAQ7C,oFAAyE;AACzE,mEAA+D;AAC/D,gEAA0D;AAE1D,8DAOiC;AAEjC,+CAAiC;AAuBjC,MAAa,wBAAwB;IAEhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IARnB,YACmB,qBAAwD,EACxD,QAA8B,EAC9B,WAAwB,EACxB,cAA8B,EAC9B,MAAmB,EACnB,iBAAoC,EACpC,MAAmB,EACnB,YAA+B;QAP/B,0BAAqB,GAArB,qBAAqB,CAAmC;QACxD,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,gBAAW,GAAX,WAAW,CAAa;QACxB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,WAAM,GAAN,MAAM,CAAa;QACnB,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,WAAM,GAAN,MAAM,CAAa;QACnB,iBAAY,GAAZ,YAAY,CAAmB;IAC/C,CAAC;IAUJ,KAAK,CAAC,mBAAmB,CAAC,GAA2B;QACnD,MAAM,EAAE,GAAG,EAAE,wBAAwB,GAAG,IAAI,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC;QACzE,MAAM,YAAY,GAAG,sBAAsB,GAAG,EAAE,CAAC;QAGjD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,YAAY,IAAI,CAAC,CAAC;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,eAAe,IAAI,IAAI,CAAC;QAGvF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,eAAe,GAAG,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,eAAe,CAAC;QAIzF,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QAID,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAGjH,IAAI,eAAe,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,uDAAuD,GAAG,YAAY,eAAe,UAAU,YAAY,EAAE,CAC9G,CAAC;QACJ,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,4CAA4C,GAAG,WAAW,YAAY,IAAI,YAAY,SAAS,SAAS,GAAG,CAC5G,CAAC;QAEF,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,gCAAgC,GAAG,WAAW,YAAY,SAAS,YAAY,gBAAgB,SAAS,GAAG,CAC5G,CAAC;YACF,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,cAAc,EAC5B,uDAAuD,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,UAAU,EAC5G;gBACE,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe;gBACvD,YAAY;gBACZ,WAAW,EAAE,YAAY;aAC1B,CACF,CAAC;QACJ,CAAC;QAGD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAiB,CAAC;QAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,cAAc,EAAE,8CAA8C,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;QACrF,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,EAAE,CAAC;QAC7E,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAC1D,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YACzC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAA8B,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;YACjF,IAAI,oBAAoB,GAAG,WAAW,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC;gBAClE,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,iBAAiB,EAC/B,eAAe,WAAW,yCAAyC,EACnE;oBACE,UAAU,EAAE,WAAW;oBACvB,WAAW;iBACZ,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CACrC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAA,gBAAM,GAAE,EAAE,EACpD,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,CACvB,CAAC;QAGF,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAGxC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC;QAE5C,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAC1D,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,kBAAkB,EAAE,kBAAkB,IAAI,IAAI;YAC9C,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS;YAChB,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;YAClG,QAAQ,EAAE,CAAC;YACX,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAkC,CAAC;QAE1G,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAChB,0BAA0B,GAAG,aAAa,KAAK,CAAC,EAAE,UAAU,IAAI,cAAc,OAAO,IAAI,YAAY,IAAI,CAAC,EAAE,YAAY,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CACjJ,CAAC;QAGF,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,IAAI,GAAG,CAAC;QACjF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAMvD,MAAM,YAAY,GAChB,GAAG,CAAC,wBAAwB,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC;QAGhF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAgF,CAAC;QAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,OAA6B,CAAC;QAGnH,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE;YAC7D,aAAa;YACb,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAChB,mCAAmC,GAAG,aAAa,KAAK,CAAC,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACnG,CAAC;QAKF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,+CAAkB,CAAC,4BAA4B;gBAC1D,WAAW,EAAE,MAAM;gBACnB,QAAQ,EAAE;oBAER,mBAAmB,EAAE,KAAK,CAAC,EAAE;oBAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;iBAClC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAEpB,MAAM,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACxF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,8DAA8D,YAAY,EAAE,EAAE;gBACjG,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC/B,CAAC;IAUD,KAAK,CAAC,mBAAmB,CAAC,GAA2B;QACnD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC;QAGhD,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,OAAgB;YACtB,IAAI;YACJ,MAAM,EAAE,IAAA,gBAAM,GAAE;YAChB,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,EAAE,kBAAkB,EAAE,CAAC;SAChE,CAAC;QAEF,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC7D,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAAoC,CAAC;QAGvC,IAAI,OAAO,GAAsD,IAAI,CAAC;QACtE,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAiB,CAAC;YAC5F,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;gBACjC,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC1B,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAGhC,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,IAAI,EAAE,CAAC;QAC3F,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,IAAI,EAAE,CAAC;QACvF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,IAAI,IAAI,CAAC;QAGnF,MAAM,gBAAgB,GAAG,wBAAwB,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEtE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,YAAY,GAAG,kBAAkB,EAAE,CAAC;YACtC,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAGD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG,sBAAsB,UAAU,CAAC,SAAS,EAAE,CAAC;YACpE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAElE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBAClC,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,sEAAsE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QAGD,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACxG,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,+BAA+B,CAAC,CAAC;QACrG,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,eAAe,GACnB,OAAO,KAAK,CAAC,mBAAmB,KAAK,UAAU;YAC7C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC;QACpC,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,+CAA+C,EAC/C;gBACE,WAAW;gBACX,eAAe,EAAE,KAAK,CAAC,QAAQ;aAChC,CACF,CAAC;QACJ,CAAC;QAGD,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,oCAAoC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,QAAQ,IAAI,WAAW,EAAE,CACvG,CAAC;YAKF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;oBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,SAAS,EAAE,+CAAkB,CAAC,yBAAyB;oBACvD,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,cAAc;oBAEtB,WAAW,EAAE,oCAAoC;oBACjD,QAAQ,EAAE;wBACR,mBAAmB,EAAE,KAAK,CAAC,EAAE;wBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;qBAC7B;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBAEpB,MAAM,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACxF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,2DAA2D,YAAY,EAAE,EAAE;oBAC9F,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,2BAA2B,EAAE;gBAC7F,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC;QAGD,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAG7C,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;YAClC,eAAe,EAAE,IAAI;YACrB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,yCAAyC,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAKvG,IAAI,CAAC;YAGH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,+CAAkB,CAAC,cAAc;gBAC5C,WAAW,EAAE,SAAS;gBACtB,QAAQ,EAAE;oBAER,mBAAmB,EAAE,KAAK,CAAC,EAAE;oBAC7B,kBAAkB,EAAE,MAAM;oBAC1B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC7B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAEpB,MAAM,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACxF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,gDAAgD,YAAY,EAAE,EAAE;gBACnF,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC;IAChF,CAAC;IAQD,KAAK,CAAC,wBAAwB,CAAC,GAAgC;QAC7D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC;QAG9C,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAiB,CAAC;QAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,cAAc,EAAE,8CAA8C,CAAC,CAAC;QACzG,CAAC;QAGD,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAOvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,IAAI,EAAE,CAAC;QACvF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,aAAa,IAAI,IAAI,CAAC;QACnF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAMhD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAChB,uCAAuC,GAAG,UAAU,UAAU,cAAc,OAAO,IAAI,YAAY,IAAI,CAAC,EAAE,EAAE,CAC7G,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,OAAgB;YACtB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAA,gBAAM,GAAE;YAChB,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,EAAE,kBAAkB,EAAE,CAAC;SAChE,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAClE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAA8B,CAAC;QAMjC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;YACrD,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,cAAc,GAAG,sBAAsB,UAAU,CAAC,SAAS,EAAE,CAAC;gBACpE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAElE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBAClE,CAAC;gBAED,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;oBAClC,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,sEAAsE,CACvE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CACjB,2CAA2C,GAAG,UAAU,UAAU,sBAAsB,OAAO,IAAI,YAAY,IAAI,CAAC,EAAE,EAAE,CACzH,CAAC;YAEF,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,SAAS,GACb,OAAO,iBAAiB,CAAC,SAAS,KAAK,UAAU;YAC/C,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YAEd,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,+BAA+B,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,eAAe,GACnB,OAAO,iBAAiB,CAAC,mBAAmB,KAAK,UAAU;YACzD,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,CAAC;YACtD,CAAC,CAAC,iBAAiB,CAAC,QAAQ,IAAI,WAAW,CAAC;QAChD,IAAI,eAAe,EAAE,CAAC;YAEpB,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,+CAA+C,EAC/C;gBACE,WAAW;gBACX,eAAe,EAAE,iBAAiB,CAAC,QAAQ;aAC5C,CACF,CAAC;QACJ,CAAC;QAOD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,IAAI,EAAE,CAAC;QAG3F,MAAM,sBAAsB,GAAG,KAAK,IAAmB,EAAE;YACvD,MAAM,gBAAgB,GAAG,wBAAwB,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEtE,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,YAAY,GAAG,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,yDAAyD,CAC1D,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,iBAAiB,CAAC,QAAQ,IAAI,CAAC,CAAC;QAEhC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YAEhC,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,sBAAsB,EAAE,CAAC;YAE/B,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAClB,kCAAkC,GAAG,cAAc,iBAAiB,CAAC,QAAQ,IAAI,WAAW,EAAE,CAC/F,CAAC;YAKF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;oBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,SAAS,EAAE,+CAAkB,CAAC,yBAAyB;oBACvD,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,cAAc;oBAEtB,WAAW,EAAE,oCAAoC;oBACjD,QAAQ,EAAE;wBACR,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;wBACzC,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;wBACpC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;qBACxC;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBAEpB,MAAM,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;gBACxF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,oEAAoE,YAAY,EAAE,EAAE;oBACvG,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,2BAA2B,EAAE;gBAC7F,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC;aACzE,CAAC,CAAC;QACL,CAAC;QAOD,iBAAiB,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAOzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAGtB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CACxB,EAAE,GAAG,EAAE,EACP;gBACE,eAAe,EAAE,IAAI;gBACrB,QAAQ,EAAE,IAAI;aACf,CACF,CAAC;YACF,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,sCAAsC,GAAG,YAAY,IAAI,CAAC,EAAE,6BAA6B,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YAEN,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,0CAA0C,GAAG,YAAY,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAClH,CAAC;QAKD,IAAI,CAAC;YAGH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;gBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,SAAS,EAAE,+CAAkB,CAAC,cAAc;gBAC5C,WAAW,EAAE,SAAS;gBACtB,QAAQ,EAAE;oBAER,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;oBACzC,kBAAkB,EAAE,MAAM;oBAC1B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YAEpB,MAAM,YAAY,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACxF,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,yDAAyD,YAAY,EAAE,EAAE;gBAC5F,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,IAAI,CAAC,EAAE;aAChB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC;IAChF,CAAC;IASD,KAAK,CAAC,qBAAqB,CAAC,GAA6B;QAEvD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,KAAM,CAAC,CAAC;IACxD,CAAC;IAQO,KAAK,CAAC,0BAA0B,CAAC,GAAW;QAClD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAiB,CAAC;QAC/E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,EAAE,CAAC;QAC7E,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAC1D,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YACzC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC7B,CAAC,CAA8B,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;YACjF,IAAI,oBAAoB,GAAG,WAAW,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,oBAAoB,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,0BAA0B,GAAG,UAAU,WAAW,YAAY,WAAW,GAAG,CAAC,CAAC;gBACnG,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,iBAAiB,EAC/B,eAAe,WAAW,yCAAyC,EACnE;oBACE,UAAU,EAAE,WAAW;oBACvB,WAAW;iBACZ,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QAEpE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,yCAAsB,EAAE,EAAE;YAC1D,GAAG;YACH,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,IAAI,SAAS;SAC/D,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAQO,KAAK,CAAC,6BAA6B,CAAC,KAAa;QACvD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAiB,CAAC;QACjF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,CAAC;IASO,YAAY;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,IAAI,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtE,CAAC;IAKO,aAAa;QACnB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAKO,SAAS,CAAC,KAAa;QAC7B,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAMO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,CAAC;CACF;AA1tBD,4DA0tBC"}
|
|
1
|
+
{"version":3,"file":"phone-verification.service.js","sourceRoot":"","sources":["../../src/services/phone-verification.service.ts"],"names":[],"mappings":"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"}
|