@nauth-toolkit/core 0.1.14 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/database-columns.d.ts +70 -0
- package/dist/adapters/database-columns.d.ts.map +1 -1
- package/dist/adapters/database-columns.js +76 -2
- package/dist/adapters/database-columns.js.map +1 -1
- package/dist/adapters/express.adapter.d.ts +66 -0
- package/dist/adapters/express.adapter.d.ts.map +1 -1
- package/dist/adapters/express.adapter.js +80 -0
- package/dist/adapters/express.adapter.js.map +1 -1
- package/dist/adapters/fastify.adapter.d.ts +42 -0
- package/dist/adapters/fastify.adapter.d.ts.map +1 -1
- package/dist/adapters/fastify.adapter.js +86 -0
- package/dist/adapters/fastify.adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/storage.factory.d.ts +107 -0
- package/dist/adapters/storage.factory.d.ts.map +1 -1
- package/dist/adapters/storage.factory.js +114 -0
- package/dist/adapters/storage.factory.js.map +1 -1
- package/dist/adapters.d.ts +8 -0
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +8 -0
- package/dist/adapters.js.map +1 -1
- package/dist/bootstrap.d.ts +82 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +106 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/dto/admin-set-password.dto.d.ts +90 -0
- package/dist/dto/admin-set-password.dto.d.ts.map +1 -1
- package/dist/dto/admin-set-password.dto.js +91 -0
- package/dist/dto/admin-set-password.dto.js.map +1 -1
- package/dist/dto/auth-challenge.dto.d.ts +170 -0
- package/dist/dto/auth-challenge.dto.d.ts.map +1 -1
- package/dist/dto/auth-challenge.dto.js +170 -0
- package/dist/dto/auth-challenge.dto.js.map +1 -1
- package/dist/dto/auth-response.dto.d.ts +196 -0
- package/dist/dto/auth-response.dto.d.ts.map +1 -1
- package/dist/dto/auth-response.dto.js +149 -0
- package/dist/dto/auth-response.dto.js.map +1 -1
- package/dist/dto/challenge-response.dto.d.ts +155 -0
- package/dist/dto/challenge-response.dto.d.ts.map +1 -1
- package/dist/dto/challenge-response.dto.js +8 -0
- package/dist/dto/challenge-response.dto.js.map +1 -1
- package/dist/dto/change-password-request.dto.d.ts +35 -0
- package/dist/dto/change-password-request.dto.d.ts.map +1 -1
- package/dist/dto/change-password-request.dto.js +35 -0
- package/dist/dto/change-password-request.dto.js.map +1 -1
- package/dist/dto/change-password-response.dto.d.ts +25 -0
- package/dist/dto/change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/change-password-response.dto.js +25 -0
- package/dist/dto/change-password-response.dto.js.map +1 -1
- package/dist/dto/change-password.dto.d.ts +45 -0
- package/dist/dto/change-password.dto.d.ts.map +1 -1
- package/dist/dto/change-password.dto.js +45 -0
- package/dist/dto/change-password.dto.js.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.d.ts +59 -0
- package/dist/dto/confirm-forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.js +59 -0
- package/dist/dto/confirm-forgot-password.dto.js.map +1 -1
- package/dist/dto/error-response.dto.d.ts +103 -0
- package/dist/dto/error-response.dto.d.ts.map +1 -1
- package/dist/dto/error-response.dto.js +103 -0
- package/dist/dto/error-response.dto.js.map +1 -1
- package/dist/dto/forgot-password.dto.d.ts +58 -0
- package/dist/dto/forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/forgot-password.dto.js +58 -0
- package/dist/dto/forgot-password.dto.js.map +1 -1
- package/dist/dto/get-available-methods.dto.d.ts +37 -0
- package/dist/dto/get-available-methods.dto.d.ts.map +1 -1
- package/dist/dto/get-available-methods.dto.js +37 -0
- package/dist/dto/get-available-methods.dto.js.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.d.ts +24 -0
- package/dist/dto/get-challenge-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.js +24 -0
- package/dist/dto/get-challenge-data-response.dto.js.map +1 -1
- package/dist/dto/get-challenge-data.dto.d.ts +46 -0
- package/dist/dto/get-challenge-data.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data.dto.js +46 -0
- package/dist/dto/get-challenge-data.dto.js.map +1 -1
- package/dist/dto/get-client-info.dto.d.ts +74 -0
- package/dist/dto/get-client-info.dto.d.ts.map +1 -1
- package/dist/dto/get-client-info.dto.js +74 -0
- package/dist/dto/get-client-info.dto.js.map +1 -1
- package/dist/dto/get-device-token-response.dto.d.ts +21 -0
- package/dist/dto/get-device-token-response.dto.d.ts.map +1 -1
- package/dist/dto/get-device-token-response.dto.js +21 -0
- package/dist/dto/get-device-token-response.dto.js.map +1 -1
- package/dist/dto/get-events-by-type.dto.d.ts +50 -0
- package/dist/dto/get-events-by-type.dto.d.ts.map +1 -1
- package/dist/dto/get-events-by-type.dto.js +50 -0
- package/dist/dto/get-events-by-type.dto.js.map +1 -1
- package/dist/dto/get-ip-address-response.dto.d.ts +20 -0
- package/dist/dto/get-ip-address-response.dto.d.ts.map +1 -1
- package/dist/dto/get-ip-address-response.dto.js +20 -0
- package/dist/dto/get-ip-address-response.dto.js.map +1 -1
- package/dist/dto/get-mfa-status.dto.d.ts +59 -0
- package/dist/dto/get-mfa-status.dto.d.ts.map +1 -1
- package/dist/dto/get-mfa-status.dto.js +59 -0
- package/dist/dto/get-mfa-status.dto.js.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.d.ts +28 -0
- package/dist/dto/get-risk-assessment-history.dto.d.ts.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.js +28 -0
- package/dist/dto/get-risk-assessment-history.dto.js.map +1 -1
- package/dist/dto/get-session-id-response.dto.d.ts +21 -0
- package/dist/dto/get-session-id-response.dto.d.ts.map +1 -1
- package/dist/dto/get-session-id-response.dto.js +21 -0
- package/dist/dto/get-session-id-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data-response.dto.d.ts +27 -0
- package/dist/dto/get-setup-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data-response.dto.js +27 -0
- package/dist/dto/get-setup-data-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data.dto.d.ts +51 -0
- package/dist/dto/get-setup-data.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data.dto.js +51 -0
- package/dist/dto/get-setup-data.dto.js.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.d.ts +31 -0
- package/dist/dto/get-suspicious-activity.dto.d.ts.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.js +31 -0
- package/dist/dto/get-suspicious-activity.dto.js.map +1 -1
- package/dist/dto/get-user-agent-response.dto.d.ts +19 -0
- package/dist/dto/get-user-agent-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-agent-response.dto.js +19 -0
- package/dist/dto/get-user-agent-response.dto.js.map +1 -1
- package/dist/dto/get-user-auth-history.dto.d.ts +64 -0
- package/dist/dto/get-user-auth-history.dto.d.ts.map +1 -1
- package/dist/dto/get-user-auth-history.dto.js +64 -0
- package/dist/dto/get-user-auth-history.dto.js.map +1 -1
- package/dist/dto/get-user-by-email.dto.d.ts +42 -0
- package/dist/dto/get-user-by-email.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-email.dto.js +42 -0
- package/dist/dto/get-user-by-email.dto.js.map +1 -1
- package/dist/dto/get-user-by-id.dto.d.ts +32 -0
- package/dist/dto/get-user-by-id.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-id.dto.js +32 -0
- package/dist/dto/get-user-by-id.dto.js.map +1 -1
- package/dist/dto/get-user-devices.dto.d.ts +34 -0
- package/dist/dto/get-user-devices.dto.d.ts.map +1 -1
- package/dist/dto/get-user-devices.dto.js +34 -0
- package/dist/dto/get-user-devices.dto.js.map +1 -1
- package/dist/dto/get-user-response.dto.d.ts +14 -0
- package/dist/dto/get-user-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-response.dto.js +15 -0
- package/dist/dto/get-user-response.dto.js.map +1 -1
- package/dist/dto/has-provider.dto.d.ts +33 -0
- package/dist/dto/has-provider.dto.d.ts.map +1 -1
- package/dist/dto/has-provider.dto.js +33 -0
- package/dist/dto/has-provider.dto.js.map +1 -1
- package/dist/dto/index.js +5 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.d.ts +28 -0
- package/dist/dto/is-trusted-device-response.dto.d.ts.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.js +28 -0
- package/dist/dto/is-trusted-device-response.dto.js.map +1 -1
- package/dist/dto/list-providers-response.dto.d.ts +19 -0
- package/dist/dto/list-providers-response.dto.d.ts.map +1 -1
- package/dist/dto/list-providers-response.dto.js +19 -0
- package/dist/dto/list-providers-response.dto.js.map +1 -1
- package/dist/dto/login.dto.d.ts +48 -0
- package/dist/dto/login.dto.d.ts.map +1 -1
- package/dist/dto/login.dto.js +50 -1
- package/dist/dto/login.dto.js.map +1 -1
- package/dist/dto/logout-all-response.dto.d.ts +20 -0
- package/dist/dto/logout-all-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-all-response.dto.js +20 -0
- package/dist/dto/logout-all-response.dto.js.map +1 -1
- package/dist/dto/logout-all.dto.d.ts +42 -0
- package/dist/dto/logout-all.dto.d.ts.map +1 -1
- package/dist/dto/logout-all.dto.js +42 -0
- package/dist/dto/logout-all.dto.js.map +1 -1
- package/dist/dto/logout-response.dto.d.ts +21 -0
- package/dist/dto/logout-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-response.dto.js +21 -0
- package/dist/dto/logout-response.dto.js.map +1 -1
- package/dist/dto/logout.dto.d.ts +45 -0
- package/dist/dto/logout.dto.d.ts.map +1 -1
- package/dist/dto/logout.dto.js +45 -0
- package/dist/dto/logout.dto.js.map +1 -1
- package/dist/dto/refresh-token.dto.d.ts +28 -0
- package/dist/dto/refresh-token.dto.d.ts.map +1 -1
- package/dist/dto/refresh-token.dto.js +28 -0
- package/dist/dto/refresh-token.dto.js.map +1 -1
- package/dist/dto/remove-devices.dto.d.ts +51 -0
- package/dist/dto/remove-devices.dto.d.ts.map +1 -1
- package/dist/dto/remove-devices.dto.js +51 -0
- package/dist/dto/remove-devices.dto.js.map +1 -1
- package/dist/dto/resend-code-response.dto.d.ts +28 -0
- package/dist/dto/resend-code-response.dto.d.ts.map +1 -1
- package/dist/dto/resend-code-response.dto.js +28 -0
- package/dist/dto/resend-code-response.dto.js.map +1 -1
- package/dist/dto/resend-code.dto.d.ts +37 -0
- package/dist/dto/resend-code.dto.d.ts.map +1 -1
- package/dist/dto/resend-code.dto.js +37 -0
- package/dist/dto/resend-code.dto.js.map +1 -1
- package/dist/dto/reset-password.dto.d.ts +74 -0
- package/dist/dto/reset-password.dto.d.ts.map +1 -1
- package/dist/dto/reset-password.dto.js +76 -1
- package/dist/dto/reset-password.dto.js.map +1 -1
- package/dist/dto/respond-challenge.dto.d.ts +147 -0
- package/dist/dto/respond-challenge.dto.d.ts.map +1 -1
- package/dist/dto/respond-challenge.dto.js +162 -0
- package/dist/dto/respond-challenge.dto.js.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.d.ts +65 -0
- package/dist/dto/set-mfa-exemption.dto.d.ts.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.js +65 -0
- package/dist/dto/set-mfa-exemption.dto.js.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.d.ts +23 -0
- package/dist/dto/set-must-change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.js +23 -0
- package/dist/dto/set-must-change-password-response.dto.js.map +1 -1
- package/dist/dto/set-must-change-password.dto.d.ts +32 -0
- package/dist/dto/set-must-change-password.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password.dto.js +32 -0
- package/dist/dto/set-must-change-password.dto.js.map +1 -1
- package/dist/dto/set-preferred-method.dto.d.ts +48 -0
- package/dist/dto/set-preferred-method.dto.d.ts.map +1 -1
- package/dist/dto/set-preferred-method.dto.js +48 -0
- package/dist/dto/set-preferred-method.dto.js.map +1 -1
- package/dist/dto/setup-mfa.dto.d.ts +62 -0
- package/dist/dto/setup-mfa.dto.d.ts.map +1 -1
- package/dist/dto/setup-mfa.dto.js +62 -0
- package/dist/dto/setup-mfa.dto.js.map +1 -1
- package/dist/dto/signup.dto.d.ts +92 -0
- package/dist/dto/signup.dto.d.ts.map +1 -1
- package/dist/dto/signup.dto.js +93 -0
- package/dist/dto/signup.dto.js.map +1 -1
- package/dist/dto/social-auth.dto.d.ts +234 -0
- package/dist/dto/social-auth.dto.d.ts.map +1 -1
- package/dist/dto/social-auth.dto.js +234 -0
- package/dist/dto/social-auth.dto.js.map +1 -1
- package/dist/dto/trust-device-response.dto.d.ts +26 -0
- package/dist/dto/trust-device-response.dto.d.ts.map +1 -1
- package/dist/dto/trust-device-response.dto.js +26 -0
- package/dist/dto/trust-device-response.dto.js.map +1 -1
- package/dist/dto/trust-device.dto.d.ts +9 -0
- package/dist/dto/trust-device.dto.d.ts.map +1 -1
- package/dist/dto/trust-device.dto.js +9 -0
- package/dist/dto/trust-device.dto.js.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.d.ts +36 -0
- package/dist/dto/update-user-attributes-request.dto.d.ts.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.js +36 -0
- package/dist/dto/update-user-attributes-request.dto.js.map +1 -1
- package/dist/dto/user-response.dto.d.ts +81 -0
- package/dist/dto/user-response.dto.d.ts.map +1 -1
- package/dist/dto/user-response.dto.js +84 -2
- package/dist/dto/user-response.dto.js.map +1 -1
- package/dist/dto/user-update.dto.d.ts +132 -0
- package/dist/dto/user-update.dto.d.ts.map +1 -1
- package/dist/dto/user-update.dto.js +133 -0
- package/dist/dto/user-update.dto.js.map +1 -1
- package/dist/dto/verify-email.dto.d.ts +171 -0
- package/dist/dto/verify-email.dto.d.ts.map +1 -1
- package/dist/dto/verify-email.dto.js +173 -1
- package/dist/dto/verify-email.dto.js.map +1 -1
- package/dist/dto/verify-mfa-code.dto.d.ts +65 -0
- package/dist/dto/verify-mfa-code.dto.d.ts.map +1 -1
- package/dist/dto/verify-mfa-code.dto.js +65 -0
- package/dist/dto/verify-mfa-code.dto.js.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.d.ts +49 -0
- package/dist/dto/verify-phone-by-sub.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.js +49 -0
- package/dist/dto/verify-phone-by-sub.dto.js.map +1 -1
- package/dist/dto/verify-phone.dto.d.ts +139 -0
- package/dist/dto/verify-phone.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone.dto.js +142 -1
- package/dist/dto/verify-phone.dto.js.map +1 -1
- package/dist/dto.d.ts +10 -0
- package/dist/dto.d.ts.map +1 -1
- package/dist/dto.js +10 -0
- package/dist/dto.js.map +1 -1
- package/dist/entities/auth-audit.entity.d.ts +159 -0
- package/dist/entities/auth-audit.entity.d.ts.map +1 -1
- package/dist/entities/auth-audit.entity.js +166 -0
- package/dist/entities/auth-audit.entity.js.map +1 -1
- package/dist/entities/challenge-session.entity.d.ts +87 -0
- package/dist/entities/challenge-session.entity.d.ts.map +1 -1
- package/dist/entities/challenge-session.entity.js +87 -0
- package/dist/entities/challenge-session.entity.js.map +1 -1
- package/dist/entities/index.d.ts +18 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +18 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/login-attempt.entity.d.ts +43 -0
- package/dist/entities/login-attempt.entity.d.ts.map +1 -1
- package/dist/entities/login-attempt.entity.js +43 -0
- package/dist/entities/login-attempt.entity.js.map +1 -1
- package/dist/entities/mfa-device.entity.d.ts +112 -0
- package/dist/entities/mfa-device.entity.d.ts.map +1 -1
- package/dist/entities/mfa-device.entity.js +112 -0
- package/dist/entities/mfa-device.entity.js.map +1 -1
- package/dist/entities/rate-limit.entity.d.ts +31 -0
- package/dist/entities/rate-limit.entity.d.ts.map +1 -1
- package/dist/entities/rate-limit.entity.js +31 -0
- package/dist/entities/rate-limit.entity.js.map +1 -1
- package/dist/entities/session.entity.d.ts +121 -0
- package/dist/entities/session.entity.d.ts.map +1 -1
- package/dist/entities/session.entity.js +121 -0
- package/dist/entities/session.entity.js.map +1 -1
- package/dist/entities/social-account.entity.d.ts +75 -0
- package/dist/entities/social-account.entity.d.ts.map +1 -1
- package/dist/entities/social-account.entity.js +75 -0
- package/dist/entities/social-account.entity.js.map +1 -1
- package/dist/entities/storage-lock.entity.d.ts +28 -0
- package/dist/entities/storage-lock.entity.d.ts.map +1 -1
- package/dist/entities/storage-lock.entity.js +28 -0
- package/dist/entities/storage-lock.entity.js.map +1 -1
- package/dist/entities/trusted-device.entity.d.ts +83 -0
- package/dist/entities/trusted-device.entity.d.ts.map +1 -1
- package/dist/entities/trusted-device.entity.js +83 -0
- package/dist/entities/trusted-device.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +166 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +166 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/verification-token.entity.d.ts +102 -0
- package/dist/entities/verification-token.entity.d.ts.map +1 -1
- package/dist/entities/verification-token.entity.js +102 -0
- package/dist/entities/verification-token.entity.js.map +1 -1
- package/dist/entities.d.ts +8 -0
- package/dist/entities.d.ts.map +1 -1
- package/dist/entities.js +8 -0
- package/dist/entities.js.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.d.ts +211 -0
- package/dist/enums/auth-audit-event-type.enum.d.ts.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.js +244 -0
- package/dist/enums/auth-audit-event-type.enum.js.map +1 -1
- package/dist/enums/error-codes.enum.d.ts +296 -0
- package/dist/enums/error-codes.enum.d.ts.map +1 -1
- package/dist/enums/error-codes.enum.js +332 -0
- package/dist/enums/error-codes.enum.js.map +1 -1
- package/dist/enums/mfa-method.enum.d.ts +74 -0
- package/dist/enums/mfa-method.enum.d.ts.map +1 -1
- package/dist/enums/mfa-method.enum.js +64 -0
- package/dist/enums/mfa-method.enum.js.map +1 -1
- package/dist/enums/risk-factor.enum.d.ts +91 -0
- package/dist/enums/risk-factor.enum.d.ts.map +1 -1
- package/dist/enums/risk-factor.enum.js +97 -0
- package/dist/enums/risk-factor.enum.js.map +1 -1
- package/dist/exceptions/nauth.exception.d.ts +149 -0
- package/dist/exceptions/nauth.exception.d.ts.map +1 -1
- package/dist/exceptions/nauth.exception.js +159 -0
- package/dist/exceptions/nauth.exception.js.map +1 -1
- package/dist/handlers/auth.handler.d.ts +32 -0
- package/dist/handlers/auth.handler.d.ts.map +1 -1
- package/dist/handlers/auth.handler.js +47 -1
- package/dist/handlers/auth.handler.js.map +1 -1
- package/dist/handlers/client-info.handler.d.ts +25 -0
- package/dist/handlers/client-info.handler.d.ts.map +1 -1
- package/dist/handlers/client-info.handler.js +36 -2
- package/dist/handlers/client-info.handler.js.map +1 -1
- package/dist/handlers/csrf.handler.d.ts +32 -0
- package/dist/handlers/csrf.handler.d.ts.map +1 -1
- package/dist/handlers/csrf.handler.js +49 -1
- package/dist/handlers/csrf.handler.js.map +1 -1
- package/dist/handlers/token-delivery.handler.d.ts +16 -0
- package/dist/handlers/token-delivery.handler.d.ts.map +1 -1
- package/dist/handlers/token-delivery.handler.js +22 -1
- package/dist/handlers/token-delivery.handler.js.map +1 -1
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/client-info.interface.d.ts +58 -0
- package/dist/interfaces/client-info.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.d.ts +1774 -0
- package/dist/interfaces/config.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.js +16 -0
- package/dist/interfaces/config.interface.js.map +1 -1
- package/dist/interfaces/entities.interface.d.ts +48 -0
- package/dist/interfaces/entities.interface.d.ts.map +1 -1
- package/dist/interfaces/entities.interface.js +8 -0
- package/dist/interfaces/entities.interface.js.map +1 -1
- package/dist/interfaces/index.js +5 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/logger.interface.d.ts +213 -0
- package/dist/interfaces/logger.interface.d.ts.map +1 -1
- package/dist/interfaces/logger.interface.js +35 -0
- package/dist/interfaces/logger.interface.js.map +1 -1
- package/dist/interfaces/mfa-provider.interface.d.ts +134 -0
- package/dist/interfaces/mfa-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/oauth.interface.d.ts +110 -0
- package/dist/interfaces/oauth.interface.d.ts.map +1 -1
- package/dist/interfaces/provider.interface.d.ts +83 -0
- package/dist/interfaces/provider.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.d.ts +246 -0
- package/dist/interfaces/sms-template.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.js +26 -0
- package/dist/interfaces/sms-template.interface.js.map +1 -1
- package/dist/interfaces/social-auth-provider.interface.d.ts +115 -0
- package/dist/interfaces/social-auth-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/storage-adapter.interface.d.ts +37 -0
- package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.d.ts +351 -0
- package/dist/interfaces/template.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.js +13 -0
- package/dist/interfaces/template.interface.js.map +1 -1
- package/dist/interfaces/token-verifier.interface.d.ts +101 -0
- package/dist/interfaces/token-verifier.interface.d.ts.map +1 -1
- package/dist/interfaces.d.ts +8 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +8 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/internal.d.ts +120 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +138 -0
- package/dist/internal.js.map +1 -1
- package/dist/platform/interfaces.d.ts +187 -0
- package/dist/platform/interfaces.d.ts.map +1 -1
- package/dist/platform/interfaces.js +11 -0
- package/dist/platform/interfaces.js.map +1 -1
- package/dist/schemas/auth-config.schema.d.ts +48 -0
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +188 -9
- package/dist/schemas/auth-config.schema.js.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.d.ts +144 -0
- package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.js +151 -5
- package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
- package/dist/services/auth-audit.service.d.ts +195 -0
- package/dist/services/auth-audit.service.d.ts.map +1 -1
- package/dist/services/auth-audit.service.js +228 -1
- package/dist/services/auth-audit.service.js.map +1 -1
- package/dist/services/auth-challenge-helper.service.d.ts +144 -1
- package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
- package/dist/services/auth-challenge-helper.service.js +295 -16
- package/dist/services/auth-challenge-helper.service.js.map +1 -1
- package/dist/services/auth-flow-context-builder.service.d.ts +120 -1
- package/dist/services/auth-flow-context-builder.service.d.ts.map +1 -1
- package/dist/services/auth-flow-context-builder.service.js +184 -5
- package/dist/services/auth-flow-context-builder.service.js.map +1 -1
- package/dist/services/auth-flow-rules.d.ts +136 -0
- package/dist/services/auth-flow-rules.d.ts.map +1 -1
- package/dist/services/auth-flow-rules.js +137 -0
- package/dist/services/auth-flow-rules.js.map +1 -1
- package/dist/services/auth-flow-state-definitions.d.ts +40 -0
- package/dist/services/auth-flow-state-definitions.d.ts.map +1 -1
- package/dist/services/auth-flow-state-definitions.js +98 -0
- package/dist/services/auth-flow-state-definitions.js.map +1 -1
- package/dist/services/auth-flow-state-machine.service.d.ts +91 -0
- package/dist/services/auth-flow-state-machine.service.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.service.js +102 -0
- package/dist/services/auth-flow-state-machine.service.js.map +1 -1
- package/dist/services/auth-flow-state-machine.types.d.ts +221 -0
- package/dist/services/auth-flow-state-machine.types.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.types.js +47 -0
- package/dist/services/auth-flow-state-machine.types.js.map +1 -1
- package/dist/services/auth.service.d.ts +397 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +943 -27
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/challenge.service.d.ts +255 -1
- package/dist/services/challenge.service.d.ts.map +1 -1
- package/dist/services/challenge.service.js +327 -3
- package/dist/services/challenge.service.js.map +1 -1
- package/dist/services/client-info.service.d.ts +143 -0
- package/dist/services/client-info.service.d.ts.map +1 -1
- package/dist/services/client-info.service.js +161 -0
- package/dist/services/client-info.service.js.map +1 -1
- package/dist/services/csrf.service.d.ts +15 -0
- package/dist/services/csrf.service.d.ts.map +1 -1
- package/dist/services/csrf.service.js +16 -0
- package/dist/services/csrf.service.js.map +1 -1
- package/dist/services/email-verification.service.d.ts +52 -0
- package/dist/services/email-verification.service.d.ts.map +1 -1
- package/dist/services/email-verification.service.js +149 -10
- package/dist/services/email-verification.service.js.map +1 -1
- package/dist/services/geo-location.service.d.ts +105 -0
- package/dist/services/geo-location.service.d.ts.map +1 -1
- package/dist/services/geo-location.service.js +188 -2
- package/dist/services/geo-location.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +257 -0
- package/dist/services/jwt.service.d.ts.map +1 -1
- package/dist/services/jwt.service.js +284 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/mfa-base.service.d.ts +179 -1
- package/dist/services/mfa-base.service.d.ts.map +1 -1
- package/dist/services/mfa-base.service.js +256 -2
- package/dist/services/mfa-base.service.js.map +1 -1
- package/dist/services/mfa.service.d.ts +304 -0
- package/dist/services/mfa.service.d.ts.map +1 -1
- package/dist/services/mfa.service.js +380 -0
- package/dist/services/mfa.service.js.map +1 -1
- package/dist/services/password-reset.service.d.ts +46 -0
- package/dist/services/password-reset.service.d.ts.map +1 -1
- package/dist/services/password-reset.service.js +79 -0
- package/dist/services/password-reset.service.js.map +1 -1
- package/dist/services/password.service.d.ts +139 -0
- package/dist/services/password.service.d.ts.map +1 -1
- package/dist/services/password.service.js +167 -9
- package/dist/services/password.service.js.map +1 -1
- package/dist/services/phone-verification.service.d.ts +75 -0
- package/dist/services/phone-verification.service.d.ts.map +1 -1
- package/dist/services/phone-verification.service.js +188 -6
- package/dist/services/phone-verification.service.js.map +1 -1
- package/dist/services/risk-detection.service.d.ts +198 -0
- package/dist/services/risk-detection.service.d.ts.map +1 -1
- package/dist/services/risk-detection.service.js +358 -11
- package/dist/services/risk-detection.service.js.map +1 -1
- package/dist/services/risk-scoring.service.d.ts +84 -0
- package/dist/services/risk-scoring.service.d.ts.map +1 -1
- package/dist/services/risk-scoring.service.js +87 -0
- package/dist/services/risk-scoring.service.js.map +1 -1
- package/dist/services/session.service.d.ts +204 -0
- package/dist/services/session.service.d.ts.map +1 -1
- package/dist/services/session.service.js +289 -4
- package/dist/services/session.service.js.map +1 -1
- package/dist/services/social-auth-base.service.d.ts +123 -1
- package/dist/services/social-auth-base.service.d.ts.map +1 -1
- package/dist/services/social-auth-base.service.js +155 -2
- package/dist/services/social-auth-base.service.js.map +1 -1
- package/dist/services/social-auth.service.d.ts +191 -0
- package/dist/services/social-auth.service.d.ts.map +1 -1
- package/dist/services/social-auth.service.js +215 -2
- package/dist/services/social-auth.service.js.map +1 -1
- package/dist/services/social-provider-registry.service.d.ts +86 -0
- package/dist/services/social-provider-registry.service.d.ts.map +1 -1
- package/dist/services/social-provider-registry.service.js +86 -0
- package/dist/services/social-provider-registry.service.js.map +1 -1
- package/dist/services/trusted-device.service.d.ts +105 -0
- package/dist/services/trusted-device.service.d.ts.map +1 -1
- package/dist/services/trusted-device.service.js +133 -4
- package/dist/services/trusted-device.service.js.map +1 -1
- package/dist/storage/account-lockout-storage.service.d.ts +35 -0
- package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
- package/dist/storage/account-lockout-storage.service.js +35 -0
- package/dist/storage/account-lockout-storage.service.js.map +1 -1
- package/dist/storage/memory-storage.adapter.d.ts +148 -0
- package/dist/storage/memory-storage.adapter.d.ts.map +1 -1
- package/dist/storage/memory-storage.adapter.js +201 -6
- package/dist/storage/memory-storage.adapter.js.map +1 -1
- package/dist/storage/rate-limit-storage.service.d.ts +3 -0
- package/dist/storage/rate-limit-storage.service.d.ts.map +1 -1
- package/dist/storage/rate-limit-storage.service.js +4 -0
- package/dist/storage/rate-limit-storage.service.js.map +1 -1
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -0
- package/dist/storage.js.map +1 -1
- package/dist/templates/html-template.engine.d.ts +110 -0
- package/dist/templates/html-template.engine.d.ts.map +1 -1
- package/dist/templates/html-template.engine.js +147 -0
- package/dist/templates/html-template.engine.js.map +1 -1
- package/dist/templates/index.d.ts +5 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +5 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/sms-template.engine.d.ts +151 -0
- package/dist/templates/sms-template.engine.d.ts.map +1 -1
- package/dist/templates/sms-template.engine.js +171 -0
- package/dist/templates/sms-template.engine.js.map +1 -1
- package/dist/templates.d.ts +8 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +8 -0
- package/dist/templates.js.map +1 -1
- package/dist/utils/common-passwords.d.ts +42 -0
- package/dist/utils/common-passwords.d.ts.map +1 -1
- package/dist/utils/common-passwords.js +88 -0
- package/dist/utils/common-passwords.js.map +1 -1
- package/dist/utils/context-storage.d.ts +129 -0
- package/dist/utils/context-storage.d.ts.map +1 -1
- package/dist/utils/context-storage.js +129 -0
- package/dist/utils/context-storage.js.map +1 -1
- package/dist/utils/cookie-names.util.d.ts +35 -0
- package/dist/utils/cookie-names.util.d.ts.map +1 -1
- package/dist/utils/cookie-names.util.js +37 -0
- package/dist/utils/cookie-names.util.js.map +1 -1
- package/dist/utils/cookies.util.d.ts +19 -0
- package/dist/utils/cookies.util.d.ts.map +1 -1
- package/dist/utils/cookies.util.js +30 -3
- package/dist/utils/cookies.util.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ip-extractor.d.ts +88 -0
- package/dist/utils/ip-extractor.d.ts.map +1 -1
- package/dist/utils/ip-extractor.js +109 -16
- package/dist/utils/ip-extractor.js.map +1 -1
- package/dist/utils/nauth-logger.d.ts +70 -0
- package/dist/utils/nauth-logger.d.ts.map +1 -1
- package/dist/utils/nauth-logger.js +82 -4
- package/dist/utils/nauth-logger.js.map +1 -1
- package/dist/utils/pii-redactor.d.ts +70 -0
- package/dist/utils/pii-redactor.d.ts.map +1 -1
- package/dist/utils/pii-redactor.js +102 -0
- package/dist/utils/pii-redactor.js.map +1 -1
- package/dist/utils/setup/get-repositories.d.ts +16 -0
- package/dist/utils/setup/get-repositories.d.ts.map +1 -1
- package/dist/utils/setup/get-repositories.js +21 -0
- package/dist/utils/setup/get-repositories.js.map +1 -1
- package/dist/utils/setup/init-services.d.ts +40 -1
- package/dist/utils/setup/init-services.d.ts.map +1 -1
- package/dist/utils/setup/init-services.js +98 -0
- package/dist/utils/setup/init-services.js.map +1 -1
- package/dist/utils/setup/init-social.d.ts +27 -0
- package/dist/utils/setup/init-social.d.ts.map +1 -1
- package/dist/utils/setup/init-social.js +49 -0
- package/dist/utils/setup/init-social.js.map +1 -1
- package/dist/utils/setup/init-storage.d.ts +22 -0
- package/dist/utils/setup/init-storage.d.ts.map +1 -1
- package/dist/utils/setup/init-storage.js +36 -0
- package/dist/utils/setup/init-storage.js.map +1 -1
- package/dist/utils/setup/register-mfa.d.ts +22 -0
- package/dist/utils/setup/register-mfa.d.ts.map +1 -1
- package/dist/utils/setup/register-mfa.js +41 -0
- package/dist/utils/setup/register-mfa.js.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.d.ts +7 -0
- package/dist/utils/setup/run-nauth-migrations.d.ts.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.js +8 -0
- package/dist/utils/setup/run-nauth-migrations.js.map +1 -1
- package/dist/utils/token-delivery-policy.d.ts +17 -0
- package/dist/utils/token-delivery-policy.d.ts.map +1 -1
- package/dist/utils/token-delivery-policy.js +17 -0
- package/dist/utils/token-delivery-policy.js.map +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -0
- package/dist/utils.js.map +1 -1
- package/dist/validators/template.validator.d.ts +80 -0
- package/dist/validators/template.validator.d.ts.map +1 -1
- package/dist/validators/template.validator.js +94 -0
- package/dist/validators/template.validator.js.map +1 -1
- package/package.json +7 -2
|
@@ -40,6 +40,17 @@ const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
|
40
40
|
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
41
41
|
const verify_email_dto_1 = require("../dto/verify-email.dto");
|
|
42
42
|
const crypto = __importStar(require("crypto"));
|
|
43
|
+
/**
|
|
44
|
+
* Email Verification Service
|
|
45
|
+
*
|
|
46
|
+
* Handles email verification workflow:
|
|
47
|
+
* - Generate verification codes
|
|
48
|
+
* - Send verification emails
|
|
49
|
+
* - Verify codes with token generation
|
|
50
|
+
* - Resend with rate limiting
|
|
51
|
+
*
|
|
52
|
+
* Supports both code-based (6-digit OTP) and link-based verification.
|
|
53
|
+
*/
|
|
43
54
|
class EmailVerificationService {
|
|
44
55
|
verificationTokenRepo;
|
|
45
56
|
userRepo;
|
|
@@ -59,20 +70,37 @@ class EmailVerificationService {
|
|
|
59
70
|
this.logger = logger;
|
|
60
71
|
this.auditService = auditService;
|
|
61
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Send verification email to user
|
|
75
|
+
* Generates a new verification code and sends it via email
|
|
76
|
+
*
|
|
77
|
+
* @param dto - Request DTO containing sub, baseUrl, and skipAlreadyVerifiedCheck
|
|
78
|
+
* @returns Response DTO with verification token ID
|
|
79
|
+
*/
|
|
62
80
|
async sendVerificationEmail(dto) {
|
|
63
81
|
const { sub, baseUrl, skipAlreadyVerifiedCheck = false, challengeSessionId } = dto;
|
|
82
|
+
// Get rate limit configuration from config (moved to signup.emailVerification)
|
|
64
83
|
const rateLimitMax = this.config.signup?.emailVerification?.rateLimitMax || 3;
|
|
65
|
-
const rateLimitWindow = this.config.signup?.emailVerification?.rateLimitWindow || 3600;
|
|
84
|
+
const rateLimitWindow = this.config.signup?.emailVerification?.rateLimitWindow || 3600; // 1 hour in seconds
|
|
85
|
+
// Check rate limit - use sub for rate limiting
|
|
66
86
|
const rateLimitKey = `email-verification:${sub}`;
|
|
87
|
+
// Check if key exists and has valid TTL (not expired)
|
|
67
88
|
const ttlBefore = await this.storageAdapter.ttl(rateLimitKey);
|
|
89
|
+
// Window is expired if: key doesn't exist (-1), expired (<0), or TTL is longer than configured window (config changed)
|
|
68
90
|
const isWindowExpired = ttlBefore === -1 || ttlBefore < 0 || ttlBefore > rateLimitWindow;
|
|
91
|
+
// If TTL is longer than configured window (config changed), delete the old key to reset it
|
|
92
|
+
// This ensures the new window uses the current rateLimitWindow instead of preserving old expiry
|
|
69
93
|
if (ttlBefore > rateLimitWindow) {
|
|
70
94
|
await this.storageAdapter.del(rateLimitKey);
|
|
71
95
|
}
|
|
96
|
+
// Increment counter (will reset to 1 if key expired or doesn't exist)
|
|
97
|
+
// Pass TTL so new records are created with correct expiry immediately
|
|
72
98
|
const currentCount = await this.storageAdapter.incr(rateLimitKey, isWindowExpired ? rateLimitWindow : undefined);
|
|
99
|
+
// If we created a new window, log it
|
|
73
100
|
if (isWindowExpired && currentCount === 1) {
|
|
74
101
|
this.logger?.debug?.(`Rate limit window reset for email verification: sub=${sub}, window=${rateLimitWindow}s, max=${rateLimitMax}`);
|
|
75
102
|
}
|
|
103
|
+
// Get actual TTL after setting expiry (for error message)
|
|
76
104
|
const actualTtl = await this.storageAdapter.ttl(rateLimitKey);
|
|
77
105
|
if (currentCount > rateLimitMax) {
|
|
78
106
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.RATE_LIMIT_EMAIL, 'Too many verification emails sent. Please try again later.', {
|
|
@@ -81,11 +109,13 @@ class EmailVerificationService {
|
|
|
81
109
|
maxAttempts: rateLimitMax,
|
|
82
110
|
});
|
|
83
111
|
}
|
|
112
|
+
// Check if user already has a pending verification token
|
|
84
113
|
const user = (await this.userRepo.findOne({ where: { sub } }));
|
|
85
114
|
if (!user) {
|
|
86
115
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
87
116
|
}
|
|
88
|
-
|
|
117
|
+
// Check resend delay to prevent abuse
|
|
118
|
+
const resendDelay = this.config.signup?.emailVerification?.resendDelay ?? 60; // 1 minute default
|
|
89
119
|
const lastToken = (await this.verificationTokenRepo.findOne({
|
|
90
120
|
where: { userId: user.id, type: 'email' },
|
|
91
121
|
order: { createdAt: 'DESC' },
|
|
@@ -100,36 +130,48 @@ class EmailVerificationService {
|
|
|
100
130
|
});
|
|
101
131
|
}
|
|
102
132
|
}
|
|
133
|
+
// Only check "already verified" if not skipping (skip for MFA contexts where codes are needed even if email is verified)
|
|
103
134
|
if (!skipAlreadyVerifiedCheck && user.isEmailVerified) {
|
|
104
135
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.ALREADY_VERIFIED, 'Email already verified');
|
|
105
136
|
}
|
|
137
|
+
// Invalidate existing tokens - use internal id for database query
|
|
106
138
|
await this.verificationTokenRepo.update({
|
|
107
|
-
userId: user.id,
|
|
139
|
+
userId: user.id, // Use internal id for foreign key query
|
|
108
140
|
type: 'email',
|
|
109
|
-
usedAt: (0, typeorm_1.IsNull)(),
|
|
141
|
+
usedAt: (0, typeorm_1.IsNull)(), // Only invalidate unused tokens
|
|
110
142
|
}, {
|
|
111
|
-
usedAt: new Date(),
|
|
143
|
+
usedAt: new Date(), // Mark as used to invalidate
|
|
112
144
|
});
|
|
145
|
+
// Generate verification code (6 digits)
|
|
113
146
|
const code = this.generateCode();
|
|
147
|
+
// Generate verification token (for link-based verification)
|
|
114
148
|
const token = this.generateToken();
|
|
115
149
|
const tokenHash = this.hashToken(token);
|
|
150
|
+
// Create verification token - use internal id for foreign key
|
|
151
|
+
// Get client info internally
|
|
116
152
|
const clientInfo = this.clientInfoService.get();
|
|
117
153
|
const ipAddress = clientInfo.ipAddress;
|
|
118
154
|
const userAgent = clientInfo.userAgent;
|
|
119
155
|
const verificationToken = this.verificationTokenRepo.create({
|
|
120
|
-
userId: user.id,
|
|
121
|
-
challengeSessionId: challengeSessionId ?? null,
|
|
156
|
+
userId: user.id, // Use internal id for foreign key
|
|
157
|
+
challengeSessionId: challengeSessionId ?? null, // Link to challenge session if provided
|
|
122
158
|
type: 'email',
|
|
123
159
|
token: tokenHash,
|
|
124
160
|
code,
|
|
125
|
-
expiresAt: new Date(Date.now() + (this.config.signup?.emailVerification?.expiresIn || 3600) * 1000),
|
|
161
|
+
expiresAt: new Date(Date.now() + (this.config.signup?.emailVerification?.expiresIn || 3600) * 1000), // Default: 1 hour
|
|
126
162
|
attempts: 0,
|
|
127
163
|
ipAddress,
|
|
128
164
|
userAgent,
|
|
129
165
|
});
|
|
130
166
|
await this.verificationTokenRepo.save(verificationToken);
|
|
167
|
+
// Generate verification link only if baseUrl is provided
|
|
168
|
+
// Consumer apps can build their own verification links if needed
|
|
131
169
|
const verificationLink = baseUrl ? `${baseUrl}/verify-email?token=${token}` : undefined;
|
|
170
|
+
// Send email (link is optional - only sent if provided)
|
|
132
171
|
await this.emailProvider.sendVerificationEmail(user.email, code, verificationLink);
|
|
172
|
+
// ============================================================================
|
|
173
|
+
// Audit: Record email verification request
|
|
174
|
+
// ============================================================================
|
|
133
175
|
try {
|
|
134
176
|
await this.auditService?.recordEvent({
|
|
135
177
|
userId: user.id,
|
|
@@ -138,9 +180,11 @@ class EmailVerificationService {
|
|
|
138
180
|
metadata: {
|
|
139
181
|
verificationTokenId: verificationToken.id,
|
|
140
182
|
},
|
|
183
|
+
// Client info automatically included from context
|
|
141
184
|
});
|
|
142
185
|
}
|
|
143
186
|
catch (auditError) {
|
|
187
|
+
// Non-blocking: Log but continue
|
|
144
188
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
145
189
|
this.logger?.error?.(`Failed to record EMAIL_VERIFICATION_REQUESTED audit event: ${errorMessage}`, {
|
|
146
190
|
error: auditError,
|
|
@@ -149,25 +193,45 @@ class EmailVerificationService {
|
|
|
149
193
|
}
|
|
150
194
|
return { tokenId: verificationToken.id };
|
|
151
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Verify email with code (6-digit OTP)
|
|
198
|
+
* Marks email as verified and activates user account
|
|
199
|
+
*
|
|
200
|
+
* @param dto - Request DTO containing email and code
|
|
201
|
+
* @returns Response DTO with success message
|
|
202
|
+
*/
|
|
152
203
|
async verifyEmailWithCode(dto) {
|
|
153
204
|
const { email, code, challengeSessionId } = dto;
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// Security: Rate limit configuration
|
|
207
|
+
// IP-based rate limiting applies only to INVALID attempts to prevent brute force
|
|
208
|
+
// Valid codes should not be blocked by IP rate limits
|
|
209
|
+
// ============================================================================
|
|
154
210
|
const maxAttemptsPerIP = this.config.signup?.emailVerification?.maxAttemptsPerIP ?? 20;
|
|
155
|
-
const attemptWindow = this.config.signup?.emailVerification?.attemptWindow ?? 3600;
|
|
211
|
+
const attemptWindow = this.config.signup?.emailVerification?.attemptWindow ?? 3600; // 1 hour
|
|
156
212
|
const clientInfo = this.clientInfoService.get();
|
|
213
|
+
// Find user by email
|
|
157
214
|
const user = await this.userRepo.findOne({ where: { email } });
|
|
158
215
|
if (!user) {
|
|
159
216
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
160
217
|
}
|
|
218
|
+
// Find active verification token
|
|
219
|
+
// If challengeSessionId is provided, ensure token belongs to that specific session
|
|
220
|
+
// This prevents old tokens from being used with new challenge sessions
|
|
161
221
|
const whereClause = {
|
|
162
222
|
userId: user.id,
|
|
163
223
|
type: 'email',
|
|
164
224
|
code,
|
|
165
225
|
usedAt: (0, typeorm_1.IsNull)(),
|
|
166
|
-
...(challengeSessionId !== undefined && { challengeSessionId }),
|
|
226
|
+
...(challengeSessionId !== undefined && { challengeSessionId }), // Include if provided
|
|
167
227
|
};
|
|
168
228
|
const verificationToken = (await this.verificationTokenRepo.findOne({
|
|
169
229
|
where: whereClause,
|
|
170
230
|
}));
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Security: Increment IP rate limit for invalid attempts only
|
|
233
|
+
// This prevents brute force attacks while allowing valid codes through
|
|
234
|
+
// ============================================================================
|
|
171
235
|
const incrementIPRateLimit = async () => {
|
|
172
236
|
if (clientInfo.ipAddress) {
|
|
173
237
|
const ipRateLimitKey = `verify-attempts:ip:${clientInfo.ipAddress}`;
|
|
@@ -181,24 +245,35 @@ class EmailVerificationService {
|
|
|
181
245
|
}
|
|
182
246
|
};
|
|
183
247
|
if (!verificationToken) {
|
|
248
|
+
// Invalid attempt - increment IP rate limit
|
|
184
249
|
await incrementIPRateLimit();
|
|
185
250
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid or expired verification code');
|
|
186
251
|
}
|
|
252
|
+
// Check expiry
|
|
187
253
|
const isExpired = verificationToken.isExpired
|
|
188
254
|
? verificationToken.isExpired()
|
|
189
255
|
: verificationToken.expiresAt < new Date();
|
|
190
256
|
if (isExpired) {
|
|
257
|
+
// Expired token - increment IP rate limit
|
|
191
258
|
await incrementIPRateLimit();
|
|
192
259
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_EXPIRED, 'Verification code has expired');
|
|
193
260
|
}
|
|
261
|
+
// Check max attempts (3 attempts)
|
|
194
262
|
const maxAttemptsExceeded = verificationToken.maxAttemptsExceeded
|
|
195
263
|
? verificationToken.maxAttemptsExceeded(3)
|
|
196
264
|
: verificationToken.attempts >= 3;
|
|
197
265
|
if (maxAttemptsExceeded) {
|
|
266
|
+
// Token exceeded max attempts - increment IP rate limit
|
|
198
267
|
await incrementIPRateLimit();
|
|
199
268
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many failed attempts. Request a new code.');
|
|
200
269
|
}
|
|
270
|
+
// ============================================================================
|
|
271
|
+
// Security: Rate limit verification attempts per user (for invalid attempts only)
|
|
272
|
+
// This prevents users from exhausting their own tokens through repeated attempts
|
|
273
|
+
// Valid codes should not be blocked by user rate limits
|
|
274
|
+
// ============================================================================
|
|
201
275
|
const maxAttemptsPerUser = this.config.signup?.emailVerification?.maxAttemptsPerUser ?? 10;
|
|
276
|
+
// Helper to increment user rate limit (only for invalid attempts)
|
|
202
277
|
const incrementUserRateLimit = async () => {
|
|
203
278
|
const userRateLimitKey = `verify-attempts:user:${user.id}`;
|
|
204
279
|
const userAttempts = await this.storageAdapter.incr(userRateLimitKey);
|
|
@@ -209,11 +284,17 @@ class EmailVerificationService {
|
|
|
209
284
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many verification attempts. Please try again later.');
|
|
210
285
|
}
|
|
211
286
|
};
|
|
287
|
+
// Increment attempts (even on success to prevent reuse)
|
|
212
288
|
verificationToken.attempts += 1;
|
|
289
|
+
// Invalid code - increment attempts and return false
|
|
213
290
|
if (verificationToken.code !== code) {
|
|
291
|
+
// Invalid code - increment both IP and user rate limits
|
|
214
292
|
await incrementIPRateLimit();
|
|
215
293
|
await incrementUserRateLimit();
|
|
216
294
|
await this.verificationTokenRepo.save(verificationToken);
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// Audit: Record email verification failure
|
|
297
|
+
// ============================================================================
|
|
217
298
|
try {
|
|
218
299
|
await this.auditService?.recordEvent({
|
|
219
300
|
userId: user.id,
|
|
@@ -221,6 +302,7 @@ class EmailVerificationService {
|
|
|
221
302
|
eventStatus: 'FAILURE',
|
|
222
303
|
reason: 'invalid_code',
|
|
223
304
|
description: 'Invalid verification code provided',
|
|
305
|
+
// Client info automatically included from context
|
|
224
306
|
metadata: {
|
|
225
307
|
verificationTokenId: verificationToken.id,
|
|
226
308
|
attempts: verificationToken.attempts,
|
|
@@ -228,6 +310,7 @@ class EmailVerificationService {
|
|
|
228
310
|
});
|
|
229
311
|
}
|
|
230
312
|
catch (auditError) {
|
|
313
|
+
// Non-blocking: Log but continue
|
|
231
314
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
232
315
|
this.logger?.error?.(`Failed to record EMAIL_VERIFICATION_FAILED audit event: ${errorMessage}`, {
|
|
233
316
|
error: auditError,
|
|
@@ -236,12 +319,22 @@ class EmailVerificationService {
|
|
|
236
319
|
}
|
|
237
320
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid verification code');
|
|
238
321
|
}
|
|
322
|
+
// ============================================================================
|
|
323
|
+
// Code is valid - proceed without rate limit checks
|
|
324
|
+
// Valid codes should always be allowed through
|
|
325
|
+
// ============================================================================
|
|
326
|
+
// Mark token as used
|
|
239
327
|
verificationToken.usedAt = new Date();
|
|
240
328
|
await this.verificationTokenRepo.save(verificationToken);
|
|
329
|
+
// Update user - use internal id for database update
|
|
241
330
|
await this.userRepo.update(user.id, {
|
|
242
331
|
isEmailVerified: true,
|
|
332
|
+
// Auto-activate if not already active
|
|
243
333
|
isActive: true,
|
|
244
334
|
});
|
|
335
|
+
// ============================================================================
|
|
336
|
+
// Audit: Record email verification success
|
|
337
|
+
// ============================================================================
|
|
245
338
|
try {
|
|
246
339
|
await this.auditService?.recordEvent({
|
|
247
340
|
userId: user.id,
|
|
@@ -250,23 +343,34 @@ class EmailVerificationService {
|
|
|
250
343
|
metadata: {
|
|
251
344
|
verificationTokenId: verificationToken.id,
|
|
252
345
|
verificationMethod: 'code',
|
|
346
|
+
// Client info automatically included from context
|
|
253
347
|
},
|
|
254
348
|
});
|
|
255
349
|
}
|
|
256
350
|
catch (auditError) {
|
|
351
|
+
// Non-blocking: Log but continue
|
|
257
352
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
258
353
|
this.logger?.error?.(`Failed to record EMAIL_VERIFIED audit event: ${errorMessage}`, {
|
|
259
354
|
error: auditError,
|
|
260
355
|
userId: user.id,
|
|
261
356
|
});
|
|
262
357
|
}
|
|
358
|
+
// TODO: maybe refactor to return user save user query in parent function
|
|
263
359
|
return {
|
|
264
360
|
message: 'Email verified successfully. Please log in to continue.',
|
|
265
361
|
};
|
|
266
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Verify email with link token
|
|
365
|
+
* Marks email as verified and activates user account
|
|
366
|
+
*
|
|
367
|
+
* @param dto - Request DTO containing token
|
|
368
|
+
* @returns Response DTO with success message
|
|
369
|
+
*/
|
|
267
370
|
async verifyEmailWithToken(dto) {
|
|
268
371
|
const { token } = dto;
|
|
269
372
|
const tokenHash = this.hashToken(token);
|
|
373
|
+
// Find verification token
|
|
270
374
|
const verificationToken = (await this.verificationTokenRepo.findOne({
|
|
271
375
|
where: {
|
|
272
376
|
token: tokenHash,
|
|
@@ -277,21 +381,29 @@ class EmailVerificationService {
|
|
|
277
381
|
if (!verificationToken) {
|
|
278
382
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid or expired verification link');
|
|
279
383
|
}
|
|
384
|
+
// Check expiry
|
|
280
385
|
const isExpired = verificationToken.isExpired
|
|
281
386
|
? verificationToken.isExpired()
|
|
282
387
|
: verificationToken.expiresAt < new Date();
|
|
283
388
|
if (isExpired) {
|
|
284
389
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_EXPIRED, 'Verification link has expired');
|
|
285
390
|
}
|
|
391
|
+
// Mark token as used
|
|
286
392
|
verificationToken.usedAt = new Date();
|
|
287
393
|
await this.verificationTokenRepo.save(verificationToken);
|
|
394
|
+
// Get user for audit logging
|
|
288
395
|
const user = (await this.userRepo.findOne({
|
|
289
396
|
where: { id: verificationToken.userId },
|
|
290
397
|
}));
|
|
398
|
+
// Update user
|
|
291
399
|
await this.userRepo.update(verificationToken.userId, {
|
|
292
400
|
isEmailVerified: true,
|
|
401
|
+
// Auto-activate if not already active
|
|
293
402
|
isActive: true,
|
|
294
403
|
});
|
|
404
|
+
// ============================================================================
|
|
405
|
+
// Audit: Record email verification success (token-based)
|
|
406
|
+
// ============================================================================
|
|
295
407
|
if (user) {
|
|
296
408
|
try {
|
|
297
409
|
await this.auditService?.recordEvent({
|
|
@@ -301,10 +413,12 @@ class EmailVerificationService {
|
|
|
301
413
|
metadata: {
|
|
302
414
|
verificationTokenId: verificationToken.id,
|
|
303
415
|
verificationMethod: 'token',
|
|
416
|
+
// Client info automatically included from context
|
|
304
417
|
},
|
|
305
418
|
});
|
|
306
419
|
}
|
|
307
420
|
catch (auditError) {
|
|
421
|
+
// Non-blocking: Log but continue
|
|
308
422
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
309
423
|
this.logger?.error?.(`Failed to record EMAIL_VERIFIED audit event (token-based): ${errorMessage}`, {
|
|
310
424
|
error: auditError,
|
|
@@ -316,7 +430,15 @@ class EmailVerificationService {
|
|
|
316
430
|
message: 'Email verified successfully. Please log in to continue.',
|
|
317
431
|
};
|
|
318
432
|
}
|
|
433
|
+
/**
|
|
434
|
+
* Resend verification email
|
|
435
|
+
* Supports both sub and email-based resend
|
|
436
|
+
*
|
|
437
|
+
* @param dto - Request DTO containing sub or email, and optional baseUrl
|
|
438
|
+
* @returns Response DTO with verification token ID
|
|
439
|
+
*/
|
|
319
440
|
async resendVerificationEmail(dto) {
|
|
441
|
+
// Validate that either sub or email is provided
|
|
320
442
|
if (!dto.sub && !dto.email) {
|
|
321
443
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VALIDATION_FAILED, 'Either sub or email must be provided');
|
|
322
444
|
}
|
|
@@ -326,10 +448,12 @@ class EmailVerificationService {
|
|
|
326
448
|
return this.resendVerificationEmailByEmail(dto.email, dto.baseUrl);
|
|
327
449
|
}
|
|
328
450
|
async resendVerificationEmailBySub(sub, baseUrl) {
|
|
451
|
+
// Get user by sub to get internal id
|
|
329
452
|
const user = await this.userRepo.findOne({ where: { sub } });
|
|
330
453
|
if (!user) {
|
|
331
454
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
332
455
|
}
|
|
456
|
+
// Check resend delay - use config value (default 60 seconds)
|
|
333
457
|
const resendDelay = this.config.signup?.emailVerification?.resendDelay ?? 60;
|
|
334
458
|
const lastToken = (await this.verificationTokenRepo.findOne({
|
|
335
459
|
where: { userId: user.id, type: 'email' },
|
|
@@ -345,6 +469,8 @@ class EmailVerificationService {
|
|
|
345
469
|
});
|
|
346
470
|
}
|
|
347
471
|
}
|
|
472
|
+
// Send new verification email - use sub (external identifier)
|
|
473
|
+
// Preserve challengeSessionId from the last token to ensure verification succeeds
|
|
348
474
|
const dto = Object.assign(new verify_email_dto_1.SendVerificationEmailDTO(), {
|
|
349
475
|
sub,
|
|
350
476
|
baseUrl,
|
|
@@ -359,12 +485,25 @@ class EmailVerificationService {
|
|
|
359
485
|
}
|
|
360
486
|
return this.resendVerificationEmailBySub(user.sub, baseUrl);
|
|
361
487
|
}
|
|
488
|
+
/**
|
|
489
|
+
* Generate 6-digit verification code
|
|
490
|
+
* @returns 6-digit numeric code
|
|
491
|
+
*/
|
|
362
492
|
generateCode() {
|
|
363
493
|
return Math.floor(100000 + Math.random() * 900000).toString();
|
|
364
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* Generate secure random token
|
|
497
|
+
* @returns Random token (32 bytes, hex encoded)
|
|
498
|
+
*/
|
|
365
499
|
generateToken() {
|
|
366
500
|
return crypto.randomBytes(32).toString('hex');
|
|
367
501
|
}
|
|
502
|
+
/**
|
|
503
|
+
* Hash token with SHA-256
|
|
504
|
+
* @param token - Plain token
|
|
505
|
+
* @returns Hashed token
|
|
506
|
+
*/
|
|
368
507
|
hashToken(token) {
|
|
369
508
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
370
509
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-verification.service.js","sourceRoot":"","sources":["../../src/services/email-verification.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"email-verification.service.js","sourceRoot":"","sources":["../../src/services/email-verification.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { NAuthConfig } from '../interfaces/config.interface';
|
|
2
2
|
import { StorageAdapter } from '../interfaces/storage-adapter.interface';
|
|
3
3
|
import { NAuthLogger } from '../utils/nauth-logger';
|
|
4
|
+
/**
|
|
5
|
+
* MaxMind GeoIP2 Reader type (optional dependency)
|
|
6
|
+
* Only available if @maxmind/geoip2-node is installed
|
|
7
|
+
*
|
|
8
|
+
* The Reader class has city() and country() methods that return response objects
|
|
9
|
+
*/
|
|
4
10
|
type MaxMindReader = {
|
|
5
11
|
city: (ip: string) => {
|
|
6
12
|
country?: {
|
|
@@ -51,11 +57,40 @@ type MaxMindReader = {
|
|
|
51
57
|
};
|
|
52
58
|
};
|
|
53
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* MaxMind library module type (optional peer dependency)
|
|
62
|
+
* Injected via dependency injection if package is installed
|
|
63
|
+
*/
|
|
54
64
|
type MaxMindModule = {
|
|
55
65
|
Reader: {
|
|
56
66
|
open: (dbPath: string) => Promise<MaxMindReader>;
|
|
57
67
|
};
|
|
58
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* GeoLocation Service
|
|
71
|
+
*
|
|
72
|
+
* Provides IP geolocation using MaxMind GeoIP2 database files.
|
|
73
|
+
* Platform-agnostic - works on all platforms where Node.js runs.
|
|
74
|
+
*
|
|
75
|
+
* Features:
|
|
76
|
+
* - IP to country/city lookup from MaxMind .mmdb files
|
|
77
|
+
* - Distributed locking for database updates (multi-server safe)
|
|
78
|
+
* - Configurable database path (defaults to system temp directory)
|
|
79
|
+
* - Graceful degradation if MaxMind not installed
|
|
80
|
+
*
|
|
81
|
+
* Requirements:
|
|
82
|
+
* - @maxmind/geoip2-node peer dependency must be installed
|
|
83
|
+
* - MaxMind license key and account ID for database downloads
|
|
84
|
+
* - Storage adapter (for distributed locking)
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* // Get geolocation for an IP
|
|
89
|
+
* const geo = await geoLocationService.getIpGeolocation('8.8.8.8');
|
|
90
|
+
* console.log(geo.country); // 'US'
|
|
91
|
+
* console.log(geo.city); // 'Mountain View'
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
59
94
|
export declare class GeoLocationService {
|
|
60
95
|
private readonly storageAdapter;
|
|
61
96
|
private readonly logger?;
|
|
@@ -68,17 +103,87 @@ export declare class GeoLocationService {
|
|
|
68
103
|
private readonly lockKey;
|
|
69
104
|
private readonly lockTtlSeconds;
|
|
70
105
|
constructor(nauthConfig: NAuthConfig, storageAdapter: StorageAdapter, maxMindLib?: MaxMindModule | null, logger?: NAuthLogger | undefined);
|
|
106
|
+
/**
|
|
107
|
+
* Initialize service on module startup
|
|
108
|
+
*
|
|
109
|
+
* - Loads database files if they exist
|
|
110
|
+
* - Optionally downloads databases if autoDownloadOnStartup is enabled
|
|
111
|
+
*/
|
|
71
112
|
onModuleInit(): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Get geolocation information for an IP address
|
|
115
|
+
*
|
|
116
|
+
* @param ip - IP address to lookup
|
|
117
|
+
* @returns Geolocation info with country, city, and coordinates (if available)
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* const geo = await geoLocationService.getIpGeolocation('8.8.8.8');
|
|
122
|
+
* // { country: 'US', city: 'Mountain View', latitude: 37.386, longitude: -122.0838 }
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
72
125
|
getIpGeolocation(ip: string): Promise<{
|
|
73
126
|
country?: string;
|
|
74
127
|
city?: string;
|
|
75
128
|
latitude?: number;
|
|
76
129
|
longitude?: number;
|
|
77
130
|
}>;
|
|
131
|
+
/**
|
|
132
|
+
* Update MaxMind GeoIP2 database files
|
|
133
|
+
*
|
|
134
|
+
* Downloads the latest database files from MaxMind using distributed locking
|
|
135
|
+
* to prevent concurrent downloads in multi-server deployments.
|
|
136
|
+
*
|
|
137
|
+
* Uses storage adapter for distributed locking:
|
|
138
|
+
* - Lock key: 'maxmind-db-update-lock'
|
|
139
|
+
* - Lock TTL: 5 minutes (300 seconds)
|
|
140
|
+
* - Only one server/process can download at a time
|
|
141
|
+
*
|
|
142
|
+
* @throws {NAuthException} If MaxMind credentials are missing or download fails
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* // Call this method via cron job for periodic updates
|
|
147
|
+
* await geoLocationService.updateGeoLocationDatabase();
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
78
150
|
updateGeoLocationDatabase(): Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Ensure database directory exists
|
|
153
|
+
*
|
|
154
|
+
* Creates the directory if it doesn't exist.
|
|
155
|
+
*/
|
|
79
156
|
private ensureDbDirectoryExists;
|
|
157
|
+
/**
|
|
158
|
+
* Load database files from disk
|
|
159
|
+
*
|
|
160
|
+
* Loads .mmdb files for City and Country databases if they exist.
|
|
161
|
+
*/
|
|
80
162
|
private loadDatabaseFiles;
|
|
163
|
+
/**
|
|
164
|
+
* Download a MaxMind database file
|
|
165
|
+
*
|
|
166
|
+
* Downloads the specified edition from MaxMind's download API,
|
|
167
|
+
* extracts the .mmdb file from the tar.gz archive, and saves it.
|
|
168
|
+
*
|
|
169
|
+
* Uses Node.js built-in zlib for gzip decompression and implements
|
|
170
|
+
* basic tar parsing to extract the .mmdb file.
|
|
171
|
+
*
|
|
172
|
+
* @param edition - Edition name (e.g., 'GeoLite2-City')
|
|
173
|
+
* @param accountId - MaxMind account ID
|
|
174
|
+
* @param licenseKey - MaxMind license key
|
|
175
|
+
*/
|
|
81
176
|
private downloadDatabase;
|
|
177
|
+
/**
|
|
178
|
+
* Extract .mmdb file from tar.gz archive
|
|
179
|
+
*
|
|
180
|
+
* Uses Node.js built-in zlib for gzip decompression and implements
|
|
181
|
+
* basic tar parsing to find and extract the .mmdb file.
|
|
182
|
+
*
|
|
183
|
+
* @param tarGzPath - Path to the .tar.gz file
|
|
184
|
+
* @param outputPath - Path where .mmdb file should be saved
|
|
185
|
+
* @param edition - Edition name (to find correct file in archive)
|
|
186
|
+
*/
|
|
82
187
|
private extractTarGz;
|
|
83
188
|
}
|
|
84
189
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo-location.service.d.ts","sourceRoot":"","sources":["../../src/services/geo-location.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"geo-location.service.d.ts","sourceRoot":"","sources":["../../src/services/geo-location.service.ts"],"names":[],"mappings":"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"}
|