@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,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,36 @@ 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 (configurable, default 3)
|
|
262
|
+
const maxAttempts = this.config.signup?.emailVerification?.maxAttempts ?? 3;
|
|
194
263
|
const maxAttemptsExceeded = verificationToken.maxAttemptsExceeded
|
|
195
|
-
? verificationToken.maxAttemptsExceeded(
|
|
196
|
-
: verificationToken.attempts >=
|
|
264
|
+
? verificationToken.maxAttemptsExceeded(maxAttempts)
|
|
265
|
+
: verificationToken.attempts >= maxAttempts;
|
|
197
266
|
if (maxAttemptsExceeded) {
|
|
267
|
+
// Token exceeded max attempts - increment IP rate limit
|
|
198
268
|
await incrementIPRateLimit();
|
|
199
269
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many failed attempts. Request a new code.');
|
|
200
270
|
}
|
|
271
|
+
// ============================================================================
|
|
272
|
+
// Security: Rate limit verification attempts per user (for invalid attempts only)
|
|
273
|
+
// This prevents users from exhausting their own tokens through repeated attempts
|
|
274
|
+
// Valid codes should not be blocked by user rate limits
|
|
275
|
+
// ============================================================================
|
|
201
276
|
const maxAttemptsPerUser = this.config.signup?.emailVerification?.maxAttemptsPerUser ?? 10;
|
|
277
|
+
// Helper to increment user rate limit (only for invalid attempts)
|
|
202
278
|
const incrementUserRateLimit = async () => {
|
|
203
279
|
const userRateLimitKey = `verify-attempts:user:${user.id}`;
|
|
204
280
|
const userAttempts = await this.storageAdapter.incr(userRateLimitKey);
|
|
@@ -209,11 +285,17 @@ class EmailVerificationService {
|
|
|
209
285
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_TOO_MANY_ATTEMPTS, 'Too many verification attempts. Please try again later.');
|
|
210
286
|
}
|
|
211
287
|
};
|
|
288
|
+
// Increment attempts (even on success to prevent reuse)
|
|
212
289
|
verificationToken.attempts += 1;
|
|
290
|
+
// Invalid code - increment attempts and return false
|
|
213
291
|
if (verificationToken.code !== code) {
|
|
292
|
+
// Invalid code - increment both IP and user rate limits
|
|
214
293
|
await incrementIPRateLimit();
|
|
215
294
|
await incrementUserRateLimit();
|
|
216
295
|
await this.verificationTokenRepo.save(verificationToken);
|
|
296
|
+
// ============================================================================
|
|
297
|
+
// Audit: Record email verification failure
|
|
298
|
+
// ============================================================================
|
|
217
299
|
try {
|
|
218
300
|
await this.auditService?.recordEvent({
|
|
219
301
|
userId: user.id,
|
|
@@ -221,6 +303,7 @@ class EmailVerificationService {
|
|
|
221
303
|
eventStatus: 'FAILURE',
|
|
222
304
|
reason: 'invalid_code',
|
|
223
305
|
description: 'Invalid verification code provided',
|
|
306
|
+
// Client info automatically included from context
|
|
224
307
|
metadata: {
|
|
225
308
|
verificationTokenId: verificationToken.id,
|
|
226
309
|
attempts: verificationToken.attempts,
|
|
@@ -228,6 +311,7 @@ class EmailVerificationService {
|
|
|
228
311
|
});
|
|
229
312
|
}
|
|
230
313
|
catch (auditError) {
|
|
314
|
+
// Non-blocking: Log but continue
|
|
231
315
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
232
316
|
this.logger?.error?.(`Failed to record EMAIL_VERIFICATION_FAILED audit event: ${errorMessage}`, {
|
|
233
317
|
error: auditError,
|
|
@@ -236,12 +320,22 @@ class EmailVerificationService {
|
|
|
236
320
|
}
|
|
237
321
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid verification code');
|
|
238
322
|
}
|
|
323
|
+
// ============================================================================
|
|
324
|
+
// Code is valid - proceed without rate limit checks
|
|
325
|
+
// Valid codes should always be allowed through
|
|
326
|
+
// ============================================================================
|
|
327
|
+
// Mark token as used
|
|
239
328
|
verificationToken.usedAt = new Date();
|
|
240
329
|
await this.verificationTokenRepo.save(verificationToken);
|
|
330
|
+
// Update user - use internal id for database update
|
|
241
331
|
await this.userRepo.update(user.id, {
|
|
242
332
|
isEmailVerified: true,
|
|
333
|
+
// Auto-activate if not already active
|
|
243
334
|
isActive: true,
|
|
244
335
|
});
|
|
336
|
+
// ============================================================================
|
|
337
|
+
// Audit: Record email verification success
|
|
338
|
+
// ============================================================================
|
|
245
339
|
try {
|
|
246
340
|
await this.auditService?.recordEvent({
|
|
247
341
|
userId: user.id,
|
|
@@ -250,23 +344,34 @@ class EmailVerificationService {
|
|
|
250
344
|
metadata: {
|
|
251
345
|
verificationTokenId: verificationToken.id,
|
|
252
346
|
verificationMethod: 'code',
|
|
347
|
+
// Client info automatically included from context
|
|
253
348
|
},
|
|
254
349
|
});
|
|
255
350
|
}
|
|
256
351
|
catch (auditError) {
|
|
352
|
+
// Non-blocking: Log but continue
|
|
257
353
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
258
354
|
this.logger?.error?.(`Failed to record EMAIL_VERIFIED audit event: ${errorMessage}`, {
|
|
259
355
|
error: auditError,
|
|
260
356
|
userId: user.id,
|
|
261
357
|
});
|
|
262
358
|
}
|
|
359
|
+
// TODO: maybe refactor to return user save user query in parent function
|
|
263
360
|
return {
|
|
264
361
|
message: 'Email verified successfully. Please log in to continue.',
|
|
265
362
|
};
|
|
266
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* Verify email with link token
|
|
366
|
+
* Marks email as verified and activates user account
|
|
367
|
+
*
|
|
368
|
+
* @param dto - Request DTO containing token
|
|
369
|
+
* @returns Response DTO with success message
|
|
370
|
+
*/
|
|
267
371
|
async verifyEmailWithToken(dto) {
|
|
268
372
|
const { token } = dto;
|
|
269
373
|
const tokenHash = this.hashToken(token);
|
|
374
|
+
// Find verification token
|
|
270
375
|
const verificationToken = (await this.verificationTokenRepo.findOne({
|
|
271
376
|
where: {
|
|
272
377
|
token: tokenHash,
|
|
@@ -277,21 +382,29 @@ class EmailVerificationService {
|
|
|
277
382
|
if (!verificationToken) {
|
|
278
383
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_INVALID, 'Invalid or expired verification link');
|
|
279
384
|
}
|
|
385
|
+
// Check expiry
|
|
280
386
|
const isExpired = verificationToken.isExpired
|
|
281
387
|
? verificationToken.isExpired()
|
|
282
388
|
: verificationToken.expiresAt < new Date();
|
|
283
389
|
if (isExpired) {
|
|
284
390
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VERIFICATION_CODE_EXPIRED, 'Verification link has expired');
|
|
285
391
|
}
|
|
392
|
+
// Mark token as used
|
|
286
393
|
verificationToken.usedAt = new Date();
|
|
287
394
|
await this.verificationTokenRepo.save(verificationToken);
|
|
395
|
+
// Get user for audit logging
|
|
288
396
|
const user = (await this.userRepo.findOne({
|
|
289
397
|
where: { id: verificationToken.userId },
|
|
290
398
|
}));
|
|
399
|
+
// Update user
|
|
291
400
|
await this.userRepo.update(verificationToken.userId, {
|
|
292
401
|
isEmailVerified: true,
|
|
402
|
+
// Auto-activate if not already active
|
|
293
403
|
isActive: true,
|
|
294
404
|
});
|
|
405
|
+
// ============================================================================
|
|
406
|
+
// Audit: Record email verification success (token-based)
|
|
407
|
+
// ============================================================================
|
|
295
408
|
if (user) {
|
|
296
409
|
try {
|
|
297
410
|
await this.auditService?.recordEvent({
|
|
@@ -301,10 +414,12 @@ class EmailVerificationService {
|
|
|
301
414
|
metadata: {
|
|
302
415
|
verificationTokenId: verificationToken.id,
|
|
303
416
|
verificationMethod: 'token',
|
|
417
|
+
// Client info automatically included from context
|
|
304
418
|
},
|
|
305
419
|
});
|
|
306
420
|
}
|
|
307
421
|
catch (auditError) {
|
|
422
|
+
// Non-blocking: Log but continue
|
|
308
423
|
const errorMessage = auditError instanceof Error ? auditError.message : 'Unknown error';
|
|
309
424
|
this.logger?.error?.(`Failed to record EMAIL_VERIFIED audit event (token-based): ${errorMessage}`, {
|
|
310
425
|
error: auditError,
|
|
@@ -316,7 +431,15 @@ class EmailVerificationService {
|
|
|
316
431
|
message: 'Email verified successfully. Please log in to continue.',
|
|
317
432
|
};
|
|
318
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Resend verification email
|
|
436
|
+
* Supports both sub and email-based resend
|
|
437
|
+
*
|
|
438
|
+
* @param dto - Request DTO containing sub or email, and optional baseUrl
|
|
439
|
+
* @returns Response DTO with verification token ID
|
|
440
|
+
*/
|
|
319
441
|
async resendVerificationEmail(dto) {
|
|
442
|
+
// Validate that either sub or email is provided
|
|
320
443
|
if (!dto.sub && !dto.email) {
|
|
321
444
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.VALIDATION_FAILED, 'Either sub or email must be provided');
|
|
322
445
|
}
|
|
@@ -326,10 +449,12 @@ class EmailVerificationService {
|
|
|
326
449
|
return this.resendVerificationEmailByEmail(dto.email, dto.baseUrl);
|
|
327
450
|
}
|
|
328
451
|
async resendVerificationEmailBySub(sub, baseUrl) {
|
|
452
|
+
// Get user by sub to get internal id
|
|
329
453
|
const user = await this.userRepo.findOne({ where: { sub } });
|
|
330
454
|
if (!user) {
|
|
331
455
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.NOT_FOUND, 'User not found');
|
|
332
456
|
}
|
|
457
|
+
// Check resend delay - use config value (default 60 seconds)
|
|
333
458
|
const resendDelay = this.config.signup?.emailVerification?.resendDelay ?? 60;
|
|
334
459
|
const lastToken = (await this.verificationTokenRepo.findOne({
|
|
335
460
|
where: { userId: user.id, type: 'email' },
|
|
@@ -345,6 +470,8 @@ class EmailVerificationService {
|
|
|
345
470
|
});
|
|
346
471
|
}
|
|
347
472
|
}
|
|
473
|
+
// Send new verification email - use sub (external identifier)
|
|
474
|
+
// Preserve challengeSessionId from the last token to ensure verification succeeds
|
|
348
475
|
const dto = Object.assign(new verify_email_dto_1.SendVerificationEmailDTO(), {
|
|
349
476
|
sub,
|
|
350
477
|
baseUrl,
|
|
@@ -359,12 +486,25 @@ class EmailVerificationService {
|
|
|
359
486
|
}
|
|
360
487
|
return this.resendVerificationEmailBySub(user.sub, baseUrl);
|
|
361
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* Generate 6-digit verification code
|
|
491
|
+
* @returns 6-digit numeric code
|
|
492
|
+
*/
|
|
362
493
|
generateCode() {
|
|
363
494
|
return Math.floor(100000 + Math.random() * 900000).toString();
|
|
364
495
|
}
|
|
496
|
+
/**
|
|
497
|
+
* Generate secure random token
|
|
498
|
+
* @returns Random token (32 bytes, hex encoded)
|
|
499
|
+
*/
|
|
365
500
|
generateToken() {
|
|
366
501
|
return crypto.randomBytes(32).toString('hex');
|
|
367
502
|
}
|
|
503
|
+
/**
|
|
504
|
+
* Hash token with SHA-256
|
|
505
|
+
* @param token - Plain token
|
|
506
|
+
* @returns Hashed token
|
|
507
|
+
*/
|
|
368
508
|
hashToken(token) {
|
|
369
509
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
370
510
|
}
|
|
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA6C;AAQ7C,oFAAyE;AACzE,mEAA+D;AAC/D,gEAA0D;AAE1D,8DAQiC;AACjC,+CAAiC;AAEjC;;;;;;;;;;GAUG;AACH,MAAa,wBAAwB;IAEhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IARnB,YACmB,qBAAwD,EACxD,QAA8B,EAC9B,aAA4B,EAC5B,cAA8B,EAC9B,MAAmB,EACnB,iBAAoC,EACpC,MAAmB,EACnB,YAA+B;QAP/B,0BAAqB,GAArB,qBAAqB,CAAmC;QACxD,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,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;IAEJ;;;;;;OAMG;IACH,KAAK,CAAC,qBAAqB,CAAC,GAA6B;QACvD,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,wBAAwB,GAAG,KAAK,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC;QACnF,+EAA+E;QAC/E,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,CAAC,oBAAoB;QAE5G,+CAA+C;QAC/C,MAAM,YAAY,GAAG,sBAAsB,GAAG,EAAE,CAAC;QAEjD,sDAAsD;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9D,uHAAuH;QACvH,MAAM,eAAe,GAAG,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,eAAe,CAAC;QAEzF,2FAA2F;QAC3F,gGAAgG;QAChG,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,sEAAsE;QACtE,sEAAsE;QACtE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEjH,qCAAqC;QACrC,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;QAED,0DAA0D;QAC1D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,gBAAgB,EAC9B,4DAA4D,EAC5D;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;QAED,yDAAyD;QACzD,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,sCAAsC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,mBAAmB;QACjG,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;QAEjC,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;QAED,yHAAyH;QACzH,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;QACrF,CAAC;QAED,kEAAkE;QAClE,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CACrC;YACE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,wCAAwC;YACzD,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAA,gBAAM,GAAE,EAAE,gCAAgC;SACnD,EACD;YACE,MAAM,EAAE,IAAI,IAAI,EAAE,EAAE,6BAA6B;SAClD,CACF,CAAC;QAEF,wCAAwC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEjC,4DAA4D;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAExC,8DAA8D;QAC9D,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QAEvC,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAC1D,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,kCAAkC;YACnD,kBAAkB,EAAE,kBAAkB,IAAI,IAAI,EAAE,wCAAwC;YACxF,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,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,kBAAkB;YACvH,QAAQ,EAAE,CAAC;YACX,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEzD,yDAAyD;QACzD,iEAAiE;QACjE,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,uBAAuB,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAExF,wDAAwD;QACxD,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC;QAEnF,+EAA+E;QAC/E,2CAA2C;QAC3C,+EAA+E;QAC/E,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;oBACR,mBAAmB,EAAG,iBAAmD,CAAC,EAAE;iBAC7E;gBACD,kDAAkD;aACnD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,iCAAiC;YACjC,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,EAAG,iBAAmD,CAAC,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAA2B;QACnD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC;QAChD,+EAA+E;QAC/E,qCAAqC;QACrC,iFAAiF;QACjF,sDAAsD;QACtD,+EAA+E;QAC/E,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,CAAC,SAAS;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAEhD,qBAAqB;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QAED,iCAAiC;QACjC,mFAAmF;QACnF,uEAAuE;QACvE,MAAM,WAAW,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,IAAI,EAAE,OAAgB;YACtB,IAAI;YACJ,MAAM,EAAE,IAAA,gBAAM,GAAE;YAChB,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,sBAAsB;SACxF,CAAC;QAEF,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAClE,KAAK,EAAE,WAAW;SACnB,CAAC,CAA8B,CAAC;QAEjC,+EAA+E;QAC/E,8DAA8D;QAC9D,uEAAuE;QACvE,+EAA+E;QAC/E,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,4CAA4C;YAC5C,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;QAC5G,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS;YAC3C,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE;YAC/B,CAAC,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,0CAA0C;YAC1C,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,+BAA+B,CAAC,CAAC;QACrG,CAAC;QAED,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5E,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,mBAAmB;YAC/D,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,WAAW,CAAC;YACpD,CAAC,CAAC,iBAAiB,CAAC,QAAQ,IAAI,WAAW,CAAC;QAC9C,IAAI,mBAAmB,EAAE,CAAC;YACxB,wDAAwD;YACxD,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,8BAA8B,EAC5C,+CAA+C,CAChD,CAAC;QACJ,CAAC;QAED,+EAA+E;QAC/E,kFAAkF;QAClF,iFAAiF;QACjF,wDAAwD;QACxD,+EAA+E;QAC/E,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,IAAI,EAAE,CAAC;QAE3F,kEAAkE;QAClE,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,wDAAwD;QACxD,iBAAiB,CAAC,QAAQ,IAAI,CAAC,CAAC;QAEhC,qDAAqD;QACrD,IAAI,iBAAiB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpC,wDAAwD;YACxD,MAAM,oBAAoB,EAAE,CAAC;YAC7B,MAAM,sBAAsB,EAAE,CAAC;YAE/B,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEzD,+EAA+E;YAC/E,2CAA2C;YAC3C,+EAA+E;YAC/E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;oBACnC,MAAM,EAAE,IAAI,CAAC,EAAY;oBACzB,SAAS,EAAE,+CAAkB,CAAC,yBAAyB;oBACvD,WAAW,EAAE,SAAS;oBACtB,MAAM,EAAE,cAAc;oBACtB,WAAW,EAAE,oCAAoC;oBACjD,kDAAkD;oBAClD,QAAQ,EAAE;wBACR,mBAAmB,EAAG,iBAAwC,CAAC,EAAE;wBACjE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;qBACrC;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,iCAAiC;gBACjC,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,CAAC,CAAC;QACjG,CAAC;QAED,+EAA+E;QAC/E,oDAAoD;QACpD,+CAA+C;QAC/C,+EAA+E;QAE/E,qBAAqB;QACrB,iBAAiB,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEzD,oDAAoD;QACpD,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE;YAClC,eAAe,EAAE,IAAI;YACrB,sCAAsC;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,+EAA+E;QAC/E,2CAA2C;QAC3C,+EAA+E;QAC/E,IAAI,CAAC;YACH,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;oBACR,mBAAmB,EAAG,iBAAwC,CAAC,EAAE;oBACjE,kBAAkB,EAAE,MAAM;oBAC1B,kDAAkD;iBACnD;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACpB,iCAAiC;YACjC,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,yEAAyE;QACzE,OAAO;YACL,OAAO,EAAE,yDAAyD;SACnE,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CAAC,GAA4B;QACrD,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAExC,0BAA0B;QAC1B,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;YAClE,KAAK,EAAE;gBACL,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,IAAA,gBAAM,GAAE;aACjB;SACF,CAAC,CAA8B,CAAC;QAEjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;QAC5G,CAAC;QAED,eAAe;QACf,MAAM,SAAS,GAAG,iBAAiB,CAAC,SAAS;YAC3C,CAAC,CAAC,iBAAiB,CAAC,SAAS,EAAE;YAC/B,CAAC,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,yBAAyB,EAAE,+BAA+B,CAAC,CAAC;QACrG,CAAC;QAED,qBAAqB;QACrB,iBAAiB,CAAC,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEzD,6BAA6B;QAC7B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACxC,KAAK,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE;SACxC,CAAC,CAAiB,CAAC;QAEpB,cAAc;QACd,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE;YACnD,eAAe,EAAE,IAAI;YACrB,sCAAsC;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,+EAA+E;QAC/E,yDAAyD;QACzD,+EAA+E;QAC/E,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC;oBACnC,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,SAAS,EAAE,+CAAkB,CAAC,cAAc;oBAC5C,WAAW,EAAE,SAAS;oBACtB,QAAQ,EAAE;wBACR,mBAAmB,EAAG,iBAAwC,CAAC,EAAE;wBACjE,kBAAkB,EAAE,OAAO;wBAC3B,kDAAkD;qBACnD;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,iCAAiC;gBACjC,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,8DAA8D,YAAY,EAAE,EAAE;oBACjG,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,IAAI,EAAE,EAAE;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,yDAAyD;SACnE,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,uBAAuB,CAAC,GAA+B;QAC3D,gDAAgD;QAChD,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,4BAA4B,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,KAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,4BAA4B,CACxC,GAAW,EACX,OAAgB;QAEhB,qCAAqC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,CAAC;QAED,6DAA6D;QAC7D,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;QAEjC,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;QAED,8DAA8D;QAC9D,kFAAkF;QAClF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,2CAAwB,EAAE,EAAE;YACxD,GAAG;YACH,OAAO;YACP,kBAAkB,EAAE,SAAS,EAAE,kBAAkB,IAAI,SAAS;SAC/D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,KAAa,EACb,OAAgB;QAEhB,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;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACK,YAAY;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAChE,CAAC;IAED;;;OAGG;IACK,aAAa;QACnB,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,KAAa;QAC7B,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;CACF;AAhiBD,4DAgiBC"}
|
|
@@ -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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"}
|