@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
|
@@ -37,52 +37,175 @@ exports.JwtService = void 0;
|
|
|
37
37
|
const nauth_exception_1 = require("../exceptions/nauth.exception");
|
|
38
38
|
const error_codes_enum_1 = require("../enums/error-codes.enum");
|
|
39
39
|
const crypto = __importStar(require("crypto"));
|
|
40
|
+
/**
|
|
41
|
+
* JWT Service (Platform-Agnostic)
|
|
42
|
+
*
|
|
43
|
+
* Handles all JWT token operations using jose library for platform independence.
|
|
44
|
+
*
|
|
45
|
+
* **Features:**
|
|
46
|
+
* - Platform-agnostic (no framework dependencies)
|
|
47
|
+
* - Support for multiple algorithms (HS256, HS384, HS512, RS256, RS384, RS512)
|
|
48
|
+
* - Token rotation with family tracking
|
|
49
|
+
* - Token reuse detection
|
|
50
|
+
* - Symmetric and asymmetric key support
|
|
51
|
+
*
|
|
52
|
+
* **Security Features:**
|
|
53
|
+
* - HS256 as default algorithm (symmetric key)
|
|
54
|
+
* - HS256/HS384/HS512 for symmetric keys
|
|
55
|
+
* - RS256/RS384/RS512 for asymmetric keys
|
|
56
|
+
* - Token rotation on refresh
|
|
57
|
+
* - Token family tracking for reuse detection
|
|
58
|
+
* - Configurable expiration times
|
|
59
|
+
* - Standard JWT claims (iss, aud, sub, exp, iat)
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const jwtService = new JwtService(config);
|
|
64
|
+
*
|
|
65
|
+
* // Generate token pair
|
|
66
|
+
* const tokens = await jwtService.generateTokenPair({
|
|
67
|
+
* userId: 'user-123',
|
|
68
|
+
* email: 'user@example.com',
|
|
69
|
+
* sessionId: 'session-456',
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // Validate token
|
|
73
|
+
* const result = await jwtService.validateAccessToken(tokens.accessToken);
|
|
74
|
+
* if (result.valid) {
|
|
75
|
+
* console.log('User ID:', result.payload.sub);
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
40
79
|
class JwtService {
|
|
80
|
+
/** JWT configuration */
|
|
41
81
|
config;
|
|
82
|
+
/** Cached access token key (for performance) */
|
|
42
83
|
accessTokenKey = null;
|
|
84
|
+
/** Cached refresh token key (for performance) */
|
|
43
85
|
refreshTokenKey = null;
|
|
86
|
+
/**
|
|
87
|
+
* Cached dynamic import of jose.
|
|
88
|
+
* Kept as a promise so concurrent calls share the same module load.
|
|
89
|
+
*/
|
|
44
90
|
joseModulePromise = null;
|
|
45
91
|
constructor(jwtConfig) {
|
|
46
92
|
this.config = jwtConfig;
|
|
47
93
|
this.prepareKeys();
|
|
48
94
|
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// jose (ESM-only) loader
|
|
97
|
+
// ============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Lazy-load jose (ESM-only) in a CJS-compatible way.
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
49
102
|
async getJose() {
|
|
50
103
|
if (!this.joseModulePromise) {
|
|
51
104
|
this.joseModulePromise = Promise.resolve().then(() => __importStar(require('jose')));
|
|
52
105
|
}
|
|
53
106
|
return await this.joseModulePromise;
|
|
54
107
|
}
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// Key Preparation
|
|
110
|
+
// ============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Prepare and cache signing keys for better performance
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
55
115
|
prepareKeys() {
|
|
116
|
+
// Access token key
|
|
56
117
|
if (this.config.accessToken.privateKey) {
|
|
118
|
+
// Use private key (for RS256, RS384, RS512)
|
|
57
119
|
this.accessTokenKey = crypto.createPrivateKey(this.config.accessToken.privateKey);
|
|
58
120
|
}
|
|
59
121
|
else if (this.config.accessToken.secret) {
|
|
122
|
+
// For symmetric algorithms (HS256, HS384, HS512), use secret as Uint8Array
|
|
60
123
|
this.accessTokenKey = new TextEncoder().encode(this.config.accessToken.secret);
|
|
61
124
|
}
|
|
125
|
+
// Refresh token key (always uses secret for symmetric algorithms)
|
|
62
126
|
if (this.config.refreshToken.secret) {
|
|
63
127
|
this.refreshTokenKey = new TextEncoder().encode(this.config.refreshToken.secret);
|
|
64
128
|
}
|
|
65
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Get algorithm for signing access tokens
|
|
132
|
+
*
|
|
133
|
+
* Automatically selects appropriate algorithm based on key material:
|
|
134
|
+
* - If privateKey is provided → uses configured algorithm (RS256, RS384, RS512)
|
|
135
|
+
* - If only secret is provided → uses configured algorithm or defaults to HS256
|
|
136
|
+
*
|
|
137
|
+
* @private
|
|
138
|
+
*/
|
|
66
139
|
getAlgorithm() {
|
|
140
|
+
// Default to HS256 if no algorithm is configured
|
|
67
141
|
return this.config.algorithm || 'HS256';
|
|
68
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Get algorithm for signing refresh tokens
|
|
145
|
+
*
|
|
146
|
+
* Refresh tokens only support symmetric algorithms (HS256/HS384/HS512)
|
|
147
|
+
* because RefreshTokenConfig only provides a secret, not a privateKey.
|
|
148
|
+
*
|
|
149
|
+
* Automatically selects appropriate symmetric algorithm:
|
|
150
|
+
* - If configured algorithm is symmetric (HS256/HS384/HS512) → uses it
|
|
151
|
+
* - If configured algorithm is asymmetric (RS256, RS384, RS512) → falls back to HS256
|
|
152
|
+
* - Defaults to HS256 if no algorithm is configured
|
|
153
|
+
*
|
|
154
|
+
* @private
|
|
155
|
+
*/
|
|
69
156
|
getRefreshTokenAlgorithm() {
|
|
70
157
|
const configuredAlgorithm = this.config.algorithm || 'HS256';
|
|
158
|
+
// Refresh tokens only support symmetric algorithms (HS256, HS384, HS512)
|
|
159
|
+
// because RefreshTokenConfig only has a secret, not a privateKey
|
|
71
160
|
if (configuredAlgorithm === 'HS256' || configuredAlgorithm === 'HS384' || configuredAlgorithm === 'HS512') {
|
|
72
161
|
return configuredAlgorithm;
|
|
73
162
|
}
|
|
163
|
+
// For asymmetric algorithms (RS256, RS384, RS512), fall back to HS256
|
|
164
|
+
// This ensures compatibility with the symmetric refreshTokenKey
|
|
74
165
|
return 'HS256';
|
|
75
166
|
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Token Generation
|
|
169
|
+
// ============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Generate both access and refresh tokens
|
|
172
|
+
*
|
|
173
|
+
* Creates a pair of tokens with the same token family for rotation tracking.
|
|
174
|
+
* The token family allows detection of token reuse attacks.
|
|
175
|
+
*
|
|
176
|
+
* @param data - User and session information
|
|
177
|
+
* @returns Token pair with access and refresh tokens
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const tokens = await jwtService.generateTokenPair({
|
|
182
|
+
* userId: 'user-123',
|
|
183
|
+
* email: 'user@example.com',
|
|
184
|
+
* sessionId: 'session-456',
|
|
185
|
+
* });
|
|
186
|
+
*
|
|
187
|
+
* // Store tokens and send to client
|
|
188
|
+
* res.json({
|
|
189
|
+
* accessToken: tokens.accessToken,
|
|
190
|
+
* refreshToken: tokens.refreshToken,
|
|
191
|
+
* expiresIn: tokens.expiresIn,
|
|
192
|
+
* });
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
76
195
|
async generateTokenPair(data) {
|
|
196
|
+
// Generate or reuse token family ID for rotation tracking
|
|
77
197
|
const tokenFamily = data.tokenFamily || this.generateTokenFamily();
|
|
198
|
+
// Generate access token (short-lived)
|
|
78
199
|
const accessToken = await this.generateAccessToken({
|
|
79
200
|
...data,
|
|
80
201
|
tokenFamily,
|
|
81
202
|
});
|
|
203
|
+
// Generate refresh token (long-lived)
|
|
82
204
|
const refreshToken = await this.generateRefreshToken({
|
|
83
205
|
...data,
|
|
84
206
|
tokenFamily,
|
|
85
207
|
});
|
|
208
|
+
// Calculate expiration time in seconds
|
|
86
209
|
const expiresIn = this.parseExpiresIn(this.config.accessToken.expiresIn);
|
|
87
210
|
return {
|
|
88
211
|
accessToken,
|
|
@@ -90,6 +213,15 @@ class JwtService {
|
|
|
90
213
|
expiresIn,
|
|
91
214
|
};
|
|
92
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Generate an access token
|
|
218
|
+
*
|
|
219
|
+
* Access tokens are short-lived (typically 15 minutes) and used for API authentication.
|
|
220
|
+
* They contain user identity and authorization information.
|
|
221
|
+
*
|
|
222
|
+
* @param data - Token payload data
|
|
223
|
+
* @returns Signed JWT access token
|
|
224
|
+
*/
|
|
93
225
|
async generateAccessToken(data) {
|
|
94
226
|
if (!this.accessTokenKey) {
|
|
95
227
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.INTERNAL_ERROR, 'Access token key not configured. Provide secret or privateKey.');
|
|
@@ -106,9 +238,11 @@ class JwtService {
|
|
|
106
238
|
.setProtectedHeader({ alg: algorithm })
|
|
107
239
|
.setIssuedAt()
|
|
108
240
|
.setExpirationTime(this.config.accessToken.expiresIn);
|
|
241
|
+
// Add issuer if configured
|
|
109
242
|
if (this.config.issuer) {
|
|
110
243
|
jwt = jwt.setIssuer(this.config.issuer);
|
|
111
244
|
}
|
|
245
|
+
// Add audience if configured
|
|
112
246
|
if (this.config.audience) {
|
|
113
247
|
if (Array.isArray(this.config.audience)) {
|
|
114
248
|
jwt = jwt.setAudience(this.config.audience);
|
|
@@ -119,11 +253,25 @@ class JwtService {
|
|
|
119
253
|
}
|
|
120
254
|
return await jwt.sign(this.accessTokenKey);
|
|
121
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Generate a refresh token
|
|
258
|
+
*
|
|
259
|
+
* Refresh tokens are long-lived (typically 30 days) and used to obtain new access tokens.
|
|
260
|
+
* They should be stored securely and rotated on each use.
|
|
261
|
+
*
|
|
262
|
+
* NOTE: Refresh tokens always use a symmetric algorithm (HS256/HS384/HS512)
|
|
263
|
+
* because RefreshTokenConfig only provides a secret, not a privateKey.
|
|
264
|
+
* This ensures compatibility between the algorithm and key type.
|
|
265
|
+
*
|
|
266
|
+
* @param data - Token payload data
|
|
267
|
+
* @returns Signed JWT refresh token
|
|
268
|
+
*/
|
|
122
269
|
async generateRefreshToken(data) {
|
|
123
270
|
if (!this.refreshTokenKey) {
|
|
124
271
|
throw new nauth_exception_1.NAuthException(error_codes_enum_1.AuthErrorCode.INTERNAL_ERROR, 'Refresh token secret not configured.');
|
|
125
272
|
}
|
|
126
273
|
const jose = await this.getJose();
|
|
274
|
+
// Use refresh token-specific algorithm (always symmetric)
|
|
127
275
|
const algorithm = this.getRefreshTokenAlgorithm();
|
|
128
276
|
const jwt = new jose.SignJWT({
|
|
129
277
|
sub: data.userId,
|
|
@@ -137,24 +285,58 @@ class JwtService {
|
|
|
137
285
|
.setExpirationTime(this.config.refreshToken.expiresIn);
|
|
138
286
|
return await jwt.sign(this.refreshTokenKey);
|
|
139
287
|
}
|
|
288
|
+
// ============================================================================
|
|
289
|
+
// Token Validation
|
|
290
|
+
// ============================================================================
|
|
291
|
+
/**
|
|
292
|
+
* Validate an access token
|
|
293
|
+
*
|
|
294
|
+
* Verifies:
|
|
295
|
+
* - Token signature is valid
|
|
296
|
+
* - Token hasn't expired
|
|
297
|
+
* - Token type is 'access'
|
|
298
|
+
* - Token structure is correct
|
|
299
|
+
*
|
|
300
|
+
* @param token - JWT access token to validate
|
|
301
|
+
* @returns Validation result with payload or error
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```typescript
|
|
305
|
+
* const result = await jwtService.validateAccessToken(token);
|
|
306
|
+
*
|
|
307
|
+
* if (!result.valid) {
|
|
308
|
+
* if (result.errorType === 'expired') {
|
|
309
|
+
* // Attempt to refresh token
|
|
310
|
+
* } else {
|
|
311
|
+
* // Invalid token, reject request
|
|
312
|
+
* }
|
|
313
|
+
* }
|
|
314
|
+
* ```
|
|
315
|
+
*/
|
|
140
316
|
async validateAccessToken(token) {
|
|
141
317
|
try {
|
|
142
318
|
const jose = await this.getJose();
|
|
319
|
+
// Determine key for verification
|
|
143
320
|
let verificationKey;
|
|
144
321
|
if (this.config.accessToken.publicKey) {
|
|
322
|
+
// Use public key for asymmetric verification (RS256, RS384, RS512)
|
|
145
323
|
verificationKey = crypto.createPublicKey(this.config.accessToken.publicKey);
|
|
146
324
|
}
|
|
147
325
|
else if (this.accessTokenKey) {
|
|
326
|
+
// Use secret for symmetric verification (HS256, HS512)
|
|
148
327
|
verificationKey = this.accessTokenKey;
|
|
149
328
|
}
|
|
150
329
|
else {
|
|
151
330
|
throw new Error('No verification key available');
|
|
152
331
|
}
|
|
332
|
+
// Verify and decode token
|
|
153
333
|
const { payload } = await jose.jwtVerify(token, verificationKey, {
|
|
154
334
|
issuer: this.config.issuer,
|
|
155
335
|
audience: this.config.audience,
|
|
156
336
|
});
|
|
337
|
+
// Cast payload to JwtPayload
|
|
157
338
|
const jwtPayload = payload;
|
|
339
|
+
// Ensure token type is correct
|
|
158
340
|
if (jwtPayload.type !== 'access') {
|
|
159
341
|
return {
|
|
160
342
|
valid: false,
|
|
@@ -171,14 +353,26 @@ class JwtService {
|
|
|
171
353
|
return this.handleValidationError(error);
|
|
172
354
|
}
|
|
173
355
|
}
|
|
356
|
+
/**
|
|
357
|
+
* Validate a refresh token
|
|
358
|
+
*
|
|
359
|
+
* Similar to access token validation but checks for 'refresh' type.
|
|
360
|
+
* Also verifies token hasn't been used before (if rotation is enabled).
|
|
361
|
+
*
|
|
362
|
+
* @param token - JWT refresh token to validate
|
|
363
|
+
* @returns Validation result with payload or error
|
|
364
|
+
*/
|
|
174
365
|
async validateRefreshToken(token) {
|
|
175
366
|
try {
|
|
176
367
|
if (!this.refreshTokenKey) {
|
|
177
368
|
throw new Error('Refresh token key not configured');
|
|
178
369
|
}
|
|
179
370
|
const jose = await this.getJose();
|
|
371
|
+
// Verify and decode token
|
|
180
372
|
const { payload } = await jose.jwtVerify(token, this.refreshTokenKey);
|
|
373
|
+
// Cast payload to JwtPayload
|
|
181
374
|
const jwtPayload = payload;
|
|
375
|
+
// Ensure token type is correct
|
|
182
376
|
if (jwtPayload.type !== 'refresh') {
|
|
183
377
|
return {
|
|
184
378
|
valid: false,
|
|
@@ -195,8 +389,19 @@ class JwtService {
|
|
|
195
389
|
return this.handleValidationError(error);
|
|
196
390
|
}
|
|
197
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* Decode a token without verification
|
|
394
|
+
*
|
|
395
|
+
* WARNING: This method does NOT validate the token signature or expiration.
|
|
396
|
+
* Only use for non-security-critical operations like logging or analytics.
|
|
397
|
+
*
|
|
398
|
+
* @param token - JWT token to decode
|
|
399
|
+
* @returns Decoded payload or null if malformed
|
|
400
|
+
*/
|
|
198
401
|
decodeToken(token) {
|
|
199
402
|
try {
|
|
403
|
+
// This is intentionally NOT signature-validated.
|
|
404
|
+
// Avoid jose here to keep this method synchronous and safe in CJS builds.
|
|
200
405
|
const parts = token.split('.');
|
|
201
406
|
if (parts.length < 2)
|
|
202
407
|
return null;
|
|
@@ -208,35 +413,104 @@ class JwtService {
|
|
|
208
413
|
return null;
|
|
209
414
|
}
|
|
210
415
|
}
|
|
416
|
+
/**
|
|
417
|
+
* Convert base64url-encoded strings to standard base64 for decoding.
|
|
418
|
+
* @private
|
|
419
|
+
*/
|
|
211
420
|
base64UrlToBase64(input) {
|
|
421
|
+
// Replace URL-safe chars, then pad to a multiple of 4.
|
|
212
422
|
const base64 = input.replace(/-/g, '+').replace(/_/g, '/');
|
|
213
423
|
const padLength = (4 - (base64.length % 4)) % 4;
|
|
214
424
|
return `${base64}${'='.repeat(padLength)}`;
|
|
215
425
|
}
|
|
426
|
+
// ============================================================================
|
|
427
|
+
// Token Utilities
|
|
428
|
+
// ============================================================================
|
|
429
|
+
/**
|
|
430
|
+
* Generate a unique token family identifier
|
|
431
|
+
*
|
|
432
|
+
* Token families are used to track token rotation and detect reuse attacks.
|
|
433
|
+
* All tokens in the same "family" (original + rotated versions) share this ID.
|
|
434
|
+
*
|
|
435
|
+
* SECURITY FIX #10: Increased from 16 bytes (128 bits) to 32 bytes (256 bits)
|
|
436
|
+
*
|
|
437
|
+
* @returns Random token family ID (256 bits)
|
|
438
|
+
*/
|
|
216
439
|
generateTokenFamily() {
|
|
217
|
-
return crypto.randomBytes(32).toString('hex');
|
|
440
|
+
return crypto.randomBytes(32).toString('hex'); // 256 bits
|
|
218
441
|
}
|
|
442
|
+
/**
|
|
443
|
+
* Hash a token for storage
|
|
444
|
+
*
|
|
445
|
+
* Tokens should be hashed before storing in the database for security.
|
|
446
|
+
* This prevents token exposure if the database is compromised.
|
|
447
|
+
*
|
|
448
|
+
* @param token - Token to hash
|
|
449
|
+
* @returns SHA-256 hash of the token
|
|
450
|
+
*/
|
|
219
451
|
hashToken(token) {
|
|
220
452
|
return crypto.createHash('sha256').update(token).digest('hex');
|
|
221
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Get access token expiry time in seconds
|
|
456
|
+
*
|
|
457
|
+
* @returns Access token expiry time in seconds
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* ```typescript
|
|
461
|
+
* const expiry = jwtService.getAccessTokenExpiry();
|
|
462
|
+
* console.log(expiry); // 900 (15 minutes)
|
|
463
|
+
* ```
|
|
464
|
+
*/
|
|
222
465
|
getAccessTokenExpiry() {
|
|
223
466
|
return this.parseExpiresIn(this.config.accessToken.expiresIn);
|
|
224
467
|
}
|
|
468
|
+
/**
|
|
469
|
+
* Get refresh token TTL in seconds
|
|
470
|
+
*
|
|
471
|
+
* Used for setting expiration on used-token tracking in storage.
|
|
472
|
+
*
|
|
473
|
+
* @returns TTL in seconds
|
|
474
|
+
*/
|
|
225
475
|
getRefreshTokenTTL() {
|
|
226
476
|
return this.parseExpiresIn(this.config.refreshToken.expiresIn);
|
|
227
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* Extract token from Authorization header
|
|
480
|
+
*
|
|
481
|
+
* Supports standard "Bearer <token>" format
|
|
482
|
+
*
|
|
483
|
+
* @param authHeader - Authorization header value
|
|
484
|
+
* @returns Extracted token or null
|
|
485
|
+
*
|
|
486
|
+
* @example
|
|
487
|
+
* ```typescript
|
|
488
|
+
* const token = jwtService.extractTokenFromHeader('Bearer eyJhbGc...');
|
|
489
|
+
* // Returns: 'eyJhbGc...'
|
|
490
|
+
* ```
|
|
491
|
+
*/
|
|
228
492
|
extractTokenFromHeader(authHeader) {
|
|
229
493
|
if (!authHeader)
|
|
230
494
|
return null;
|
|
231
495
|
const [type, token] = authHeader.split(' ');
|
|
496
|
+
// Verify Bearer scheme
|
|
232
497
|
if (type !== 'Bearer')
|
|
233
498
|
return null;
|
|
234
499
|
return token || null;
|
|
235
500
|
}
|
|
501
|
+
// ============================================================================
|
|
502
|
+
// Private Helper Methods
|
|
503
|
+
// ============================================================================
|
|
504
|
+
/**
|
|
505
|
+
* Parse expiration time from string or number
|
|
506
|
+
* @param expiresIn - Expiration time (e.g., '15m', 900, '1h')
|
|
507
|
+
* @returns Expiration time in seconds
|
|
508
|
+
*/
|
|
236
509
|
parseExpiresIn(expiresIn) {
|
|
237
510
|
if (typeof expiresIn === 'number') {
|
|
238
511
|
return expiresIn;
|
|
239
512
|
}
|
|
513
|
+
// Parse time strings (e.g., '15m', '1h', '30d')
|
|
240
514
|
const units = {
|
|
241
515
|
s: 1,
|
|
242
516
|
m: 60,
|
|
@@ -250,10 +524,17 @@ class JwtService {
|
|
|
250
524
|
const [, value, unit] = match;
|
|
251
525
|
return parseInt(value, 10) * units[unit];
|
|
252
526
|
}
|
|
527
|
+
/**
|
|
528
|
+
* Handle JWT validation errors and convert to standardized result
|
|
529
|
+
* @param error - Error from JWT verification
|
|
530
|
+
* @returns Standardized validation result
|
|
531
|
+
*/
|
|
253
532
|
handleValidationError(error) {
|
|
254
533
|
if (error instanceof Error) {
|
|
534
|
+
// jose errors have a 'code' property
|
|
255
535
|
const errorWithCode = error;
|
|
256
536
|
const errorCode = errorWithCode.code;
|
|
537
|
+
// Token expired (jose errors)
|
|
257
538
|
if (error.message.includes('expired') || errorCode === 'ERR_JWT_EXPIRED') {
|
|
258
539
|
return {
|
|
259
540
|
valid: false,
|
|
@@ -261,6 +542,7 @@ class JwtService {
|
|
|
261
542
|
errorType: 'expired',
|
|
262
543
|
};
|
|
263
544
|
}
|
|
545
|
+
// Invalid signature or malformed token
|
|
264
546
|
if (error.message.includes('signature') || error.message.includes('invalid') || errorCode === 'ERR_JWT_INVALID') {
|
|
265
547
|
return {
|
|
266
548
|
valid: false,
|
|
@@ -269,6 +551,7 @@ class JwtService {
|
|
|
269
551
|
};
|
|
270
552
|
}
|
|
271
553
|
}
|
|
554
|
+
// Unknown error
|
|
272
555
|
return {
|
|
273
556
|
valid: false,
|
|
274
557
|
error: 'Token validation failed',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.service.js","sourceRoot":"","sources":["../../src/services/jwt.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,mEAA+D;AAC/D,gEAA0D;AAC1D,+CAAiC;
|
|
1
|
+
{"version":3,"file":"jwt.service.js","sourceRoot":"","sources":["../../src/services/jwt.service.ts"],"names":[],"mappings":"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"}
|