@nauth-toolkit/core 0.1.13 → 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,7 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Authentication Handler
|
|
4
|
+
*
|
|
5
|
+
* Validates JWT tokens and attaches user to request.
|
|
6
|
+
*
|
|
7
|
+
* **Platform-Agnostic:**
|
|
8
|
+
* This handler operates purely on NAuthRequest interface.
|
|
9
|
+
* Context is managed by the adapter, not this handler.
|
|
10
|
+
*/
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.AuthHandler = void 0;
|
|
4
13
|
const index_1 = require("../index");
|
|
14
|
+
/**
|
|
15
|
+
* AuthHandler
|
|
16
|
+
*
|
|
17
|
+
* Validates JWT tokens and populates user context.
|
|
18
|
+
* Performs optional authentication by default (doesn't reject unauthenticated requests).
|
|
19
|
+
*/
|
|
5
20
|
class AuthHandler {
|
|
6
21
|
jwtService;
|
|
7
22
|
sessionService;
|
|
@@ -15,14 +30,21 @@ class AuthHandler {
|
|
|
15
30
|
this.config = config;
|
|
16
31
|
this.logger = logger;
|
|
17
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Handle request - validate token and attach user
|
|
35
|
+
*
|
|
36
|
+
* Note: Context is managed by adapter. This handler assumes context is available.
|
|
37
|
+
*/
|
|
18
38
|
async handle(req, _res, next) {
|
|
19
39
|
try {
|
|
40
|
+
// Skip if route is marked as public
|
|
20
41
|
if (req.attributes.nauthPublic) {
|
|
21
42
|
await next();
|
|
22
43
|
return;
|
|
23
44
|
}
|
|
24
45
|
const token = this.extractToken(req);
|
|
25
46
|
if (!token) {
|
|
47
|
+
// No token - continue without authentication (optional auth)
|
|
26
48
|
await next();
|
|
27
49
|
return;
|
|
28
50
|
}
|
|
@@ -32,8 +54,9 @@ class AuthHandler {
|
|
|
32
54
|
await next();
|
|
33
55
|
return;
|
|
34
56
|
}
|
|
57
|
+
// Validate session
|
|
35
58
|
const sessionId = validation.payload.sessionId;
|
|
36
|
-
const userId = validation.payload.sub;
|
|
59
|
+
const userId = validation.payload.sub; // Extract userId from token sub claim
|
|
37
60
|
const session = await this.sessionService.findByIdLight(sessionId);
|
|
38
61
|
if (!session) {
|
|
39
62
|
this.logger?.debug?.('Session not found:', sessionId);
|
|
@@ -51,6 +74,7 @@ class AuthHandler {
|
|
|
51
74
|
await next();
|
|
52
75
|
return;
|
|
53
76
|
}
|
|
77
|
+
// Load user
|
|
54
78
|
const user = await this.userRepository.findOne({
|
|
55
79
|
select: this.getUserSelectFields(),
|
|
56
80
|
where: { sub: validation.payload.sub },
|
|
@@ -65,18 +89,22 @@ class AuthHandler {
|
|
|
65
89
|
await next();
|
|
66
90
|
return;
|
|
67
91
|
}
|
|
92
|
+
// Optimistic locking check - ensure session wasn't modified during request
|
|
68
93
|
const revalidated = await this.sessionService.findByIdLight(sessionId);
|
|
69
94
|
if (!revalidated || revalidated.version !== initialVersion || revalidated.isRevoked) {
|
|
70
95
|
this.logger?.error?.('Session was modified during request - possible security breach');
|
|
71
96
|
await next();
|
|
72
97
|
return;
|
|
73
98
|
}
|
|
99
|
+
// Attach to request attributes
|
|
74
100
|
req.attributes.user = user;
|
|
75
101
|
req.attributes.token = validation.payload;
|
|
102
|
+
// Store in ContextStorage for service access
|
|
76
103
|
index_1.ContextStorage.set('CURRENT_USER', user);
|
|
77
104
|
index_1.ContextStorage.set('JWT_PAYLOAD', validation.payload);
|
|
78
105
|
index_1.ContextStorage.set('CURRENT_SESSION', sessionId);
|
|
79
106
|
this.logger?.debug?.(`User ${user.sub} authenticated successfully`);
|
|
107
|
+
// Update CLIENT_INFO with sessionId and userId
|
|
80
108
|
this.updateClientInfoSessionId(sessionId);
|
|
81
109
|
this.updateClientInfoUserId(userId);
|
|
82
110
|
await next();
|
|
@@ -86,34 +114,46 @@ class AuthHandler {
|
|
|
86
114
|
await next();
|
|
87
115
|
}
|
|
88
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Extract token from request based on delivery mode
|
|
119
|
+
*/
|
|
89
120
|
extractToken(req) {
|
|
90
121
|
const method = this.config.tokenDelivery?.method || 'json';
|
|
122
|
+
// Get token from header
|
|
91
123
|
const authHeader = req.getHeader('authorization');
|
|
92
124
|
const headerToken = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null;
|
|
125
|
+
// Get token from cookie
|
|
93
126
|
const accessTokenCookieName = (0, index_1.getAccessTokenCookieName)(this.config);
|
|
94
127
|
const cookieToken = req.cookies[accessTokenCookieName];
|
|
128
|
+
// Check for route-level override
|
|
95
129
|
const routeMode = req.attributes.nauthTokenDelivery;
|
|
96
130
|
let effective = 'json';
|
|
97
131
|
if (routeMode) {
|
|
98
132
|
effective = routeMode;
|
|
99
133
|
}
|
|
100
134
|
else if (method === 'hybrid') {
|
|
135
|
+
// Determine mode based on request characteristics
|
|
101
136
|
effective = (0, index_1.resolveDeliveryForRequest)(req.raw, this.config.tokenDelivery?.hybridPolicy);
|
|
102
137
|
}
|
|
103
138
|
else {
|
|
104
139
|
effective = method === 'cookies' ? 'cookies' : 'json';
|
|
105
140
|
}
|
|
106
141
|
if (effective === 'cookies') {
|
|
142
|
+
// Cookie mode: Reject if Bearer header present
|
|
107
143
|
if (headerToken && !cookieToken) {
|
|
108
144
|
throw new index_1.NAuthException(index_1.AuthErrorCode.BEARER_NOT_ALLOWED, 'Bearer tokens are not allowed in cookie-only path.');
|
|
109
145
|
}
|
|
110
146
|
return cookieToken || null;
|
|
111
147
|
}
|
|
148
|
+
// JSON mode: Reject if cookie present
|
|
112
149
|
if (cookieToken && !headerToken) {
|
|
113
150
|
throw new index_1.NAuthException(index_1.AuthErrorCode.COOKIES_NOT_ALLOWED, 'Cookie tokens are not allowed in JSON-only path.');
|
|
114
151
|
}
|
|
115
152
|
return headerToken || null;
|
|
116
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Update CLIENT_INFO with session ID from token
|
|
156
|
+
*/
|
|
117
157
|
updateClientInfoSessionId(sessionId) {
|
|
118
158
|
const clientInfo = index_1.ContextStorage.get('CLIENT_INFO');
|
|
119
159
|
if (clientInfo) {
|
|
@@ -124,6 +164,9 @@ class AuthHandler {
|
|
|
124
164
|
}
|
|
125
165
|
}
|
|
126
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Update CLIENT_INFO with user ID from token
|
|
169
|
+
*/
|
|
127
170
|
updateClientInfoUserId(userId) {
|
|
128
171
|
const clientInfo = index_1.ContextStorage.get('CLIENT_INFO');
|
|
129
172
|
if (clientInfo) {
|
|
@@ -134,6 +177,9 @@ class AuthHandler {
|
|
|
134
177
|
}
|
|
135
178
|
}
|
|
136
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Get fields to select when loading user
|
|
182
|
+
*/
|
|
137
183
|
getUserSelectFields() {
|
|
138
184
|
return [
|
|
139
185
|
'id',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.handler.js","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"auth.handler.js","sourceRoot":"","sources":["../../src/handlers/auth.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client Info Handler
|
|
3
|
+
*
|
|
4
|
+
* Extracts client information (IP, user agent, device info) from NAuthRequest
|
|
5
|
+
* and stores in AsyncLocalStorage context.
|
|
6
|
+
*
|
|
7
|
+
* **Platform-Agnostic:**
|
|
8
|
+
* This handler operates purely on NAuthRequest interface.
|
|
9
|
+
* Context initialization is handled by the adapter, not this handler.
|
|
10
|
+
*/
|
|
1
11
|
import { ClientInfoService, NAuthLogger } from '../index';
|
|
2
12
|
import { GeoLocationService } from '../internal';
|
|
3
13
|
import { NAuthRequest, NAuthResponse } from '../platform/interfaces';
|
|
14
|
+
/**
|
|
15
|
+
* ClientInfoHandler
|
|
16
|
+
*
|
|
17
|
+
* First handler in the chain. Extracts client information and stores it
|
|
18
|
+
* in the context for downstream handlers and services.
|
|
19
|
+
*/
|
|
4
20
|
export declare class ClientInfoHandler {
|
|
5
21
|
private clientInfoService;
|
|
6
22
|
private geoLocationService?;
|
|
7
23
|
private logger?;
|
|
8
24
|
constructor(clientInfoService: ClientInfoService, geoLocationService?: GeoLocationService | undefined, logger?: NAuthLogger | undefined);
|
|
25
|
+
/**
|
|
26
|
+
* Handle request - extract and store client info
|
|
27
|
+
*
|
|
28
|
+
* Context initialization is handled by the adapter.
|
|
29
|
+
* This handler assumes context is already available.
|
|
30
|
+
*/
|
|
9
31
|
handle(req: NAuthRequest, res: NAuthResponse, next: () => Promise<void> | void): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Extract client information and store in context
|
|
34
|
+
*/
|
|
10
35
|
private extractAndStore;
|
|
11
36
|
}
|
|
12
37
|
//# sourceMappingURL=client-info.handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-info.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/client-info.handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client-info.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/client-info.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAkB,iBAAiB,EAAe,WAAW,EAA4B,MAAM,UAAU,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAErE;;;;;GAKG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC;gBAFP,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,CAAC,EAAE,kBAAkB,YAAA,EACvC,MAAM,CAAC,EAAE,WAAW,YAAA;IAG9B;;;;;OAKG;IACU,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3G;;OAEG;YACW,eAAe;CAqD9B"}
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Client Info Handler
|
|
4
|
+
*
|
|
5
|
+
* Extracts client information (IP, user agent, device info) from NAuthRequest
|
|
6
|
+
* and stores in AsyncLocalStorage context.
|
|
7
|
+
*
|
|
8
|
+
* **Platform-Agnostic:**
|
|
9
|
+
* This handler operates purely on NAuthRequest interface.
|
|
10
|
+
* Context initialization is handled by the adapter, not this handler.
|
|
11
|
+
*/
|
|
2
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
13
|
exports.ClientInfoHandler = void 0;
|
|
4
14
|
const index_1 = require("../index");
|
|
15
|
+
/**
|
|
16
|
+
* ClientInfoHandler
|
|
17
|
+
*
|
|
18
|
+
* First handler in the chain. Extracts client information and stores it
|
|
19
|
+
* in the context for downstream handlers and services.
|
|
20
|
+
*/
|
|
5
21
|
class ClientInfoHandler {
|
|
6
22
|
clientInfoService;
|
|
7
23
|
geoLocationService;
|
|
@@ -11,6 +27,12 @@ class ClientInfoHandler {
|
|
|
11
27
|
this.geoLocationService = geoLocationService;
|
|
12
28
|
this.logger = logger;
|
|
13
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Handle request - extract and store client info
|
|
32
|
+
*
|
|
33
|
+
* Context initialization is handled by the adapter.
|
|
34
|
+
* This handler assumes context is already available.
|
|
35
|
+
*/
|
|
14
36
|
async handle(req, res, next) {
|
|
15
37
|
try {
|
|
16
38
|
await this.extractAndStore(req, res);
|
|
@@ -20,11 +42,19 @@ class ClientInfoHandler {
|
|
|
20
42
|
}
|
|
21
43
|
await next();
|
|
22
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Extract client information and store in context
|
|
47
|
+
*/
|
|
23
48
|
async extractAndStore(req, res) {
|
|
49
|
+
// Extract user agent
|
|
24
50
|
const userAgent = req.getHeader('user-agent') || 'unknown';
|
|
51
|
+
// Parse user agent for device/browser info
|
|
25
52
|
const parsedUA = this.clientInfoService.parseUserAgent(userAgent);
|
|
53
|
+
// Extract device token from cookie or header
|
|
54
|
+
// Use default cookie name (nauth_device_token) if config not available
|
|
26
55
|
const deviceTokenCookieName = (0, index_1.getDeviceTokenCookieName)();
|
|
27
56
|
const deviceToken = req.cookies[deviceTokenCookieName] || req.getHeader('x-device-token');
|
|
57
|
+
// Build client info object
|
|
28
58
|
const clientInfo = {
|
|
29
59
|
ipAddress: req.ip,
|
|
30
60
|
userAgent,
|
|
@@ -33,13 +63,14 @@ class ClientInfoHandler {
|
|
|
33
63
|
deviceType: (req.body.deviceType || parsedUA.deviceType || undefined),
|
|
34
64
|
platform: parsedUA.platform || undefined,
|
|
35
65
|
browser: parsedUA.browser || undefined,
|
|
36
|
-
sessionId: undefined,
|
|
37
|
-
userId: undefined,
|
|
66
|
+
sessionId: undefined, // Set later by AuthHandler
|
|
67
|
+
userId: undefined, // Set later by AuthHandler
|
|
38
68
|
ipCountry: undefined,
|
|
39
69
|
ipCity: undefined,
|
|
40
70
|
ipLatitude: undefined,
|
|
41
71
|
ipLongitude: undefined,
|
|
42
72
|
};
|
|
73
|
+
// Populate geolocation if service available
|
|
43
74
|
if (this.geoLocationService && clientInfo.ipAddress && clientInfo.ipAddress !== '0.0.0.0') {
|
|
44
75
|
try {
|
|
45
76
|
const geo = await this.geoLocationService.getIpGeolocation(clientInfo.ipAddress);
|
|
@@ -49,11 +80,14 @@ class ClientInfoHandler {
|
|
|
49
80
|
clientInfo.ipLongitude = geo.longitude;
|
|
50
81
|
}
|
|
51
82
|
catch (error) {
|
|
83
|
+
// Log error instead of silently failing
|
|
52
84
|
this.logger?.error?.(`Geolocation lookup failed for IP ${clientInfo.ipAddress}:`, error instanceof Error ? error.message : 'Unknown error');
|
|
53
85
|
}
|
|
54
86
|
}
|
|
87
|
+
// Store in context
|
|
55
88
|
index_1.ContextStorage.set('CLIENT_INFO', clientInfo);
|
|
56
89
|
index_1.ContextStorage.set('HTTP_RESPONSE', res.raw);
|
|
90
|
+
// Also attach to request attributes for handler access
|
|
57
91
|
req.attributes.clientInfo = clientInfo;
|
|
58
92
|
}
|
|
59
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-info.handler.js","sourceRoot":"","sources":["../../src/handlers/client-info.handler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"client-info.handler.js","sourceRoot":"","sources":["../../src/handlers/client-info.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CSRF Handler
|
|
3
|
+
*
|
|
4
|
+
* Generates and validates CSRF tokens for cookie-based authentication.
|
|
5
|
+
*
|
|
6
|
+
* **Platform-Agnostic:**
|
|
7
|
+
* This handler operates purely on NAuthRequest interface.
|
|
8
|
+
* Context is managed by the adapter, not this handler.
|
|
9
|
+
*
|
|
10
|
+
* **Lazy Validation:**
|
|
11
|
+
* CSRF errors are stored in request attributes instead of thrown immediately.
|
|
12
|
+
* This allows public routes and requireAuth() to decide how to handle them.
|
|
13
|
+
*/
|
|
1
14
|
import { NAuthConfig, NAuthLogger } from '../index';
|
|
2
15
|
import { CsrfService } from '../services/csrf.service';
|
|
3
16
|
import { NAuthRequest, NAuthResponse } from '../platform/interfaces';
|
|
17
|
+
/**
|
|
18
|
+
* CsrfHandler
|
|
19
|
+
*
|
|
20
|
+
* Handles CSRF token generation and validation for cookie-based authentication.
|
|
21
|
+
*/
|
|
4
22
|
export declare class CsrfHandler {
|
|
5
23
|
private readonly csrfService;
|
|
6
24
|
private readonly config;
|
|
7
25
|
private readonly logger?;
|
|
8
26
|
constructor(csrfService: CsrfService, config: NAuthConfig, logger?: NAuthLogger | undefined);
|
|
27
|
+
/**
|
|
28
|
+
* Handle request - generate or validate CSRF token
|
|
29
|
+
*
|
|
30
|
+
* Note: Context is managed by adapter. This handler assumes context is available.
|
|
31
|
+
*/
|
|
9
32
|
handle(req: NAuthRequest, res: NAuthResponse, next: () => Promise<void> | void): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Generate CSRF token if not present in cookies
|
|
35
|
+
*/
|
|
10
36
|
private generateTokenIfMissing;
|
|
37
|
+
/**
|
|
38
|
+
* Validate CSRF token from request
|
|
39
|
+
*
|
|
40
|
+
* Uses lazy validation - stores error in attributes instead of throwing.
|
|
41
|
+
* requireAuth() helper will throw if error exists.
|
|
42
|
+
*/
|
|
11
43
|
private validateToken;
|
|
12
44
|
}
|
|
13
45
|
//# sourceMappingURL=csrf.handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"csrf.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAiC,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKrE;;;;GAIG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAFP,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,YAAA;IAGvC;;;;OAIG;IACU,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3G;;OAEG;YACW,sBAAsB;IAgCpC;;;;;OAKG;YACW,aAAa;CA0C5B"}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CSRF Handler
|
|
4
|
+
*
|
|
5
|
+
* Generates and validates CSRF tokens for cookie-based authentication.
|
|
6
|
+
*
|
|
7
|
+
* **Platform-Agnostic:**
|
|
8
|
+
* This handler operates purely on NAuthRequest interface.
|
|
9
|
+
* Context is managed by the adapter, not this handler.
|
|
10
|
+
*
|
|
11
|
+
* **Lazy Validation:**
|
|
12
|
+
* CSRF errors are stored in request attributes instead of thrown immediately.
|
|
13
|
+
* This allows public routes and requireAuth() to decide how to handle them.
|
|
14
|
+
*/
|
|
2
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
16
|
exports.CsrfHandler = void 0;
|
|
4
17
|
const index_1 = require("../index");
|
|
18
|
+
/** HTTP methods that don't require CSRF validation */
|
|
5
19
|
const SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS'];
|
|
20
|
+
/**
|
|
21
|
+
* CsrfHandler
|
|
22
|
+
*
|
|
23
|
+
* Handles CSRF token generation and validation for cookie-based authentication.
|
|
24
|
+
*/
|
|
6
25
|
class CsrfHandler {
|
|
7
26
|
csrfService;
|
|
8
27
|
config;
|
|
@@ -12,58 +31,86 @@ class CsrfHandler {
|
|
|
12
31
|
this.config = config;
|
|
13
32
|
this.logger = logger;
|
|
14
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Handle request - generate or validate CSRF token
|
|
36
|
+
*
|
|
37
|
+
* Note: Context is managed by adapter. This handler assumes context is available.
|
|
38
|
+
*/
|
|
15
39
|
async handle(req, res, next) {
|
|
40
|
+
// Skip if token delivery is not cookies or hybrid
|
|
16
41
|
const method = this.config.tokenDelivery?.method || 'json';
|
|
17
42
|
if (method !== 'cookies' && method !== 'hybrid') {
|
|
18
43
|
await next();
|
|
19
44
|
return;
|
|
20
45
|
}
|
|
46
|
+
// Safe methods: Generate token if missing
|
|
21
47
|
if (SAFE_METHODS.includes(req.method)) {
|
|
22
48
|
await this.generateTokenIfMissing(req, res);
|
|
23
49
|
await next();
|
|
24
50
|
return;
|
|
25
51
|
}
|
|
52
|
+
// Skip public routes (CSRF not required)
|
|
26
53
|
if (req.attributes.nauthPublic) {
|
|
27
54
|
await next();
|
|
28
55
|
return;
|
|
29
56
|
}
|
|
57
|
+
// Skip excluded paths
|
|
30
58
|
const excludedPaths = this.config.security?.csrf?.excludedPaths || [];
|
|
31
59
|
if (excludedPaths.some((p) => req.path.startsWith(p))) {
|
|
32
60
|
await next();
|
|
33
61
|
return;
|
|
34
62
|
}
|
|
63
|
+
// Validate CSRF token for unsafe methods (POST, PUT, DELETE, etc.)
|
|
35
64
|
await this.validateToken(req);
|
|
36
65
|
await next();
|
|
37
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate CSRF token if not present in cookies
|
|
69
|
+
*/
|
|
38
70
|
async generateTokenIfMissing(req, res) {
|
|
39
71
|
const cookieName = this.csrfService.getCookieName();
|
|
40
72
|
const existingToken = req.cookies[cookieName];
|
|
41
73
|
if (existingToken) {
|
|
74
|
+
// Token exists, clear any previous error state
|
|
42
75
|
delete req.attributes.nauthCsrfError;
|
|
43
76
|
return;
|
|
44
77
|
}
|
|
78
|
+
// Generate new token
|
|
45
79
|
const token = this.csrfService.generateToken();
|
|
80
|
+
// Build cookie options
|
|
46
81
|
const cookieOptions = {
|
|
47
|
-
httpOnly: true,
|
|
82
|
+
httpOnly: true, // Prevents XSS access to token
|
|
48
83
|
secure: this.config.tokenDelivery?.cookieOptions?.secure ?? true,
|
|
49
84
|
sameSite: (this.config.tokenDelivery?.cookieOptions?.sameSite || 'strict'),
|
|
50
85
|
domain: this.config.tokenDelivery?.cookieOptions?.domain,
|
|
51
86
|
path: '/',
|
|
52
87
|
...this.csrfService.getCookieOptions(),
|
|
53
88
|
};
|
|
89
|
+
// Set cookie
|
|
54
90
|
res.setCookie(cookieName, token, cookieOptions);
|
|
91
|
+
// Also expose token in response header (since cookie is httpOnly)
|
|
55
92
|
res.header(this.csrfService.getHeaderName(), token);
|
|
56
93
|
this.logger?.debug?.('CSRF token generated and set');
|
|
57
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Validate CSRF token from request
|
|
97
|
+
*
|
|
98
|
+
* Uses lazy validation - stores error in attributes instead of throwing.
|
|
99
|
+
* requireAuth() helper will throw if error exists.
|
|
100
|
+
*/
|
|
58
101
|
async validateToken(req) {
|
|
59
102
|
const headerName = this.csrfService.getHeaderName();
|
|
60
103
|
const cookieName = this.csrfService.getCookieName();
|
|
104
|
+
// Get token from header or body
|
|
61
105
|
let tokenFromRequest = req.getHeader(headerName);
|
|
62
106
|
if (!tokenFromRequest && req.body) {
|
|
107
|
+
// Check common body fields
|
|
63
108
|
const body = req.body;
|
|
64
109
|
tokenFromRequest = (body[headerName] || body['_csrf'] || body['csrfToken']);
|
|
65
110
|
}
|
|
111
|
+
// Get token from cookie
|
|
66
112
|
const cookieToken = req.cookies[cookieName];
|
|
113
|
+
// Validate - store errors lazily
|
|
67
114
|
if (!tokenFromRequest) {
|
|
68
115
|
req.attributes.nauthCsrfError = new index_1.NAuthException(index_1.AuthErrorCode.CSRF_TOKEN_MISSING, `CSRF token required. Include ${headerName} header or _csrf/csrfToken in body with the value from ${cookieName} cookie.`);
|
|
69
116
|
return;
|
|
@@ -72,6 +119,7 @@ class CsrfHandler {
|
|
|
72
119
|
req.attributes.nauthCsrfError = new index_1.NAuthException(index_1.AuthErrorCode.CSRF_TOKEN_MISSING, 'CSRF cookie missing. Make a GET request first to obtain a token.');
|
|
73
120
|
return;
|
|
74
121
|
}
|
|
122
|
+
// Validate token matches
|
|
75
123
|
const isValid = this.csrfService.validateToken(String(tokenFromRequest), cookieToken);
|
|
76
124
|
if (!isValid) {
|
|
77
125
|
req.attributes.nauthCsrfError = new index_1.NAuthException(index_1.AuthErrorCode.CSRF_TOKEN_INVALID, 'CSRF token mismatch.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csrf.handler.js","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"csrf.handler.js","sourceRoot":"","sources":["../../src/handlers/csrf.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Delivery Handler
|
|
3
|
+
*
|
|
4
|
+
* Handles response interception to deliver tokens via Cookies or JSON.
|
|
5
|
+
*/
|
|
1
6
|
import { NAuthConfig, NAuthLogger } from '../index';
|
|
2
7
|
import { NAuthRequest, NAuthResponse } from '../platform/interfaces';
|
|
3
8
|
export declare class TokenDeliveryHandler {
|
|
4
9
|
private config;
|
|
5
10
|
private logger?;
|
|
6
11
|
constructor(config: NAuthConfig, logger?: NAuthLogger | undefined);
|
|
12
|
+
/**
|
|
13
|
+
* Type guard for detecting an auth response payload.
|
|
14
|
+
*
|
|
15
|
+
* We intentionally validate types at runtime because the handler receives `unknown`
|
|
16
|
+
* response bodies from framework adapters.
|
|
17
|
+
*/
|
|
7
18
|
private isAuthResponseBody;
|
|
19
|
+
/**
|
|
20
|
+
* Process the response body.
|
|
21
|
+
* If it contains tokens, handle delivery and return sanitized body.
|
|
22
|
+
* If not, return original body.
|
|
23
|
+
*/
|
|
8
24
|
handleResponse(req: NAuthRequest, res: NAuthResponse, body: unknown): Promise<unknown>;
|
|
9
25
|
private resolveDeliveryMode;
|
|
10
26
|
private setTokenCookies;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-delivery.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/token-delivery.handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"token-delivery.handler.d.ts","sourceRoot":"","sources":["../../src/handlers/token-delivery.handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,WAAW,EAIX,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAsB,MAAM,wBAAwB,CAAC;AAEzF,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM,CAAC;gBADP,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,WAAW,YAAA;IAG9B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACU,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BnG,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,WAAW;CAsBpB"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Token Delivery Handler
|
|
4
|
+
*
|
|
5
|
+
* Handles response interception to deliver tokens via Cookies or JSON.
|
|
6
|
+
*/
|
|
2
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
8
|
exports.TokenDeliveryHandler = void 0;
|
|
4
9
|
const index_1 = require("../index");
|
|
@@ -9,17 +14,31 @@ class TokenDeliveryHandler {
|
|
|
9
14
|
this.config = config;
|
|
10
15
|
this.logger = logger;
|
|
11
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Type guard for detecting an auth response payload.
|
|
19
|
+
*
|
|
20
|
+
* We intentionally validate types at runtime because the handler receives `unknown`
|
|
21
|
+
* response bodies from framework adapters.
|
|
22
|
+
*/
|
|
12
23
|
isAuthResponseBody(body) {
|
|
13
24
|
if (!body || typeof body !== 'object')
|
|
14
25
|
return false;
|
|
15
26
|
const rec = body;
|
|
16
27
|
return typeof rec.accessToken === 'string' && typeof rec.refreshToken === 'string';
|
|
17
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Process the response body.
|
|
31
|
+
* If it contains tokens, handle delivery and return sanitized body.
|
|
32
|
+
* If not, return original body.
|
|
33
|
+
*/
|
|
18
34
|
async handleResponse(req, res, body) {
|
|
35
|
+
// Check if this is an auth response
|
|
19
36
|
if (this.isAuthResponseBody(body)) {
|
|
20
37
|
const deliveryMode = this.resolveDeliveryMode(req);
|
|
21
38
|
if (deliveryMode === 'cookies') {
|
|
22
39
|
this.setTokenCookies(res, body);
|
|
40
|
+
// Remove tokens and expiration fields from body
|
|
41
|
+
// Expiration is managed by cookie maxAge, so these fields are not needed
|
|
23
42
|
const sanitizedBody = { ...body };
|
|
24
43
|
delete sanitizedBody.accessToken;
|
|
25
44
|
delete sanitizedBody.refreshToken;
|
|
@@ -37,9 +56,11 @@ class TokenDeliveryHandler {
|
|
|
37
56
|
}
|
|
38
57
|
resolveDeliveryMode(req) {
|
|
39
58
|
const method = this.config.tokenDelivery?.method || 'json';
|
|
59
|
+
// Route override
|
|
40
60
|
if (req.attributes['nauthTokenDelivery']) {
|
|
41
61
|
return req.attributes['nauthTokenDelivery'];
|
|
42
62
|
}
|
|
63
|
+
// Hybrid mode
|
|
43
64
|
if (method === 'hybrid') {
|
|
44
65
|
return (0, index_1.resolveDeliveryForRequest)(req.raw, this.config.tokenDelivery?.hybridPolicy);
|
|
45
66
|
}
|
|
@@ -71,7 +92,7 @@ class TokenDeliveryHandler {
|
|
|
71
92
|
return expiry;
|
|
72
93
|
const match = expiry.match(/^(\d+)([smhd])$/);
|
|
73
94
|
if (!match)
|
|
74
|
-
return 900;
|
|
95
|
+
return 900; // Default 15m
|
|
75
96
|
const value = parseInt(match[1], 10);
|
|
76
97
|
const unit = match[2];
|
|
77
98
|
switch (unit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-delivery.handler.js","sourceRoot":"","sources":["../../src/handlers/token-delivery.handler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"token-delivery.handler.js","sourceRoot":"","sources":["../../src/handlers/token-delivery.handler.ts"],"names":[],"mappings":"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"}
|