@contember/engine-tenant-api 2.1.0-alpha.16 → 2.1.0-alpha.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/development/index.cjs +5 -6
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +2 -3
- package/dist/development/src/TenantContainer.cjs +4 -2
- package/dist/development/src/TenantContainer.cjs.map +1 -1
- package/dist/development/src/TenantContainer.js +4 -2
- package/dist/development/src/TenantContainer.js.map +1 -1
- package/dist/development/src/bridges/system/IdentityFetcher.cjs +1 -0
- package/dist/development/src/bridges/system/IdentityFetcher.cjs.map +1 -1
- package/dist/development/src/bridges/system/IdentityFetcher.js +1 -0
- package/dist/development/src/bridges/system/IdentityFetcher.js.map +1 -1
- package/dist/development/src/migrations/2025-04-16-180000-config-up.cjs +39 -0
- package/dist/development/src/migrations/2025-04-16-180000-config-up.cjs.map +1 -0
- package/dist/development/src/migrations/2025-04-16-180000-config-up.js +40 -0
- package/dist/development/src/migrations/2025-04-16-180000-config-up.js.map +1 -0
- package/dist/development/src/migrations/2025-04-17-160000-auth-log.cjs +45 -0
- package/dist/development/src/migrations/2025-04-17-160000-auth-log.cjs.map +1 -0
- package/dist/development/src/migrations/2025-04-17-160000-auth-log.js +46 -0
- package/dist/development/src/migrations/2025-04-17-160000-auth-log.js.map +1 -0
- package/dist/development/src/migrations/runner.cjs +9 -4
- package/dist/development/src/migrations/runner.cjs.map +1 -1
- package/dist/development/src/migrations/runner.js +7 -2
- package/dist/development/src/migrations/runner.js.map +1 -1
- package/dist/development/src/migrations/snapshot.cjs +56 -1
- package/dist/development/src/migrations/snapshot.cjs.map +1 -1
- package/dist/development/src/migrations/snapshot.js +56 -1
- package/dist/development/src/migrations/snapshot.js.map +1 -1
- package/dist/development/src/model/commands/apiKey/CreateApiKeyCommand.cjs +7 -7
- package/dist/development/src/model/commands/apiKey/CreateApiKeyCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/apiKey/CreateApiKeyCommand.js +1 -1
- package/dist/development/src/model/commands/authLog/CreateAuthLogEntryCommand.cjs +27 -0
- package/dist/development/src/model/commands/authLog/CreateAuthLogEntryCommand.cjs.map +1 -0
- package/dist/development/src/model/commands/authLog/CreateAuthLogEntryCommand.js +27 -0
- package/dist/development/src/model/commands/authLog/CreateAuthLogEntryCommand.js.map +1 -0
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs +15 -2
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js +15 -2
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
- package/dist/development/src/model/commands/personToken/CreatePersonTokenCommand.cjs +4 -4
- package/dist/development/src/model/commands/personToken/CreatePersonTokenCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/personToken/CreatePersonTokenCommand.js +1 -1
- package/dist/development/src/model/commands/personToken/ResetPasswordCommand.cjs +5 -5
- package/dist/development/src/model/commands/personToken/ResetPasswordCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/personToken/ResetPasswordCommand.js +1 -1
- package/dist/development/src/model/queries/apiKey/ApiKeyQuery.cjs +4 -4
- package/dist/development/src/model/queries/apiKey/ApiKeyQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/apiKey/ApiKeyQuery.js +1 -1
- package/dist/development/src/model/queries/authLog/NextLoginAttemptQuery.cjs +46 -0
- package/dist/development/src/model/queries/authLog/NextLoginAttemptQuery.cjs.map +1 -0
- package/dist/development/src/model/queries/authLog/NextLoginAttemptQuery.js +46 -0
- package/dist/development/src/model/queries/authLog/NextLoginAttemptQuery.js.map +1 -0
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs +18 -1
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.js +18 -1
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
- package/dist/development/src/model/queries/personToken/PersonTokenQuery.cjs +3 -3
- package/dist/development/src/model/queries/personToken/PersonTokenQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/personToken/PersonTokenQuery.js +1 -1
- package/dist/development/src/model/service/AuthLogService.cjs +34 -0
- package/dist/development/src/model/service/AuthLogService.cjs.map +1 -0
- package/dist/development/src/model/service/AuthLogService.js +34 -0
- package/dist/development/src/model/service/AuthLogService.js.map +1 -0
- package/dist/development/src/model/service/ConfigurationManager.cjs +0 -10
- package/dist/development/src/model/service/ConfigurationManager.cjs.map +1 -1
- package/dist/development/src/model/service/ConfigurationManager.js +0 -10
- package/dist/development/src/model/service/ConfigurationManager.js.map +1 -1
- package/dist/development/src/model/service/IDPSignInManager.cjs +37 -5
- package/dist/development/src/model/service/IDPSignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/IDPSignInManager.js +37 -5
- package/dist/development/src/model/service/IDPSignInManager.js.map +1 -1
- package/dist/development/src/model/service/PasswordChangeManager.cjs +21 -12
- package/dist/development/src/model/service/PasswordChangeManager.cjs.map +1 -1
- package/dist/development/src/model/service/PasswordChangeManager.js +20 -11
- package/dist/development/src/model/service/PasswordChangeManager.js.map +1 -1
- package/dist/development/src/model/service/PasswordResetManager.cjs +40 -8
- package/dist/development/src/model/service/PasswordResetManager.cjs.map +1 -1
- package/dist/development/src/model/service/PasswordResetManager.js +40 -8
- package/dist/development/src/model/service/PasswordResetManager.js.map +1 -1
- package/dist/development/src/model/service/PasswordStrengthValidator.cjs +63 -0
- package/dist/development/src/model/service/PasswordStrengthValidator.cjs.map +1 -0
- package/dist/development/src/model/service/PasswordStrengthValidator.js +63 -0
- package/dist/development/src/model/service/PasswordStrengthValidator.js.map +1 -0
- package/dist/development/src/model/service/PasswordlessSignInManager.cjs +89 -24
- package/dist/development/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/PasswordlessSignInManager.js +81 -16
- package/dist/development/src/model/service/PasswordlessSignInManager.js.map +1 -1
- package/dist/development/src/model/service/PersonAccessManager.cjs +7 -29
- package/dist/development/src/model/service/PersonAccessManager.cjs.map +1 -1
- package/dist/development/src/model/service/PersonAccessManager.js +7 -29
- package/dist/development/src/model/service/PersonAccessManager.js.map +1 -1
- package/dist/development/src/model/service/SignInManager.cjs +56 -31
- package/dist/development/src/model/service/SignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/SignInManager.js +57 -32
- package/dist/development/src/model/service/SignInManager.js.map +1 -1
- package/dist/development/src/model/service/SignUpManager.cjs +13 -8
- package/dist/development/src/model/service/SignUpManager.cjs.map +1 -1
- package/dist/development/src/model/service/SignUpManager.js +11 -6
- package/dist/development/src/model/service/SignUpManager.js.map +1 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs +6 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.js +6 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
- package/dist/development/src/model/utils/Response.cjs +2 -1
- package/dist/development/src/model/utils/Response.cjs.map +1 -1
- package/dist/development/src/model/utils/Response.js +2 -1
- package/dist/development/src/model/utils/Response.js.map +1 -1
- package/dist/development/src/model/utils/blacklist.cjs +10006 -0
- package/dist/development/src/model/utils/blacklist.cjs.map +1 -0
- package/dist/development/src/model/utils/blacklist.js +10006 -0
- package/dist/development/src/model/utils/blacklist.js.map +1 -0
- package/dist/{production/src/model/utils/typeUtils.cjs → development/src/model/utils/hex.cjs} +1 -1
- package/dist/development/src/model/utils/hex.cjs.map +1 -0
- package/dist/development/src/model/utils/{typeUtils.js → hex.js} +1 -1
- package/dist/development/src/model/utils/hex.js.map +1 -0
- package/dist/development/src/model/utils/interval.cjs +8 -0
- package/dist/development/src/model/utils/interval.cjs.map +1 -0
- package/dist/development/src/model/utils/interval.js +8 -0
- package/dist/development/src/model/utils/interval.js.map +1 -0
- package/dist/development/src/model/utils/{tokenUtils.cjs → token.cjs} +3 -3
- package/dist/development/src/model/utils/token.cjs.map +1 -0
- package/dist/development/src/model/utils/{tokenUtils.js → token.js} +2 -2
- package/dist/development/src/model/utils/token.js.map +1 -0
- package/dist/development/src/resolvers/ResolverFactory.cjs +1 -0
- package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/ResolverFactory.js +2 -1
- package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/development/src/resolvers/TenantResolverContextFactory.cjs +10 -2
- package/dist/development/src/resolvers/TenantResolverContextFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/TenantResolverContextFactory.js +10 -2
- package/dist/development/src/resolvers/TenantResolverContextFactory.js.map +1 -1
- package/dist/development/src/resolvers/errorUtils.cjs +15 -4
- package/dist/development/src/resolvers/errorUtils.cjs.map +1 -1
- package/dist/development/src/resolvers/errorUtils.js +15 -4
- package/dist/development/src/resolvers/errorUtils.js.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +4 -3
- package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +17 -6
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +17 -6
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +14 -0
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +14 -0
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +7 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js +7 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs +5 -0
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js +5 -0
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs +3 -2
- package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs +26 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js +26 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +20 -0
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js +20 -0
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +25 -2
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +25 -2
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs +22 -0
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js +22 -0
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +3 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +3 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +3 -2
- package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +1 -0
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs +3 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js +3 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.cjs +1 -0
- package/dist/development/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.js +1 -0
- package/dist/development/src/resolvers/query/IDPQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs +1 -0
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js +1 -0
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.cjs +1 -0
- package/dist/development/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.js +1 -0
- package/dist/development/src/resolvers/query/PersonQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs +1 -0
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js +1 -0
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs +1 -0
- package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ProjectQueryResolver.js +1 -0
- package/dist/development/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs +1 -0
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js +1 -0
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
- package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs +1 -0
- package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/types/IdentityTypeResolver.js +1 -0
- package/dist/development/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs +1 -0
- package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.js +1 -0
- package/dist/development/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
- package/dist/development/src/schema/tenant.graphql.cjs +64 -2
- package/dist/development/src/schema/tenant.graphql.cjs.map +1 -1
- package/dist/development/src/schema/tenant.graphql.js +64 -2
- package/dist/development/src/schema/tenant.graphql.js.map +1 -1
- package/dist/production/index.cjs +5 -6
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +2 -3
- package/dist/production/src/TenantContainer.cjs +4 -2
- package/dist/production/src/TenantContainer.cjs.map +1 -1
- package/dist/production/src/TenantContainer.js +4 -2
- package/dist/production/src/TenantContainer.js.map +1 -1
- package/dist/production/src/bridges/system/IdentityFetcher.cjs +1 -0
- package/dist/production/src/bridges/system/IdentityFetcher.cjs.map +1 -1
- package/dist/production/src/bridges/system/IdentityFetcher.js +1 -0
- package/dist/production/src/bridges/system/IdentityFetcher.js.map +1 -1
- package/dist/production/src/migrations/2025-04-16-180000-config-up.cjs +39 -0
- package/dist/production/src/migrations/2025-04-16-180000-config-up.cjs.map +1 -0
- package/dist/production/src/migrations/2025-04-16-180000-config-up.js +40 -0
- package/dist/production/src/migrations/2025-04-16-180000-config-up.js.map +1 -0
- package/dist/production/src/migrations/2025-04-17-160000-auth-log.cjs +45 -0
- package/dist/production/src/migrations/2025-04-17-160000-auth-log.cjs.map +1 -0
- package/dist/production/src/migrations/2025-04-17-160000-auth-log.js +46 -0
- package/dist/production/src/migrations/2025-04-17-160000-auth-log.js.map +1 -0
- package/dist/production/src/migrations/runner.cjs +9 -4
- package/dist/production/src/migrations/runner.cjs.map +1 -1
- package/dist/production/src/migrations/runner.js +7 -2
- package/dist/production/src/migrations/runner.js.map +1 -1
- package/dist/production/src/migrations/snapshot.cjs +56 -1
- package/dist/production/src/migrations/snapshot.cjs.map +1 -1
- package/dist/production/src/migrations/snapshot.js +56 -1
- package/dist/production/src/migrations/snapshot.js.map +1 -1
- package/dist/production/src/model/commands/apiKey/CreateApiKeyCommand.cjs +7 -7
- package/dist/production/src/model/commands/apiKey/CreateApiKeyCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/apiKey/CreateApiKeyCommand.js +1 -1
- package/dist/production/src/model/commands/authLog/CreateAuthLogEntryCommand.cjs +27 -0
- package/dist/production/src/model/commands/authLog/CreateAuthLogEntryCommand.cjs.map +1 -0
- package/dist/production/src/model/commands/authLog/CreateAuthLogEntryCommand.js +27 -0
- package/dist/production/src/model/commands/authLog/CreateAuthLogEntryCommand.js.map +1 -0
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs +15 -2
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js +15 -2
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
- package/dist/production/src/model/commands/personToken/CreatePersonTokenCommand.cjs +4 -4
- package/dist/production/src/model/commands/personToken/CreatePersonTokenCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/personToken/CreatePersonTokenCommand.js +1 -1
- package/dist/production/src/model/commands/personToken/ResetPasswordCommand.cjs +5 -5
- package/dist/production/src/model/commands/personToken/ResetPasswordCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/personToken/ResetPasswordCommand.js +1 -1
- package/dist/production/src/model/queries/apiKey/ApiKeyQuery.cjs +4 -4
- package/dist/production/src/model/queries/apiKey/ApiKeyQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/apiKey/ApiKeyQuery.js +1 -1
- package/dist/production/src/model/queries/authLog/NextLoginAttemptQuery.cjs +46 -0
- package/dist/production/src/model/queries/authLog/NextLoginAttemptQuery.cjs.map +1 -0
- package/dist/production/src/model/queries/authLog/NextLoginAttemptQuery.js +46 -0
- package/dist/production/src/model/queries/authLog/NextLoginAttemptQuery.js.map +1 -0
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs +18 -1
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.js +18 -1
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
- package/dist/production/src/model/queries/personToken/PersonTokenQuery.cjs +3 -3
- package/dist/production/src/model/queries/personToken/PersonTokenQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/personToken/PersonTokenQuery.js +1 -1
- package/dist/production/src/model/service/AuthLogService.cjs +34 -0
- package/dist/production/src/model/service/AuthLogService.cjs.map +1 -0
- package/dist/production/src/model/service/AuthLogService.js +34 -0
- package/dist/production/src/model/service/AuthLogService.js.map +1 -0
- package/dist/production/src/model/service/ConfigurationManager.cjs +0 -10
- package/dist/production/src/model/service/ConfigurationManager.cjs.map +1 -1
- package/dist/production/src/model/service/ConfigurationManager.js +0 -10
- package/dist/production/src/model/service/ConfigurationManager.js.map +1 -1
- package/dist/production/src/model/service/IDPSignInManager.cjs +37 -5
- package/dist/production/src/model/service/IDPSignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/IDPSignInManager.js +37 -5
- package/dist/production/src/model/service/IDPSignInManager.js.map +1 -1
- package/dist/production/src/model/service/PasswordChangeManager.cjs +21 -12
- package/dist/production/src/model/service/PasswordChangeManager.cjs.map +1 -1
- package/dist/production/src/model/service/PasswordChangeManager.js +20 -11
- package/dist/production/src/model/service/PasswordChangeManager.js.map +1 -1
- package/dist/production/src/model/service/PasswordResetManager.cjs +40 -8
- package/dist/production/src/model/service/PasswordResetManager.cjs.map +1 -1
- package/dist/production/src/model/service/PasswordResetManager.js +40 -8
- package/dist/production/src/model/service/PasswordResetManager.js.map +1 -1
- package/dist/production/src/model/service/PasswordStrengthValidator.cjs +63 -0
- package/dist/production/src/model/service/PasswordStrengthValidator.cjs.map +1 -0
- package/dist/production/src/model/service/PasswordStrengthValidator.js +63 -0
- package/dist/production/src/model/service/PasswordStrengthValidator.js.map +1 -0
- package/dist/production/src/model/service/PasswordlessSignInManager.cjs +89 -24
- package/dist/production/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/PasswordlessSignInManager.js +81 -16
- package/dist/production/src/model/service/PasswordlessSignInManager.js.map +1 -1
- package/dist/production/src/model/service/PersonAccessManager.cjs +7 -29
- package/dist/production/src/model/service/PersonAccessManager.cjs.map +1 -1
- package/dist/production/src/model/service/PersonAccessManager.js +7 -29
- package/dist/production/src/model/service/PersonAccessManager.js.map +1 -1
- package/dist/production/src/model/service/SignInManager.cjs +56 -31
- package/dist/production/src/model/service/SignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/SignInManager.js +57 -32
- package/dist/production/src/model/service/SignInManager.js.map +1 -1
- package/dist/production/src/model/service/SignUpManager.cjs +13 -8
- package/dist/production/src/model/service/SignUpManager.cjs.map +1 -1
- package/dist/production/src/model/service/SignUpManager.js +11 -6
- package/dist/production/src/model/service/SignUpManager.js.map +1 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs +6 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.js +6 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
- package/dist/production/src/model/utils/Response.cjs +2 -1
- package/dist/production/src/model/utils/Response.cjs.map +1 -1
- package/dist/production/src/model/utils/Response.js +2 -1
- package/dist/production/src/model/utils/Response.js.map +1 -1
- package/dist/production/src/model/utils/blacklist.cjs +10006 -0
- package/dist/production/src/model/utils/blacklist.cjs.map +1 -0
- package/dist/production/src/model/utils/blacklist.js +10006 -0
- package/dist/production/src/model/utils/blacklist.js.map +1 -0
- package/dist/{development/src/model/utils/typeUtils.cjs → production/src/model/utils/hex.cjs} +1 -1
- package/dist/production/src/model/utils/hex.cjs.map +1 -0
- package/dist/production/src/model/utils/{typeUtils.js → hex.js} +1 -1
- package/dist/production/src/model/utils/hex.js.map +1 -0
- package/dist/production/src/model/utils/interval.cjs +8 -0
- package/dist/production/src/model/utils/interval.cjs.map +1 -0
- package/dist/production/src/model/utils/interval.js +8 -0
- package/dist/production/src/model/utils/interval.js.map +1 -0
- package/dist/production/src/model/utils/{tokenUtils.cjs → token.cjs} +3 -3
- package/dist/production/src/model/utils/token.cjs.map +1 -0
- package/dist/production/src/model/utils/{tokenUtils.js → token.js} +2 -2
- package/dist/production/src/model/utils/token.js.map +1 -0
- package/dist/production/src/resolvers/ResolverFactory.cjs +1 -0
- package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/ResolverFactory.js +2 -1
- package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/production/src/resolvers/TenantResolverContextFactory.cjs +10 -2
- package/dist/production/src/resolvers/TenantResolverContextFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/TenantResolverContextFactory.js +10 -2
- package/dist/production/src/resolvers/TenantResolverContextFactory.js.map +1 -1
- package/dist/production/src/resolvers/errorUtils.cjs +15 -4
- package/dist/production/src/resolvers/errorUtils.cjs.map +1 -1
- package/dist/production/src/resolvers/errorUtils.js +15 -4
- package/dist/production/src/resolvers/errorUtils.js.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +4 -3
- package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +17 -6
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +17 -6
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +14 -0
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +14 -0
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +7 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js +7 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs +5 -0
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js +5 -0
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs +3 -2
- package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs +26 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js +26 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +20 -0
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js +20 -0
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +25 -2
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +25 -2
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs +22 -0
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js +22 -0
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +3 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +3 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +3 -2
- package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +1 -0
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs +3 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js +3 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.cjs +1 -0
- package/dist/production/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.js +1 -0
- package/dist/production/src/resolvers/query/IDPQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs +1 -0
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js +1 -0
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.cjs +1 -0
- package/dist/production/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.js +1 -0
- package/dist/production/src/resolvers/query/PersonQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs +1 -0
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js +1 -0
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs +1 -0
- package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ProjectQueryResolver.js +1 -0
- package/dist/production/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs +1 -0
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js +1 -0
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
- package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs +1 -0
- package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/types/IdentityTypeResolver.js +1 -0
- package/dist/production/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs +1 -0
- package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.js +1 -0
- package/dist/production/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
- package/dist/production/src/schema/tenant.graphql.cjs +64 -2
- package/dist/production/src/schema/tenant.graphql.cjs.map +1 -1
- package/dist/production/src/schema/tenant.graphql.js +64 -2
- package/dist/production/src/schema/tenant.graphql.js.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createSessionKeySql.d.ts +1 -1
- package/dist/tests/cases/integration/mocked/sql/getConfigSql.d.ts +3 -0
- package/dist/tests/cases/integration/mocked/sql/getConfigSql.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.d.ts +3 -0
- package/dist/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.d.ts.map +1 -0
- package/dist/tests/src/testTenant.d.ts +2 -0
- package/dist/tests/src/testTenant.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/TenantContainer.d.ts +6 -0
- package/dist/types/TenantContainer.d.ts.map +1 -1
- package/dist/types/migrations/2025-04-16-180000-config-up.d.ts +3 -0
- package/dist/types/migrations/2025-04-16-180000-config-up.d.ts.map +1 -0
- package/dist/types/migrations/2025-04-17-160000-auth-log.d.ts +3 -0
- package/dist/types/migrations/2025-04-17-160000-auth-log.d.ts.map +1 -0
- package/dist/types/migrations/runner.d.ts.map +1 -1
- package/dist/types/migrations/snapshot.d.ts.map +1 -1
- package/dist/types/model/commands/authLog/CreateAuthLogEntryCommand.d.ts +26 -0
- package/dist/types/model/commands/authLog/CreateAuthLogEntryCommand.d.ts.map +1 -0
- package/dist/types/model/commands/configuration/UpdateConfigurationCommand.d.ts.map +1 -1
- package/dist/types/model/dtos/AuthLogBag.d.ts +3 -0
- package/dist/types/model/dtos/AuthLogBag.d.ts.map +1 -0
- package/dist/types/model/queries/authLog/NextLoginAttemptQuery.d.ts +7 -0
- package/dist/types/model/queries/authLog/NextLoginAttemptQuery.d.ts.map +1 -0
- package/dist/types/model/queries/configuration/ConfigurationQuery.d.ts +1 -1
- package/dist/types/model/queries/configuration/ConfigurationQuery.d.ts.map +1 -1
- package/dist/types/model/service/AuthLogService.d.ts +34 -0
- package/dist/types/model/service/AuthLogService.d.ts.map +1 -0
- package/dist/types/model/service/ConfigurationManager.d.ts +1 -2
- package/dist/types/model/service/ConfigurationManager.d.ts.map +1 -1
- package/dist/types/model/service/IDPSignInManager.d.ts +5 -1
- package/dist/types/model/service/IDPSignInManager.d.ts.map +1 -1
- package/dist/types/model/service/PasswordChangeManager.d.ts +8 -4
- package/dist/types/model/service/PasswordChangeManager.d.ts.map +1 -1
- package/dist/types/model/service/PasswordResetManager.d.ts +11 -4
- package/dist/types/model/service/PasswordResetManager.d.ts.map +1 -1
- package/dist/types/model/service/PasswordStrengthValidator.d.ts +11 -0
- package/dist/types/model/service/PasswordStrengthValidator.d.ts.map +1 -0
- package/dist/types/model/service/PasswordlessSignInManager.d.ts +16 -6
- package/dist/types/model/service/PasswordlessSignInManager.d.ts.map +1 -1
- package/dist/types/model/service/PersonAccessManager.d.ts +2 -1
- package/dist/types/model/service/PersonAccessManager.d.ts.map +1 -1
- package/dist/types/model/service/SignInManager.d.ts +9 -4
- package/dist/types/model/service/SignInManager.d.ts.map +1 -1
- package/dist/types/model/service/SignUpManager.d.ts +7 -3
- package/dist/types/model/service/SignUpManager.d.ts.map +1 -1
- package/dist/types/model/service/apiKey/ApiKeyManager.d.ts.map +1 -1
- package/dist/types/model/type/AuthLog.d.ts +2 -0
- package/dist/types/model/type/AuthLog.d.ts.map +1 -0
- package/dist/types/model/type/Config.d.ts +28 -0
- package/dist/types/model/type/Config.d.ts.map +1 -0
- package/dist/types/model/utils/Response.d.ts +4 -3
- package/dist/types/model/utils/Response.d.ts.map +1 -1
- package/dist/types/model/utils/blacklist.d.ts +2 -0
- package/dist/types/model/utils/blacklist.d.ts.map +1 -0
- package/dist/types/model/utils/{typeUtils.d.ts → hex.d.ts} +1 -1
- package/dist/types/model/utils/hex.d.ts.map +1 -0
- package/dist/types/model/utils/index.d.ts +1 -1
- package/dist/types/model/utils/index.d.ts.map +1 -1
- package/dist/types/model/utils/interval.d.ts +3 -0
- package/dist/types/model/utils/interval.d.ts.map +1 -0
- package/dist/types/model/utils/{tokenUtils.d.ts → token.d.ts} +2 -2
- package/dist/types/model/utils/token.d.ts.map +1 -0
- package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
- package/dist/types/resolvers/TenantResolverContext.d.ts +2 -0
- package/dist/types/resolvers/TenantResolverContext.d.ts.map +1 -1
- package/dist/types/resolvers/TenantResolverContextFactory.d.ts +6 -1
- package/dist/types/resolvers/TenantResolverContextFactory.d.ts.map +1 -1
- package/dist/types/resolvers/errorUtils.d.ts +7 -5
- package/dist/types/resolvers/errorUtils.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/ChangePasswordMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/ChangeProfileMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/IDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/OtpMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/PasswordlessMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/ResetPasswordMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/SignInMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/TogglePasswordlessMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/types/ProjectTypeResolver.d.ts +2 -2
- package/dist/types/resolvers/types/ProjectTypeResolver.d.ts.map +1 -1
- package/dist/types/schema/index.d.ts +103 -8
- package/dist/types/schema/index.d.ts.map +1 -1
- package/dist/types/schema/tenant.graphql.d.ts.map +1 -1
- package/dist/types/schema/types.d.ts +8 -0
- package/dist/types/schema/types.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/graphql.codegen.yml +7 -3
- package/package.json +2 -1
- package/src/TenantContainer.ts +16 -10
- package/src/migrations/2025-04-16-180000-config-up.ts +39 -0
- package/src/migrations/2025-04-17-160000-auth-log.ts +45 -0
- package/src/migrations/runner.ts +4 -1
- package/src/migrations/snapshot.ts +56 -1
- package/src/model/commands/authLog/CreateAuthLogEntryCommand.ts +51 -0
- package/src/model/commands/configuration/UpdateConfigurationCommand.ts +20 -2
- package/src/model/dtos/AuthLogBag.ts +3 -0
- package/src/model/queries/authLog/NextLoginAttemptQuery.ts +63 -0
- package/src/model/queries/configuration/ConfigurationQuery.ts +20 -8
- package/src/model/service/AuthLogService.ts +62 -0
- package/src/model/service/ConfigurationManager.ts +1 -6
- package/src/model/service/IDPSignInManager.ts +41 -6
- package/src/model/service/PasswordChangeManager.ts +17 -12
- package/src/model/service/PasswordResetManager.ts +42 -11
- package/src/model/service/PasswordStrengthValidator.ts +85 -0
- package/src/model/service/PasswordlessSignInManager.ts +95 -28
- package/src/model/service/PersonAccessManager.ts +8 -27
- package/src/model/service/SignInManager.ts +68 -33
- package/src/model/service/SignUpManager.ts +16 -8
- package/src/model/service/apiKey/ApiKeyManager.ts +8 -2
- package/src/model/type/AuthLog.ts +14 -0
- package/src/model/type/Config.ts +29 -0
- package/src/model/utils/Response.ts +10 -3
- package/src/model/utils/blacklist.ts +4 -0
- package/src/model/utils/index.ts +1 -1
- package/src/model/utils/interval.ts +14 -0
- package/src/model/utils/{tokenUtils.ts → token.ts} +1 -1
- package/src/resolvers/ResolverFactory.ts +2 -1
- package/src/resolvers/TenantResolverContext.ts +2 -0
- package/src/resolvers/TenantResolverContextFactory.ts +10 -0
- package/src/resolvers/errorUtils.ts +23 -5
- package/src/resolvers/mutation/idp/AddIDPMutationResolver.ts +1 -1
- package/src/resolvers/mutation/idp/UpdateIDPMutationResolver.ts +1 -1
- package/src/resolvers/mutation/person/ChangePasswordMutationResolver.ts +17 -15
- package/src/resolvers/mutation/person/ChangeProfileMutationResolver.ts +13 -0
- package/src/resolvers/mutation/person/DisablePersonMutationResolver.ts +7 -7
- package/src/resolvers/mutation/person/IDPMutationResolver.ts +4 -0
- package/src/resolvers/mutation/person/OtpMutationResolver.ts +25 -1
- package/src/resolvers/mutation/person/PasswordlessMutationResolver.ts +21 -1
- package/src/resolvers/mutation/person/ResetPasswordMutationResolver.ts +27 -3
- package/src/resolvers/mutation/person/SignInMutationResolver.ts +26 -8
- package/src/resolvers/mutation/person/SignUpMutationResolver.ts +1 -1
- package/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.ts +2 -2
- package/src/resolvers/mutation/project/CreateProjectMutationResolver.ts +1 -1
- package/src/resolvers/mutation/project/UpdateProjectMutationResolver.ts +1 -1
- package/src/resolvers/query/ConfigurationQueryResolver.ts +2 -2
- package/src/resolvers/types/ProjectTypeResolver.ts +2 -2
- package/src/schema/index.ts +114 -5
- package/src/schema/tenant.graphql.ts +64 -2
- package/src/schema/types.ts +4 -0
- package/tests/cases/integration/mocked/changeMyPasswordMutation.test.ts +42 -2
- package/tests/cases/integration/mocked/changeMyProfileMutation.test.ts +25 -4
- package/tests/cases/integration/mocked/changePasswordMutation.test.ts +10 -2
- package/tests/cases/integration/mocked/changeProfileMutation.test.ts +7 -1
- package/tests/cases/integration/mocked/confirmOtpMutation.test.ts +13 -8
- package/tests/cases/integration/mocked/createSessionKeyMutation.test.ts +9 -21
- package/tests/cases/integration/mocked/inviteMutations.test.ts +0 -24
- package/tests/cases/integration/mocked/signInIdpMutation.test.ts +16 -1
- package/tests/cases/integration/mocked/signInMutation.test.ts +54 -22
- package/tests/cases/integration/mocked/signOutMutation.test.ts +0 -5
- package/tests/cases/integration/mocked/signUpMutation.test.ts +3 -12
- package/tests/cases/integration/mocked/sql/createSessionKeySql.ts +1 -1
- package/tests/cases/integration/mocked/sql/getConfigSql.ts +29 -0
- package/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.ts +20 -0
- package/tests/src/testTenant.ts +13 -0
- package/dist/development/src/model/utils/password.cjs +0 -12
- package/dist/development/src/model/utils/password.cjs.map +0 -1
- package/dist/development/src/model/utils/password.js +0 -12
- package/dist/development/src/model/utils/password.js.map +0 -1
- package/dist/development/src/model/utils/tokenUtils.cjs.map +0 -1
- package/dist/development/src/model/utils/tokenUtils.js.map +0 -1
- package/dist/development/src/model/utils/typeUtils.cjs.map +0 -1
- package/dist/development/src/model/utils/typeUtils.js.map +0 -1
- package/dist/production/src/model/utils/password.cjs +0 -12
- package/dist/production/src/model/utils/password.cjs.map +0 -1
- package/dist/production/src/model/utils/password.js +0 -12
- package/dist/production/src/model/utils/password.js.map +0 -1
- package/dist/production/src/model/utils/tokenUtils.cjs.map +0 -1
- package/dist/production/src/model/utils/tokenUtils.js.map +0 -1
- package/dist/production/src/model/utils/typeUtils.cjs.map +0 -1
- package/dist/production/src/model/utils/typeUtils.js.map +0 -1
- package/dist/types/model/utils/password.d.ts +0 -4
- package/dist/types/model/utils/password.d.ts.map +0 -1
- package/dist/types/model/utils/tokenUtils.d.ts.map +0 -1
- package/dist/types/model/utils/typeUtils.d.ts.map +0 -1
- package/src/model/utils/password.ts +0 -8
- /package/src/model/utils/{typeUtils.ts → hex.ts} +0 -0
|
@@ -8,6 +8,7 @@ import { CreateIdentityCommand, CreatePersonCommand, CreatePersonIdentityProvide
|
|
|
8
8
|
import { TenantRole } from '../authorization'
|
|
9
9
|
import { NoPassword } from '../dtos'
|
|
10
10
|
import { IdentityProviderRow } from '../queries/idp/types'
|
|
11
|
+
import { AuthLogService } from './AuthLogService'
|
|
11
12
|
|
|
12
13
|
class IDPSignInManager {
|
|
13
14
|
constructor(
|
|
@@ -36,25 +37,56 @@ class IDPSignInManager {
|
|
|
36
37
|
)
|
|
37
38
|
} catch (e) {
|
|
38
39
|
if (e instanceof IDPResponseError) {
|
|
39
|
-
return new ResponseError('INVALID_IDP_RESPONSE', e.message
|
|
40
|
+
return new ResponseError('INVALID_IDP_RESPONSE', e.message, {
|
|
41
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
42
|
+
personId: undefined,
|
|
43
|
+
identityProviderId: provider.id,
|
|
44
|
+
}),
|
|
45
|
+
})
|
|
40
46
|
}
|
|
41
47
|
if (e instanceof IDPValidationError) {
|
|
42
|
-
return new ResponseError('IDP_VALIDATION_FAILED', e.message
|
|
48
|
+
return new ResponseError('IDP_VALIDATION_FAILED', e.message, {
|
|
49
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
50
|
+
personId: undefined,
|
|
51
|
+
identityProviderId: provider.id,
|
|
52
|
+
}),
|
|
53
|
+
})
|
|
43
54
|
}
|
|
44
55
|
throw e
|
|
45
56
|
}
|
|
46
57
|
const personRow = await this.resolvePerson(db, claim, provider)
|
|
47
58
|
|
|
48
59
|
if (!personRow) {
|
|
49
|
-
return new ResponseError('PERSON_NOT_FOUND', `Person ${claim.email} not found
|
|
60
|
+
return new ResponseError('PERSON_NOT_FOUND', `Person ${claim.email} not found`, {
|
|
61
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
62
|
+
identityProviderId: provider.id,
|
|
63
|
+
personInput: claim.email,
|
|
64
|
+
personId: undefined,
|
|
65
|
+
}),
|
|
66
|
+
})
|
|
50
67
|
}
|
|
51
68
|
|
|
52
69
|
if (personRow.disabled_at !== null) {
|
|
53
|
-
return new ResponseError('PERSON_DISABLED', `Person with e-mail ${claim.email} is disabled
|
|
70
|
+
return new ResponseError('PERSON_DISABLED', `Person with e-mail ${claim.email} is disabled`, {
|
|
71
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
72
|
+
identityProviderId: provider.id,
|
|
73
|
+
personInput: claim.email,
|
|
74
|
+
personId: personRow.id,
|
|
75
|
+
}),
|
|
76
|
+
})
|
|
54
77
|
}
|
|
55
78
|
|
|
56
79
|
const sessionToken = await this.apiKeyManager.createSessionApiKey(db, personRow.identity_id, expiration)
|
|
57
|
-
return new ResponseOk({
|
|
80
|
+
return new ResponseOk({
|
|
81
|
+
person: personRow,
|
|
82
|
+
token: sessionToken,
|
|
83
|
+
idpResponse: claim,
|
|
84
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
85
|
+
personId: personRow.id,
|
|
86
|
+
identityProviderId: provider.id,
|
|
87
|
+
personInput: claim.email,
|
|
88
|
+
}),
|
|
89
|
+
})
|
|
58
90
|
})
|
|
59
91
|
}
|
|
60
92
|
|
|
@@ -137,9 +169,12 @@ namespace IDPSignInManager {
|
|
|
137
169
|
readonly person: PersonRow
|
|
138
170
|
readonly token: string
|
|
139
171
|
readonly idpResponse?: Record<string, unknown>
|
|
172
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
140
173
|
}
|
|
141
174
|
|
|
142
|
-
export type SignInIDPResponse = Response<SignInIDPResult, SignInIdpErrorCode
|
|
175
|
+
export type SignInIDPResponse = Response<SignInIDPResult, SignInIdpErrorCode, {
|
|
176
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
177
|
+
}>
|
|
143
178
|
}
|
|
144
179
|
|
|
145
180
|
export { IDPSignInManager }
|
|
@@ -1,29 +1,32 @@
|
|
|
1
|
-
import { ChangeMyPasswordErrorCode, ChangePasswordErrorCode } from '../../schema'
|
|
1
|
+
import { ChangeMyPasswordErrorCode, ChangePasswordErrorCode, WeakPasswordReason } from '../../schema'
|
|
2
2
|
import { ChangePasswordCommand } from '../commands'
|
|
3
|
-
import { getPasswordWeaknessMessage } from '../utils/password'
|
|
4
3
|
import { Response, ResponseError, ResponseOk } from '../utils/Response'
|
|
5
|
-
import { PersonRow } from '../queries'
|
|
4
|
+
import { ConfigurationQuery, PersonRow } from '../queries'
|
|
6
5
|
import { Providers } from '../providers'
|
|
7
6
|
import { DatabaseContext } from '../utils'
|
|
7
|
+
import { PasswordStrengthValidator } from './PasswordStrengthValidator'
|
|
8
8
|
|
|
9
9
|
class PasswordChangeManager {
|
|
10
10
|
constructor(
|
|
11
11
|
private readonly providers: Providers,
|
|
12
|
+
private readonly passwordStrengthVerifier: PasswordStrengthValidator,
|
|
12
13
|
) {}
|
|
13
14
|
|
|
14
|
-
async changePassword(dbContext: DatabaseContext,
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
async changePassword(dbContext: DatabaseContext, person: PersonRow, password: string): Promise<PasswordChangeManager.PasswordChangeResponse<ChangePasswordErrorCode>> {
|
|
16
|
+
const config = await dbContext.queryHandler.fetch(new ConfigurationQuery())
|
|
17
|
+
const passwordVerifyResult = await this.passwordStrengthVerifier.verify(password, config.password, 'TOO_WEAK')
|
|
18
|
+
if (!passwordVerifyResult.ok) {
|
|
19
|
+
return passwordVerifyResult
|
|
18
20
|
}
|
|
19
|
-
await dbContext.commandBus.execute(new ChangePasswordCommand(
|
|
21
|
+
await dbContext.commandBus.execute(new ChangePasswordCommand(person.id, password))
|
|
20
22
|
return new ResponseOk(null)
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
async changeMyPassword(dbContext: DatabaseContext, person: PersonRow, currentPassword: string, password: string): Promise<PasswordChangeManager.PasswordChangeResponse<ChangeMyPasswordErrorCode>> {
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
const config = await dbContext.queryHandler.fetch(new ConfigurationQuery())
|
|
27
|
+
const passwordVerifyResult = await this.passwordStrengthVerifier.verify(password, config.password, 'TOO_WEAK')
|
|
28
|
+
if (!passwordVerifyResult.ok) {
|
|
29
|
+
return passwordVerifyResult
|
|
27
30
|
}
|
|
28
31
|
if (!person.password_hash) {
|
|
29
32
|
return new ResponseError('NO_PASSWORD_SET', 'No password set')
|
|
@@ -38,7 +41,9 @@ class PasswordChangeManager {
|
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
namespace PasswordChangeManager {
|
|
41
|
-
export type PasswordChangeResponse<T extends ChangePasswordErrorCode | ChangeMyPasswordErrorCode> = Response<null, T
|
|
44
|
+
export type PasswordChangeResponse<T extends ChangePasswordErrorCode | ChangeMyPasswordErrorCode> = Response<null, T, {
|
|
45
|
+
weakPasswordReasons?: WeakPasswordReason[]
|
|
46
|
+
}>
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
export { PasswordChangeManager }
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { Response, ResponseError } from '../utils/Response'
|
|
2
|
-
import { getPasswordWeaknessMessage } from '../utils/password'
|
|
1
|
+
import { Response, ResponseError, ResponseOk } from '../utils/Response'
|
|
3
2
|
import { UserMailer } from '../mailing'
|
|
4
|
-
import { PersonRow } from '../queries'
|
|
3
|
+
import { ConfigurationQuery, PersonRow } from '../queries'
|
|
5
4
|
import { PermissionContext } from '../authorization'
|
|
6
5
|
import { ProjectManager } from './ProjectManager'
|
|
7
6
|
import { DatabaseContext } from '../utils'
|
|
8
7
|
import { ImplementationException } from '../../exceptions'
|
|
9
8
|
import { getPreferredProject } from './helpers/getPreferredProject'
|
|
10
|
-
import { CreatePersonTokenCommand, ResetPasswordCommand
|
|
9
|
+
import { CreatePersonTokenCommand, ResetPasswordCommand } from '../commands/personToken'
|
|
10
|
+
import { PasswordStrengthValidator } from './PasswordStrengthValidator'
|
|
11
|
+
import { ResetPasswordErrorCode, WeakPasswordReason } from '../../schema'
|
|
12
|
+
import { PersonTokenQuery } from '../queries/personToken/PersonTokenQuery'
|
|
13
|
+
import { AuthLogService } from './AuthLogService'
|
|
11
14
|
|
|
12
15
|
interface MailOptions {
|
|
13
16
|
project?: string
|
|
@@ -18,6 +21,7 @@ export class PasswordResetManager {
|
|
|
18
21
|
constructor(
|
|
19
22
|
private readonly mailer: UserMailer,
|
|
20
23
|
private readonly projectManager: ProjectManager,
|
|
24
|
+
private readonly passwordStrengthValidator: PasswordStrengthValidator,
|
|
21
25
|
) { }
|
|
22
26
|
|
|
23
27
|
public async createPasswordResetRequest(
|
|
@@ -49,14 +53,41 @@ export class PasswordResetManager {
|
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
public async resetPassword(dbContext: DatabaseContext, token: string, password: string): Promise<ResetPasswordResponse> {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
const config = await dbContext.queryHandler.fetch(new ConfigurationQuery())
|
|
57
|
+
const tokenRow = await dbContext.queryHandler.fetch(PersonTokenQuery.byToken(token, 'password_reset'))
|
|
58
|
+
if (!tokenRow) {
|
|
59
|
+
return new ResponseError('TOKEN_NOT_FOUND', 'Token not found', {
|
|
60
|
+
[AuthLogService.Key]: new AuthLogService.Bag({}),
|
|
61
|
+
})
|
|
55
62
|
}
|
|
56
|
-
|
|
63
|
+
|
|
64
|
+
const authLogData = new AuthLogService.Bag({
|
|
65
|
+
personId: tokenRow.person_id,
|
|
66
|
+
tokenId: tokenRow.id,
|
|
67
|
+
})
|
|
68
|
+
const weakPassword = await this.passwordStrengthValidator.verify(password, config.password, 'PASSWORD_TOO_WEAK')
|
|
69
|
+
if (!weakPassword.ok) {
|
|
70
|
+
return new ResponseError(weakPassword.error, weakPassword.errorMessage, {
|
|
71
|
+
...weakPassword.metadata ?? {},
|
|
72
|
+
[AuthLogService.Key]: authLogData,
|
|
73
|
+
})
|
|
74
|
+
}
|
|
75
|
+
const resetPasswordResult = await dbContext.commandBus.execute(new ResetPasswordCommand(token, password))
|
|
76
|
+
if (!resetPasswordResult.ok) {
|
|
77
|
+
return new ResponseError(resetPasswordResult.error, resetPasswordResult.errorMessage, {
|
|
78
|
+
...resetPasswordResult.metadata ?? {},
|
|
79
|
+
[AuthLogService.Key]: authLogData,
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
return new ResponseOk({
|
|
83
|
+
[AuthLogService.Key]: authLogData,
|
|
84
|
+
})
|
|
57
85
|
}
|
|
58
86
|
}
|
|
59
87
|
|
|
60
|
-
export type
|
|
61
|
-
|
|
62
|
-
|
|
88
|
+
export type ResetPasswordResponse = Response<{
|
|
89
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
90
|
+
}, ResetPasswordErrorCode, {
|
|
91
|
+
weakPasswordReasons?: WeakPasswordReason[]
|
|
92
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
93
|
+
}>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Config } from '../type/Config'
|
|
2
|
+
import { blacklist } from '../utils/blacklist'
|
|
3
|
+
import { WeakPasswordReason } from '../../schema'
|
|
4
|
+
import { ResponseError, Response, ResponseOk } from '../utils/Response'
|
|
5
|
+
|
|
6
|
+
export class PasswordStrengthValidator {
|
|
7
|
+
public async verify<const Code extends string>(password: string, passwordConfig: Config['password'], errorCode: Code): Promise<ResponseOk<null> | ResponseError<Code, {
|
|
8
|
+
weakPasswordReasons: WeakPasswordReason[]
|
|
9
|
+
}>> {
|
|
10
|
+
const failureReasons: WeakPasswordReason[] = []
|
|
11
|
+
const developerMessage: string[] = []
|
|
12
|
+
|
|
13
|
+
if (password.length < passwordConfig.minLength) {
|
|
14
|
+
failureReasons.push('TOO_SHORT')
|
|
15
|
+
developerMessage.push(`Password is too short. Minimum length is ${passwordConfig.minLength}.`)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (passwordConfig.requireUppercase > 0 && (password.match(/[A-Z]/g) || []).length < passwordConfig.requireUppercase) {
|
|
19
|
+
failureReasons.push('MISSING_UPPERCASE')
|
|
20
|
+
developerMessage.push(`Password must contain at least ${passwordConfig.requireUppercase} uppercase letter${passwordConfig.requireUppercase > 1 ? 's' : ''}.`)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (passwordConfig.requireLowercase > 0 && (password.match(/[a-z]/g) || []).length < passwordConfig.requireLowercase) {
|
|
24
|
+
failureReasons.push('MISSING_LOWERCASE')
|
|
25
|
+
developerMessage.push(`Password must contain at least ${passwordConfig.requireLowercase} lowercase letter${passwordConfig.requireLowercase > 1 ? 's' : ''}.`)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (passwordConfig.requireDigit > 0 && (password.match(/\d/g) || []).length < passwordConfig.requireDigit) {
|
|
29
|
+
failureReasons.push('MISSING_DIGIT')
|
|
30
|
+
developerMessage.push(`Password must contain at least ${passwordConfig.requireDigit} digit${passwordConfig.requireDigit > 1 ? 's' : ''}.`)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (passwordConfig.requireSpecial > 0 && (password.match(/[!@#$%^&*(),.?":{}|<>]/g) || []).length < passwordConfig.requireSpecial) {
|
|
34
|
+
failureReasons.push('MISSING_SPECIAL')
|
|
35
|
+
developerMessage.push(`Password must contain at least ${passwordConfig.requireSpecial} special character${passwordConfig.requireSpecial > 1 ? 's' : ''}.`)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (passwordConfig.pattern && !new RegExp(passwordConfig.pattern).test(password)) {
|
|
39
|
+
failureReasons.push('INVALID_PATTERN')
|
|
40
|
+
developerMessage.push(`Password does not match the required pattern: ${passwordConfig.pattern}.`)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (passwordConfig.checkBlacklist && this.isBlacklisted(password.toLowerCase())) {
|
|
44
|
+
failureReasons.push('BLACKLISTED')
|
|
45
|
+
developerMessage.push(`Password is blacklisted.`)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (failureReasons.length > 0) {
|
|
49
|
+
return new ResponseError(errorCode as any, developerMessage.join(' '), {
|
|
50
|
+
weakPasswordReasons: failureReasons,
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
return new ResponseOk(null)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
private isBlacklisted(password: string): boolean {
|
|
58
|
+
return blacklist.has(password) || blacklist.has(this.decodeLeetspeak(password))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private decodeLeetspeak(input: string): string {
|
|
62
|
+
const leetspeakMap: { [key: string]: string } = {
|
|
63
|
+
'@': 'a',
|
|
64
|
+
'$': 's',
|
|
65
|
+
'0': 'o',
|
|
66
|
+
'1': 'l',
|
|
67
|
+
'3': 'e',
|
|
68
|
+
'7': 't',
|
|
69
|
+
'!': 'i',
|
|
70
|
+
}
|
|
71
|
+
return input
|
|
72
|
+
.split('')
|
|
73
|
+
.map(char => {
|
|
74
|
+
return leetspeakMap[char] || char
|
|
75
|
+
})
|
|
76
|
+
.join('')
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
namespace PasswordStrengthValidator {
|
|
81
|
+
export type Result =
|
|
82
|
+
| { ok: true }
|
|
83
|
+
| { ok: false; reasons: WeakPasswordReason[]; message: string }
|
|
84
|
+
}
|
|
85
|
+
|
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
import { ApiKeyManager } from './apiKey'
|
|
2
|
-
import { PersonQuery, PersonRow } from '../queries'
|
|
2
|
+
import { ConfigurationQuery, PersonQuery, PersonRow } from '../queries'
|
|
3
3
|
import { Response, ResponseError, ResponseOk } from '../utils/Response'
|
|
4
|
-
import {
|
|
5
|
-
ActivatePasswordlessOtpErrorCode,
|
|
6
|
-
ConfigPolicy,
|
|
7
|
-
InitSignInPasswordlessErrorCode,
|
|
8
|
-
InitSignInPasswordlessResult,
|
|
9
|
-
SignInPasswordlessErrorCode,
|
|
10
|
-
} from '../../schema'
|
|
4
|
+
import { ActivatePasswordlessOtpErrorCode, ConfigPolicy, InitSignInPasswordlessErrorCode, InitSignInPasswordlessResult, SignInPasswordlessErrorCode } from '../../schema'
|
|
11
5
|
import { DatabaseContext, validateToken } from '../utils'
|
|
12
|
-
import { ConfigurationManager } from './ConfigurationManager'
|
|
13
6
|
import { UserMailer } from '../mailing'
|
|
14
|
-
import { ActivateOtpCommand, CreatePersonTokenCommand, IncreaseOtpAttemptCommand } from '../commands'
|
|
7
|
+
import { ActivateOtpCommand, CreatePersonTokenCommand, IncreaseOtpAttemptCommand, InvalidateTokenCommand } from '../commands'
|
|
15
8
|
import { getPreferredProject } from './helpers/getPreferredProject'
|
|
16
9
|
import { ProjectManager } from './ProjectManager'
|
|
17
10
|
import { PermissionContext } from '../authorization'
|
|
18
11
|
import { PersonTokenQuery } from '../queries/personToken/PersonTokenQuery'
|
|
19
12
|
import { ImplementationException } from '../../exceptions'
|
|
20
13
|
import { OtpAuthenticator } from './OtpAuthenticator'
|
|
21
|
-
import { InvalidateTokenCommand } from '../commands/personToken/InvalidateTokenCommand'
|
|
22
14
|
import { PersonToken } from '../type'
|
|
15
|
+
import { AuthLogService } from './AuthLogService'
|
|
16
|
+
import { intervalToSeconds } from '../utils/interval'
|
|
23
17
|
|
|
24
18
|
class PasswordlessSignInManager {
|
|
25
19
|
constructor(
|
|
26
20
|
private readonly apiKeyManager: ApiKeyManager,
|
|
27
|
-
private readonly configurationManager: ConfigurationManager,
|
|
28
21
|
private readonly mailer: UserMailer,
|
|
29
22
|
private readonly projectManager: ProjectManager,
|
|
30
23
|
private readonly otpAuthenticator: OtpAuthenticator,
|
|
@@ -39,20 +32,31 @@ class PasswordlessSignInManager {
|
|
|
39
32
|
mailProject?: string
|
|
40
33
|
}): Promise<PasswordlessSignInManager.InitSignInPasswordlessResponse> {
|
|
41
34
|
return db.transaction(async (db): Promise<PasswordlessSignInManager.InitSignInPasswordlessResponse> => {
|
|
42
|
-
const configuration = await
|
|
35
|
+
const configuration = await db.queryHandler.fetch(new ConfigurationQuery())
|
|
43
36
|
if (configuration.passwordless.enabled === 'never') {
|
|
44
|
-
return new ResponseError('PASSWORDLESS_DISABLED', 'Passwordless sign-in is disabled'
|
|
37
|
+
return new ResponseError('PASSWORDLESS_DISABLED', 'Passwordless sign-in is disabled', {
|
|
38
|
+
[AuthLogService.Key]: new AuthLogService.Bag({}),
|
|
39
|
+
})
|
|
45
40
|
}
|
|
46
41
|
|
|
47
42
|
const person = await db.queryHandler.fetch(PersonQuery.byEmail(email))
|
|
48
43
|
if (!person) {
|
|
49
|
-
return new ResponseError('PERSON_NOT_FOUND', `Person ${email} not found
|
|
44
|
+
return new ResponseError('PERSON_NOT_FOUND', `Person ${email} not found`, {
|
|
45
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
46
|
+
personInput: email,
|
|
47
|
+
}),
|
|
48
|
+
})
|
|
50
49
|
}
|
|
51
50
|
if (!this.isEnabled(configuration.passwordless.enabled, person.passwordless_enabled)) {
|
|
52
|
-
return new ResponseError('PASSWORDLESS_DISABLED', 'Passwordless sign-in is disabled for this person'
|
|
51
|
+
return new ResponseError('PASSWORDLESS_DISABLED', 'Passwordless sign-in is disabled for this person', {
|
|
52
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
53
|
+
personInput: email,
|
|
54
|
+
personId: person.id,
|
|
55
|
+
}),
|
|
56
|
+
})
|
|
53
57
|
}
|
|
54
58
|
|
|
55
|
-
const createTokenCommand = CreatePersonTokenCommand.createPasswordlessRequest(person.id, configuration.passwordless.
|
|
59
|
+
const createTokenCommand = CreatePersonTokenCommand.createPasswordlessRequest(person.id, intervalToSeconds(configuration.passwordless.expiration) / 60)
|
|
56
60
|
const result = await db.commandBus.execute(createTokenCommand)
|
|
57
61
|
|
|
58
62
|
|
|
@@ -72,7 +76,16 @@ class PasswordlessSignInManager {
|
|
|
72
76
|
projectId: project?.id ?? null,
|
|
73
77
|
})
|
|
74
78
|
|
|
75
|
-
return new ResponseOk({
|
|
79
|
+
return new ResponseOk({
|
|
80
|
+
requestId: result.id,
|
|
81
|
+
expiresAt: result.expiresAt,
|
|
82
|
+
person,
|
|
83
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
84
|
+
personInput: email,
|
|
85
|
+
personId: person.id,
|
|
86
|
+
tokenId: result.id,
|
|
87
|
+
}),
|
|
88
|
+
})
|
|
76
89
|
})
|
|
77
90
|
}
|
|
78
91
|
|
|
@@ -108,30 +121,61 @@ class PasswordlessSignInManager {
|
|
|
108
121
|
if (tokenValidationResult.error === 'TOKEN_INVALID' && validationType === 'otp') {
|
|
109
122
|
await db.commandBus.execute(new IncreaseOtpAttemptCommand(tokenResult!.id))
|
|
110
123
|
}
|
|
111
|
-
return tokenValidationResult
|
|
124
|
+
return new ResponseError(tokenValidationResult.error, tokenValidationResult.errorMessage, {
|
|
125
|
+
...tokenValidationResult.metadata ?? {},
|
|
126
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
127
|
+
personId: tokenResult?.person_id,
|
|
128
|
+
tokenId: tokenResult?.id,
|
|
129
|
+
}),
|
|
130
|
+
})
|
|
131
|
+
}
|
|
132
|
+
if (!tokenResult) {
|
|
133
|
+
throw new ImplementationException()
|
|
112
134
|
}
|
|
113
135
|
const personRow = await db.queryHandler.fetch(PersonQuery.byId(tokenValidationResult.result.person_id))
|
|
114
136
|
if (!personRow) {
|
|
115
137
|
throw new ImplementationException()
|
|
116
138
|
}
|
|
117
139
|
if (personRow.disabled_at !== null) {
|
|
118
|
-
return new ResponseError('PERSON_DISABLED', `Person is disabled
|
|
140
|
+
return new ResponseError('PERSON_DISABLED', `Person is disabled`, {
|
|
141
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
142
|
+
personId: personRow.id,
|
|
143
|
+
tokenId: tokenResult?.id,
|
|
144
|
+
}),
|
|
145
|
+
})
|
|
119
146
|
}
|
|
120
147
|
|
|
121
148
|
if (personRow.otp_uri && personRow.otp_activated_at) {
|
|
122
149
|
if (!mfaOtp) {
|
|
123
|
-
return new ResponseError('OTP_REQUIRED', `2FA is enabled. OTP token is required
|
|
150
|
+
return new ResponseError('OTP_REQUIRED', `2FA is enabled. OTP token is required`, {
|
|
151
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
152
|
+
personId: personRow.id,
|
|
153
|
+
tokenId: tokenResult?.id,
|
|
154
|
+
}),
|
|
155
|
+
})
|
|
124
156
|
}
|
|
125
157
|
|
|
126
158
|
if (!this.otpAuthenticator.validate({ uri: personRow.otp_uri }, mfaOtp)) {
|
|
127
|
-
return new ResponseError('INVALID_OTP_TOKEN', 'OTP token validation has failed'
|
|
159
|
+
return new ResponseError('INVALID_OTP_TOKEN', 'OTP token validation has failed', {
|
|
160
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
161
|
+
personId: personRow.id,
|
|
162
|
+
tokenId: tokenResult?.id,
|
|
163
|
+
}),
|
|
164
|
+
})
|
|
128
165
|
}
|
|
129
166
|
}
|
|
130
167
|
|
|
131
168
|
await db.commandBus.execute(new InvalidateTokenCommand(tokenValidationResult.result.id))
|
|
132
169
|
const sessionToken = await this.apiKeyManager.createSessionApiKey(db, personRow.identity_id, expiration)
|
|
133
170
|
|
|
134
|
-
return new ResponseOk({
|
|
171
|
+
return new ResponseOk({
|
|
172
|
+
person: personRow,
|
|
173
|
+
token: sessionToken,
|
|
174
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
175
|
+
personId: personRow.id,
|
|
176
|
+
tokenId: tokenResult?.id,
|
|
177
|
+
}),
|
|
178
|
+
})
|
|
135
179
|
})
|
|
136
180
|
}
|
|
137
181
|
|
|
@@ -151,12 +195,24 @@ class PasswordlessSignInManager {
|
|
|
151
195
|
validationType: 'token',
|
|
152
196
|
})
|
|
153
197
|
if (!tokenValidationResult.ok) {
|
|
154
|
-
return tokenValidationResult
|
|
198
|
+
return new ResponseError(tokenValidationResult.error, tokenValidationResult.errorMessage, {
|
|
199
|
+
...tokenValidationResult.metadata ?? {},
|
|
200
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
201
|
+
personId: tokenResult?.person_id,
|
|
202
|
+
tokenId: tokenResult?.id,
|
|
203
|
+
}),
|
|
204
|
+
})
|
|
155
205
|
}
|
|
156
206
|
|
|
157
207
|
await db.commandBus.execute(new ActivateOtpCommand(tokenValidationResult.result.id, otpHash))
|
|
158
208
|
|
|
159
|
-
return new ResponseOk(
|
|
209
|
+
return new ResponseOk({
|
|
210
|
+
person: tokenResult?.person_id,
|
|
211
|
+
[AuthLogService.Key]: new AuthLogService.Bag({
|
|
212
|
+
personId: tokenResult?.person_id,
|
|
213
|
+
tokenId: tokenResult?.id,
|
|
214
|
+
}),
|
|
215
|
+
})
|
|
160
216
|
})
|
|
161
217
|
}
|
|
162
218
|
|
|
@@ -175,16 +231,27 @@ class PasswordlessSignInManager {
|
|
|
175
231
|
}
|
|
176
232
|
|
|
177
233
|
namespace PasswordlessSignInManager {
|
|
178
|
-
export type InitSignInPasswordlessResponse = Response<InitSignInPasswordlessResult
|
|
234
|
+
export type InitSignInPasswordlessResponse = Response<InitSignInPasswordlessResult & {
|
|
235
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
236
|
+
}, InitSignInPasswordlessErrorCode, {
|
|
237
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
238
|
+
}>
|
|
179
239
|
|
|
180
240
|
|
|
181
241
|
interface SignInPasswordlessResult {
|
|
182
242
|
readonly person: PersonRow
|
|
183
243
|
readonly token: string
|
|
244
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
184
245
|
}
|
|
185
|
-
export type SignInPasswordlessResponse = Response<SignInPasswordlessResult, SignInPasswordlessErrorCode
|
|
246
|
+
export type SignInPasswordlessResponse = Response<SignInPasswordlessResult, SignInPasswordlessErrorCode, {
|
|
247
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
248
|
+
}>
|
|
186
249
|
|
|
187
|
-
export type ActivatePasswordlessOtpResponse = Response<
|
|
250
|
+
export type ActivatePasswordlessOtpResponse = Response<{
|
|
251
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
252
|
+
}, ActivatePasswordlessOtpErrorCode, {
|
|
253
|
+
[AuthLogService.Key]: AuthLogService.Bag
|
|
254
|
+
}>
|
|
188
255
|
}
|
|
189
256
|
|
|
190
257
|
export { PasswordlessSignInManager }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PersonQuery } from '../queries'
|
|
1
|
+
import { PersonQuery, PersonRow } from '../queries'
|
|
2
2
|
import { DatabaseContext } from '../utils'
|
|
3
3
|
import { DisablePersonCommand } from '../commands/person/DisablePersonCommand'
|
|
4
4
|
import { ApiKeyManager } from './apiKey'
|
|
@@ -9,37 +9,18 @@ class PersonAccessManager {
|
|
|
9
9
|
|
|
10
10
|
constructor(private readonly apiKeyManager: ApiKeyManager) {}
|
|
11
11
|
|
|
12
|
-
async disablePerson(dbContext: DatabaseContext,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
if (personRow === null) {
|
|
19
|
-
return 'PERSON_NOT_FOUND'
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (personRow.disabled_at !== null) {
|
|
23
|
-
return 'PERSON_ALREADY_DISABLED'
|
|
12
|
+
async disablePerson(dbContext: DatabaseContext, person: PersonRow): Promise<PersonDisableAccessResponse> {
|
|
13
|
+
return await dbContext.transaction(async trx => {
|
|
14
|
+
if (person.disabled_at !== null) {
|
|
15
|
+
return new ResponseError('PERSON_ALREADY_DISABLED', 'Person is already disabled')
|
|
24
16
|
}
|
|
25
17
|
|
|
26
18
|
// Deactivate person & invalidate all api keys associated with person identity
|
|
27
|
-
await this.disablePersonAccount(trx,
|
|
28
|
-
await this.disableIdentityApiKeys(trx,
|
|
19
|
+
await this.disablePersonAccount(trx, person.id)
|
|
20
|
+
await this.disableIdentityApiKeys(trx, person.identity_id)
|
|
29
21
|
|
|
30
|
-
return null
|
|
22
|
+
return new ResponseOk(null)
|
|
31
23
|
})
|
|
32
|
-
|
|
33
|
-
switch (result) {
|
|
34
|
-
case null:
|
|
35
|
-
return new ResponseOk(null)
|
|
36
|
-
|
|
37
|
-
case 'PERSON_ALREADY_DISABLED':
|
|
38
|
-
return new ResponseError(result, 'Person is already disable')
|
|
39
|
-
|
|
40
|
-
case 'PERSON_NOT_FOUND':
|
|
41
|
-
return new ResponseError(result, 'Person not found')
|
|
42
|
-
}
|
|
43
24
|
}
|
|
44
25
|
|
|
45
26
|
private async disablePersonAccount(dbContext: DatabaseContext, personId: string) {
|