@nauth-toolkit/core 0.1.14 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/database-columns.d.ts +70 -0
- package/dist/adapters/database-columns.d.ts.map +1 -1
- package/dist/adapters/database-columns.js +76 -2
- package/dist/adapters/database-columns.js.map +1 -1
- package/dist/adapters/express.adapter.d.ts +66 -0
- package/dist/adapters/express.adapter.d.ts.map +1 -1
- package/dist/adapters/express.adapter.js +80 -0
- package/dist/adapters/express.adapter.js.map +1 -1
- package/dist/adapters/fastify.adapter.d.ts +42 -0
- package/dist/adapters/fastify.adapter.d.ts.map +1 -1
- package/dist/adapters/fastify.adapter.js +86 -0
- package/dist/adapters/fastify.adapter.js.map +1 -1
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/storage.factory.d.ts +107 -0
- package/dist/adapters/storage.factory.d.ts.map +1 -1
- package/dist/adapters/storage.factory.js +114 -0
- package/dist/adapters/storage.factory.js.map +1 -1
- package/dist/adapters.d.ts +8 -0
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +8 -0
- package/dist/adapters.js.map +1 -1
- package/dist/bootstrap.d.ts +82 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +106 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/dto/admin-set-password.dto.d.ts +90 -0
- package/dist/dto/admin-set-password.dto.d.ts.map +1 -1
- package/dist/dto/admin-set-password.dto.js +91 -0
- package/dist/dto/admin-set-password.dto.js.map +1 -1
- package/dist/dto/auth-challenge.dto.d.ts +170 -0
- package/dist/dto/auth-challenge.dto.d.ts.map +1 -1
- package/dist/dto/auth-challenge.dto.js +170 -0
- package/dist/dto/auth-challenge.dto.js.map +1 -1
- package/dist/dto/auth-response.dto.d.ts +196 -0
- package/dist/dto/auth-response.dto.d.ts.map +1 -1
- package/dist/dto/auth-response.dto.js +149 -0
- package/dist/dto/auth-response.dto.js.map +1 -1
- package/dist/dto/challenge-response.dto.d.ts +155 -0
- package/dist/dto/challenge-response.dto.d.ts.map +1 -1
- package/dist/dto/challenge-response.dto.js +8 -0
- package/dist/dto/challenge-response.dto.js.map +1 -1
- package/dist/dto/change-password-request.dto.d.ts +35 -0
- package/dist/dto/change-password-request.dto.d.ts.map +1 -1
- package/dist/dto/change-password-request.dto.js +35 -0
- package/dist/dto/change-password-request.dto.js.map +1 -1
- package/dist/dto/change-password-response.dto.d.ts +25 -0
- package/dist/dto/change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/change-password-response.dto.js +25 -0
- package/dist/dto/change-password-response.dto.js.map +1 -1
- package/dist/dto/change-password.dto.d.ts +45 -0
- package/dist/dto/change-password.dto.d.ts.map +1 -1
- package/dist/dto/change-password.dto.js +45 -0
- package/dist/dto/change-password.dto.js.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.d.ts +59 -0
- package/dist/dto/confirm-forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/confirm-forgot-password.dto.js +59 -0
- package/dist/dto/confirm-forgot-password.dto.js.map +1 -1
- package/dist/dto/error-response.dto.d.ts +103 -0
- package/dist/dto/error-response.dto.d.ts.map +1 -1
- package/dist/dto/error-response.dto.js +103 -0
- package/dist/dto/error-response.dto.js.map +1 -1
- package/dist/dto/forgot-password.dto.d.ts +58 -0
- package/dist/dto/forgot-password.dto.d.ts.map +1 -1
- package/dist/dto/forgot-password.dto.js +58 -0
- package/dist/dto/forgot-password.dto.js.map +1 -1
- package/dist/dto/get-available-methods.dto.d.ts +37 -0
- package/dist/dto/get-available-methods.dto.d.ts.map +1 -1
- package/dist/dto/get-available-methods.dto.js +37 -0
- package/dist/dto/get-available-methods.dto.js.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.d.ts +24 -0
- package/dist/dto/get-challenge-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data-response.dto.js +24 -0
- package/dist/dto/get-challenge-data-response.dto.js.map +1 -1
- package/dist/dto/get-challenge-data.dto.d.ts +46 -0
- package/dist/dto/get-challenge-data.dto.d.ts.map +1 -1
- package/dist/dto/get-challenge-data.dto.js +46 -0
- package/dist/dto/get-challenge-data.dto.js.map +1 -1
- package/dist/dto/get-client-info.dto.d.ts +74 -0
- package/dist/dto/get-client-info.dto.d.ts.map +1 -1
- package/dist/dto/get-client-info.dto.js +74 -0
- package/dist/dto/get-client-info.dto.js.map +1 -1
- package/dist/dto/get-device-token-response.dto.d.ts +21 -0
- package/dist/dto/get-device-token-response.dto.d.ts.map +1 -1
- package/dist/dto/get-device-token-response.dto.js +21 -0
- package/dist/dto/get-device-token-response.dto.js.map +1 -1
- package/dist/dto/get-events-by-type.dto.d.ts +50 -0
- package/dist/dto/get-events-by-type.dto.d.ts.map +1 -1
- package/dist/dto/get-events-by-type.dto.js +50 -0
- package/dist/dto/get-events-by-type.dto.js.map +1 -1
- package/dist/dto/get-ip-address-response.dto.d.ts +20 -0
- package/dist/dto/get-ip-address-response.dto.d.ts.map +1 -1
- package/dist/dto/get-ip-address-response.dto.js +20 -0
- package/dist/dto/get-ip-address-response.dto.js.map +1 -1
- package/dist/dto/get-mfa-status.dto.d.ts +59 -0
- package/dist/dto/get-mfa-status.dto.d.ts.map +1 -1
- package/dist/dto/get-mfa-status.dto.js +59 -0
- package/dist/dto/get-mfa-status.dto.js.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.d.ts +28 -0
- package/dist/dto/get-risk-assessment-history.dto.d.ts.map +1 -1
- package/dist/dto/get-risk-assessment-history.dto.js +28 -0
- package/dist/dto/get-risk-assessment-history.dto.js.map +1 -1
- package/dist/dto/get-session-id-response.dto.d.ts +21 -0
- package/dist/dto/get-session-id-response.dto.d.ts.map +1 -1
- package/dist/dto/get-session-id-response.dto.js +21 -0
- package/dist/dto/get-session-id-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data-response.dto.d.ts +27 -0
- package/dist/dto/get-setup-data-response.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data-response.dto.js +27 -0
- package/dist/dto/get-setup-data-response.dto.js.map +1 -1
- package/dist/dto/get-setup-data.dto.d.ts +51 -0
- package/dist/dto/get-setup-data.dto.d.ts.map +1 -1
- package/dist/dto/get-setup-data.dto.js +51 -0
- package/dist/dto/get-setup-data.dto.js.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.d.ts +31 -0
- package/dist/dto/get-suspicious-activity.dto.d.ts.map +1 -1
- package/dist/dto/get-suspicious-activity.dto.js +31 -0
- package/dist/dto/get-suspicious-activity.dto.js.map +1 -1
- package/dist/dto/get-user-agent-response.dto.d.ts +19 -0
- package/dist/dto/get-user-agent-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-agent-response.dto.js +19 -0
- package/dist/dto/get-user-agent-response.dto.js.map +1 -1
- package/dist/dto/get-user-auth-history.dto.d.ts +64 -0
- package/dist/dto/get-user-auth-history.dto.d.ts.map +1 -1
- package/dist/dto/get-user-auth-history.dto.js +64 -0
- package/dist/dto/get-user-auth-history.dto.js.map +1 -1
- package/dist/dto/get-user-by-email.dto.d.ts +42 -0
- package/dist/dto/get-user-by-email.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-email.dto.js +42 -0
- package/dist/dto/get-user-by-email.dto.js.map +1 -1
- package/dist/dto/get-user-by-id.dto.d.ts +32 -0
- package/dist/dto/get-user-by-id.dto.d.ts.map +1 -1
- package/dist/dto/get-user-by-id.dto.js +32 -0
- package/dist/dto/get-user-by-id.dto.js.map +1 -1
- package/dist/dto/get-user-devices.dto.d.ts +34 -0
- package/dist/dto/get-user-devices.dto.d.ts.map +1 -1
- package/dist/dto/get-user-devices.dto.js +34 -0
- package/dist/dto/get-user-devices.dto.js.map +1 -1
- package/dist/dto/get-user-response.dto.d.ts +14 -0
- package/dist/dto/get-user-response.dto.d.ts.map +1 -1
- package/dist/dto/get-user-response.dto.js +15 -0
- package/dist/dto/get-user-response.dto.js.map +1 -1
- package/dist/dto/has-provider.dto.d.ts +33 -0
- package/dist/dto/has-provider.dto.d.ts.map +1 -1
- package/dist/dto/has-provider.dto.js +33 -0
- package/dist/dto/has-provider.dto.js.map +1 -1
- package/dist/dto/index.js +5 -0
- package/dist/dto/index.js.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.d.ts +28 -0
- package/dist/dto/is-trusted-device-response.dto.d.ts.map +1 -1
- package/dist/dto/is-trusted-device-response.dto.js +28 -0
- package/dist/dto/is-trusted-device-response.dto.js.map +1 -1
- package/dist/dto/list-providers-response.dto.d.ts +19 -0
- package/dist/dto/list-providers-response.dto.d.ts.map +1 -1
- package/dist/dto/list-providers-response.dto.js +19 -0
- package/dist/dto/list-providers-response.dto.js.map +1 -1
- package/dist/dto/login.dto.d.ts +48 -0
- package/dist/dto/login.dto.d.ts.map +1 -1
- package/dist/dto/login.dto.js +50 -1
- package/dist/dto/login.dto.js.map +1 -1
- package/dist/dto/logout-all-response.dto.d.ts +20 -0
- package/dist/dto/logout-all-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-all-response.dto.js +20 -0
- package/dist/dto/logout-all-response.dto.js.map +1 -1
- package/dist/dto/logout-all.dto.d.ts +42 -0
- package/dist/dto/logout-all.dto.d.ts.map +1 -1
- package/dist/dto/logout-all.dto.js +42 -0
- package/dist/dto/logout-all.dto.js.map +1 -1
- package/dist/dto/logout-response.dto.d.ts +21 -0
- package/dist/dto/logout-response.dto.d.ts.map +1 -1
- package/dist/dto/logout-response.dto.js +21 -0
- package/dist/dto/logout-response.dto.js.map +1 -1
- package/dist/dto/logout.dto.d.ts +45 -0
- package/dist/dto/logout.dto.d.ts.map +1 -1
- package/dist/dto/logout.dto.js +45 -0
- package/dist/dto/logout.dto.js.map +1 -1
- package/dist/dto/refresh-token.dto.d.ts +28 -0
- package/dist/dto/refresh-token.dto.d.ts.map +1 -1
- package/dist/dto/refresh-token.dto.js +28 -0
- package/dist/dto/refresh-token.dto.js.map +1 -1
- package/dist/dto/remove-devices.dto.d.ts +51 -0
- package/dist/dto/remove-devices.dto.d.ts.map +1 -1
- package/dist/dto/remove-devices.dto.js +51 -0
- package/dist/dto/remove-devices.dto.js.map +1 -1
- package/dist/dto/resend-code-response.dto.d.ts +28 -0
- package/dist/dto/resend-code-response.dto.d.ts.map +1 -1
- package/dist/dto/resend-code-response.dto.js +28 -0
- package/dist/dto/resend-code-response.dto.js.map +1 -1
- package/dist/dto/resend-code.dto.d.ts +37 -0
- package/dist/dto/resend-code.dto.d.ts.map +1 -1
- package/dist/dto/resend-code.dto.js +37 -0
- package/dist/dto/resend-code.dto.js.map +1 -1
- package/dist/dto/reset-password.dto.d.ts +74 -0
- package/dist/dto/reset-password.dto.d.ts.map +1 -1
- package/dist/dto/reset-password.dto.js +76 -1
- package/dist/dto/reset-password.dto.js.map +1 -1
- package/dist/dto/respond-challenge.dto.d.ts +147 -0
- package/dist/dto/respond-challenge.dto.d.ts.map +1 -1
- package/dist/dto/respond-challenge.dto.js +162 -0
- package/dist/dto/respond-challenge.dto.js.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.d.ts +65 -0
- package/dist/dto/set-mfa-exemption.dto.d.ts.map +1 -1
- package/dist/dto/set-mfa-exemption.dto.js +65 -0
- package/dist/dto/set-mfa-exemption.dto.js.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.d.ts +23 -0
- package/dist/dto/set-must-change-password-response.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password-response.dto.js +23 -0
- package/dist/dto/set-must-change-password-response.dto.js.map +1 -1
- package/dist/dto/set-must-change-password.dto.d.ts +32 -0
- package/dist/dto/set-must-change-password.dto.d.ts.map +1 -1
- package/dist/dto/set-must-change-password.dto.js +32 -0
- package/dist/dto/set-must-change-password.dto.js.map +1 -1
- package/dist/dto/set-preferred-method.dto.d.ts +48 -0
- package/dist/dto/set-preferred-method.dto.d.ts.map +1 -1
- package/dist/dto/set-preferred-method.dto.js +48 -0
- package/dist/dto/set-preferred-method.dto.js.map +1 -1
- package/dist/dto/setup-mfa.dto.d.ts +62 -0
- package/dist/dto/setup-mfa.dto.d.ts.map +1 -1
- package/dist/dto/setup-mfa.dto.js +62 -0
- package/dist/dto/setup-mfa.dto.js.map +1 -1
- package/dist/dto/signup.dto.d.ts +92 -0
- package/dist/dto/signup.dto.d.ts.map +1 -1
- package/dist/dto/signup.dto.js +93 -0
- package/dist/dto/signup.dto.js.map +1 -1
- package/dist/dto/social-auth.dto.d.ts +234 -0
- package/dist/dto/social-auth.dto.d.ts.map +1 -1
- package/dist/dto/social-auth.dto.js +234 -0
- package/dist/dto/social-auth.dto.js.map +1 -1
- package/dist/dto/trust-device-response.dto.d.ts +26 -0
- package/dist/dto/trust-device-response.dto.d.ts.map +1 -1
- package/dist/dto/trust-device-response.dto.js +26 -0
- package/dist/dto/trust-device-response.dto.js.map +1 -1
- package/dist/dto/trust-device.dto.d.ts +9 -0
- package/dist/dto/trust-device.dto.d.ts.map +1 -1
- package/dist/dto/trust-device.dto.js +9 -0
- package/dist/dto/trust-device.dto.js.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.d.ts +36 -0
- package/dist/dto/update-user-attributes-request.dto.d.ts.map +1 -1
- package/dist/dto/update-user-attributes-request.dto.js +36 -0
- package/dist/dto/update-user-attributes-request.dto.js.map +1 -1
- package/dist/dto/user-response.dto.d.ts +81 -0
- package/dist/dto/user-response.dto.d.ts.map +1 -1
- package/dist/dto/user-response.dto.js +84 -2
- package/dist/dto/user-response.dto.js.map +1 -1
- package/dist/dto/user-update.dto.d.ts +132 -0
- package/dist/dto/user-update.dto.d.ts.map +1 -1
- package/dist/dto/user-update.dto.js +133 -0
- package/dist/dto/user-update.dto.js.map +1 -1
- package/dist/dto/verify-email.dto.d.ts +171 -0
- package/dist/dto/verify-email.dto.d.ts.map +1 -1
- package/dist/dto/verify-email.dto.js +173 -1
- package/dist/dto/verify-email.dto.js.map +1 -1
- package/dist/dto/verify-mfa-code.dto.d.ts +65 -0
- package/dist/dto/verify-mfa-code.dto.d.ts.map +1 -1
- package/dist/dto/verify-mfa-code.dto.js +65 -0
- package/dist/dto/verify-mfa-code.dto.js.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.d.ts +49 -0
- package/dist/dto/verify-phone-by-sub.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone-by-sub.dto.js +49 -0
- package/dist/dto/verify-phone-by-sub.dto.js.map +1 -1
- package/dist/dto/verify-phone.dto.d.ts +139 -0
- package/dist/dto/verify-phone.dto.d.ts.map +1 -1
- package/dist/dto/verify-phone.dto.js +142 -1
- package/dist/dto/verify-phone.dto.js.map +1 -1
- package/dist/dto.d.ts +10 -0
- package/dist/dto.d.ts.map +1 -1
- package/dist/dto.js +10 -0
- package/dist/dto.js.map +1 -1
- package/dist/entities/auth-audit.entity.d.ts +159 -0
- package/dist/entities/auth-audit.entity.d.ts.map +1 -1
- package/dist/entities/auth-audit.entity.js +166 -0
- package/dist/entities/auth-audit.entity.js.map +1 -1
- package/dist/entities/challenge-session.entity.d.ts +87 -0
- package/dist/entities/challenge-session.entity.d.ts.map +1 -1
- package/dist/entities/challenge-session.entity.js +87 -0
- package/dist/entities/challenge-session.entity.js.map +1 -1
- package/dist/entities/index.d.ts +18 -0
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +18 -0
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/login-attempt.entity.d.ts +43 -0
- package/dist/entities/login-attempt.entity.d.ts.map +1 -1
- package/dist/entities/login-attempt.entity.js +43 -0
- package/dist/entities/login-attempt.entity.js.map +1 -1
- package/dist/entities/mfa-device.entity.d.ts +112 -0
- package/dist/entities/mfa-device.entity.d.ts.map +1 -1
- package/dist/entities/mfa-device.entity.js +112 -0
- package/dist/entities/mfa-device.entity.js.map +1 -1
- package/dist/entities/rate-limit.entity.d.ts +31 -0
- package/dist/entities/rate-limit.entity.d.ts.map +1 -1
- package/dist/entities/rate-limit.entity.js +31 -0
- package/dist/entities/rate-limit.entity.js.map +1 -1
- package/dist/entities/session.entity.d.ts +121 -0
- package/dist/entities/session.entity.d.ts.map +1 -1
- package/dist/entities/session.entity.js +121 -0
- package/dist/entities/session.entity.js.map +1 -1
- package/dist/entities/social-account.entity.d.ts +75 -0
- package/dist/entities/social-account.entity.d.ts.map +1 -1
- package/dist/entities/social-account.entity.js +75 -0
- package/dist/entities/social-account.entity.js.map +1 -1
- package/dist/entities/storage-lock.entity.d.ts +28 -0
- package/dist/entities/storage-lock.entity.d.ts.map +1 -1
- package/dist/entities/storage-lock.entity.js +28 -0
- package/dist/entities/storage-lock.entity.js.map +1 -1
- package/dist/entities/trusted-device.entity.d.ts +83 -0
- package/dist/entities/trusted-device.entity.d.ts.map +1 -1
- package/dist/entities/trusted-device.entity.js +83 -0
- package/dist/entities/trusted-device.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts +166 -0
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +166 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/verification-token.entity.d.ts +102 -0
- package/dist/entities/verification-token.entity.d.ts.map +1 -1
- package/dist/entities/verification-token.entity.js +102 -0
- package/dist/entities/verification-token.entity.js.map +1 -1
- package/dist/entities.d.ts +8 -0
- package/dist/entities.d.ts.map +1 -1
- package/dist/entities.js +8 -0
- package/dist/entities.js.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.d.ts +211 -0
- package/dist/enums/auth-audit-event-type.enum.d.ts.map +1 -1
- package/dist/enums/auth-audit-event-type.enum.js +244 -0
- package/dist/enums/auth-audit-event-type.enum.js.map +1 -1
- package/dist/enums/error-codes.enum.d.ts +296 -0
- package/dist/enums/error-codes.enum.d.ts.map +1 -1
- package/dist/enums/error-codes.enum.js +332 -0
- package/dist/enums/error-codes.enum.js.map +1 -1
- package/dist/enums/mfa-method.enum.d.ts +74 -0
- package/dist/enums/mfa-method.enum.d.ts.map +1 -1
- package/dist/enums/mfa-method.enum.js +64 -0
- package/dist/enums/mfa-method.enum.js.map +1 -1
- package/dist/enums/risk-factor.enum.d.ts +91 -0
- package/dist/enums/risk-factor.enum.d.ts.map +1 -1
- package/dist/enums/risk-factor.enum.js +97 -0
- package/dist/enums/risk-factor.enum.js.map +1 -1
- package/dist/exceptions/nauth.exception.d.ts +149 -0
- package/dist/exceptions/nauth.exception.d.ts.map +1 -1
- package/dist/exceptions/nauth.exception.js +159 -0
- package/dist/exceptions/nauth.exception.js.map +1 -1
- package/dist/handlers/auth.handler.d.ts +32 -0
- package/dist/handlers/auth.handler.d.ts.map +1 -1
- package/dist/handlers/auth.handler.js +47 -1
- package/dist/handlers/auth.handler.js.map +1 -1
- package/dist/handlers/client-info.handler.d.ts +25 -0
- package/dist/handlers/client-info.handler.d.ts.map +1 -1
- package/dist/handlers/client-info.handler.js +36 -2
- package/dist/handlers/client-info.handler.js.map +1 -1
- package/dist/handlers/csrf.handler.d.ts +32 -0
- package/dist/handlers/csrf.handler.d.ts.map +1 -1
- package/dist/handlers/csrf.handler.js +49 -1
- package/dist/handlers/csrf.handler.js.map +1 -1
- package/dist/handlers/token-delivery.handler.d.ts +16 -0
- package/dist/handlers/token-delivery.handler.d.ts.map +1 -1
- package/dist/handlers/token-delivery.handler.js +22 -1
- package/dist/handlers/token-delivery.handler.js.map +1 -1
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/client-info.interface.d.ts +58 -0
- package/dist/interfaces/client-info.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.d.ts +1780 -0
- package/dist/interfaces/config.interface.d.ts.map +1 -1
- package/dist/interfaces/config.interface.js +16 -0
- package/dist/interfaces/config.interface.js.map +1 -1
- package/dist/interfaces/entities.interface.d.ts +48 -0
- package/dist/interfaces/entities.interface.d.ts.map +1 -1
- package/dist/interfaces/entities.interface.js +8 -0
- package/dist/interfaces/entities.interface.js.map +1 -1
- package/dist/interfaces/index.js +5 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/logger.interface.d.ts +213 -0
- package/dist/interfaces/logger.interface.d.ts.map +1 -1
- package/dist/interfaces/logger.interface.js +35 -0
- package/dist/interfaces/logger.interface.js.map +1 -1
- package/dist/interfaces/mfa-provider.interface.d.ts +134 -0
- package/dist/interfaces/mfa-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/oauth.interface.d.ts +110 -0
- package/dist/interfaces/oauth.interface.d.ts.map +1 -1
- package/dist/interfaces/provider.interface.d.ts +83 -0
- package/dist/interfaces/provider.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.d.ts +246 -0
- package/dist/interfaces/sms-template.interface.d.ts.map +1 -1
- package/dist/interfaces/sms-template.interface.js +26 -0
- package/dist/interfaces/sms-template.interface.js.map +1 -1
- package/dist/interfaces/social-auth-provider.interface.d.ts +115 -0
- package/dist/interfaces/social-auth-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/storage-adapter.interface.d.ts +37 -0
- package/dist/interfaces/storage-adapter.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.d.ts +351 -0
- package/dist/interfaces/template.interface.d.ts.map +1 -1
- package/dist/interfaces/template.interface.js +13 -0
- package/dist/interfaces/template.interface.js.map +1 -1
- package/dist/interfaces/token-verifier.interface.d.ts +101 -0
- package/dist/interfaces/token-verifier.interface.d.ts.map +1 -1
- package/dist/interfaces.d.ts +8 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js +8 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/internal.d.ts +120 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +138 -0
- package/dist/internal.js.map +1 -1
- package/dist/platform/interfaces.d.ts +187 -0
- package/dist/platform/interfaces.d.ts.map +1 -1
- package/dist/platform/interfaces.js +11 -0
- package/dist/platform/interfaces.js.map +1 -1
- package/dist/schemas/auth-config.schema.d.ts +62 -0
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +189 -9
- package/dist/schemas/auth-config.schema.js.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.d.ts +144 -0
- package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.js +151 -5
- package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
- package/dist/services/auth-audit.service.d.ts +195 -0
- package/dist/services/auth-audit.service.d.ts.map +1 -1
- package/dist/services/auth-audit.service.js +228 -1
- package/dist/services/auth-audit.service.js.map +1 -1
- package/dist/services/auth-challenge-helper.service.d.ts +144 -1
- package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
- package/dist/services/auth-challenge-helper.service.js +295 -16
- package/dist/services/auth-challenge-helper.service.js.map +1 -1
- package/dist/services/auth-flow-context-builder.service.d.ts +120 -1
- package/dist/services/auth-flow-context-builder.service.d.ts.map +1 -1
- package/dist/services/auth-flow-context-builder.service.js +184 -5
- package/dist/services/auth-flow-context-builder.service.js.map +1 -1
- package/dist/services/auth-flow-rules.d.ts +136 -0
- package/dist/services/auth-flow-rules.d.ts.map +1 -1
- package/dist/services/auth-flow-rules.js +137 -0
- package/dist/services/auth-flow-rules.js.map +1 -1
- package/dist/services/auth-flow-state-definitions.d.ts +40 -0
- package/dist/services/auth-flow-state-definitions.d.ts.map +1 -1
- package/dist/services/auth-flow-state-definitions.js +98 -0
- package/dist/services/auth-flow-state-definitions.js.map +1 -1
- package/dist/services/auth-flow-state-machine.service.d.ts +91 -0
- package/dist/services/auth-flow-state-machine.service.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.service.js +102 -0
- package/dist/services/auth-flow-state-machine.service.js.map +1 -1
- package/dist/services/auth-flow-state-machine.types.d.ts +221 -0
- package/dist/services/auth-flow-state-machine.types.d.ts.map +1 -1
- package/dist/services/auth-flow-state-machine.types.js +47 -0
- package/dist/services/auth-flow-state-machine.types.js.map +1 -1
- package/dist/services/auth.service.d.ts +397 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +943 -27
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/challenge.service.d.ts +255 -1
- package/dist/services/challenge.service.d.ts.map +1 -1
- package/dist/services/challenge.service.js +327 -3
- package/dist/services/challenge.service.js.map +1 -1
- package/dist/services/client-info.service.d.ts +143 -0
- package/dist/services/client-info.service.d.ts.map +1 -1
- package/dist/services/client-info.service.js +161 -0
- package/dist/services/client-info.service.js.map +1 -1
- package/dist/services/csrf.service.d.ts +15 -0
- package/dist/services/csrf.service.d.ts.map +1 -1
- package/dist/services/csrf.service.js +16 -0
- package/dist/services/csrf.service.js.map +1 -1
- package/dist/services/email-verification.service.d.ts +52 -0
- package/dist/services/email-verification.service.d.ts.map +1 -1
- package/dist/services/email-verification.service.js +152 -12
- package/dist/services/email-verification.service.js.map +1 -1
- package/dist/services/geo-location.service.d.ts +105 -0
- package/dist/services/geo-location.service.d.ts.map +1 -1
- package/dist/services/geo-location.service.js +188 -2
- package/dist/services/geo-location.service.js.map +1 -1
- package/dist/services/jwt.service.d.ts +257 -0
- package/dist/services/jwt.service.d.ts.map +1 -1
- package/dist/services/jwt.service.js +284 -1
- package/dist/services/jwt.service.js.map +1 -1
- package/dist/services/mfa-base.service.d.ts +179 -1
- package/dist/services/mfa-base.service.d.ts.map +1 -1
- package/dist/services/mfa-base.service.js +256 -2
- package/dist/services/mfa-base.service.js.map +1 -1
- package/dist/services/mfa.service.d.ts +304 -0
- package/dist/services/mfa.service.d.ts.map +1 -1
- package/dist/services/mfa.service.js +380 -0
- package/dist/services/mfa.service.js.map +1 -1
- package/dist/services/password-reset.service.d.ts +46 -0
- package/dist/services/password-reset.service.d.ts.map +1 -1
- package/dist/services/password-reset.service.js +79 -0
- package/dist/services/password-reset.service.js.map +1 -1
- package/dist/services/password.service.d.ts +139 -0
- package/dist/services/password.service.d.ts.map +1 -1
- package/dist/services/password.service.js +167 -9
- package/dist/services/password.service.js.map +1 -1
- package/dist/services/phone-verification.service.d.ts +75 -0
- package/dist/services/phone-verification.service.d.ts.map +1 -1
- package/dist/services/phone-verification.service.js +188 -6
- package/dist/services/phone-verification.service.js.map +1 -1
- package/dist/services/risk-detection.service.d.ts +198 -0
- package/dist/services/risk-detection.service.d.ts.map +1 -1
- package/dist/services/risk-detection.service.js +358 -11
- package/dist/services/risk-detection.service.js.map +1 -1
- package/dist/services/risk-scoring.service.d.ts +84 -0
- package/dist/services/risk-scoring.service.d.ts.map +1 -1
- package/dist/services/risk-scoring.service.js +87 -0
- package/dist/services/risk-scoring.service.js.map +1 -1
- package/dist/services/session.service.d.ts +204 -0
- package/dist/services/session.service.d.ts.map +1 -1
- package/dist/services/session.service.js +289 -4
- package/dist/services/session.service.js.map +1 -1
- package/dist/services/social-auth-base.service.d.ts +123 -1
- package/dist/services/social-auth-base.service.d.ts.map +1 -1
- package/dist/services/social-auth-base.service.js +155 -2
- package/dist/services/social-auth-base.service.js.map +1 -1
- package/dist/services/social-auth.service.d.ts +191 -0
- package/dist/services/social-auth.service.d.ts.map +1 -1
- package/dist/services/social-auth.service.js +215 -2
- package/dist/services/social-auth.service.js.map +1 -1
- package/dist/services/social-provider-registry.service.d.ts +86 -0
- package/dist/services/social-provider-registry.service.d.ts.map +1 -1
- package/dist/services/social-provider-registry.service.js +86 -0
- package/dist/services/social-provider-registry.service.js.map +1 -1
- package/dist/services/trusted-device.service.d.ts +105 -0
- package/dist/services/trusted-device.service.d.ts.map +1 -1
- package/dist/services/trusted-device.service.js +133 -4
- package/dist/services/trusted-device.service.js.map +1 -1
- package/dist/storage/account-lockout-storage.service.d.ts +35 -0
- package/dist/storage/account-lockout-storage.service.d.ts.map +1 -1
- package/dist/storage/account-lockout-storage.service.js +35 -0
- package/dist/storage/account-lockout-storage.service.js.map +1 -1
- package/dist/storage/memory-storage.adapter.d.ts +148 -0
- package/dist/storage/memory-storage.adapter.d.ts.map +1 -1
- package/dist/storage/memory-storage.adapter.js +201 -6
- package/dist/storage/memory-storage.adapter.js.map +1 -1
- package/dist/storage/rate-limit-storage.service.d.ts +3 -0
- package/dist/storage/rate-limit-storage.service.d.ts.map +1 -1
- package/dist/storage/rate-limit-storage.service.js +4 -0
- package/dist/storage/rate-limit-storage.service.js.map +1 -1
- package/dist/storage.d.ts +8 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +8 -0
- package/dist/storage.js.map +1 -1
- package/dist/templates/html-template.engine.d.ts +110 -0
- package/dist/templates/html-template.engine.d.ts.map +1 -1
- package/dist/templates/html-template.engine.js +147 -0
- package/dist/templates/html-template.engine.js.map +1 -1
- package/dist/templates/index.d.ts +5 -0
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +5 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/sms-template.engine.d.ts +151 -0
- package/dist/templates/sms-template.engine.d.ts.map +1 -1
- package/dist/templates/sms-template.engine.js +171 -0
- package/dist/templates/sms-template.engine.js.map +1 -1
- package/dist/templates.d.ts +8 -0
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +8 -0
- package/dist/templates.js.map +1 -1
- package/dist/utils/common-passwords.d.ts +42 -0
- package/dist/utils/common-passwords.d.ts.map +1 -1
- package/dist/utils/common-passwords.js +88 -0
- package/dist/utils/common-passwords.js.map +1 -1
- package/dist/utils/context-storage.d.ts +129 -0
- package/dist/utils/context-storage.d.ts.map +1 -1
- package/dist/utils/context-storage.js +129 -0
- package/dist/utils/context-storage.js.map +1 -1
- package/dist/utils/cookie-names.util.d.ts +35 -0
- package/dist/utils/cookie-names.util.d.ts.map +1 -1
- package/dist/utils/cookie-names.util.js +37 -0
- package/dist/utils/cookie-names.util.js.map +1 -1
- package/dist/utils/cookies.util.d.ts +19 -0
- package/dist/utils/cookies.util.d.ts.map +1 -1
- package/dist/utils/cookies.util.js +30 -3
- package/dist/utils/cookies.util.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ip-extractor.d.ts +88 -0
- package/dist/utils/ip-extractor.d.ts.map +1 -1
- package/dist/utils/ip-extractor.js +109 -16
- package/dist/utils/ip-extractor.js.map +1 -1
- package/dist/utils/nauth-logger.d.ts +70 -0
- package/dist/utils/nauth-logger.d.ts.map +1 -1
- package/dist/utils/nauth-logger.js +82 -4
- package/dist/utils/nauth-logger.js.map +1 -1
- package/dist/utils/pii-redactor.d.ts +70 -0
- package/dist/utils/pii-redactor.d.ts.map +1 -1
- package/dist/utils/pii-redactor.js +102 -0
- package/dist/utils/pii-redactor.js.map +1 -1
- package/dist/utils/setup/get-repositories.d.ts +16 -0
- package/dist/utils/setup/get-repositories.d.ts.map +1 -1
- package/dist/utils/setup/get-repositories.js +21 -0
- package/dist/utils/setup/get-repositories.js.map +1 -1
- package/dist/utils/setup/init-services.d.ts +40 -1
- package/dist/utils/setup/init-services.d.ts.map +1 -1
- package/dist/utils/setup/init-services.js +98 -0
- package/dist/utils/setup/init-services.js.map +1 -1
- package/dist/utils/setup/init-social.d.ts +27 -0
- package/dist/utils/setup/init-social.d.ts.map +1 -1
- package/dist/utils/setup/init-social.js +49 -0
- package/dist/utils/setup/init-social.js.map +1 -1
- package/dist/utils/setup/init-storage.d.ts +22 -0
- package/dist/utils/setup/init-storage.d.ts.map +1 -1
- package/dist/utils/setup/init-storage.js +36 -0
- package/dist/utils/setup/init-storage.js.map +1 -1
- package/dist/utils/setup/register-mfa.d.ts +22 -0
- package/dist/utils/setup/register-mfa.d.ts.map +1 -1
- package/dist/utils/setup/register-mfa.js +41 -0
- package/dist/utils/setup/register-mfa.js.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.d.ts +7 -0
- package/dist/utils/setup/run-nauth-migrations.d.ts.map +1 -1
- package/dist/utils/setup/run-nauth-migrations.js +8 -0
- package/dist/utils/setup/run-nauth-migrations.js.map +1 -1
- package/dist/utils/token-delivery-policy.d.ts +17 -0
- package/dist/utils/token-delivery-policy.d.ts.map +1 -1
- package/dist/utils/token-delivery-policy.js +17 -0
- package/dist/utils/token-delivery-policy.js.map +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -0
- package/dist/utils.js.map +1 -1
- package/dist/validators/template.validator.d.ts +80 -0
- package/dist/validators/template.validator.d.ts.map +1 -1
- package/dist/validators/template.validator.js +94 -0
- package/dist/validators/template.validator.js.map +1 -1
- package/package.json +7 -2
|
@@ -1,13 +1,104 @@
|
|
|
1
1
|
import { AuthFlowState, AuthFlowContext, StateDefinition, ResponseMetadata } from './auth-flow-state-machine.types';
|
|
2
2
|
import { AuthFlowContextBuilder } from './auth-flow-context-builder.service';
|
|
3
3
|
import { NAuthLogger } from '../utils/nauth-logger';
|
|
4
|
+
/**
|
|
5
|
+
* Authentication Flow State Machine Service
|
|
6
|
+
*
|
|
7
|
+
* Core engine for evaluating authentication flow states using declarative rules.
|
|
8
|
+
* Replaces imperative if/else logic with a rule-based state machine.
|
|
9
|
+
*
|
|
10
|
+
* **How it works:**
|
|
11
|
+
* 1. Build context with pre-computed values
|
|
12
|
+
* 2. Evaluate states in priority order (1-9)
|
|
13
|
+
* 3. Select first state whose condition rule evaluates to true
|
|
14
|
+
* 4. Execute onEnter hook if defined
|
|
15
|
+
* 5. Return state with metadata
|
|
16
|
+
*
|
|
17
|
+
* **Benefits:**
|
|
18
|
+
* - Declarative and maintainable
|
|
19
|
+
* - Easy to test (pure functions)
|
|
20
|
+
* - Extensible (add new states/rules easily)
|
|
21
|
+
* - Clear priority ordering
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const state = await stateMachine.evaluateState(context);
|
|
26
|
+
* const definition = stateMachine.getStateDefinition(state);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
4
29
|
export declare class AuthFlowStateMachineService {
|
|
5
30
|
private readonly contextBuilder;
|
|
6
31
|
private readonly logger?;
|
|
7
32
|
constructor(contextBuilder: AuthFlowContextBuilder, logger?: NAuthLogger | undefined);
|
|
33
|
+
/**
|
|
34
|
+
* Evaluate authentication flow state
|
|
35
|
+
*
|
|
36
|
+
* Evaluates states in priority order and returns the first matching state.
|
|
37
|
+
* Executes onEnter hook if defined for the selected state.
|
|
38
|
+
*
|
|
39
|
+
* @param context - Authentication flow context
|
|
40
|
+
* @returns Evaluated state
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const context = await contextBuilder.build({ user, config, authMethod: 'password' });
|
|
45
|
+
* const state = await stateMachine.evaluateState(context);
|
|
46
|
+
* // Returns: AuthFlowState.PENDING_EMAIL_VERIFICATION
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
8
49
|
evaluateState(context: AuthFlowContext): Promise<AuthFlowState>;
|
|
50
|
+
/**
|
|
51
|
+
* Get state definition by state
|
|
52
|
+
*
|
|
53
|
+
* @param state - State to get definition for
|
|
54
|
+
* @returns State definition or undefined if not found
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const def = stateMachine.getStateDefinition(AuthFlowState.PENDING_EMAIL_VERIFICATION);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
9
61
|
getStateDefinition(state: AuthFlowState): StateDefinition | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Build metadata for state response
|
|
64
|
+
*
|
|
65
|
+
* Calls buildMetadata function if defined for the state.
|
|
66
|
+
*
|
|
67
|
+
* @param state - State to build metadata for
|
|
68
|
+
* @param context - Authentication flow context
|
|
69
|
+
* @returns Metadata object or undefined
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const metadata = await stateMachine.buildMetadata(state, context);
|
|
74
|
+
* // Returns: { gracePeriodEndsAt: Date, riskScore: 45, riskLevel: 'medium' }
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
10
77
|
buildMetadata(state: AuthFlowState, context: AuthFlowContext): ResponseMetadata | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Transition after challenge completion
|
|
80
|
+
*
|
|
81
|
+
* Re-evaluates state after a challenge is completed.
|
|
82
|
+
* This is used in the challenge completion flow to determine the next state.
|
|
83
|
+
*
|
|
84
|
+
* @param params - Transition parameters
|
|
85
|
+
* @param params.completedChallenge - Challenge that was just completed
|
|
86
|
+
* @param params.context - Current authentication flow context
|
|
87
|
+
* @param params.updateFn - Function to update user data (e.g., mark email as verified)
|
|
88
|
+
* @returns New state after transition
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```typescript
|
|
92
|
+
* const newState = await stateMachine.transitionAfterChallenge({
|
|
93
|
+
* completedChallenge: AuthChallenge.VERIFY_EMAIL,
|
|
94
|
+
* context,
|
|
95
|
+
* updateFn: async (user) => {
|
|
96
|
+
* user.isEmailVerified = true;
|
|
97
|
+
* await userRepository.save(user);
|
|
98
|
+
* }
|
|
99
|
+
* });
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
11
102
|
transitionAfterChallenge(params: {
|
|
12
103
|
completedChallenge: string;
|
|
13
104
|
context: AuthFlowContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-flow-state-machine.service.d.ts","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-flow-state-machine.service.d.ts","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBADP,cAAc,EAAE,sBAAsB,EACtC,MAAM,CAAC,EAAE,WAAW,YAAA;IAGvC;;;;;;;;;;;;;;;OAeG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC;IA8CrE;;;;;;;;;;OAUG;IACH,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,GAAG,SAAS;IAIrE;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS;IAmB3F;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,wBAAwB,CAAC,MAAM,EAAE;QACrC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,eAAe,CAAC;QACzB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,GAAG,OAAO,CAAC,aAAa,CAAC;CA+B3B"}
|
|
@@ -3,6 +3,31 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.AuthFlowStateMachineService = void 0;
|
|
4
4
|
const auth_flow_state_machine_types_1 = require("./auth-flow-state-machine.types");
|
|
5
5
|
const auth_flow_state_definitions_1 = require("./auth-flow-state-definitions");
|
|
6
|
+
/**
|
|
7
|
+
* Authentication Flow State Machine Service
|
|
8
|
+
*
|
|
9
|
+
* Core engine for evaluating authentication flow states using declarative rules.
|
|
10
|
+
* Replaces imperative if/else logic with a rule-based state machine.
|
|
11
|
+
*
|
|
12
|
+
* **How it works:**
|
|
13
|
+
* 1. Build context with pre-computed values
|
|
14
|
+
* 2. Evaluate states in priority order (1-9)
|
|
15
|
+
* 3. Select first state whose condition rule evaluates to true
|
|
16
|
+
* 4. Execute onEnter hook if defined
|
|
17
|
+
* 5. Return state with metadata
|
|
18
|
+
*
|
|
19
|
+
* **Benefits:**
|
|
20
|
+
* - Declarative and maintainable
|
|
21
|
+
* - Easy to test (pure functions)
|
|
22
|
+
* - Extensible (add new states/rules easily)
|
|
23
|
+
* - Clear priority ordering
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const state = await stateMachine.evaluateState(context);
|
|
28
|
+
* const definition = stateMachine.getStateDefinition(state);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
6
31
|
class AuthFlowStateMachineService {
|
|
7
32
|
contextBuilder;
|
|
8
33
|
logger;
|
|
@@ -10,13 +35,33 @@ class AuthFlowStateMachineService {
|
|
|
10
35
|
this.contextBuilder = contextBuilder;
|
|
11
36
|
this.logger = logger;
|
|
12
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Evaluate authentication flow state
|
|
40
|
+
*
|
|
41
|
+
* Evaluates states in priority order and returns the first matching state.
|
|
42
|
+
* Executes onEnter hook if defined for the selected state.
|
|
43
|
+
*
|
|
44
|
+
* @param context - Authentication flow context
|
|
45
|
+
* @returns Evaluated state
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const context = await contextBuilder.build({ user, config, authMethod: 'password' });
|
|
50
|
+
* const state = await stateMachine.evaluateState(context);
|
|
51
|
+
* // Returns: AuthFlowState.PENDING_EMAIL_VERIFICATION
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
13
54
|
async evaluateState(context) {
|
|
55
|
+
// Get state definitions sorted by priority
|
|
14
56
|
const stateDefinitions = (0, auth_flow_state_definitions_1.getStateDefinitionsByPriority)();
|
|
15
57
|
this.logger?.debug?.(`[StateMachine] Evaluating states for user ${context.user.sub} (priority 1-9, first match wins)`);
|
|
58
|
+
// Evaluate states in priority order
|
|
16
59
|
for (const definition of stateDefinitions) {
|
|
60
|
+
// Evaluate condition rule
|
|
17
61
|
const ruleResult = definition.condition(context);
|
|
18
62
|
this.logger?.debug?.(`[StateMachine] Priority ${definition.priority}: ${definition.state} → ${ruleResult ? 'MATCH' : 'skip'}`);
|
|
19
63
|
if (ruleResult) {
|
|
64
|
+
// State matches - execute onEnter hook if defined
|
|
20
65
|
if (definition.onEnter) {
|
|
21
66
|
this.logger?.debug?.(`[StateMachine] Executing onEnter hook for ${definition.state}`);
|
|
22
67
|
try {
|
|
@@ -29,20 +74,49 @@ class AuthFlowStateMachineService {
|
|
|
29
74
|
state: definition.state,
|
|
30
75
|
userId: context.user.id,
|
|
31
76
|
});
|
|
77
|
+
// Continue with state selection even if hook fails
|
|
32
78
|
}
|
|
33
79
|
}
|
|
34
80
|
this.logger?.debug?.(`[StateMachine] Selected state: ${definition.state} for user ${context.user.sub}`);
|
|
35
81
|
return definition.state;
|
|
36
82
|
}
|
|
37
83
|
}
|
|
84
|
+
// Fallback: Should never reach here (AUTHENTICATED always matches)
|
|
85
|
+
// But return AUTHENTICATED as safe default
|
|
38
86
|
this.logger?.warn?.(`No state matched for user ${context.user.sub} - falling back to AUTHENTICATED`, {
|
|
39
87
|
userId: context.user.id,
|
|
40
88
|
});
|
|
41
89
|
return auth_flow_state_machine_types_1.AuthFlowState.AUTHENTICATED;
|
|
42
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Get state definition by state
|
|
93
|
+
*
|
|
94
|
+
* @param state - State to get definition for
|
|
95
|
+
* @returns State definition or undefined if not found
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* const def = stateMachine.getStateDefinition(AuthFlowState.PENDING_EMAIL_VERIFICATION);
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
43
102
|
getStateDefinition(state) {
|
|
44
103
|
return (0, auth_flow_state_definitions_1.getStateDefinition)(state);
|
|
45
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Build metadata for state response
|
|
107
|
+
*
|
|
108
|
+
* Calls buildMetadata function if defined for the state.
|
|
109
|
+
*
|
|
110
|
+
* @param state - State to build metadata for
|
|
111
|
+
* @param context - Authentication flow context
|
|
112
|
+
* @returns Metadata object or undefined
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const metadata = await stateMachine.buildMetadata(state, context);
|
|
117
|
+
* // Returns: { gracePeriodEndsAt: Date, riskScore: 45, riskLevel: 'medium' }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
46
120
|
buildMetadata(state, context) {
|
|
47
121
|
const definition = this.getStateDefinition(state);
|
|
48
122
|
if (!definition || !definition.buildMetadata) {
|
|
@@ -61,8 +135,33 @@ class AuthFlowStateMachineService {
|
|
|
61
135
|
return undefined;
|
|
62
136
|
}
|
|
63
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Transition after challenge completion
|
|
140
|
+
*
|
|
141
|
+
* Re-evaluates state after a challenge is completed.
|
|
142
|
+
* This is used in the challenge completion flow to determine the next state.
|
|
143
|
+
*
|
|
144
|
+
* @param params - Transition parameters
|
|
145
|
+
* @param params.completedChallenge - Challenge that was just completed
|
|
146
|
+
* @param params.context - Current authentication flow context
|
|
147
|
+
* @param params.updateFn - Function to update user data (e.g., mark email as verified)
|
|
148
|
+
* @returns New state after transition
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const newState = await stateMachine.transitionAfterChallenge({
|
|
153
|
+
* completedChallenge: AuthChallenge.VERIFY_EMAIL,
|
|
154
|
+
* context,
|
|
155
|
+
* updateFn: async (user) => {
|
|
156
|
+
* user.isEmailVerified = true;
|
|
157
|
+
* await userRepository.save(user);
|
|
158
|
+
* }
|
|
159
|
+
* });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
64
162
|
async transitionAfterChallenge(params) {
|
|
65
163
|
const { completedChallenge, context, updateFn } = params;
|
|
164
|
+
// Update user data if update function provided
|
|
66
165
|
if (updateFn) {
|
|
67
166
|
try {
|
|
68
167
|
await updateFn(context.user);
|
|
@@ -74,8 +173,10 @@ class AuthFlowStateMachineService {
|
|
|
74
173
|
challenge: completedChallenge,
|
|
75
174
|
userId: context.user.id,
|
|
76
175
|
});
|
|
176
|
+
// Continue with re-evaluation even if update fails
|
|
77
177
|
}
|
|
78
178
|
}
|
|
179
|
+
// Re-build context with updated user data
|
|
79
180
|
const newContext = await this.contextBuilder.build({
|
|
80
181
|
user: context.user,
|
|
81
182
|
config: context.config,
|
|
@@ -84,6 +185,7 @@ class AuthFlowStateMachineService {
|
|
|
84
185
|
deviceToken: context.deviceToken,
|
|
85
186
|
skipMFAVerification: context.skipMFAVerification,
|
|
86
187
|
});
|
|
188
|
+
// Re-evaluate state
|
|
87
189
|
return this.evaluateState(newContext);
|
|
88
190
|
}
|
|
89
191
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-flow-state-machine.service.js","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.service.ts"],"names":[],"mappings":";;;AAAA,mFAAoH;AAGpH,+EAAkG;
|
|
1
|
+
{"version":3,"file":"auth-flow-state-machine.service.js","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +1,276 @@
|
|
|
1
1
|
import { IUser } from '../interfaces/entities.interface';
|
|
2
2
|
import { NAuthConfig } from '../interfaces/config.interface';
|
|
3
3
|
import { AuthChallenge } from '../dto/auth-challenge.dto';
|
|
4
|
+
/**
|
|
5
|
+
* Authentication flow states
|
|
6
|
+
*
|
|
7
|
+
* Represents the current state of the authentication flow.
|
|
8
|
+
* States are evaluated in priority order (1-9).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const state = AuthFlowState.PENDING_EMAIL_VERIFICATION;
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
4
15
|
export declare enum AuthFlowState {
|
|
16
|
+
/**
|
|
17
|
+
* User must change password before continuing
|
|
18
|
+
* Priority: 1 (highest)
|
|
19
|
+
*/
|
|
5
20
|
PENDING_PASSWORD_CHANGE = "PENDING_PASSWORD_CHANGE",
|
|
21
|
+
/**
|
|
22
|
+
* User must verify email address
|
|
23
|
+
* Priority: 2
|
|
24
|
+
*/
|
|
6
25
|
PENDING_EMAIL_VERIFICATION = "PENDING_EMAIL_VERIFICATION",
|
|
26
|
+
/**
|
|
27
|
+
* User must provide phone number
|
|
28
|
+
* Priority: 3
|
|
29
|
+
*/
|
|
7
30
|
PENDING_PHONE_COLLECTION = "PENDING_PHONE_COLLECTION",
|
|
31
|
+
/**
|
|
32
|
+
* User must verify phone number
|
|
33
|
+
* Priority: 4
|
|
34
|
+
*/
|
|
8
35
|
PENDING_PHONE_VERIFICATION = "PENDING_PHONE_VERIFICATION",
|
|
36
|
+
/**
|
|
37
|
+
* User must set up MFA
|
|
38
|
+
* Priority: 5
|
|
39
|
+
*/
|
|
9
40
|
PENDING_MFA_SETUP = "PENDING_MFA_SETUP",
|
|
41
|
+
/**
|
|
42
|
+
* User must verify MFA
|
|
43
|
+
* Priority: 6
|
|
44
|
+
*/
|
|
10
45
|
PENDING_MFA_VERIFICATION = "PENDING_MFA_VERIFICATION",
|
|
46
|
+
/**
|
|
47
|
+
* Grace period is active (MFA setup optional)
|
|
48
|
+
* Priority: 7
|
|
49
|
+
*/
|
|
11
50
|
GRACE_PERIOD_ACTIVE = "GRACE_PERIOD_ACTIVE",
|
|
51
|
+
/**
|
|
52
|
+
* User is blocked from signing in
|
|
53
|
+
* Priority: 8
|
|
54
|
+
*/
|
|
12
55
|
BLOCKED = "BLOCKED",
|
|
56
|
+
/**
|
|
57
|
+
* Authentication complete - user is fully authenticated
|
|
58
|
+
* Priority: 9 (lowest - default state)
|
|
59
|
+
*/
|
|
13
60
|
AUTHENTICATED = "AUTHENTICATED"
|
|
14
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Authentication flow context
|
|
64
|
+
*
|
|
65
|
+
* Contains all data needed to evaluate authentication flow state.
|
|
66
|
+
* Pre-computed values are stored in the `computed` property to optimize rule evaluation.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const context: AuthFlowContext = {
|
|
71
|
+
* user,
|
|
72
|
+
* config,
|
|
73
|
+
* authMethod: 'password',
|
|
74
|
+
* computed: {
|
|
75
|
+
* isEmailVerificationRequired: true,
|
|
76
|
+
* isPhoneVerificationRequired: false,
|
|
77
|
+
* isMFAExempt: false,
|
|
78
|
+
* // ... other computed values
|
|
79
|
+
* }
|
|
80
|
+
* };
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
15
83
|
export interface AuthFlowContext {
|
|
84
|
+
/**
|
|
85
|
+
* User attempting authentication
|
|
86
|
+
*/
|
|
16
87
|
user: IUser;
|
|
88
|
+
/**
|
|
89
|
+
* Authentication configuration
|
|
90
|
+
*/
|
|
17
91
|
config: NAuthConfig;
|
|
92
|
+
/**
|
|
93
|
+
* Authentication method ('password' or 'social')
|
|
94
|
+
*/
|
|
18
95
|
authMethod?: 'password' | 'social';
|
|
96
|
+
/**
|
|
97
|
+
* Social auth provider name (e.g., 'google', 'apple', 'facebook')
|
|
98
|
+
*/
|
|
19
99
|
authProvider?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Device token for trusted device check
|
|
102
|
+
*/
|
|
20
103
|
deviceToken?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Skip MFA verification flag (used for special cases like phone auto-complete)
|
|
106
|
+
*/
|
|
21
107
|
skipMFAVerification?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Pre-computed values for rule evaluation
|
|
110
|
+
* These are calculated once at the beginning of the flow to optimize performance.
|
|
111
|
+
*/
|
|
22
112
|
computed: {
|
|
113
|
+
/**
|
|
114
|
+
* Whether email verification is required
|
|
115
|
+
*/
|
|
23
116
|
isEmailVerificationRequired: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Whether phone verification is required
|
|
119
|
+
*/
|
|
24
120
|
isPhoneVerificationRequired: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Whether phone collection is needed (user has no phone)
|
|
123
|
+
*/
|
|
25
124
|
isPhoneCollectionNeeded: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Whether user is exempt from MFA
|
|
127
|
+
*/
|
|
26
128
|
isMFAExempt: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Whether MFA setup is required
|
|
131
|
+
*/
|
|
27
132
|
isMFASetupRequired: boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Whether MFA verification is required
|
|
135
|
+
*/
|
|
28
136
|
isMFAVerificationRequired: boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Whether device is trusted
|
|
139
|
+
*/
|
|
29
140
|
isDeviceTrusted: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Whether grace period is active
|
|
143
|
+
*/
|
|
30
144
|
isGracePeriodActive: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Grace period end timestamp (if active)
|
|
147
|
+
*/
|
|
31
148
|
gracePeriodEndsAt?: Date;
|
|
149
|
+
/**
|
|
150
|
+
* Whether user is blocked
|
|
151
|
+
*/
|
|
32
152
|
isBlocked: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Block expiration timestamp (if blocked)
|
|
155
|
+
*/
|
|
33
156
|
blockedUntil?: Date;
|
|
157
|
+
/**
|
|
158
|
+
* Block reason (if blocked)
|
|
159
|
+
*/
|
|
34
160
|
blockReason?: string;
|
|
161
|
+
/**
|
|
162
|
+
* Risk score (0-100) for adaptive MFA
|
|
163
|
+
*/
|
|
35
164
|
riskScore?: number;
|
|
165
|
+
/**
|
|
166
|
+
* Risk level ('low' | 'medium' | 'high')
|
|
167
|
+
*/
|
|
36
168
|
riskLevel?: 'low' | 'medium' | 'high';
|
|
37
169
|
};
|
|
38
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Rule function type
|
|
173
|
+
*
|
|
174
|
+
* A rule is a function that evaluates to true or false based on the context.
|
|
175
|
+
* Rules can be combined using RuleBuilder combinators (all, any, not).
|
|
176
|
+
*
|
|
177
|
+
* @param context - Authentication flow context
|
|
178
|
+
* @returns True if rule condition is met, false otherwise
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const mustChangePassword: Rule = (context) => {
|
|
183
|
+
* return context.user.mustChangePassword === true;
|
|
184
|
+
* };
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
39
187
|
export type Rule = (context: AuthFlowContext) => boolean;
|
|
188
|
+
/**
|
|
189
|
+
* Response metadata
|
|
190
|
+
*
|
|
191
|
+
* Additional information to include in the authentication response.
|
|
192
|
+
* Used for special states like grace period and blocked state.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* ```typescript
|
|
196
|
+
* const metadata: ResponseMetadata = {
|
|
197
|
+
* gracePeriodEndsAt: new Date('2024-01-15'),
|
|
198
|
+
* riskScore: 45,
|
|
199
|
+
* riskLevel: 'medium'
|
|
200
|
+
* };
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
40
203
|
export interface ResponseMetadata {
|
|
204
|
+
/**
|
|
205
|
+
* Grace period end timestamp
|
|
206
|
+
*/
|
|
41
207
|
gracePeriodEndsAt?: Date;
|
|
208
|
+
/**
|
|
209
|
+
* Risk score (0-100)
|
|
210
|
+
*/
|
|
42
211
|
riskScore?: number;
|
|
212
|
+
/**
|
|
213
|
+
* Risk level
|
|
214
|
+
*/
|
|
43
215
|
riskLevel?: 'low' | 'medium' | 'high';
|
|
216
|
+
/**
|
|
217
|
+
* Block expiration timestamp
|
|
218
|
+
*/
|
|
44
219
|
blockedUntil?: Date;
|
|
220
|
+
/**
|
|
221
|
+
* Block reason
|
|
222
|
+
*/
|
|
45
223
|
reason?: string;
|
|
46
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* State definition
|
|
227
|
+
*
|
|
228
|
+
* Defines a state in the authentication flow, including:
|
|
229
|
+
* - Priority (evaluation order)
|
|
230
|
+
* - Condition rule (when this state applies)
|
|
231
|
+
* - Challenge mapping (which AuthChallenge this state maps to)
|
|
232
|
+
* - Metadata builder (optional additional response data)
|
|
233
|
+
* - OnEnter hook (optional action when state is entered)
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const stateDef: StateDefinition = {
|
|
238
|
+
* state: AuthFlowState.PENDING_EMAIL_VERIFICATION,
|
|
239
|
+
* priority: 2,
|
|
240
|
+
* condition: Rules.emailVerificationPending,
|
|
241
|
+
* challenge: AuthChallenge.VERIFY_EMAIL,
|
|
242
|
+
* };
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
47
245
|
export interface StateDefinition {
|
|
246
|
+
/**
|
|
247
|
+
* State identifier
|
|
248
|
+
*/
|
|
48
249
|
state: AuthFlowState;
|
|
250
|
+
/**
|
|
251
|
+
* Priority (1-9, lower = higher priority)
|
|
252
|
+
* States are evaluated in priority order
|
|
253
|
+
*/
|
|
49
254
|
priority: number;
|
|
255
|
+
/**
|
|
256
|
+
* Condition rule that determines if this state applies
|
|
257
|
+
*/
|
|
50
258
|
condition: Rule;
|
|
259
|
+
/**
|
|
260
|
+
* Challenge type this state maps to (if applicable)
|
|
261
|
+
* Undefined for AUTHENTICATED and GRACE_PERIOD_ACTIVE states
|
|
262
|
+
*/
|
|
51
263
|
challenge?: AuthChallenge;
|
|
264
|
+
/**
|
|
265
|
+
* Build metadata for response (optional)
|
|
266
|
+
* Used for states that need to include additional information
|
|
267
|
+
*/
|
|
52
268
|
buildMetadata?: (context: AuthFlowContext) => ResponseMetadata | undefined;
|
|
269
|
+
/**
|
|
270
|
+
* OnEnter hook (optional)
|
|
271
|
+
* Executed when this state is entered
|
|
272
|
+
* Can modify context (e.g., set skipMFAVerification flag)
|
|
273
|
+
*/
|
|
53
274
|
onEnter?: (context: AuthFlowContext) => Promise<void> | void;
|
|
54
275
|
}
|
|
55
276
|
//# sourceMappingURL=auth-flow-state-machine.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-flow-state-machine.types.d.ts","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-flow-state-machine.types.d.ts","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AuthFlowState = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Authentication flow states
|
|
6
|
+
*
|
|
7
|
+
* Represents the current state of the authentication flow.
|
|
8
|
+
* States are evaluated in priority order (1-9).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* const state = AuthFlowState.PENDING_EMAIL_VERIFICATION;
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
4
15
|
var AuthFlowState;
|
|
5
16
|
(function (AuthFlowState) {
|
|
17
|
+
/**
|
|
18
|
+
* User must change password before continuing
|
|
19
|
+
* Priority: 1 (highest)
|
|
20
|
+
*/
|
|
6
21
|
AuthFlowState["PENDING_PASSWORD_CHANGE"] = "PENDING_PASSWORD_CHANGE";
|
|
22
|
+
/**
|
|
23
|
+
* User must verify email address
|
|
24
|
+
* Priority: 2
|
|
25
|
+
*/
|
|
7
26
|
AuthFlowState["PENDING_EMAIL_VERIFICATION"] = "PENDING_EMAIL_VERIFICATION";
|
|
27
|
+
/**
|
|
28
|
+
* User must provide phone number
|
|
29
|
+
* Priority: 3
|
|
30
|
+
*/
|
|
8
31
|
AuthFlowState["PENDING_PHONE_COLLECTION"] = "PENDING_PHONE_COLLECTION";
|
|
32
|
+
/**
|
|
33
|
+
* User must verify phone number
|
|
34
|
+
* Priority: 4
|
|
35
|
+
*/
|
|
9
36
|
AuthFlowState["PENDING_PHONE_VERIFICATION"] = "PENDING_PHONE_VERIFICATION";
|
|
37
|
+
/**
|
|
38
|
+
* User must set up MFA
|
|
39
|
+
* Priority: 5
|
|
40
|
+
*/
|
|
10
41
|
AuthFlowState["PENDING_MFA_SETUP"] = "PENDING_MFA_SETUP";
|
|
42
|
+
/**
|
|
43
|
+
* User must verify MFA
|
|
44
|
+
* Priority: 6
|
|
45
|
+
*/
|
|
11
46
|
AuthFlowState["PENDING_MFA_VERIFICATION"] = "PENDING_MFA_VERIFICATION";
|
|
47
|
+
/**
|
|
48
|
+
* Grace period is active (MFA setup optional)
|
|
49
|
+
* Priority: 7
|
|
50
|
+
*/
|
|
12
51
|
AuthFlowState["GRACE_PERIOD_ACTIVE"] = "GRACE_PERIOD_ACTIVE";
|
|
52
|
+
/**
|
|
53
|
+
* User is blocked from signing in
|
|
54
|
+
* Priority: 8
|
|
55
|
+
*/
|
|
13
56
|
AuthFlowState["BLOCKED"] = "BLOCKED";
|
|
57
|
+
/**
|
|
58
|
+
* Authentication complete - user is fully authenticated
|
|
59
|
+
* Priority: 9 (lowest - default state)
|
|
60
|
+
*/
|
|
14
61
|
AuthFlowState["AUTHENTICATED"] = "AUTHENTICATED";
|
|
15
62
|
})(AuthFlowState || (exports.AuthFlowState = AuthFlowState = {}));
|
|
16
63
|
//# sourceMappingURL=auth-flow-state-machine.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-flow-state-machine.types.js","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"auth-flow-state-machine.types.js","sourceRoot":"","sources":["../../src/services/auth-flow-state-machine.types.ts"],"names":[],"mappings":";;;AAIA;;;;;;;;;;GAUG;AACH,IAAY,aAsDX;AAtDD,WAAY,aAAa;IACvB;;;OAGG;IACH,oEAAmD,CAAA;IAEnD;;;OAGG;IACH,0EAAyD,CAAA;IAEzD;;;OAGG;IACH,sEAAqD,CAAA;IAErD;;;OAGG;IACH,0EAAyD,CAAA;IAEzD;;;OAGG;IACH,wDAAuC,CAAA;IAEvC;;;OAGG;IACH,sEAAqD,CAAA;IAErD;;;OAGG;IACH,4DAA2C,CAAA;IAE3C;;;OAGG;IACH,oCAAmB,CAAA;IAEnB;;;OAGG;IACH,gDAA+B,CAAA;AACjC,CAAC,EAtDW,aAAa,6BAAb,aAAa,QAsDxB"}
|