@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
|
@@ -1,9 +1,95 @@
|
|
|
1
1
|
import { ISocialAuthProviderService } from '../interfaces/social-auth-provider.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Social Provider Registry (Internal)
|
|
4
|
+
*
|
|
5
|
+
* Internal registry service for managing social authentication providers.
|
|
6
|
+
* This is an implementation detail used by SocialAuthService and provider modules.
|
|
7
|
+
*
|
|
8
|
+
* **Note:** This is an internal service. Consumer applications should use
|
|
9
|
+
* `SocialAuthService` instead, which provides a high-level API for social authentication.
|
|
10
|
+
*
|
|
11
|
+
* **Key Features:**
|
|
12
|
+
* - Dynamic provider registration without hardcoded names
|
|
13
|
+
* - Provider lookup by name
|
|
14
|
+
* - Auto-registration when provider modules are imported
|
|
15
|
+
*
|
|
16
|
+
* **How it works:**
|
|
17
|
+
* Provider modules (Google, Apple, Facebook, etc.) automatically register themselves
|
|
18
|
+
* with this registry using OnModuleInit when their modules are imported.
|
|
19
|
+
*
|
|
20
|
+
* @internal
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Provider modules auto-register
|
|
25
|
+
* onModuleInit() {
|
|
26
|
+
* this.providerRegistry.registerProvider(this);
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* // SocialAuthService uses the registry internally
|
|
30
|
+
* const provider = this.providerRegistry.getProvider('google');
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
2
33
|
export declare class SocialProviderRegistry {
|
|
3
34
|
private readonly providers;
|
|
35
|
+
/**
|
|
36
|
+
* Register a social auth provider
|
|
37
|
+
*
|
|
38
|
+
* Called automatically by provider modules during initialization.
|
|
39
|
+
* Provider names must be unique.
|
|
40
|
+
*
|
|
41
|
+
* @param provider - Provider service instance (must have providerName property)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // In provider module OnModuleInit:
|
|
46
|
+
* constructor(private providerRegistry: SocialProviderRegistry) {}
|
|
47
|
+
*
|
|
48
|
+
* onModuleInit() {
|
|
49
|
+
* this.providerRegistry.registerProvider(this);
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
4
53
|
registerProvider(provider: ISocialAuthProviderService): void;
|
|
54
|
+
/**
|
|
55
|
+
* Get a provider by name
|
|
56
|
+
*
|
|
57
|
+
* @param name - Provider name (e.g., 'google', 'apple', 'facebook')
|
|
58
|
+
* @returns Provider service instance
|
|
59
|
+
* @throws {NAuthException} If provider is not registered
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const googleProvider = this.providerRegistry.getProvider('google');
|
|
64
|
+
* const authUrl = await googleProvider.getAuthUrl();
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
5
67
|
getProvider(name: string): ISocialAuthProviderService;
|
|
68
|
+
/**
|
|
69
|
+
* Check if a provider is registered
|
|
70
|
+
*
|
|
71
|
+
* @param name - Provider name
|
|
72
|
+
* @returns True if provider exists
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* if (this.providerRegistry.hasProvider('github')) {
|
|
77
|
+
* // Use GitHub provider
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
6
81
|
hasProvider(name: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Get all registered provider names
|
|
84
|
+
*
|
|
85
|
+
* @returns Array of provider names
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* const providers = this.providerRegistry.listProviders();
|
|
90
|
+
* // ['google', 'apple', 'facebook']
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
7
93
|
listProviders(): string[];
|
|
8
94
|
}
|
|
9
95
|
//# sourceMappingURL=social-provider-registry.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-provider-registry.service.d.ts","sourceRoot":"","sources":["../../src/services/social-provider-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"social-provider-registry.service.d.ts","sourceRoot":"","sources":["../../src/services/social-provider-registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAI1F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAE3E;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI;IAU5D;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,0BAA0B;IAWrD;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC;;;;;;;;;;OAUG;IACH,aAAa,IAAI,MAAM,EAAE;CAG1B"}
|
|
@@ -3,8 +3,57 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SocialProviderRegistry = void 0;
|
|
4
4
|
const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
5
5
|
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
6
|
+
/**
|
|
7
|
+
* Social Provider Registry (Internal)
|
|
8
|
+
*
|
|
9
|
+
* Internal registry service for managing social authentication providers.
|
|
10
|
+
* This is an implementation detail used by SocialAuthService and provider modules.
|
|
11
|
+
*
|
|
12
|
+
* **Note:** This is an internal service. Consumer applications should use
|
|
13
|
+
* `SocialAuthService` instead, which provides a high-level API for social authentication.
|
|
14
|
+
*
|
|
15
|
+
* **Key Features:**
|
|
16
|
+
* - Dynamic provider registration without hardcoded names
|
|
17
|
+
* - Provider lookup by name
|
|
18
|
+
* - Auto-registration when provider modules are imported
|
|
19
|
+
*
|
|
20
|
+
* **How it works:**
|
|
21
|
+
* Provider modules (Google, Apple, Facebook, etc.) automatically register themselves
|
|
22
|
+
* with this registry using OnModuleInit when their modules are imported.
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Provider modules auto-register
|
|
29
|
+
* onModuleInit() {
|
|
30
|
+
* this.providerRegistry.registerProvider(this);
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // SocialAuthService uses the registry internally
|
|
34
|
+
* const provider = this.providerRegistry.getProvider('google');
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
6
37
|
class SocialProviderRegistry {
|
|
7
38
|
providers = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Register a social auth provider
|
|
41
|
+
*
|
|
42
|
+
* Called automatically by provider modules during initialization.
|
|
43
|
+
* Provider names must be unique.
|
|
44
|
+
*
|
|
45
|
+
* @param provider - Provider service instance (must have providerName property)
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* // In provider module OnModuleInit:
|
|
50
|
+
* constructor(private providerRegistry: SocialProviderRegistry) {}
|
|
51
|
+
*
|
|
52
|
+
* onModuleInit() {
|
|
53
|
+
* this.providerRegistry.registerProvider(this);
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
8
57
|
registerProvider(provider) {
|
|
9
58
|
const name = provider.providerName;
|
|
10
59
|
if (this.providers.has(name)) {
|
|
@@ -12,6 +61,19 @@ class SocialProviderRegistry {
|
|
|
12
61
|
}
|
|
13
62
|
this.providers.set(name, provider);
|
|
14
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Get a provider by name
|
|
66
|
+
*
|
|
67
|
+
* @param name - Provider name (e.g., 'google', 'apple', 'facebook')
|
|
68
|
+
* @returns Provider service instance
|
|
69
|
+
* @throws {NAuthException} If provider is not registered
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const googleProvider = this.providerRegistry.getProvider('google');
|
|
74
|
+
* const authUrl = await googleProvider.getAuthUrl();
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
15
77
|
getProvider(name) {
|
|
16
78
|
const provider = this.providers.get(name);
|
|
17
79
|
if (!provider) {
|
|
@@ -19,9 +81,33 @@ class SocialProviderRegistry {
|
|
|
19
81
|
}
|
|
20
82
|
return provider;
|
|
21
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if a provider is registered
|
|
86
|
+
*
|
|
87
|
+
* @param name - Provider name
|
|
88
|
+
* @returns True if provider exists
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* if (this.providerRegistry.hasProvider('github')) {
|
|
93
|
+
* // Use GitHub provider
|
|
94
|
+
* }
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
22
97
|
hasProvider(name) {
|
|
23
98
|
return this.providers.has(name);
|
|
24
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Get all registered provider names
|
|
102
|
+
*
|
|
103
|
+
* @returns Array of provider names
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const providers = this.providerRegistry.listProviders();
|
|
108
|
+
* // ['google', 'apple', 'facebook']
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
25
111
|
listProviders() {
|
|
26
112
|
return Array.from(this.providers.keys());
|
|
27
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"social-provider-registry.service.js","sourceRoot":"","sources":["../../src/services/social-provider-registry.service.ts"],"names":[],"mappings":";;;AACA,mEAA+D;AAC/D,gEAA0D;
|
|
1
|
+
{"version":3,"file":"social-provider-registry.service.js","sourceRoot":"","sources":["../../src/services/social-provider-registry.service.ts"],"names":[],"mappings":";;;AACA,mEAA+D;AAC/D,gEAA0D;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAa,sBAAsB;IAChB,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE3E;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,QAAoC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;QAEnC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,gCAAc,CAAC,gCAAa,CAAC,iBAAiB,EAAE,yBAAyB,IAAI,yBAAyB,CAAC,CAAC;QACpH,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,IAAY;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,gCAAc,CACtB,gCAAa,CAAC,qBAAqB,EACnC,yBAAyB,IAAI,qHAAqH,CACnJ,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;OAUG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF;AAtFD,wDAsFC"}
|
|
@@ -2,19 +2,119 @@ import { Repository } from 'typeorm';
|
|
|
2
2
|
import { NAuthConfig } from '../interfaces/config.interface';
|
|
3
3
|
import { NAuthLogger } from '../utils/nauth-logger';
|
|
4
4
|
import { BaseTrustedDevice } from '../entities/trusted-device.entity';
|
|
5
|
+
/**
|
|
6
|
+
* Trusted Device Service
|
|
7
|
+
*
|
|
8
|
+
* Manages device trust for "remember device" feature.
|
|
9
|
+
* Devices can be trusted after successful MFA verification, allowing
|
|
10
|
+
* users to skip MFA for a configured period (rememberDeviceDays).
|
|
11
|
+
*
|
|
12
|
+
* Security:
|
|
13
|
+
* - Device tokens are server-generated UUIDs
|
|
14
|
+
* - Only hash stored in database (SHA-256)
|
|
15
|
+
* - Tokens persist across logouts and session expiry
|
|
16
|
+
* - Independent of refresh token lifecycle
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // Mark device as trusted after MFA
|
|
21
|
+
* const deviceToken = await trustedDeviceService.createTrustedDevice(
|
|
22
|
+
* userId,
|
|
23
|
+
* deviceName,
|
|
24
|
+
* deviceType,
|
|
25
|
+
* ipAddress,
|
|
26
|
+
* userAgent,
|
|
27
|
+
* platform,
|
|
28
|
+
* browser
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* // Check if device is trusted
|
|
32
|
+
* const isTrusted = await trustedDeviceService.isDeviceTrusted(
|
|
33
|
+
* deviceToken,
|
|
34
|
+
* userId
|
|
35
|
+
* );
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
5
38
|
export declare class TrustedDeviceService {
|
|
6
39
|
private readonly config;
|
|
7
40
|
private readonly logger;
|
|
8
41
|
private readonly trustedDeviceRepository?;
|
|
9
42
|
constructor(config: NAuthConfig, logger: NAuthLogger, trustedDeviceRepository?: Repository<BaseTrustedDevice> | undefined);
|
|
43
|
+
/**
|
|
44
|
+
* Create trusted device record
|
|
45
|
+
*
|
|
46
|
+
* Generates a secure device token, stores its hash in database,
|
|
47
|
+
* and returns the plain token for client storage.
|
|
48
|
+
*
|
|
49
|
+
* @param userId - Internal user ID
|
|
50
|
+
* @param deviceName - Optional device name
|
|
51
|
+
* @param deviceType - Optional device type (mobile/desktop/tablet)
|
|
52
|
+
* @param ipAddress - IP address when device was trusted
|
|
53
|
+
* @param userAgent - User agent string
|
|
54
|
+
* @param platform - Platform from user agent
|
|
55
|
+
* @param browser - Browser from user agent
|
|
56
|
+
* @returns Device token (UUID) to be stored by client
|
|
57
|
+
*
|
|
58
|
+
* @throws {Error} If rememberDevice is not enabled or repository not available
|
|
59
|
+
*/
|
|
10
60
|
createTrustedDevice(userId: number, deviceName?: string | null, deviceType?: string | null, ipAddress?: string | null, userAgent?: string | null, platform?: string | null, browser?: string | null): Promise<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Check if device is trusted
|
|
63
|
+
*
|
|
64
|
+
* Validates device token against trusted devices table.
|
|
65
|
+
* Updates lastUsedAt if device is found and valid.
|
|
66
|
+
*
|
|
67
|
+
* Security:
|
|
68
|
+
* - Returns false for invalid/tampered tokens (silent - MFA required)
|
|
69
|
+
* - Detection of tampered tokens should be handled by caller for audit logging
|
|
70
|
+
*
|
|
71
|
+
* @param deviceToken - Device token from client (plain UUID)
|
|
72
|
+
* @param userId - Internal user ID
|
|
73
|
+
* @returns True if device is trusted and not expired
|
|
74
|
+
*/
|
|
11
75
|
isDeviceTrusted(deviceToken: string | null | undefined, userId: number): Promise<boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Validate device token and detect tampering attempts
|
|
78
|
+
*
|
|
79
|
+
* Checks if device token is valid and returns validation result.
|
|
80
|
+
* Used to detect suspicious tampered/fake token attempts for audit logging.
|
|
81
|
+
*
|
|
82
|
+
* @param deviceToken - Device token from client (can be null/undefined)
|
|
83
|
+
* @param userId - Internal user ID
|
|
84
|
+
* @returns Validation result with suspicious flag
|
|
85
|
+
*/
|
|
12
86
|
validateDeviceToken(deviceToken: string | null | undefined, userId: number): Promise<{
|
|
13
87
|
isValid: boolean;
|
|
14
88
|
isSuspicious: boolean;
|
|
15
89
|
}>;
|
|
90
|
+
/**
|
|
91
|
+
* Revoke trusted device
|
|
92
|
+
*
|
|
93
|
+
* Removes device from trusted devices table.
|
|
94
|
+
* Used when user explicitly untrusts a device.
|
|
95
|
+
*
|
|
96
|
+
* @param deviceToken - Device token to revoke
|
|
97
|
+
* @param userId - Internal user ID
|
|
98
|
+
*/
|
|
16
99
|
revokeTrustedDevice(deviceToken: string, userId: number): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Get user's trusted devices
|
|
102
|
+
*
|
|
103
|
+
* Returns list of trusted devices for management UI.
|
|
104
|
+
*
|
|
105
|
+
* @param userId - Internal user ID
|
|
106
|
+
* @returns Array of trusted device records (without tokens)
|
|
107
|
+
*/
|
|
17
108
|
getUserTrustedDevices(userId: number): Promise<Omit<BaseTrustedDevice, 'deviceTokenHash'>[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Revoke all trusted devices for a user
|
|
111
|
+
*
|
|
112
|
+
* Removes all trusted devices for the user.
|
|
113
|
+
* Used when user performs global logout with forgetDevices flag.
|
|
114
|
+
*
|
|
115
|
+
* @param userId - Internal user ID
|
|
116
|
+
* @returns Object containing count and device information before deletion
|
|
117
|
+
*/
|
|
18
118
|
revokeAllTrustedDevices(userId: number): Promise<{
|
|
19
119
|
revokedCount: number;
|
|
20
120
|
devices: Array<{
|
|
@@ -24,6 +124,11 @@ export declare class TrustedDeviceService {
|
|
|
24
124
|
trustedUntil: Date | null;
|
|
25
125
|
}>;
|
|
26
126
|
}>;
|
|
127
|
+
/**
|
|
128
|
+
* Hash device token (SHA-256)
|
|
129
|
+
*
|
|
130
|
+
* @private
|
|
131
|
+
*/
|
|
27
132
|
private hashDeviceToken;
|
|
28
133
|
}
|
|
29
134
|
//# sourceMappingURL=trusted-device.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trusted-device.service.d.ts","sourceRoot":"","sources":["../../src/services/trusted-device.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"trusted-device.service.d.ts","sourceRoot":"","sources":["../../src/services/trusted-device.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBAFxB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,WAAW,EACnB,uBAAuB,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,YAAA;IAG1E;;;;;;;;;;;;;;;;OAgBG;IACG,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,EAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,MAAM,CAAC;IAuElB;;;;;;;;;;;;;OAaG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiD/F;;;;;;;;;OASG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;IAevD;;;;;;;;OAQG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7E;;;;;;;OAOG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,CAAC;IAqBlG;;;;;;;;OAQG;IACG,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QACrD,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,KAAK,CAAC;YACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;YACxB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;SAC3B,CAAC,CAAC;KACJ,CAAC;IA4BF;;;;OAIG;IACH,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -35,6 +35,39 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.TrustedDeviceService = void 0;
|
|
37
37
|
const crypto_1 = require("crypto");
|
|
38
|
+
/**
|
|
39
|
+
* Trusted Device Service
|
|
40
|
+
*
|
|
41
|
+
* Manages device trust for "remember device" feature.
|
|
42
|
+
* Devices can be trusted after successful MFA verification, allowing
|
|
43
|
+
* users to skip MFA for a configured period (rememberDeviceDays).
|
|
44
|
+
*
|
|
45
|
+
* Security:
|
|
46
|
+
* - Device tokens are server-generated UUIDs
|
|
47
|
+
* - Only hash stored in database (SHA-256)
|
|
48
|
+
* - Tokens persist across logouts and session expiry
|
|
49
|
+
* - Independent of refresh token lifecycle
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Mark device as trusted after MFA
|
|
54
|
+
* const deviceToken = await trustedDeviceService.createTrustedDevice(
|
|
55
|
+
* userId,
|
|
56
|
+
* deviceName,
|
|
57
|
+
* deviceType,
|
|
58
|
+
* ipAddress,
|
|
59
|
+
* userAgent,
|
|
60
|
+
* platform,
|
|
61
|
+
* browser
|
|
62
|
+
* );
|
|
63
|
+
*
|
|
64
|
+
* // Check if device is trusted
|
|
65
|
+
* const isTrusted = await trustedDeviceService.isDeviceTrusted(
|
|
66
|
+
* deviceToken,
|
|
67
|
+
* userId
|
|
68
|
+
* );
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
38
71
|
class TrustedDeviceService {
|
|
39
72
|
config;
|
|
40
73
|
logger;
|
|
@@ -44,6 +77,23 @@ class TrustedDeviceService {
|
|
|
44
77
|
this.logger = logger;
|
|
45
78
|
this.trustedDeviceRepository = trustedDeviceRepository;
|
|
46
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Create trusted device record
|
|
82
|
+
*
|
|
83
|
+
* Generates a secure device token, stores its hash in database,
|
|
84
|
+
* and returns the plain token for client storage.
|
|
85
|
+
*
|
|
86
|
+
* @param userId - Internal user ID
|
|
87
|
+
* @param deviceName - Optional device name
|
|
88
|
+
* @param deviceType - Optional device type (mobile/desktop/tablet)
|
|
89
|
+
* @param ipAddress - IP address when device was trusted
|
|
90
|
+
* @param userAgent - User agent string
|
|
91
|
+
* @param platform - Platform from user agent
|
|
92
|
+
* @param browser - Browser from user agent
|
|
93
|
+
* @returns Device token (UUID) to be stored by client
|
|
94
|
+
*
|
|
95
|
+
* @throws {Error} If rememberDevice is not enabled or repository not available
|
|
96
|
+
*/
|
|
47
97
|
async createTrustedDevice(userId, deviceName, deviceType, ipAddress, userAgent, platform, browser) {
|
|
48
98
|
if (!this.config.mfa?.rememberDevices || this.config.mfa.rememberDevices === 'never') {
|
|
49
99
|
throw new Error('rememberDevices is not enabled in configuration');
|
|
@@ -52,12 +102,17 @@ class TrustedDeviceService {
|
|
|
52
102
|
this.logger?.warn?.('TrustedDeviceRepository not available - trusted device feature disabled');
|
|
53
103
|
throw new Error('TrustedDeviceRepository not available');
|
|
54
104
|
}
|
|
105
|
+
// Generate secure device token (UUID v4)
|
|
55
106
|
const crypto = await Promise.resolve().then(() => __importStar(require('crypto')));
|
|
56
107
|
const deviceToken = crypto.randomUUID();
|
|
108
|
+
// Hash token for storage (SHA-256)
|
|
57
109
|
const deviceTokenHash = this.hashDeviceToken(deviceToken);
|
|
110
|
+
// Calculate expiry (now + rememberDeviceDays)
|
|
111
|
+
// Only applicable if rememberDevices is not 'never'
|
|
58
112
|
const rememberDeviceDays = this.config.mfa.rememberDeviceDays || 30;
|
|
59
113
|
const trustedUntil = new Date();
|
|
60
114
|
trustedUntil.setDate(trustedUntil.getDate() + rememberDeviceDays);
|
|
115
|
+
// Check if device already trusted (by hash)
|
|
61
116
|
const existing = await this.trustedDeviceRepository.findOne({
|
|
62
117
|
where: {
|
|
63
118
|
userId,
|
|
@@ -65,6 +120,7 @@ class TrustedDeviceService {
|
|
|
65
120
|
},
|
|
66
121
|
});
|
|
67
122
|
if (existing) {
|
|
123
|
+
// Update existing record
|
|
68
124
|
await this.trustedDeviceRepository.update({ userId, deviceTokenHash }, {
|
|
69
125
|
trustedUntil,
|
|
70
126
|
lastUsedAt: new Date(),
|
|
@@ -78,10 +134,11 @@ class TrustedDeviceService {
|
|
|
78
134
|
this.logger?.debug?.(`Updated trusted device for user ${userId}`);
|
|
79
135
|
return deviceToken;
|
|
80
136
|
}
|
|
137
|
+
// Create new trusted device record
|
|
81
138
|
const trustedDevice = this.trustedDeviceRepository.create({
|
|
82
139
|
userId,
|
|
83
140
|
deviceTokenHash,
|
|
84
|
-
deviceId: null,
|
|
141
|
+
deviceId: null, // Not used, kept for backward compatibility
|
|
85
142
|
deviceName: deviceName || null,
|
|
86
143
|
deviceType: deviceType || null,
|
|
87
144
|
ipAddress: ipAddress || null,
|
|
@@ -95,6 +152,20 @@ class TrustedDeviceService {
|
|
|
95
152
|
this.logger?.debug?.(`Created trusted device for user ${userId}, expires ${trustedUntil.toISOString()}`);
|
|
96
153
|
return deviceToken;
|
|
97
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if device is trusted
|
|
157
|
+
*
|
|
158
|
+
* Validates device token against trusted devices table.
|
|
159
|
+
* Updates lastUsedAt if device is found and valid.
|
|
160
|
+
*
|
|
161
|
+
* Security:
|
|
162
|
+
* - Returns false for invalid/tampered tokens (silent - MFA required)
|
|
163
|
+
* - Detection of tampered tokens should be handled by caller for audit logging
|
|
164
|
+
*
|
|
165
|
+
* @param deviceToken - Device token from client (plain UUID)
|
|
166
|
+
* @param userId - Internal user ID
|
|
167
|
+
* @returns True if device is trusted and not expired
|
|
168
|
+
*/
|
|
98
169
|
async isDeviceTrusted(deviceToken, userId) {
|
|
99
170
|
if (!deviceToken || !this.trustedDeviceRepository) {
|
|
100
171
|
return false;
|
|
@@ -102,7 +173,9 @@ class TrustedDeviceService {
|
|
|
102
173
|
if (!this.config.mfa?.rememberDevices || this.config.mfa.rememberDevices === 'never') {
|
|
103
174
|
return false;
|
|
104
175
|
}
|
|
176
|
+
// Hash token for lookup
|
|
105
177
|
const deviceTokenHash = this.hashDeviceToken(deviceToken);
|
|
178
|
+
// Find trusted device
|
|
106
179
|
const trustedDevice = await this.trustedDeviceRepository.findOne({
|
|
107
180
|
where: {
|
|
108
181
|
userId,
|
|
@@ -110,10 +183,14 @@ class TrustedDeviceService {
|
|
|
110
183
|
},
|
|
111
184
|
});
|
|
112
185
|
if (!trustedDevice) {
|
|
186
|
+
// Device token not found - could be tampered/fake
|
|
187
|
+
// Caller should check if token was provided and audit suspicious activity
|
|
113
188
|
return false;
|
|
114
189
|
}
|
|
190
|
+
// Check if trust has expired
|
|
115
191
|
const trustedUntil = trustedDevice.trustedUntil;
|
|
116
192
|
if (new Date() > new Date(trustedUntil)) {
|
|
193
|
+
// Trust expired - delete record
|
|
117
194
|
await this.trustedDeviceRepository.delete({
|
|
118
195
|
userId,
|
|
119
196
|
deviceTokenHash,
|
|
@@ -121,6 +198,7 @@ class TrustedDeviceService {
|
|
|
121
198
|
this.logger?.debug?.(`Trusted device expired for user ${userId}`);
|
|
122
199
|
return false;
|
|
123
200
|
}
|
|
201
|
+
// Update lastUsedAt with throttling to reduce write load
|
|
124
202
|
const lastUsedAt = trustedDevice.lastUsedAt;
|
|
125
203
|
const now = new Date();
|
|
126
204
|
const fifteenMinutesMs = 15 * 60 * 1000;
|
|
@@ -129,14 +207,36 @@ class TrustedDeviceService {
|
|
|
129
207
|
}
|
|
130
208
|
return true;
|
|
131
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Validate device token and detect tampering attempts
|
|
212
|
+
*
|
|
213
|
+
* Checks if device token is valid and returns validation result.
|
|
214
|
+
* Used to detect suspicious tampered/fake token attempts for audit logging.
|
|
215
|
+
*
|
|
216
|
+
* @param deviceToken - Device token from client (can be null/undefined)
|
|
217
|
+
* @param userId - Internal user ID
|
|
218
|
+
* @returns Validation result with suspicious flag
|
|
219
|
+
*/
|
|
132
220
|
async validateDeviceToken(deviceToken, userId) {
|
|
221
|
+
// No token provided - not suspicious (user just doesn't have trusted device)
|
|
133
222
|
if (!deviceToken) {
|
|
134
223
|
return { isValid: false, isSuspicious: false };
|
|
135
224
|
}
|
|
225
|
+
// Check if trusted
|
|
136
226
|
const isTrusted = await this.isDeviceTrusted(deviceToken, userId);
|
|
227
|
+
// If token was provided but not trusted, it's suspicious (tampered/fake)
|
|
137
228
|
const isSuspicious = !isTrusted && deviceToken !== null && deviceToken !== undefined;
|
|
138
229
|
return { isValid: isTrusted, isSuspicious };
|
|
139
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Revoke trusted device
|
|
233
|
+
*
|
|
234
|
+
* Removes device from trusted devices table.
|
|
235
|
+
* Used when user explicitly untrusts a device.
|
|
236
|
+
*
|
|
237
|
+
* @param deviceToken - Device token to revoke
|
|
238
|
+
* @param userId - Internal user ID
|
|
239
|
+
*/
|
|
140
240
|
async revokeTrustedDevice(deviceToken, userId) {
|
|
141
241
|
if (!this.trustedDeviceRepository) {
|
|
142
242
|
return;
|
|
@@ -148,6 +248,14 @@ class TrustedDeviceService {
|
|
|
148
248
|
});
|
|
149
249
|
this.logger?.debug?.(`Revoked trusted device for user ${userId}`);
|
|
150
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Get user's trusted devices
|
|
253
|
+
*
|
|
254
|
+
* Returns list of trusted devices for management UI.
|
|
255
|
+
*
|
|
256
|
+
* @param userId - Internal user ID
|
|
257
|
+
* @returns Array of trusted device records (without tokens)
|
|
258
|
+
*/
|
|
151
259
|
async getUserTrustedDevices(userId) {
|
|
152
260
|
if (!this.trustedDeviceRepository) {
|
|
153
261
|
return [];
|
|
@@ -156,32 +264,53 @@ class TrustedDeviceService {
|
|
|
156
264
|
where: { userId },
|
|
157
265
|
order: { lastUsedAt: 'DESC' },
|
|
158
266
|
});
|
|
267
|
+
// Filter expired devices
|
|
159
268
|
const now = new Date();
|
|
160
269
|
const validDevices = devices.filter((d) => new Date(d.trustedUntil) > now);
|
|
270
|
+
// Return without sensitive data
|
|
161
271
|
return validDevices.map((d) => {
|
|
162
272
|
const { deviceTokenHash, ...rest } = d;
|
|
163
273
|
return rest;
|
|
164
274
|
});
|
|
165
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Revoke all trusted devices for a user
|
|
278
|
+
*
|
|
279
|
+
* Removes all trusted devices for the user.
|
|
280
|
+
* Used when user performs global logout with forgetDevices flag.
|
|
281
|
+
*
|
|
282
|
+
* @param userId - Internal user ID
|
|
283
|
+
* @returns Object containing count and device information before deletion
|
|
284
|
+
*/
|
|
166
285
|
async revokeAllTrustedDevices(userId) {
|
|
167
286
|
if (!this.trustedDeviceRepository) {
|
|
168
287
|
return { revokedCount: 0, devices: [] };
|
|
169
288
|
}
|
|
289
|
+
// Get devices before deletion for audit logging
|
|
170
290
|
const devices = await this.trustedDeviceRepository.find({
|
|
171
291
|
where: { userId },
|
|
172
292
|
order: { lastUsedAt: 'DESC' },
|
|
173
293
|
});
|
|
294
|
+
// Extract device information (without sensitive token hash)
|
|
295
|
+
// Note: ipAddress, browser, platform, deviceType are automatically captured by audit service via client info
|
|
296
|
+
// Only include unique identifiers and historical timestamps
|
|
174
297
|
const deviceInfo = devices.map((d) => ({
|
|
175
298
|
id: d.id,
|
|
176
|
-
deviceName: d.deviceName ?? null,
|
|
177
|
-
lastUsedAt: d.lastUsedAt ?? null,
|
|
178
|
-
trustedUntil: d.trustedUntil ?? null,
|
|
299
|
+
deviceName: d.deviceName ?? null, // User-given name (may differ from current device name)
|
|
300
|
+
lastUsedAt: d.lastUsedAt ?? null, // Historical timestamp
|
|
301
|
+
trustedUntil: d.trustedUntil ?? null, // Expiry date
|
|
179
302
|
}));
|
|
303
|
+
// Delete all devices
|
|
180
304
|
const result = await this.trustedDeviceRepository.delete({ userId });
|
|
181
305
|
const deletedCount = typeof result.affected === 'number' ? result.affected : 0;
|
|
182
306
|
this.logger?.debug?.(`Revoked ${deletedCount} trusted device(s) for user ${userId}`);
|
|
183
307
|
return { revokedCount: deletedCount, devices: deviceInfo };
|
|
184
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Hash device token (SHA-256)
|
|
311
|
+
*
|
|
312
|
+
* @private
|
|
313
|
+
*/
|
|
185
314
|
hashDeviceToken(token) {
|
|
186
315
|
return (0, crypto_1.createHash)('sha256').update(token).digest('hex');
|
|
187
316
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trusted-device.service.js","sourceRoot":"","sources":["../../src/services/trusted-device.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,mCAAoC;
|
|
1
|
+
{"version":3,"file":"trusted-device.service.js","sourceRoot":"","sources":["../../src/services/trusted-device.service.ts"],"names":[],"mappings":"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"}
|