@contember/engine-tenant-api 2.2.0-alpha.3 → 2.2.0-alpha.6
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/CLAUDE.md +36 -2
- package/dist/development/index.cjs +32 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +33 -1
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/TenantContainer.cjs +15 -3
- package/dist/development/src/TenantContainer.cjs.map +1 -1
- package/dist/development/src/TenantContainer.js +15 -3
- package/dist/development/src/TenantContainer.js.map +1 -1
- package/dist/development/src/bridges/system/IdentityFetcher.cjs +2 -1
- package/dist/development/src/bridges/system/IdentityFetcher.cjs.map +1 -1
- package/dist/development/src/bridges/system/IdentityFetcher.js +2 -1
- package/dist/development/src/bridges/system/IdentityFetcher.js.map +1 -1
- package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs +10 -0
- package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs.map +1 -0
- package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.js +11 -0
- package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.js.map +1 -0
- package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs +9 -0
- package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs.map +1 -0
- package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.js +10 -0
- package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.js.map +1 -0
- package/dist/development/src/migrations/2026-08-04-120000-config-panel.cjs +11 -0
- package/dist/development/src/migrations/2026-08-04-120000-config-panel.cjs.map +1 -0
- package/dist/development/src/migrations/2026-08-04-120000-config-panel.js +12 -0
- package/dist/development/src/migrations/2026-08-04-120000-config-panel.js.map +1 -0
- package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs +18 -0
- package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs.map +1 -0
- package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js +19 -0
- package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js.map +1 -0
- package/dist/development/src/migrations/runner.cjs +11 -2
- package/dist/development/src/migrations/runner.cjs.map +1 -1
- package/dist/development/src/migrations/runner.js +11 -2
- package/dist/development/src/migrations/runner.js.map +1 -1
- package/dist/development/src/migrations/snapshot.cjs +8 -2
- package/dist/development/src/migrations/snapshot.cjs.map +1 -1
- package/dist/development/src/migrations/snapshot.js +8 -2
- package/dist/development/src/migrations/snapshot.js.map +1 -1
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
- package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
- package/dist/development/src/model/commands/idp/CreateIdpCommand.cjs +8 -2
- package/dist/development/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/idp/CreateIdpCommand.js +8 -2
- package/dist/development/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
- package/dist/development/src/model/commands/idp/UpdateIdpCommand.cjs +6 -2
- package/dist/development/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/idp/UpdateIdpCommand.js +6 -2
- package/dist/development/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
- package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
- package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
- package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
- package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
- package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
- package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
- package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
- package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
- package/dist/development/src/model/commands/person/EnablePersonCommand.cjs +17 -0
- package/dist/development/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
- package/dist/development/src/model/commands/person/EnablePersonCommand.js +17 -0
- package/dist/development/src/model/commands/person/EnablePersonCommand.js.map +1 -0
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.js +4 -0
- package/dist/development/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
- package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs +21 -0
- package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs.map +1 -0
- package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js +21 -0
- package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js.map +1 -0
- package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.cjs +1 -1
- package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.js +1 -1
- package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.js.map +1 -1
- package/dist/development/src/model/queries/idp/helpers.cjs +3 -3
- package/dist/development/src/model/queries/idp/helpers.cjs.map +1 -1
- package/dist/development/src/model/queries/idp/helpers.js +3 -3
- package/dist/development/src/model/queries/idp/helpers.js.map +1 -1
- package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
- package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
- package/dist/development/src/model/queries/membership/ProjectMembersQuery.js +1 -1
- package/dist/development/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
- package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
- package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
- package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
- package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
- package/dist/development/src/model/service/AuthLogService.cjs +8 -2
- package/dist/development/src/model/service/AuthLogService.cjs.map +1 -1
- package/dist/development/src/model/service/AuthLogService.js +8 -2
- package/dist/development/src/model/service/AuthLogService.js.map +1 -1
- package/dist/development/src/model/service/IDPSignInManager.cjs +29 -2
- package/dist/development/src/model/service/IDPSignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/IDPSignInManager.js +29 -2
- package/dist/development/src/model/service/IDPSignInManager.js.map +1 -1
- package/dist/development/src/model/service/PanelAccessResolver.cjs +31 -0
- package/dist/development/src/model/service/PanelAccessResolver.cjs.map +1 -0
- package/dist/development/src/model/service/PanelAccessResolver.js +31 -0
- package/dist/development/src/model/service/PanelAccessResolver.js.map +1 -0
- package/dist/development/src/model/service/PasswordResetManager.cjs +5 -0
- package/dist/development/src/model/service/PasswordResetManager.cjs.map +1 -1
- package/dist/development/src/model/service/PasswordResetManager.js +5 -0
- package/dist/development/src/model/service/PasswordResetManager.js.map +1 -1
- package/dist/development/src/model/service/PasswordlessSignInManager.cjs +19 -0
- package/dist/development/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/PasswordlessSignInManager.js +19 -0
- package/dist/development/src/model/service/PasswordlessSignInManager.js.map +1 -1
- package/dist/development/src/model/service/PersonAccessManager.cjs +10 -2
- package/dist/development/src/model/service/PersonAccessManager.cjs.map +1 -1
- package/dist/development/src/model/service/PersonAccessManager.js +10 -2
- package/dist/development/src/model/service/PersonAccessManager.js.map +1 -1
- package/dist/development/src/model/service/SignInManager.cjs +5 -0
- package/dist/development/src/model/service/SignInManager.cjs.map +1 -1
- package/dist/development/src/model/service/SignInManager.js +5 -0
- package/dist/development/src/model/service/SignInManager.js.map +1 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
- package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
- package/dist/development/src/model/service/apiKey/ApiKeyManager.js +4 -3
- package/dist/development/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
- package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
- package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
- package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
- package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
- package/dist/development/src/model/service/idp/ClaimMapping.cjs +187 -0
- package/dist/development/src/model/service/idp/ClaimMapping.cjs.map +1 -0
- package/dist/development/src/model/service/idp/ClaimMapping.js +170 -0
- package/dist/development/src/model/service/idp/ClaimMapping.js.map +1 -0
- package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
- package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
- package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
- package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
- package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
- package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
- package/dist/development/src/model/service/idp/ClaimMappingValidation.js +83 -0
- package/dist/development/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
- package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
- package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
- package/dist/development/src/model/service/idp/IDPClaimSyncService.js +260 -0
- package/dist/development/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
- package/dist/development/src/model/service/idp/IDPManager.cjs +96 -20
- package/dist/development/src/model/service/idp/IDPManager.cjs.map +1 -1
- package/dist/development/src/model/service/idp/IDPManager.js +96 -20
- package/dist/development/src/model/service/idp/IDPManager.js.map +1 -1
- package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
- package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
- package/dist/development/src/model/service/idp/IdpSessionRevalidator.js +55 -1
- package/dist/development/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
- package/dist/development/src/model/service/idp/PersonIdentityProviderManager.cjs +6 -0
- package/dist/development/src/model/service/idp/PersonIdentityProviderManager.cjs.map +1 -1
- package/dist/development/src/model/service/idp/PersonIdentityProviderManager.js +6 -0
- package/dist/development/src/model/service/idp/PersonIdentityProviderManager.js.map +1 -1
- package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
- package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
- package/dist/development/src/model/service/idp/providers/OIDCHelpers.js +69 -33
- package/dist/development/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
- package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
- package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
- package/dist/development/src/model/service/idp/providers/OIDCProvider.js +4 -1
- package/dist/development/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
- package/dist/development/src/model/utils/DatabaseContext.cjs +7 -2
- package/dist/development/src/model/utils/DatabaseContext.cjs.map +1 -1
- package/dist/development/src/model/utils/DatabaseContext.js +8 -3
- package/dist/development/src/model/utils/DatabaseContext.js.map +1 -1
- package/dist/development/src/resolvers/ResolverFactory.cjs +6 -2
- package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/ResolverFactory.js +6 -2
- package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +4 -2
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js +4 -2
- package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +4 -2
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +4 -2
- package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/audit.cjs +1 -0
- package/dist/development/src/resolvers/mutation/idp/audit.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/idp/audit.js +1 -0
- package/dist/development/src/resolvers/mutation/idp/audit.js.map +1 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
- package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
- package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
- package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
- package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
- package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
- package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +6 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js +6 -1
- package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs +4 -3
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js +4 -3
- package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
- 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 +2 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
- package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/AuthLogQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/IDPQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/PersonQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
- package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
- package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/query/ProjectQueryResolver.js +5 -3
- package/dist/development/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
- package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
- package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
- package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
- package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
- package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
- package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
- package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
- package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
- package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
- package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/types/IdentityTypeResolver.js +37 -4
- package/dist/development/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
- package/dist/development/src/resolvers/types/PersonTypeResolver.cjs +30 -1
- package/dist/development/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/types/PersonTypeResolver.js +30 -1
- package/dist/development/src/resolvers/types/PersonTypeResolver.js.map +1 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.js +25 -1
- package/dist/development/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
- package/dist/development/src/schema/tenant.graphql.cjs +144 -0
- package/dist/development/src/schema/tenant.graphql.cjs.map +1 -1
- package/dist/development/src/schema/tenant.graphql.js +144 -0
- package/dist/development/src/schema/tenant.graphql.js.map +1 -1
- package/dist/production/index.cjs +32 -0
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +33 -1
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/TenantContainer.cjs +15 -3
- package/dist/production/src/TenantContainer.cjs.map +1 -1
- package/dist/production/src/TenantContainer.js +15 -3
- package/dist/production/src/TenantContainer.js.map +1 -1
- package/dist/production/src/bridges/system/IdentityFetcher.cjs +2 -1
- package/dist/production/src/bridges/system/IdentityFetcher.cjs.map +1 -1
- package/dist/production/src/bridges/system/IdentityFetcher.js +2 -1
- package/dist/production/src/bridges/system/IdentityFetcher.js.map +1 -1
- package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs +10 -0
- package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs.map +1 -0
- package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js +11 -0
- package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js.map +1 -0
- package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs +9 -0
- package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs.map +1 -0
- package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js +10 -0
- package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js.map +1 -0
- package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs +11 -0
- package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs.map +1 -0
- package/dist/production/src/migrations/2026-08-04-120000-config-panel.js +12 -0
- package/dist/production/src/migrations/2026-08-04-120000-config-panel.js.map +1 -0
- package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs +18 -0
- package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs.map +1 -0
- package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js +19 -0
- package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js.map +1 -0
- package/dist/production/src/migrations/runner.cjs +11 -2
- package/dist/production/src/migrations/runner.cjs.map +1 -1
- package/dist/production/src/migrations/runner.js +11 -2
- package/dist/production/src/migrations/runner.js.map +1 -1
- package/dist/production/src/migrations/snapshot.cjs +8 -2
- package/dist/production/src/migrations/snapshot.cjs.map +1 -1
- package/dist/production/src/migrations/snapshot.js +8 -2
- package/dist/production/src/migrations/snapshot.js.map +1 -1
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
- package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
- package/dist/production/src/model/commands/idp/CreateIdpCommand.cjs +8 -2
- package/dist/production/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/idp/CreateIdpCommand.js +8 -2
- package/dist/production/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
- package/dist/production/src/model/commands/idp/UpdateIdpCommand.cjs +6 -2
- package/dist/production/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/idp/UpdateIdpCommand.js +6 -2
- package/dist/production/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
- package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
- package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
- package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
- package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
- package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
- package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
- package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
- package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
- package/dist/production/src/model/commands/person/EnablePersonCommand.cjs +17 -0
- package/dist/production/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
- package/dist/production/src/model/commands/person/EnablePersonCommand.js +17 -0
- package/dist/production/src/model/commands/person/EnablePersonCommand.js.map +1 -0
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.js +4 -0
- package/dist/production/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
- package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs +21 -0
- package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs.map +1 -0
- package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js +21 -0
- package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js.map +1 -0
- package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.cjs +1 -1
- package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.js +1 -1
- package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.js.map +1 -1
- package/dist/production/src/model/queries/idp/helpers.cjs +3 -3
- package/dist/production/src/model/queries/idp/helpers.cjs.map +1 -1
- package/dist/production/src/model/queries/idp/helpers.js +3 -3
- package/dist/production/src/model/queries/idp/helpers.js.map +1 -1
- package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
- package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
- package/dist/production/src/model/queries/membership/ProjectMembersQuery.js +1 -1
- package/dist/production/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
- package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
- package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
- package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
- package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
- package/dist/production/src/model/service/AuthLogService.cjs +8 -2
- package/dist/production/src/model/service/AuthLogService.cjs.map +1 -1
- package/dist/production/src/model/service/AuthLogService.js +8 -2
- package/dist/production/src/model/service/AuthLogService.js.map +1 -1
- package/dist/production/src/model/service/IDPSignInManager.cjs +29 -2
- package/dist/production/src/model/service/IDPSignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/IDPSignInManager.js +29 -2
- package/dist/production/src/model/service/IDPSignInManager.js.map +1 -1
- package/dist/production/src/model/service/PanelAccessResolver.cjs +31 -0
- package/dist/production/src/model/service/PanelAccessResolver.cjs.map +1 -0
- package/dist/production/src/model/service/PanelAccessResolver.js +31 -0
- package/dist/production/src/model/service/PanelAccessResolver.js.map +1 -0
- package/dist/production/src/model/service/PasswordResetManager.cjs +5 -0
- package/dist/production/src/model/service/PasswordResetManager.cjs.map +1 -1
- package/dist/production/src/model/service/PasswordResetManager.js +5 -0
- package/dist/production/src/model/service/PasswordResetManager.js.map +1 -1
- package/dist/production/src/model/service/PasswordlessSignInManager.cjs +19 -0
- package/dist/production/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/PasswordlessSignInManager.js +19 -0
- package/dist/production/src/model/service/PasswordlessSignInManager.js.map +1 -1
- package/dist/production/src/model/service/PersonAccessManager.cjs +10 -2
- package/dist/production/src/model/service/PersonAccessManager.cjs.map +1 -1
- package/dist/production/src/model/service/PersonAccessManager.js +10 -2
- package/dist/production/src/model/service/PersonAccessManager.js.map +1 -1
- package/dist/production/src/model/service/SignInManager.cjs +5 -0
- package/dist/production/src/model/service/SignInManager.cjs.map +1 -1
- package/dist/production/src/model/service/SignInManager.js +5 -0
- package/dist/production/src/model/service/SignInManager.js.map +1 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
- package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
- package/dist/production/src/model/service/apiKey/ApiKeyManager.js +4 -3
- package/dist/production/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
- package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
- package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
- package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
- package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
- package/dist/production/src/model/service/idp/ClaimMapping.cjs +187 -0
- package/dist/production/src/model/service/idp/ClaimMapping.cjs.map +1 -0
- package/dist/production/src/model/service/idp/ClaimMapping.js +170 -0
- package/dist/production/src/model/service/idp/ClaimMapping.js.map +1 -0
- package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
- package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
- package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
- package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
- package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
- package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
- package/dist/production/src/model/service/idp/ClaimMappingValidation.js +83 -0
- package/dist/production/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
- package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
- package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
- package/dist/production/src/model/service/idp/IDPClaimSyncService.js +260 -0
- package/dist/production/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
- package/dist/production/src/model/service/idp/IDPManager.cjs +96 -20
- package/dist/production/src/model/service/idp/IDPManager.cjs.map +1 -1
- package/dist/production/src/model/service/idp/IDPManager.js +96 -20
- package/dist/production/src/model/service/idp/IDPManager.js.map +1 -1
- package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
- package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
- package/dist/production/src/model/service/idp/IdpSessionRevalidator.js +55 -1
- package/dist/production/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
- package/dist/production/src/model/service/idp/PersonIdentityProviderManager.cjs +6 -0
- package/dist/production/src/model/service/idp/PersonIdentityProviderManager.cjs.map +1 -1
- package/dist/production/src/model/service/idp/PersonIdentityProviderManager.js +6 -0
- package/dist/production/src/model/service/idp/PersonIdentityProviderManager.js.map +1 -1
- package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
- package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
- package/dist/production/src/model/service/idp/providers/OIDCHelpers.js +69 -33
- package/dist/production/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
- package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
- package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
- package/dist/production/src/model/service/idp/providers/OIDCProvider.js +4 -1
- package/dist/production/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
- package/dist/production/src/model/utils/DatabaseContext.cjs +7 -2
- package/dist/production/src/model/utils/DatabaseContext.cjs.map +1 -1
- package/dist/production/src/model/utils/DatabaseContext.js +8 -3
- package/dist/production/src/model/utils/DatabaseContext.js.map +1 -1
- package/dist/production/src/resolvers/ResolverFactory.cjs +6 -2
- package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/ResolverFactory.js +6 -2
- package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +4 -2
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js +4 -2
- package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +4 -2
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +4 -2
- package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/audit.cjs +1 -0
- package/dist/production/src/resolvers/mutation/idp/audit.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/idp/audit.js +1 -0
- package/dist/production/src/resolvers/mutation/idp/audit.js.map +1 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
- package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
- package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
- package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
- package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
- package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
- package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +6 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js +6 -1
- package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs +4 -3
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js +4 -3
- package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
- 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 +2 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
- 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 +2 -1
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
- package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/AuthLogQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/IDPQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/PersonQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
- package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
- package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/query/ProjectQueryResolver.js +5 -3
- package/dist/production/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
- package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
- package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
- package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
- package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
- package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
- package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
- package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
- package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
- package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
- package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/types/IdentityTypeResolver.js +37 -4
- package/dist/production/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
- package/dist/production/src/resolvers/types/PersonTypeResolver.cjs +30 -1
- package/dist/production/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/types/PersonTypeResolver.js +30 -1
- package/dist/production/src/resolvers/types/PersonTypeResolver.js.map +1 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.js +25 -1
- package/dist/production/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
- package/dist/production/src/schema/tenant.graphql.cjs +144 -0
- package/dist/production/src/schema/tenant.graphql.cjs.map +1 -1
- package/dist/production/src/schema/tenant.graphql.js +144 -0
- package/dist/production/src/schema/tenant.graphql.js.map +1 -1
- package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/gql/addProjectMember.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/changeMyPassword.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/changeMyProfile.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/changePassword.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/changeProfile.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/confirmOtp.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/createApiKey.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/createResetPasswordRequest.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/createSessionToken.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/emailOtp.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/emailVerification.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/invite.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/myIdentityProviders.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts +4 -1
- package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/prepareOtp.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/resetPassword.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/signIn.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/signInIdp.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/signUp.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/unmanagedInvite.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/gql/updateProjectMember.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/localAuthenticationDisabled.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/localAuthenticationDisabled.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/sql/authLogSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/authPolicySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/consumeBackupCodeSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createApiKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createIdentitySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createMembershipSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createMembershipVariableSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createPersonSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createPersonTokenSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/createSessionKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/disableApiKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/disableOneOffKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/emailOtpSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/generateBackupCodesSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getApiKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getConfigSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getIdentityByIdSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getIdentityProjectsSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getIdpBySlugSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getIdpSessionByApiKeySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getMailTemplateSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts +1 -1
- package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getPersonByEmailSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getPersonByIdSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getPersonByIdentity.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getPersonByIdpSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getPersonsByIdentitySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts +1 -1
- package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/getProjectMembershipSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/listApiKeysSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts +2 -0
- package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/listProjectSecretsSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/listSessionsSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.d.ts +10 -0
- package/dist/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/sql/loginHistorySql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/patchVariablesSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/personIdentityProvidersSql.d.ts +1 -0
- package/dist/tests/cases/integration/mocked/sql/personIdentityProvidersSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts +8 -0
- package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts.map +1 -0
- package/dist/tests/cases/integration/mocked/sql/selectMembershipsSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/setEmailOtpEnabledSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/sqlTransaction.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/updatePesonNameSql.d.ts.map +1 -1
- package/dist/tests/cases/integration/mocked/sql/updatePesonPasswordSql.d.ts.map +1 -1
- package/dist/tests/cases/unit/databaseContextRetry.test.d.ts +2 -0
- package/dist/tests/cases/unit/databaseContextRetry.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts +2 -0
- package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts +2 -0
- package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts +2 -0
- package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts +2 -0
- package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts +2 -0
- package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/panelAccessResolver.test.d.ts +2 -0
- package/dist/tests/cases/unit/panelAccessResolver.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts +2 -0
- package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts.map +1 -0
- package/dist/tests/src/IdPMock.d.ts.map +1 -1
- package/dist/tests/src/dbUtils.d.ts.map +1 -1
- package/dist/tests/src/tags.d.ts.map +1 -1
- package/dist/tests/src/testGraphql.d.ts.map +1 -1
- package/dist/tests/src/testTenant.d.ts +7 -1
- package/dist/tests/src/testTenant.d.ts.map +1 -1
- package/dist/tests/src/testUuid.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/TenantContainer.d.ts +21 -13
- package/dist/types/TenantContainer.d.ts.map +1 -1
- package/dist/types/bridges/system/IdentityFetcher.d.ts +2 -2
- package/dist/types/bridges/system/IdentityFetcher.d.ts.map +1 -1
- package/dist/types/exceptions.d.ts.map +1 -1
- package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts +3 -0
- package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts.map +1 -0
- package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts +3 -0
- package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts.map +1 -0
- package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts +3 -0
- package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts.map +1 -0
- package/dist/types/migrations/2026-09-04-120000-idp-disable-local-authentication.d.ts +3 -0
- package/dist/types/migrations/2026-09-04-120000-idp-disable-local-authentication.d.ts.map +1 -0
- package/dist/types/migrations/runner.d.ts.map +1 -1
- package/dist/types/migrations/snapshot-factory.d.ts.map +1 -1
- package/dist/types/migrations/snapshot.d.ts.map +1 -1
- package/dist/types/migrations/tenantCredentials.d.ts.map +1 -1
- package/dist/types/model/authorization/AclSchemaAccessNodeFactory.d.ts.map +1 -1
- package/dist/types/model/authorization/DirectPermissionsAccessNode.d.ts.map +1 -1
- package/dist/types/model/authorization/Identity.d.ts.map +1 -1
- package/dist/types/model/authorization/IdentityFactory.d.ts.map +1 -1
- package/dist/types/model/authorization/IdentityScope.d.ts.map +1 -1
- package/dist/types/model/authorization/MembershipMatcher.d.ts.map +1 -1
- package/dist/types/model/authorization/PermissionActions.d.ts.map +1 -1
- package/dist/types/model/authorization/PermissionContext.d.ts.map +1 -1
- package/dist/types/model/authorization/PermissionContextFactory.d.ts.map +1 -1
- package/dist/types/model/authorization/PermissionsFactory.d.ts.map +1 -1
- package/dist/types/model/authorization/ProjectScope.d.ts.map +1 -1
- package/dist/types/model/authorization/ProjectScopeFactory.d.ts.map +1 -1
- package/dist/types/model/commands/CommandBus.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/ApiKeyHelper.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/CreateApiKeyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/DisableApiKeyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/DisableIdentityApiKeysCommand.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/DisableOneOffApiKeyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts +1 -1
- package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/authLog/CreateAuthLogEntryCommand.d.ts.map +1 -1
- package/dist/types/model/commands/authPolicy/CreateAuthPolicyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/authPolicy/DeleteAuthPolicyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/authPolicy/UpdateAuthPolicyCommand.d.ts.map +1 -1
- package/dist/types/model/commands/backupCode/ConsumeBackupCodeCommand.d.ts.map +1 -1
- package/dist/types/model/commands/backupCode/CreateBackupCodeCommand.d.ts.map +1 -1
- package/dist/types/model/commands/backupCode/DeleteBackupCodesCommand.d.ts.map +1 -1
- package/dist/types/model/commands/configuration/UpdateConfigurationCommand.d.ts.map +1 -1
- package/dist/types/model/commands/identity/CreateIdentityCommand.d.ts.map +1 -1
- package/dist/types/model/commands/identity/PatchIdentityGlobalRoles.d.ts.map +1 -1
- package/dist/types/model/commands/idp/ClaimIdpRevalidationCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/CreateIdpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/CreateIdpSessionCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/DisableIdpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/DisconnectPersonIdentityProviderCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/EnableIdpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/UpdateIdpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/idp/UpdateIdpSessionCommand.d.ts.map +1 -1
- package/dist/types/model/commands/mailTemplate/AddMailTemplateCommand.d.ts.map +1 -1
- package/dist/types/model/commands/mailTemplate/RemoveMailTemplateCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/AddProjectMemberCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/CreateOrUpdateProjectMembershipCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/RemoveProjectMemberCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/{RemoveProjectMembershipsCommand.d.ts → RemoveProjectMembershipCommand.d.ts} +1 -1
- package/dist/types/model/commands/membership/RemoveProjectMembershipCommand.d.ts.map +1 -0
- package/dist/types/model/commands/membership/UpdateProjectMemberCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/index.d.ts +2 -1
- package/dist/types/model/commands/membership/index.d.ts.map +1 -1
- package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.d.ts.map +1 -1
- package/dist/types/model/commands/membership/variables/index.d.ts +1 -0
- package/dist/types/model/commands/membership/variables/index.d.ts.map +1 -1
- package/dist/types/model/commands/otp/ConfirmOtpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/otp/DisableOtpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/otp/PrepareOtpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/otp/ReEncryptOtpSecretCommand.d.ts.map +1 -1
- package/dist/types/model/commands/otp/SetEmailOtpEnabledCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/ChangePasswordCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/ChangeProfileCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/CreatePersonCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/DisablePersonCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/EnablePersonCommand.d.ts +7 -0
- package/dist/types/model/commands/person/EnablePersonCommand.d.ts.map +1 -0
- package/dist/types/model/commands/person/MarkEmailVerifiedCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/ResetPersonMfaCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/SetMfaGraceUntilCommand.d.ts.map +1 -1
- package/dist/types/model/commands/person/TogglePersonPasswordlessCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/ActivateOtpCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/ClaimOtpAttemptCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/CreatePersonTokenCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/IncreaseOtpAttemptCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/InvalidateEmailOtpTokensCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/InvalidateTokenCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/ResetPasswordCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/SaveEmailOtpTokenCommand.d.ts.map +1 -1
- package/dist/types/model/commands/personToken/SavePersonTokenCommand.d.ts.map +1 -1
- package/dist/types/model/commands/project/CreateProjectCommand.d.ts.map +1 -1
- package/dist/types/model/commands/project/SetProjectSecretCommand.d.ts.map +1 -1
- package/dist/types/model/commands/project/UpdateProjectCommand.d.ts.map +1 -1
- package/dist/types/model/commands/rateLimit/RecordRateLimitEventCommand.d.ts.map +1 -1
- package/dist/types/model/dtos/Password.d.ts.map +1 -1
- package/dist/types/model/mailing/UserMailer.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/BackupCodesExhausted.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/EmailChangeNotify.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/EmailChangeVerify.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/EmailOtp.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/EmailVerification.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/ExistingUserInvited.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/ForcedSignOut.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/Layout.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/NewUserInvited.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/PasswordReset.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/PasswordlessSignIn.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/templates/UnusualLogin.mustache.d.ts.map +1 -1
- package/dist/types/model/mailing/type.d.ts.map +1 -1
- package/dist/types/model/queries/apiKey/ApiKeyListQuery.d.ts.map +1 -1
- package/dist/types/model/queries/apiKey/ApiKeyQuery.d.ts.map +1 -1
- package/dist/types/model/queries/apiKey/ApiKeySessionsQuery.d.ts.map +1 -1
- package/dist/types/model/queries/authLog/AuthLogQuery.d.ts.map +1 -1
- package/dist/types/model/queries/authLog/NextLoginAttemptQuery.d.ts.map +1 -1
- package/dist/types/model/queries/authLog/NextMailAttemptQuery.d.ts.map +1 -1
- package/dist/types/model/queries/authPolicy/AuthPoliciesQuery.d.ts.map +1 -1
- package/dist/types/model/queries/configuration/ConfigurationQuery.d.ts.map +1 -1
- package/dist/types/model/queries/identity/IdentityQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/IdentityProviderBySlugQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/IdentityProvidersQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/IdpSessionByApiKeyQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/IdpSessionsBySidQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/IdpSessionsBySubQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/LocalAuthDisablingIdpsQuery.d.ts +18 -0
- package/dist/types/model/queries/idp/LocalAuthDisablingIdpsQuery.d.ts.map +1 -0
- package/dist/types/model/queries/idp/PersonIdentityProvidersQuery.d.ts +1 -0
- package/dist/types/model/queries/idp/PersonIdentityProvidersQuery.d.ts.map +1 -1
- package/dist/types/model/queries/idp/helpers.d.ts +1 -1
- package/dist/types/model/queries/idp/helpers.d.ts.map +1 -1
- package/dist/types/model/queries/idp/index.d.ts +1 -0
- package/dist/types/model/queries/idp/index.d.ts.map +1 -1
- package/dist/types/model/queries/idp/types.d.ts +1 -0
- package/dist/types/model/queries/idp/types.d.ts.map +1 -1
- package/dist/types/model/queries/mailTemplate/MailTemplateListQuery.d.ts.map +1 -1
- package/dist/types/model/queries/mailTemplate/MailTemplateQuery.d.ts.map +1 -1
- package/dist/types/model/queries/membership/AllProjectRolesByIdentityQuery.d.ts.map +1 -1
- package/dist/types/model/queries/membership/ProjectMembersQuery.d.ts.map +1 -1
- package/dist/types/model/queries/membership/ProjectMembershipByIdentityQuery.d.ts.map +1 -1
- package/dist/types/model/queries/membership/ProjectRolesByIdentityQuery.d.ts.map +1 -1
- package/dist/types/model/queries/membership/ProjectSlugSpecification.d.ts.map +1 -1
- package/dist/types/model/queries/person/PersonByIdPQuery.d.ts.map +1 -1
- package/dist/types/model/queries/person/PersonByIdentityBatchQuery.d.ts.map +1 -1
- package/dist/types/model/queries/person/PersonQuery.d.ts.map +1 -1
- package/dist/types/model/queries/person/PersonQueryBuilderFactory.d.ts.map +1 -1
- package/dist/types/model/queries/person/PersonsQuery.d.ts.map +1 -1
- package/dist/types/model/queries/person/types.d.ts +1 -0
- package/dist/types/model/queries/person/types.d.ts.map +1 -1
- package/dist/types/model/queries/personToken/PersonTokenQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectBySlugQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectSecretKeysQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectSecretsQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectUpdateTimestampQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectsByIdentityQuery.d.ts.map +1 -1
- package/dist/types/model/queries/project/ProjectsQuery.d.ts.map +1 -1
- package/dist/types/model/queries/rateLimit/RateLimitCountQuery.d.ts.map +1 -1
- package/dist/types/model/service/AuthLogService.d.ts.map +1 -1
- package/dist/types/model/service/AuthPolicyManager.d.ts.map +1 -1
- package/dist/types/model/service/AuthPolicyResolver.d.ts.map +1 -1
- package/dist/types/model/service/BackupCodeManager.d.ts.map +1 -1
- package/dist/types/model/service/ConfigurationManager.d.ts.map +1 -1
- package/dist/types/model/service/EmailChangeManager.d.ts.map +1 -1
- package/dist/types/model/service/EmailOtpManager.d.ts.map +1 -1
- package/dist/types/model/service/EmailValidator.d.ts.map +1 -1
- package/dist/types/model/service/EmailVerificationManager.d.ts.map +1 -1
- package/dist/types/model/service/HibpChecker.d.ts.map +1 -1
- package/dist/types/model/service/IDPSignInManager.d.ts +11 -1
- package/dist/types/model/service/IDPSignInManager.d.ts.map +1 -1
- package/dist/types/model/service/InviteManager.d.ts.map +1 -1
- package/dist/types/model/service/LoginRiskAnalyzer.d.ts +1 -1
- package/dist/types/model/service/LoginRiskAnalyzer.d.ts.map +1 -1
- package/dist/types/model/service/MailTemplateManager.d.ts.map +1 -1
- package/dist/types/model/service/MembershipValidator.d.ts.map +1 -1
- package/dist/types/model/service/OtpAuthenticator.d.ts.map +1 -1
- package/dist/types/model/service/OtpManager.d.ts.map +1 -1
- package/dist/types/model/service/PanelAccessResolver.d.ts +19 -0
- package/dist/types/model/service/PanelAccessResolver.d.ts.map +1 -0
- package/dist/types/model/service/PasswordChangeManager.d.ts.map +1 -1
- package/dist/types/model/service/PasswordResetManager.d.ts.map +1 -1
- package/dist/types/model/service/PasswordStrengthValidator.d.ts.map +1 -1
- package/dist/types/model/service/PasswordlessSignInManager.d.ts.map +1 -1
- package/dist/types/model/service/PersonAccessManager.d.ts +5 -2
- package/dist/types/model/service/PersonAccessManager.d.ts.map +1 -1
- package/dist/types/model/service/PersonManager.d.ts.map +1 -1
- package/dist/types/model/service/ProjectManager.d.ts.map +1 -1
- package/dist/types/model/service/ProjectMemberManager.d.ts.map +1 -1
- package/dist/types/model/service/RateLimiter.d.ts.map +1 -1
- package/dist/types/model/service/RolesManager.d.ts.map +1 -1
- package/dist/types/model/service/SecretsManager.d.ts.map +1 -1
- package/dist/types/model/service/SignInManager.d.ts.map +1 -1
- package/dist/types/model/service/SignOutManager.d.ts.map +1 -1
- 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/service/apiKey/ApiKeyService.d.ts.map +1 -1
- package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts +18 -0
- package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts.map +1 -1
- package/dist/types/model/service/captcha/CaptchaValidator.d.ts.map +1 -1
- package/dist/types/model/service/captcha/HCaptchaProvider.d.ts.map +1 -1
- package/dist/types/model/service/captcha/RecaptchaV3Provider.d.ts.map +1 -1
- package/dist/types/model/service/captcha/TurnstileProvider.d.ts.map +1 -1
- package/dist/types/model/service/helpers/getPreferredProject.d.ts.map +1 -1
- package/dist/types/model/service/helpers/isPasswordlessEnabled.d.ts.map +1 -1
- package/dist/types/model/service/idp/BackchannelLogoutManager.d.ts.map +1 -1
- package/dist/types/model/service/idp/ClaimMapping.d.ts +330 -0
- package/dist/types/model/service/idp/ClaimMapping.d.ts.map +1 -0
- package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts +30 -0
- package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts.map +1 -0
- package/dist/types/model/service/idp/ClaimMappingValidation.d.ts +55 -0
- package/dist/types/model/service/idp/ClaimMappingValidation.d.ts.map +1 -0
- package/dist/types/model/service/idp/IDPClaimSyncService.d.ts +113 -0
- package/dist/types/model/service/idp/IDPClaimSyncService.d.ts.map +1 -0
- package/dist/types/model/service/idp/IDPHandlerRegistry.d.ts.map +1 -1
- package/dist/types/model/service/idp/IDPManager.d.ts +31 -1
- package/dist/types/model/service/idp/IDPManager.d.ts.map +1 -1
- package/dist/types/model/service/idp/IdentityProviderHandler.d.ts +7 -0
- package/dist/types/model/service/idp/IdentityProviderHandler.d.ts.map +1 -1
- package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts +13 -1
- package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts.map +1 -1
- package/dist/types/model/service/idp/PersonIdentityProviderManager.d.ts.map +1 -1
- package/dist/types/model/service/idp/index.d.ts +4 -0
- package/dist/types/model/service/idp/index.d.ts.map +1 -1
- package/dist/types/model/service/idp/providers/AppleProvider.d.ts +2 -2
- package/dist/types/model/service/idp/providers/AppleProvider.d.ts.map +1 -1
- package/dist/types/model/service/idp/providers/FacebookProvider.d.ts +2 -2
- package/dist/types/model/service/idp/providers/FacebookProvider.d.ts.map +1 -1
- package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts +13 -1
- package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts.map +1 -1
- package/dist/types/model/service/idp/providers/OIDCProvider.d.ts +1 -1
- package/dist/types/model/service/idp/providers/OIDCProvider.d.ts.map +1 -1
- package/dist/types/model/service/idp/providers/OIDCTypes.d.ts +5 -5
- package/dist/types/model/service/idp/providers/helpers.d.ts.map +1 -1
- package/dist/types/model/service/index.d.ts +1 -0
- package/dist/types/model/service/index.d.ts.map +1 -1
- package/dist/types/model/service/membershipUtils.d.ts.map +1 -1
- package/dist/types/model/type/AuthLog.d.ts +1 -1
- package/dist/types/model/type/AuthLog.d.ts.map +1 -1
- package/dist/types/model/type/Config.d.ts +2 -0
- package/dist/types/model/type/Config.d.ts.map +1 -1
- package/dist/types/model/type/IdentityProvider.d.ts +2 -0
- package/dist/types/model/type/IdentityProvider.d.ts.map +1 -1
- package/dist/types/model/type/RateLimit.d.ts +6 -6
- package/dist/types/model/type/RateLimit.d.ts.map +1 -1
- package/dist/types/model/utils/DatabaseContext.d.ts +14 -1
- package/dist/types/model/utils/DatabaseContext.d.ts.map +1 -1
- package/dist/types/model/utils/Response.d.ts.map +1 -1
- package/dist/types/model/utils/email.d.ts.map +1 -1
- package/dist/types/model/utils/hex.d.ts.map +1 -1
- package/dist/types/model/utils/interval.d.ts.map +1 -1
- package/dist/types/model/utils/time.d.ts.map +1 -1
- package/dist/types/model/utils/token.d.ts.map +1 -1
- package/dist/types/resolvers/ResolverFactory.d.ts +2 -0
- package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
- package/dist/types/resolvers/TenantResolverContextFactory.d.ts.map +1 -1
- package/dist/types/resolvers/errorUtils.d.ts.map +1 -1
- package/dist/types/resolvers/membershipUtils.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/configuration/AuthPolicyMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/configuration/ConfigurationMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/identity/GlobalRolesMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/AddIDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/DisableIDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/EnableIDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/UpdateIDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/idp/audit.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.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 +1 -1
- package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/EmailOtpMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/EmailVerificationMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts +11 -0
- package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts.map +1 -0
- package/dist/types/resolvers/mutation/person/ForceSignOutMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/IDPMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/InviteMutationResolver.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/RegenerateBackupCodesMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/ResetPasswordMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/ResetPersonMfaMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/RevokeSessionMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/SignInMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/SignOutMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/SignUpMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/person/TogglePasswordlessMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/project/CreateProjectMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/project/SetProjectSecretMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/project/UpdateProjectMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.d.ts.map +1 -1
- package/dist/types/resolvers/mutation/projectMember/audit.d.ts +1 -1
- package/dist/types/resolvers/mutation/projectMember/audit.d.ts.map +1 -1
- package/dist/types/resolvers/query/ApiKeyQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/AuthLogQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/AuthPolicyQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/ConfigurationQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/IDPQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/MailTemplateQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/MeQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/PersonQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/ProjectMembersQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/query/ProjectQueryResolver.d.ts.map +1 -1
- package/dist/types/resolvers/responseHelpers/ApiKeyResponseFactory.d.ts.map +1 -1
- package/dist/types/resolvers/responseHelpers/PersonResponseFactory.d.ts.map +1 -1
- package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts +10 -0
- package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts.map +1 -0
- package/dist/types/resolvers/responseHelpers/SignInResponseFactory.d.ts.map +1 -1
- package/dist/types/resolvers/types/IdentityTypeResolver.d.ts.map +1 -1
- package/dist/types/resolvers/types/PersonTypeResolver.d.ts +15 -1
- package/dist/types/resolvers/types/PersonTypeResolver.d.ts.map +1 -1
- package/dist/types/resolvers/types/ProjectTypeResolver.d.ts +15 -6
- package/dist/types/resolvers/types/ProjectTypeResolver.d.ts.map +1 -1
- package/dist/types/schema/index.d.ts +194 -4
- 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 +2 -2
- package/dist/types/schema/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utils/Mailer.d.ts.map +1 -1
- package/dist/types/utils/TemplateRenderer.d.ts.map +1 -1
- package/dist/types/utils/array.d.ts.map +1 -1
- package/dist/types/utils/batchQuery.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/TenantContainer.ts +17 -3
- package/src/migrations/2026-06-18-120000-idp-claim-mapping.ts +15 -0
- package/src/migrations/2026-08-03-120000-person-enable-auth-log.ts +12 -0
- package/src/migrations/2026-08-04-120000-config-panel.ts +13 -0
- package/src/migrations/2026-09-04-120000-idp-disable-local-authentication.ts +18 -0
- package/src/migrations/runner.ts +8 -0
- package/src/migrations/snapshot.ts +8 -2
- package/src/model/commands/configuration/UpdateConfigurationCommand.ts +5 -4
- package/src/model/commands/idp/CreateIdpCommand.ts +7 -1
- package/src/model/commands/idp/UpdateIdpCommand.ts +5 -1
- package/src/model/commands/membership/UpdateProjectMemberCommand.ts +1 -1
- package/src/model/commands/membership/index.ts +2 -1
- package/src/model/commands/membership/variables/index.ts +1 -0
- package/src/model/commands/person/EnablePersonCommand.ts +18 -0
- package/src/model/queries/configuration/ConfigurationQuery.ts +4 -0
- package/src/model/queries/idp/LocalAuthDisablingIdpsQuery.ts +41 -0
- package/src/model/queries/idp/PersonIdentityProvidersQuery.ts +2 -0
- package/src/model/queries/idp/helpers.ts +3 -2
- package/src/model/queries/idp/index.ts +1 -0
- package/src/model/queries/idp/types.ts +1 -0
- package/src/model/queries/membership/ProjectMembersQuery.ts +1 -0
- package/src/model/queries/person/PersonQueryBuilderFactory.ts +1 -0
- package/src/model/queries/person/types.ts +1 -0
- package/src/model/service/AuthLogService.ts +18 -2
- package/src/model/service/IDPSignInManager.ts +49 -1
- package/src/model/service/PanelAccessResolver.ts +32 -0
- package/src/model/service/PasswordResetManager.ts +9 -1
- package/src/model/service/PasswordlessSignInManager.ts +23 -1
- package/src/model/service/PersonAccessManager.ts +19 -3
- package/src/model/service/SignInManager.ts +9 -1
- package/src/model/service/apiKey/ApiKeyManager.ts +5 -3
- package/src/model/service/apiKey/UnpersistedApiKeyManager.ts +24 -0
- package/src/model/service/idp/ClaimMapping.ts +283 -0
- package/src/model/service/idp/ClaimMappingEvaluator.ts +226 -0
- package/src/model/service/idp/ClaimMappingValidation.ts +158 -0
- package/src/model/service/idp/IDPClaimSyncService.ts +401 -0
- package/src/model/service/idp/IDPManager.ts +126 -21
- package/src/model/service/idp/IdentityProviderHandler.ts +7 -0
- package/src/model/service/idp/IdpSessionRevalidator.ts +90 -0
- package/src/model/service/idp/PersonIdentityProviderManager.ts +8 -0
- package/src/model/service/idp/index.ts +4 -0
- package/src/model/service/idp/providers/OIDCHelpers.ts +161 -53
- package/src/model/service/idp/providers/OIDCProvider.ts +4 -1
- package/src/model/service/index.ts +1 -0
- package/src/model/type/AuthLog.ts +3 -0
- package/src/model/type/Config.ts +3 -0
- package/src/model/type/IdentityProvider.ts +2 -0
- package/src/model/utils/DatabaseContext.ts +27 -6
- package/src/resolvers/ResolverFactory.ts +6 -0
- package/src/resolvers/mutation/idp/AddIDPMutationResolver.ts +1 -0
- package/src/resolvers/mutation/idp/UpdateIDPMutationResolver.ts +1 -0
- package/src/resolvers/mutation/idp/audit.ts +1 -0
- package/src/resolvers/mutation/person/DisablePersonMutationResolver.ts +3 -3
- package/src/resolvers/mutation/person/EnablePersonMutationResolver.ts +50 -0
- package/src/resolvers/mutation/person/IDPMutationResolver.ts +31 -0
- package/src/resolvers/mutation/person/PasswordlessMutationResolver.ts +7 -0
- package/src/resolvers/mutation/person/SignInMutationResolver.ts +2 -2
- package/src/resolvers/query/ProjectQueryResolver.ts +3 -2
- package/src/resolvers/responseHelpers/PersonResponseFactory.ts +5 -0
- package/src/resolvers/responseHelpers/ProjectResponseFactory.ts +24 -0
- package/src/resolvers/types/IdentityTypeResolver.ts +39 -3
- package/src/resolvers/types/PersonTypeResolver.ts +35 -2
- package/src/resolvers/types/ProjectTypeResolver.ts +33 -1
- package/src/schema/index.ts +212 -0
- package/src/schema/tenant.graphql.ts +144 -0
- package/tests/cases/integration/mocked/configurationPanel.test.ts +105 -0
- package/tests/cases/integration/mocked/disablePersonMutation.test.ts +89 -0
- package/tests/cases/integration/mocked/enablePersonMutation.test.ts +130 -0
- package/tests/cases/integration/mocked/gql/passwordless.ts +10 -0
- package/tests/cases/integration/mocked/idpClaimMappingConfig.test.ts +332 -0
- package/tests/cases/integration/mocked/listProjectMembersQuery.test.ts +8 -3
- package/tests/cases/integration/mocked/localAuthenticationDisabled.test.ts +182 -0
- package/tests/cases/integration/mocked/permissionsQuery.test.ts +153 -0
- package/tests/cases/integration/mocked/personIdentityProviders.test.ts +67 -0
- package/tests/cases/integration/mocked/personsQuery.test.ts +38 -5
- package/tests/cases/integration/mocked/signInAnomalyDetection.test.ts +11 -0
- package/tests/cases/integration/mocked/signInIdpClaimMapping.test.ts +1258 -0
- package/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.ts +344 -0
- package/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.ts +531 -0
- package/tests/cases/integration/mocked/signInIdpMutation.test.ts +5 -0
- package/tests/cases/integration/mocked/signInMfaEnforcement.test.ts +7 -0
- package/tests/cases/integration/mocked/signInMutation.test.ts +14 -0
- package/tests/cases/integration/mocked/signInPasswordlessMutation.test.ts +36 -0
- package/tests/cases/integration/mocked/sql/getConfigSql.ts +3 -0
- package/tests/cases/integration/mocked/sql/getIdpBySlugSql.ts +1 -1
- package/tests/cases/integration/mocked/sql/getProjectBySlugSql.ts +1 -1
- package/tests/cases/integration/mocked/sql/listPersonsSql.ts +5 -2
- package/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.ts +21 -0
- package/tests/cases/integration/mocked/sql/personIdentityProvidersSql.ts +3 -1
- package/tests/cases/integration/mocked/sql/removeMembershipSql.ts +14 -0
- package/tests/cases/integration/mocked/trustForwardedClientInfo.test.ts +3 -0
- package/tests/cases/unit/databaseContextRetry.test.ts +81 -0
- package/tests/cases/unit/idp/claimMappingEvaluator.test.ts +554 -0
- package/tests/cases/unit/idp/claimMappingValidation.test.ts +134 -0
- package/tests/cases/unit/idp/idpManagerConfigMerge.test.ts +97 -0
- package/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.ts +108 -0
- package/tests/cases/unit/idp/idpSessionRevalidator.test.ts +226 -24
- package/tests/cases/unit/idp/oidcClaims.test.ts +29 -0
- package/tests/cases/unit/idp/oidcResponse.test.ts +54 -0
- package/tests/cases/unit/idp/oidcRevalidate.test.ts +94 -2
- package/tests/cases/unit/panelAccessResolver.test.ts +57 -0
- package/tests/cases/unit/updateConfigurationCommand.test.ts +63 -0
- package/tests/src/IdPMock.ts +4 -0
- package/tests/src/testTenant.ts +32 -1
- package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
- package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
- package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
- package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
- package/dist/types/model/commands/membership/RemoveProjectMembershipsCommand.d.ts.map +0 -1
- /package/src/model/commands/membership/{RemoveProjectMembershipsCommand.ts → RemoveProjectMembershipCommand.ts} +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const Typesafe = require("@contember/typesafe");
|
|
4
|
+
function _interopNamespaceDefault(e) {
|
|
5
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
+
if (e) {
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
if (k !== "default") {
|
|
9
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
10
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: () => e[k]
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
n.default = e;
|
|
18
|
+
return Object.freeze(n);
|
|
19
|
+
}
|
|
20
|
+
const Typesafe__namespace = /* @__PURE__ */ _interopNamespaceDefault(Typesafe);
|
|
21
|
+
const ClaimValueSource = Typesafe__namespace.noExtraProps(Typesafe__namespace.intersection(
|
|
22
|
+
Typesafe__namespace.object({
|
|
23
|
+
/** Claim to read: the exact name first (URL-namespaced names work), then as a dot-path (e.g. `profile.languages`). */
|
|
24
|
+
claim: Typesafe__namespace.string
|
|
25
|
+
}),
|
|
26
|
+
Typesafe__namespace.partial({
|
|
27
|
+
/** Split each string value on this delimiter (e.g. `,` or ` `): a scalar string claim and every string element of an array claim. A no-op for non-string values. */
|
|
28
|
+
split: Typesafe__namespace.string,
|
|
29
|
+
/** For an array-of-objects claim, take this (dot-path) field from each element. */
|
|
30
|
+
pick: Typesafe__namespace.string,
|
|
31
|
+
/** For an array-of-objects claim, keep only elements whose `field` equals `equals`. */
|
|
32
|
+
where: Typesafe__namespace.noExtraProps(Typesafe__namespace.object({
|
|
33
|
+
field: Typesafe__namespace.string,
|
|
34
|
+
equals: Typesafe__namespace.scalar
|
|
35
|
+
}))
|
|
36
|
+
})
|
|
37
|
+
));
|
|
38
|
+
const ClaimMappingVariable = Typesafe__namespace.noExtraProps(Typesafe__namespace.intersection(
|
|
39
|
+
Typesafe__namespace.object({
|
|
40
|
+
name: Typesafe__namespace.string
|
|
41
|
+
}),
|
|
42
|
+
Typesafe__namespace.partial({
|
|
43
|
+
/** Constant values, set regardless of any claim (the original static form). */
|
|
44
|
+
values: Typesafe__namespace.array(Typesafe__namespace.string),
|
|
45
|
+
/** Derive (additional) values from a claim. */
|
|
46
|
+
from: ClaimValueSource,
|
|
47
|
+
/** Lookup table applied to each raw value from `from`. A raw value with no entry is dropped unless `passthrough`. */
|
|
48
|
+
map: Typesafe__namespace.record(Typesafe__namespace.string, Typesafe__namespace.array(Typesafe__namespace.string)),
|
|
49
|
+
/** When `true`, a raw value from `from` not present in `map` is set verbatim. See the security note above. */
|
|
50
|
+
passthrough: Typesafe__namespace.boolean,
|
|
51
|
+
/** Allowlist applied to the values derived from `from` (constants in `values` are unaffected). */
|
|
52
|
+
allow: Typesafe__namespace.array(Typesafe__namespace.string)
|
|
53
|
+
})
|
|
54
|
+
));
|
|
55
|
+
const ClaimMappingMembership = Typesafe__namespace.noExtraProps(Typesafe__namespace.intersection(
|
|
56
|
+
Typesafe__namespace.object({
|
|
57
|
+
project: Typesafe__namespace.string,
|
|
58
|
+
role: Typesafe__namespace.string
|
|
59
|
+
}),
|
|
60
|
+
Typesafe__namespace.partial({
|
|
61
|
+
/**
|
|
62
|
+
* Membership variables to set. Each is constant (`values`, e.g. `[{ name: 'locale', values: ['cs'] }]`)
|
|
63
|
+
* and/or claim-derived (`from`, e.g. map a `languages` claim through a lookup table to locale ids).
|
|
64
|
+
*/
|
|
65
|
+
variables: Typesafe__namespace.array(ClaimMappingVariable)
|
|
66
|
+
})
|
|
67
|
+
));
|
|
68
|
+
const ClaimMappingRule = Typesafe__namespace.noExtraProps(Typesafe__namespace.intersection(
|
|
69
|
+
Typesafe__namespace.object({
|
|
70
|
+
/** Claim/attribute from the IdP response to inspect: the exact name first, then as a dot-path into nested objects. */
|
|
71
|
+
claim: Typesafe__namespace.string
|
|
72
|
+
}),
|
|
73
|
+
Typesafe__namespace.partial({
|
|
74
|
+
/** Match when the claim equals this value (array claims: when it contains this element). */
|
|
75
|
+
equals: Typesafe__namespace.scalar,
|
|
76
|
+
/** Match when the claim contains this value (substring for strings, element for arrays). */
|
|
77
|
+
contains: Typesafe__namespace.scalar,
|
|
78
|
+
/** Project membership to grant when the rule matches. */
|
|
79
|
+
grantMembership: ClaimMappingMembership
|
|
80
|
+
})
|
|
81
|
+
));
|
|
82
|
+
const ClaimMapping = Typesafe__namespace.intersection(
|
|
83
|
+
Typesafe__namespace.object({
|
|
84
|
+
rules: Typesafe__namespace.array(ClaimMappingRule)
|
|
85
|
+
}),
|
|
86
|
+
Typesafe__namespace.partial({
|
|
87
|
+
/**
|
|
88
|
+
* When to apply the mapping:
|
|
89
|
+
* - `always` (default) — re-sync memberships on every sign-in (and on every OIDC session refresh).
|
|
90
|
+
* - `sticky` — apply only when the account is first created by auto-sign-up; existing
|
|
91
|
+
* accounts (including one being linked to this IdP for the first time) are
|
|
92
|
+
* left untouched.
|
|
93
|
+
*/
|
|
94
|
+
syncPolicy: Typesafe__namespace.enumeration("always", "sticky"),
|
|
95
|
+
/**
|
|
96
|
+
* How to treat existing grants the mapping does NOT (re)assign on this sign-in:
|
|
97
|
+
* - `keep` (default, safer) — leave pre-existing memberships untouched.
|
|
98
|
+
* - `remove` — strip memberships that the mapping no longer grants (IdP becomes the source of
|
|
99
|
+
* truth). Only ever touches grants the mapping itself could have made; memberships
|
|
100
|
+
* outside the mapping's vocabulary are never removed.
|
|
101
|
+
*/
|
|
102
|
+
unmatched: Typesafe__namespace.enumeration("keep", "remove")
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
const DEFAULT_SYNC_POLICY = "always";
|
|
106
|
+
const DEFAULT_UNMATCHED = "keep";
|
|
107
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
108
|
+
const parseClaimMapping = (configuration) => {
|
|
109
|
+
const raw = configuration.claimMapping;
|
|
110
|
+
if (!isRecord(raw) || raw.rules === void 0 || raw.rules === null) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const input = { rules: raw.rules };
|
|
114
|
+
if (raw.syncPolicy !== void 0) {
|
|
115
|
+
input.syncPolicy = raw.syncPolicy;
|
|
116
|
+
}
|
|
117
|
+
if (raw.unmatched !== void 0) {
|
|
118
|
+
input.unmatched = raw.unmatched;
|
|
119
|
+
}
|
|
120
|
+
return ClaimMapping(input, ["claimMapping"]);
|
|
121
|
+
};
|
|
122
|
+
const REMOVED_RULE_KEYS = ["grantRoles"];
|
|
123
|
+
const findRemovedRuleKeys = (configuration) => {
|
|
124
|
+
const raw = configuration.claimMapping;
|
|
125
|
+
if (!isRecord(raw) || !Array.isArray(raw.rules)) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const found = /* @__PURE__ */ new Set();
|
|
129
|
+
for (const rule of raw.rules) {
|
|
130
|
+
if (isRecord(rule)) {
|
|
131
|
+
for (const key of REMOVED_RULE_KEYS) {
|
|
132
|
+
if (key in rule) {
|
|
133
|
+
found.add(key);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return [...found];
|
|
139
|
+
};
|
|
140
|
+
const findClaimMappingShapeErrors = (mapping) => {
|
|
141
|
+
const errors = [];
|
|
142
|
+
for (const rule of mapping.rules) {
|
|
143
|
+
if (rule.grantMembership === void 0) {
|
|
144
|
+
errors.push(
|
|
145
|
+
`claimMapping rule for claim '${rule.claim}' has no 'grantMembership', so it matches but grants nothing; add a 'grantMembership'`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
if (rule.equals !== void 0 && rule.contains !== void 0) {
|
|
149
|
+
errors.push(`claimMapping rule for claim '${rule.claim}' sets both 'equals' and 'contains'; a rule may use at most one`);
|
|
150
|
+
}
|
|
151
|
+
if (typeof rule.equals === "string" && rule.equals.trim() === "") {
|
|
152
|
+
errors.push(
|
|
153
|
+
`claimMapping rule for claim '${rule.claim}' has an empty 'equals' value; omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
if (typeof rule.contains === "string" && rule.contains.trim() === "") {
|
|
157
|
+
errors.push(
|
|
158
|
+
`claimMapping rule for claim '${rule.claim}' has an empty 'contains' value, which would substring-match every string value of the claim (a match-everything grant); omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
for (const variable of rule.grantMembership?.variables ?? []) {
|
|
162
|
+
if (variable.from?.where !== void 0 && variable.from.pick === void 0) {
|
|
163
|
+
errors.push(
|
|
164
|
+
`claimMapping variable '${variable.name}' uses 'from.where' without 'from.pick'; it can only ever resolve to no values — set 'pick' (the field to take from each matched element)`
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
if (variable.from?.split === "") {
|
|
168
|
+
errors.push(
|
|
169
|
+
`claimMapping variable '${variable.name}' has an empty 'from.split' delimiter, which splits every claim value into its individual characters; omit 'split' to keep the value whole, or set a non-empty delimiter`
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return errors;
|
|
175
|
+
};
|
|
176
|
+
exports.ClaimMapping = ClaimMapping;
|
|
177
|
+
exports.ClaimMappingMembership = ClaimMappingMembership;
|
|
178
|
+
exports.ClaimMappingRule = ClaimMappingRule;
|
|
179
|
+
exports.ClaimMappingVariable = ClaimMappingVariable;
|
|
180
|
+
exports.ClaimValueSource = ClaimValueSource;
|
|
181
|
+
exports.DEFAULT_SYNC_POLICY = DEFAULT_SYNC_POLICY;
|
|
182
|
+
exports.DEFAULT_UNMATCHED = DEFAULT_UNMATCHED;
|
|
183
|
+
exports.findClaimMappingShapeErrors = findClaimMappingShapeErrors;
|
|
184
|
+
exports.findRemovedRuleKeys = findRemovedRuleKeys;
|
|
185
|
+
exports.isRecord = isRecord;
|
|
186
|
+
exports.parseClaimMapping = parseClaimMapping;
|
|
187
|
+
//# sourceMappingURL=ClaimMapping.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimMapping.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/ClaimMapping.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\n/**\n * Provider-agnostic mapping of IdP claims/attributes to Contember project memberships (A09).\n * Stored on an IdP's `configuration.claimMapping`, so it rides inside the existing\n * `identity_provider.configuration` JSONB and needs no schema change — `addIDP` / `updateIDP`\n * already accept an opaque configuration object.\n *\n * The mapping grants **project memberships only** (a project role plus optional membership\n * variables). It deliberately does NOT grant global/tenant roles: those are privilege-bearing\n * and granting them from external claims would be a privilege-escalation path, so global-role\n * mapping was dropped. A project membership stays within what the IdP configurer\n * (`project_admin`, holding `IDP_ADD` / `IDP_UPDATE`) may already grant directly.\n *\n * Coexistence: the OIDC provider also uses `configuration.claimMapping` for an unrelated\n * identity-field remap (`email` / `name` / `externalIdentifier` / `attributesKey`). A09 only\n * looks at the `rules` field, so the two coexist in the same object — {@link parseClaimMapping}\n * returns `null` when no `rules` are present (an OIDC-only remap) instead of rejecting it.\n *\n * Each rule inspects one `claim` from the IdP response (the raw claims flow through verbatim,\n * since `IDPResponse` is `& Record<string, unknown>`) and, when it matches, grants a project\n * membership. Rules are independent and additive — every matching rule contributes; a\n * non-matching rule is simply skipped.\n *\n * Matching is declarative, never code:\n * - `equals` — the claim equals the value (scalar compare; for array claims, the value is one\n * of the elements).\n * - `contains` — the claim contains the value: substring for string claims, membership for array\n * claims. This is the natural fit for multi-valued `groups`.\n * - neither — the rule matches whenever the claim is merely present (and truthy for booleans).\n */\n/**\n * Where a membership variable's values come from when they are not constant. Reads one `claim` from the\n * IdP response — by exact name first (a URL-namespaced claim with literal dots works), then as a dot-path\n * (nested claims like `profile.languages`) — and shapes the raw value(s) into a flat list of strings:\n * - array claim → its elements (`languages: ['cs','en']`)\n * - `split` → split a delimited string claim (`'cs,en'`, OIDC-style `'cs en'`) into elements\n * - `pick` / `where` → for an array-of-objects claim, keep elements matching `where` and take their\n * `pick` field (`orgs: [{ code, role }]` → codes of the elements where role matches)\n *\n * The extracted raw values are then run through {@link ClaimMappingVariable}'s `map` / `passthrough`.\n */\nexport const ClaimValueSource = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\t/** Claim to read: the exact name first (URL-namespaced names work), then as a dot-path (e.g. `profile.languages`). */\n\t\tclaim: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Split each string value on this delimiter (e.g. `,` or ` `): a scalar string claim and every string element of an array claim. A no-op for non-string values. */\n\t\tsplit: Typesafe.string,\n\t\t/** For an array-of-objects claim, take this (dot-path) field from each element. */\n\t\tpick: Typesafe.string,\n\t\t/** For an array-of-objects claim, keep only elements whose `field` equals `equals`. */\n\t\twhere: Typesafe.noExtraProps(Typesafe.object({\n\t\t\tfield: Typesafe.string,\n\t\t\tequals: Typesafe.scalar,\n\t\t})),\n\t}),\n))\n\nexport type ClaimValueSource = ReturnType<typeof ClaimValueSource>\n\n/**\n * One membership variable to set on a granted membership. Either constant (`values`), claim-derived\n * (`from`), or both — the two sets are unioned. When derived from a claim:\n * - `map` — lookup table from a raw claim value to the value(s) actually set, e.g.\n * `{ cs: ['<locale-uuid>'] }`. A raw value absent from the map is dropped…\n * - `passthrough` — …unless `passthrough` is `true`, in which case it is set verbatim. Off by\n * default: raw external claim values then flow straight into row-level ACL\n * variables, so enable it only when the variable legitimately holds claim values\n * (not opaque ids), and prefer `map` / `allow` to bound what an IdP can inject.\n * - `allow` — optional allowlist applied to the claim-derived values (constants are never filtered).\n */\nexport const ClaimMappingVariable = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Constant values, set regardless of any claim (the original static form). */\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\t/** Derive (additional) values from a claim. */\n\t\tfrom: ClaimValueSource,\n\t\t/** Lookup table applied to each raw value from `from`. A raw value with no entry is dropped unless `passthrough`. */\n\t\tmap: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n\t\t/** When `true`, a raw value from `from` not present in `map` is set verbatim. See the security note above. */\n\t\tpassthrough: Typesafe.boolean,\n\t\t/** Allowlist applied to the values derived from `from` (constants in `values` are unaffected). */\n\t\tallow: Typesafe.array(Typesafe.string),\n\t}),\n))\n\nexport type ClaimMappingVariable = ReturnType<typeof ClaimMappingVariable>\n\nexport const ClaimMappingMembership = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\tproject: Typesafe.string,\n\t\trole: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/**\n\t\t * Membership variables to set. Each is constant (`values`, e.g. `[{ name: 'locale', values: ['cs'] }]`)\n\t\t * and/or claim-derived (`from`, e.g. map a `languages` claim through a lookup table to locale ids).\n\t\t */\n\t\tvariables: Typesafe.array(ClaimMappingVariable),\n\t}),\n))\n\nexport type ClaimMappingMembership = ReturnType<typeof ClaimMappingMembership>\n\nexport const ClaimMappingRule = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\t/** Claim/attribute from the IdP response to inspect: the exact name first, then as a dot-path into nested objects. */\n\t\tclaim: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Match when the claim equals this value (array claims: when it contains this element). */\n\t\tequals: Typesafe.scalar,\n\t\t/** Match when the claim contains this value (substring for strings, element for arrays). */\n\t\tcontains: Typesafe.scalar,\n\t\t/** Project membership to grant when the rule matches. */\n\t\tgrantMembership: ClaimMappingMembership,\n\t}),\n))\n\nexport type ClaimMappingRule = ReturnType<typeof ClaimMappingRule>\n\n/**\n * The validated A09 mapping. `rules` is required here — {@link parseClaimMapping} only returns a\n * mapping once it has confirmed `rules` is present, and returns `null` otherwise (so an OIDC-only\n * `claimMapping` is treated as \"no role mapping\", not an error).\n */\nexport const ClaimMapping = Typesafe.intersection(\n\tTypesafe.object({\n\t\trules: Typesafe.array(ClaimMappingRule),\n\t}),\n\tTypesafe.partial({\n\t\t/**\n\t\t * When to apply the mapping:\n\t\t * - `always` (default) — re-sync memberships on every sign-in (and on every OIDC session refresh).\n\t\t * - `sticky` — apply only when the account is first created by auto-sign-up; existing\n\t\t * accounts (including one being linked to this IdP for the first time) are\n\t\t * left untouched.\n\t\t */\n\t\tsyncPolicy: Typesafe.enumeration('always', 'sticky'),\n\t\t/**\n\t\t * How to treat existing grants the mapping does NOT (re)assign on this sign-in:\n\t\t * - `keep` (default, safer) — leave pre-existing memberships untouched.\n\t\t * - `remove` — strip memberships that the mapping no longer grants (IdP becomes the source of\n\t\t * truth). Only ever touches grants the mapping itself could have made; memberships\n\t\t * outside the mapping's vocabulary are never removed.\n\t\t */\n\t\tunmatched: Typesafe.enumeration('keep', 'remove'),\n\t}),\n)\n\nexport type ClaimMapping = ReturnType<typeof ClaimMapping>\n\nexport const DEFAULT_SYNC_POLICY: NonNullable<ClaimMapping['syncPolicy']> = 'always'\nexport const DEFAULT_UNMATCHED: NonNullable<ClaimMapping['unmatched']> = 'keep'\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * Parse the optional A09 `claimMapping` out of an IdP `configuration` blob. Returns `null` when no\n * A09 mapping is present — either no `claimMapping` at all, or a `claimMapping` that carries no\n * `rules` (e.g. the OIDC identity-field remap, which shares this key). Returning `null` keeps both\n * the pre-A09 sign-in path and the OIDC remap untouched.\n *\n * Only the A09 fields (`rules`, `syncPolicy`, `unmatched`) are validated; any other keys on the\n * `claimMapping` object (the OIDC remap fields) are ignored, so the two features coexist. Throws via\n * Typesafe when `rules` is present but structurally malformed (e.g. a rule missing its required\n * `claim`), so an A09 misconfiguration surfaces loudly rather than silently dropping grants.\n *\n * The nested A09 schemas (rule / membership / variable / value-source) are wrapped in\n * `Typesafe.noExtraProps`, so a typo'd key on any of them (e.g. `grantMembershp`, `equls`) is\n * REJECTED, not silently stripped — a misconfiguration surfaces loudly instead of degrading into a\n * grants-nothing or match-everyone rule. The one exception is the top-level `claimMapping` object\n * itself: it is the key SHARED with the OIDC identity-remap (`email`/`name`/`externalIdentifier`/\n * `attributesKey`), so this parse first projects only the A09 fields (`rules`/`syncPolicy`/`unmatched`)\n * into a fresh object (above) and deliberately does NOT apply `noExtraProps` there — the OIDC remap\n * fields must coexist. The `map` lookup table is likewise a `record` (arbitrary keys are legitimate),\n * not a strict object. The removed `grantRoles` key is still caught separately by\n * {@link findRemovedRuleKeys} (run before this parse) for a clearer message than the generic\n * extra-property error `noExtraProps` would otherwise raise.\n */\nexport const parseClaimMapping = (configuration: Record<string, unknown>): ClaimMapping | null => {\n\tconst raw = configuration.claimMapping\n\tif (!isRecord(raw) || raw.rules === undefined || raw.rules === null) {\n\t\treturn null\n\t}\n\tconst input: Record<string, unknown> = { rules: raw.rules }\n\tif (raw.syncPolicy !== undefined) {\n\t\tinput.syncPolicy = raw.syncPolicy\n\t}\n\tif (raw.unmatched !== undefined) {\n\t\tinput.unmatched = raw.unmatched\n\t}\n\treturn ClaimMapping(input, ['claimMapping'])\n}\n\n/**\n * The set of A09 rule keys that were removed when global-role mapping was dropped. Detected\n * explicitly (rather than relying on Typesafe's generic \"extra property\" rejection) so a config\n * that still tries to grant global roles gets an actionable error.\n */\nconst REMOVED_RULE_KEYS = ['grantRoles'] as const\n\n/**\n * Returns the removed rule keys (currently only `grantRoles`) still present in a raw `claimMapping`,\n * so config-time validation can reject them with a clear message pointing at `grantMembership`.\n */\nexport const findRemovedRuleKeys = (configuration: Record<string, unknown>): string[] => {\n\tconst raw = configuration.claimMapping\n\tif (!isRecord(raw) || !Array.isArray(raw.rules)) {\n\t\treturn []\n\t}\n\tconst found = new Set<string>()\n\tfor (const rule of raw.rules) {\n\t\tif (isRecord(rule)) {\n\t\t\tfor (const key of REMOVED_RULE_KEYS) {\n\t\t\t\tif (key in rule) {\n\t\t\t\t\tfound.add(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...found]\n}\n\n/**\n * Semantic checks on a parsed mapping that the Typesafe shape cannot express. Returns one\n * human-readable message per problem (empty = ok); run at config time (IdP add/update) so a\n * contradictory rule is rejected loudly rather than silently mis-matching or granting nothing:\n * - a rule may use at most one of `equals` / `contains` ({@link ruleMatches} only ever honours `equals`\n * when both are set, so the other would be silently ignored);\n * - a rule's `equals` / `contains` must not be an empty string: an empty `contains` substring-matches EVERY\n * string claim (`'...'.includes('')` is always true), i.e. a match-everything grant to every user of the\n * IdP, and an empty `equals` is an always-no-op footgun — to match on the claim's mere presence, omit both;\n * - a rule must carry a `grantMembership` — a rule with none matches but grants nothing. (A *misspelled*\n * `grantMembership`, e.g. `grantMembershp`, is now rejected earlier by `noExtraProps` during\n * {@link parseClaimMapping}; this check remains for a `grantMembership` that is genuinely OMITTED,\n * which the `partial` schema permits.)\n * - a variable's `from.where` requires a `from.pick` — `where` filters elements but without `pick` there\n * is nothing to project, so the source can only ever resolve to no values;\n * - a variable's `from.split` must not be the empty string — `''.split('')` explodes every claim value\n * into its individual characters (the same class of footgun as an empty `equals` / `contains`).\n */\nexport const findClaimMappingShapeErrors = (mapping: ClaimMapping): string[] => {\n\tconst errors: string[] = []\n\tfor (const rule of mapping.rules) {\n\t\tif (rule.grantMembership === undefined) {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has no 'grantMembership', so it matches but grants nothing; add a 'grantMembership'`,\n\t\t\t)\n\t\t}\n\t\tif (rule.equals !== undefined && rule.contains !== undefined) {\n\t\t\terrors.push(`claimMapping rule for claim '${rule.claim}' sets both 'equals' and 'contains'; a rule may use at most one`)\n\t\t}\n\t\tif (typeof rule.equals === 'string' && rule.equals.trim() === '') {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has an empty 'equals' value; omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,\n\t\t\t)\n\t\t}\n\t\tif (typeof rule.contains === 'string' && rule.contains.trim() === '') {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has an empty 'contains' value, which would substring-match every string value of the claim (a match-everything grant); omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,\n\t\t\t)\n\t\t}\n\t\tfor (const variable of rule.grantMembership?.variables ?? []) {\n\t\t\tif (variable.from?.where !== undefined && variable.from.pick === undefined) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`claimMapping variable '${variable.name}' uses 'from.where' without 'from.pick'; it can only ever resolve to no values — set 'pick' (the field to take from each matched element)`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (variable.from?.split === '') {\n\t\t\t\terrors.push(\n\t\t\t\t\t`claimMapping variable '${variable.name}' has an empty 'from.split' delimiter, which splits every claim value into its individual characters; omit 'split' to keep the value whole, or set a non-empty delimiter`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\treturn errors\n}\n"],"names":["Typesafe"],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import * as Typesafe from "@contember/typesafe";
|
|
2
|
+
const ClaimValueSource = Typesafe.noExtraProps(Typesafe.intersection(
|
|
3
|
+
Typesafe.object({
|
|
4
|
+
/** Claim to read: the exact name first (URL-namespaced names work), then as a dot-path (e.g. `profile.languages`). */
|
|
5
|
+
claim: Typesafe.string
|
|
6
|
+
}),
|
|
7
|
+
Typesafe.partial({
|
|
8
|
+
/** Split each string value on this delimiter (e.g. `,` or ` `): a scalar string claim and every string element of an array claim. A no-op for non-string values. */
|
|
9
|
+
split: Typesafe.string,
|
|
10
|
+
/** For an array-of-objects claim, take this (dot-path) field from each element. */
|
|
11
|
+
pick: Typesafe.string,
|
|
12
|
+
/** For an array-of-objects claim, keep only elements whose `field` equals `equals`. */
|
|
13
|
+
where: Typesafe.noExtraProps(Typesafe.object({
|
|
14
|
+
field: Typesafe.string,
|
|
15
|
+
equals: Typesafe.scalar
|
|
16
|
+
}))
|
|
17
|
+
})
|
|
18
|
+
));
|
|
19
|
+
const ClaimMappingVariable = Typesafe.noExtraProps(Typesafe.intersection(
|
|
20
|
+
Typesafe.object({
|
|
21
|
+
name: Typesafe.string
|
|
22
|
+
}),
|
|
23
|
+
Typesafe.partial({
|
|
24
|
+
/** Constant values, set regardless of any claim (the original static form). */
|
|
25
|
+
values: Typesafe.array(Typesafe.string),
|
|
26
|
+
/** Derive (additional) values from a claim. */
|
|
27
|
+
from: ClaimValueSource,
|
|
28
|
+
/** Lookup table applied to each raw value from `from`. A raw value with no entry is dropped unless `passthrough`. */
|
|
29
|
+
map: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),
|
|
30
|
+
/** When `true`, a raw value from `from` not present in `map` is set verbatim. See the security note above. */
|
|
31
|
+
passthrough: Typesafe.boolean,
|
|
32
|
+
/** Allowlist applied to the values derived from `from` (constants in `values` are unaffected). */
|
|
33
|
+
allow: Typesafe.array(Typesafe.string)
|
|
34
|
+
})
|
|
35
|
+
));
|
|
36
|
+
const ClaimMappingMembership = Typesafe.noExtraProps(Typesafe.intersection(
|
|
37
|
+
Typesafe.object({
|
|
38
|
+
project: Typesafe.string,
|
|
39
|
+
role: Typesafe.string
|
|
40
|
+
}),
|
|
41
|
+
Typesafe.partial({
|
|
42
|
+
/**
|
|
43
|
+
* Membership variables to set. Each is constant (`values`, e.g. `[{ name: 'locale', values: ['cs'] }]`)
|
|
44
|
+
* and/or claim-derived (`from`, e.g. map a `languages` claim through a lookup table to locale ids).
|
|
45
|
+
*/
|
|
46
|
+
variables: Typesafe.array(ClaimMappingVariable)
|
|
47
|
+
})
|
|
48
|
+
));
|
|
49
|
+
const ClaimMappingRule = Typesafe.noExtraProps(Typesafe.intersection(
|
|
50
|
+
Typesafe.object({
|
|
51
|
+
/** Claim/attribute from the IdP response to inspect: the exact name first, then as a dot-path into nested objects. */
|
|
52
|
+
claim: Typesafe.string
|
|
53
|
+
}),
|
|
54
|
+
Typesafe.partial({
|
|
55
|
+
/** Match when the claim equals this value (array claims: when it contains this element). */
|
|
56
|
+
equals: Typesafe.scalar,
|
|
57
|
+
/** Match when the claim contains this value (substring for strings, element for arrays). */
|
|
58
|
+
contains: Typesafe.scalar,
|
|
59
|
+
/** Project membership to grant when the rule matches. */
|
|
60
|
+
grantMembership: ClaimMappingMembership
|
|
61
|
+
})
|
|
62
|
+
));
|
|
63
|
+
const ClaimMapping = Typesafe.intersection(
|
|
64
|
+
Typesafe.object({
|
|
65
|
+
rules: Typesafe.array(ClaimMappingRule)
|
|
66
|
+
}),
|
|
67
|
+
Typesafe.partial({
|
|
68
|
+
/**
|
|
69
|
+
* When to apply the mapping:
|
|
70
|
+
* - `always` (default) — re-sync memberships on every sign-in (and on every OIDC session refresh).
|
|
71
|
+
* - `sticky` — apply only when the account is first created by auto-sign-up; existing
|
|
72
|
+
* accounts (including one being linked to this IdP for the first time) are
|
|
73
|
+
* left untouched.
|
|
74
|
+
*/
|
|
75
|
+
syncPolicy: Typesafe.enumeration("always", "sticky"),
|
|
76
|
+
/**
|
|
77
|
+
* How to treat existing grants the mapping does NOT (re)assign on this sign-in:
|
|
78
|
+
* - `keep` (default, safer) — leave pre-existing memberships untouched.
|
|
79
|
+
* - `remove` — strip memberships that the mapping no longer grants (IdP becomes the source of
|
|
80
|
+
* truth). Only ever touches grants the mapping itself could have made; memberships
|
|
81
|
+
* outside the mapping's vocabulary are never removed.
|
|
82
|
+
*/
|
|
83
|
+
unmatched: Typesafe.enumeration("keep", "remove")
|
|
84
|
+
})
|
|
85
|
+
);
|
|
86
|
+
const DEFAULT_SYNC_POLICY = "always";
|
|
87
|
+
const DEFAULT_UNMATCHED = "keep";
|
|
88
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
89
|
+
const parseClaimMapping = (configuration) => {
|
|
90
|
+
const raw = configuration.claimMapping;
|
|
91
|
+
if (!isRecord(raw) || raw.rules === void 0 || raw.rules === null) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const input = { rules: raw.rules };
|
|
95
|
+
if (raw.syncPolicy !== void 0) {
|
|
96
|
+
input.syncPolicy = raw.syncPolicy;
|
|
97
|
+
}
|
|
98
|
+
if (raw.unmatched !== void 0) {
|
|
99
|
+
input.unmatched = raw.unmatched;
|
|
100
|
+
}
|
|
101
|
+
return ClaimMapping(input, ["claimMapping"]);
|
|
102
|
+
};
|
|
103
|
+
const REMOVED_RULE_KEYS = ["grantRoles"];
|
|
104
|
+
const findRemovedRuleKeys = (configuration) => {
|
|
105
|
+
const raw = configuration.claimMapping;
|
|
106
|
+
if (!isRecord(raw) || !Array.isArray(raw.rules)) {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
const found = /* @__PURE__ */ new Set();
|
|
110
|
+
for (const rule of raw.rules) {
|
|
111
|
+
if (isRecord(rule)) {
|
|
112
|
+
for (const key of REMOVED_RULE_KEYS) {
|
|
113
|
+
if (key in rule) {
|
|
114
|
+
found.add(key);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return [...found];
|
|
120
|
+
};
|
|
121
|
+
const findClaimMappingShapeErrors = (mapping) => {
|
|
122
|
+
const errors = [];
|
|
123
|
+
for (const rule of mapping.rules) {
|
|
124
|
+
if (rule.grantMembership === void 0) {
|
|
125
|
+
errors.push(
|
|
126
|
+
`claimMapping rule for claim '${rule.claim}' has no 'grantMembership', so it matches but grants nothing; add a 'grantMembership'`
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
if (rule.equals !== void 0 && rule.contains !== void 0) {
|
|
130
|
+
errors.push(`claimMapping rule for claim '${rule.claim}' sets both 'equals' and 'contains'; a rule may use at most one`);
|
|
131
|
+
}
|
|
132
|
+
if (typeof rule.equals === "string" && rule.equals.trim() === "") {
|
|
133
|
+
errors.push(
|
|
134
|
+
`claimMapping rule for claim '${rule.claim}' has an empty 'equals' value; omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
if (typeof rule.contains === "string" && rule.contains.trim() === "") {
|
|
138
|
+
errors.push(
|
|
139
|
+
`claimMapping rule for claim '${rule.claim}' has an empty 'contains' value, which would substring-match every string value of the claim (a match-everything grant); omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
for (const variable of rule.grantMembership?.variables ?? []) {
|
|
143
|
+
if (variable.from?.where !== void 0 && variable.from.pick === void 0) {
|
|
144
|
+
errors.push(
|
|
145
|
+
`claimMapping variable '${variable.name}' uses 'from.where' without 'from.pick'; it can only ever resolve to no values — set 'pick' (the field to take from each matched element)`
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
if (variable.from?.split === "") {
|
|
149
|
+
errors.push(
|
|
150
|
+
`claimMapping variable '${variable.name}' has an empty 'from.split' delimiter, which splits every claim value into its individual characters; omit 'split' to keep the value whole, or set a non-empty delimiter`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return errors;
|
|
156
|
+
};
|
|
157
|
+
export {
|
|
158
|
+
ClaimMapping,
|
|
159
|
+
ClaimMappingMembership,
|
|
160
|
+
ClaimMappingRule,
|
|
161
|
+
ClaimMappingVariable,
|
|
162
|
+
ClaimValueSource,
|
|
163
|
+
DEFAULT_SYNC_POLICY,
|
|
164
|
+
DEFAULT_UNMATCHED,
|
|
165
|
+
findClaimMappingShapeErrors,
|
|
166
|
+
findRemovedRuleKeys,
|
|
167
|
+
isRecord,
|
|
168
|
+
parseClaimMapping
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=ClaimMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimMapping.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/ClaimMapping.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\n/**\n * Provider-agnostic mapping of IdP claims/attributes to Contember project memberships (A09).\n * Stored on an IdP's `configuration.claimMapping`, so it rides inside the existing\n * `identity_provider.configuration` JSONB and needs no schema change — `addIDP` / `updateIDP`\n * already accept an opaque configuration object.\n *\n * The mapping grants **project memberships only** (a project role plus optional membership\n * variables). It deliberately does NOT grant global/tenant roles: those are privilege-bearing\n * and granting them from external claims would be a privilege-escalation path, so global-role\n * mapping was dropped. A project membership stays within what the IdP configurer\n * (`project_admin`, holding `IDP_ADD` / `IDP_UPDATE`) may already grant directly.\n *\n * Coexistence: the OIDC provider also uses `configuration.claimMapping` for an unrelated\n * identity-field remap (`email` / `name` / `externalIdentifier` / `attributesKey`). A09 only\n * looks at the `rules` field, so the two coexist in the same object — {@link parseClaimMapping}\n * returns `null` when no `rules` are present (an OIDC-only remap) instead of rejecting it.\n *\n * Each rule inspects one `claim` from the IdP response (the raw claims flow through verbatim,\n * since `IDPResponse` is `& Record<string, unknown>`) and, when it matches, grants a project\n * membership. Rules are independent and additive — every matching rule contributes; a\n * non-matching rule is simply skipped.\n *\n * Matching is declarative, never code:\n * - `equals` — the claim equals the value (scalar compare; for array claims, the value is one\n * of the elements).\n * - `contains` — the claim contains the value: substring for string claims, membership for array\n * claims. This is the natural fit for multi-valued `groups`.\n * - neither — the rule matches whenever the claim is merely present (and truthy for booleans).\n */\n/**\n * Where a membership variable's values come from when they are not constant. Reads one `claim` from the\n * IdP response — by exact name first (a URL-namespaced claim with literal dots works), then as a dot-path\n * (nested claims like `profile.languages`) — and shapes the raw value(s) into a flat list of strings:\n * - array claim → its elements (`languages: ['cs','en']`)\n * - `split` → split a delimited string claim (`'cs,en'`, OIDC-style `'cs en'`) into elements\n * - `pick` / `where` → for an array-of-objects claim, keep elements matching `where` and take their\n * `pick` field (`orgs: [{ code, role }]` → codes of the elements where role matches)\n *\n * The extracted raw values are then run through {@link ClaimMappingVariable}'s `map` / `passthrough`.\n */\nexport const ClaimValueSource = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\t/** Claim to read: the exact name first (URL-namespaced names work), then as a dot-path (e.g. `profile.languages`). */\n\t\tclaim: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Split each string value on this delimiter (e.g. `,` or ` `): a scalar string claim and every string element of an array claim. A no-op for non-string values. */\n\t\tsplit: Typesafe.string,\n\t\t/** For an array-of-objects claim, take this (dot-path) field from each element. */\n\t\tpick: Typesafe.string,\n\t\t/** For an array-of-objects claim, keep only elements whose `field` equals `equals`. */\n\t\twhere: Typesafe.noExtraProps(Typesafe.object({\n\t\t\tfield: Typesafe.string,\n\t\t\tequals: Typesafe.scalar,\n\t\t})),\n\t}),\n))\n\nexport type ClaimValueSource = ReturnType<typeof ClaimValueSource>\n\n/**\n * One membership variable to set on a granted membership. Either constant (`values`), claim-derived\n * (`from`), or both — the two sets are unioned. When derived from a claim:\n * - `map` — lookup table from a raw claim value to the value(s) actually set, e.g.\n * `{ cs: ['<locale-uuid>'] }`. A raw value absent from the map is dropped…\n * - `passthrough` — …unless `passthrough` is `true`, in which case it is set verbatim. Off by\n * default: raw external claim values then flow straight into row-level ACL\n * variables, so enable it only when the variable legitimately holds claim values\n * (not opaque ids), and prefer `map` / `allow` to bound what an IdP can inject.\n * - `allow` — optional allowlist applied to the claim-derived values (constants are never filtered).\n */\nexport const ClaimMappingVariable = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Constant values, set regardless of any claim (the original static form). */\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\t/** Derive (additional) values from a claim. */\n\t\tfrom: ClaimValueSource,\n\t\t/** Lookup table applied to each raw value from `from`. A raw value with no entry is dropped unless `passthrough`. */\n\t\tmap: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n\t\t/** When `true`, a raw value from `from` not present in `map` is set verbatim. See the security note above. */\n\t\tpassthrough: Typesafe.boolean,\n\t\t/** Allowlist applied to the values derived from `from` (constants in `values` are unaffected). */\n\t\tallow: Typesafe.array(Typesafe.string),\n\t}),\n))\n\nexport type ClaimMappingVariable = ReturnType<typeof ClaimMappingVariable>\n\nexport const ClaimMappingMembership = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\tproject: Typesafe.string,\n\t\trole: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/**\n\t\t * Membership variables to set. Each is constant (`values`, e.g. `[{ name: 'locale', values: ['cs'] }]`)\n\t\t * and/or claim-derived (`from`, e.g. map a `languages` claim through a lookup table to locale ids).\n\t\t */\n\t\tvariables: Typesafe.array(ClaimMappingVariable),\n\t}),\n))\n\nexport type ClaimMappingMembership = ReturnType<typeof ClaimMappingMembership>\n\nexport const ClaimMappingRule = Typesafe.noExtraProps(Typesafe.intersection(\n\tTypesafe.object({\n\t\t/** Claim/attribute from the IdP response to inspect: the exact name first, then as a dot-path into nested objects. */\n\t\tclaim: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\t/** Match when the claim equals this value (array claims: when it contains this element). */\n\t\tequals: Typesafe.scalar,\n\t\t/** Match when the claim contains this value (substring for strings, element for arrays). */\n\t\tcontains: Typesafe.scalar,\n\t\t/** Project membership to grant when the rule matches. */\n\t\tgrantMembership: ClaimMappingMembership,\n\t}),\n))\n\nexport type ClaimMappingRule = ReturnType<typeof ClaimMappingRule>\n\n/**\n * The validated A09 mapping. `rules` is required here — {@link parseClaimMapping} only returns a\n * mapping once it has confirmed `rules` is present, and returns `null` otherwise (so an OIDC-only\n * `claimMapping` is treated as \"no role mapping\", not an error).\n */\nexport const ClaimMapping = Typesafe.intersection(\n\tTypesafe.object({\n\t\trules: Typesafe.array(ClaimMappingRule),\n\t}),\n\tTypesafe.partial({\n\t\t/**\n\t\t * When to apply the mapping:\n\t\t * - `always` (default) — re-sync memberships on every sign-in (and on every OIDC session refresh).\n\t\t * - `sticky` — apply only when the account is first created by auto-sign-up; existing\n\t\t * accounts (including one being linked to this IdP for the first time) are\n\t\t * left untouched.\n\t\t */\n\t\tsyncPolicy: Typesafe.enumeration('always', 'sticky'),\n\t\t/**\n\t\t * How to treat existing grants the mapping does NOT (re)assign on this sign-in:\n\t\t * - `keep` (default, safer) — leave pre-existing memberships untouched.\n\t\t * - `remove` — strip memberships that the mapping no longer grants (IdP becomes the source of\n\t\t * truth). Only ever touches grants the mapping itself could have made; memberships\n\t\t * outside the mapping's vocabulary are never removed.\n\t\t */\n\t\tunmatched: Typesafe.enumeration('keep', 'remove'),\n\t}),\n)\n\nexport type ClaimMapping = ReturnType<typeof ClaimMapping>\n\nexport const DEFAULT_SYNC_POLICY: NonNullable<ClaimMapping['syncPolicy']> = 'always'\nexport const DEFAULT_UNMATCHED: NonNullable<ClaimMapping['unmatched']> = 'keep'\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * Parse the optional A09 `claimMapping` out of an IdP `configuration` blob. Returns `null` when no\n * A09 mapping is present — either no `claimMapping` at all, or a `claimMapping` that carries no\n * `rules` (e.g. the OIDC identity-field remap, which shares this key). Returning `null` keeps both\n * the pre-A09 sign-in path and the OIDC remap untouched.\n *\n * Only the A09 fields (`rules`, `syncPolicy`, `unmatched`) are validated; any other keys on the\n * `claimMapping` object (the OIDC remap fields) are ignored, so the two features coexist. Throws via\n * Typesafe when `rules` is present but structurally malformed (e.g. a rule missing its required\n * `claim`), so an A09 misconfiguration surfaces loudly rather than silently dropping grants.\n *\n * The nested A09 schemas (rule / membership / variable / value-source) are wrapped in\n * `Typesafe.noExtraProps`, so a typo'd key on any of them (e.g. `grantMembershp`, `equls`) is\n * REJECTED, not silently stripped — a misconfiguration surfaces loudly instead of degrading into a\n * grants-nothing or match-everyone rule. The one exception is the top-level `claimMapping` object\n * itself: it is the key SHARED with the OIDC identity-remap (`email`/`name`/`externalIdentifier`/\n * `attributesKey`), so this parse first projects only the A09 fields (`rules`/`syncPolicy`/`unmatched`)\n * into a fresh object (above) and deliberately does NOT apply `noExtraProps` there — the OIDC remap\n * fields must coexist. The `map` lookup table is likewise a `record` (arbitrary keys are legitimate),\n * not a strict object. The removed `grantRoles` key is still caught separately by\n * {@link findRemovedRuleKeys} (run before this parse) for a clearer message than the generic\n * extra-property error `noExtraProps` would otherwise raise.\n */\nexport const parseClaimMapping = (configuration: Record<string, unknown>): ClaimMapping | null => {\n\tconst raw = configuration.claimMapping\n\tif (!isRecord(raw) || raw.rules === undefined || raw.rules === null) {\n\t\treturn null\n\t}\n\tconst input: Record<string, unknown> = { rules: raw.rules }\n\tif (raw.syncPolicy !== undefined) {\n\t\tinput.syncPolicy = raw.syncPolicy\n\t}\n\tif (raw.unmatched !== undefined) {\n\t\tinput.unmatched = raw.unmatched\n\t}\n\treturn ClaimMapping(input, ['claimMapping'])\n}\n\n/**\n * The set of A09 rule keys that were removed when global-role mapping was dropped. Detected\n * explicitly (rather than relying on Typesafe's generic \"extra property\" rejection) so a config\n * that still tries to grant global roles gets an actionable error.\n */\nconst REMOVED_RULE_KEYS = ['grantRoles'] as const\n\n/**\n * Returns the removed rule keys (currently only `grantRoles`) still present in a raw `claimMapping`,\n * so config-time validation can reject them with a clear message pointing at `grantMembership`.\n */\nexport const findRemovedRuleKeys = (configuration: Record<string, unknown>): string[] => {\n\tconst raw = configuration.claimMapping\n\tif (!isRecord(raw) || !Array.isArray(raw.rules)) {\n\t\treturn []\n\t}\n\tconst found = new Set<string>()\n\tfor (const rule of raw.rules) {\n\t\tif (isRecord(rule)) {\n\t\t\tfor (const key of REMOVED_RULE_KEYS) {\n\t\t\t\tif (key in rule) {\n\t\t\t\t\tfound.add(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...found]\n}\n\n/**\n * Semantic checks on a parsed mapping that the Typesafe shape cannot express. Returns one\n * human-readable message per problem (empty = ok); run at config time (IdP add/update) so a\n * contradictory rule is rejected loudly rather than silently mis-matching or granting nothing:\n * - a rule may use at most one of `equals` / `contains` ({@link ruleMatches} only ever honours `equals`\n * when both are set, so the other would be silently ignored);\n * - a rule's `equals` / `contains` must not be an empty string: an empty `contains` substring-matches EVERY\n * string claim (`'...'.includes('')` is always true), i.e. a match-everything grant to every user of the\n * IdP, and an empty `equals` is an always-no-op footgun — to match on the claim's mere presence, omit both;\n * - a rule must carry a `grantMembership` — a rule with none matches but grants nothing. (A *misspelled*\n * `grantMembership`, e.g. `grantMembershp`, is now rejected earlier by `noExtraProps` during\n * {@link parseClaimMapping}; this check remains for a `grantMembership` that is genuinely OMITTED,\n * which the `partial` schema permits.)\n * - a variable's `from.where` requires a `from.pick` — `where` filters elements but without `pick` there\n * is nothing to project, so the source can only ever resolve to no values;\n * - a variable's `from.split` must not be the empty string — `''.split('')` explodes every claim value\n * into its individual characters (the same class of footgun as an empty `equals` / `contains`).\n */\nexport const findClaimMappingShapeErrors = (mapping: ClaimMapping): string[] => {\n\tconst errors: string[] = []\n\tfor (const rule of mapping.rules) {\n\t\tif (rule.grantMembership === undefined) {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has no 'grantMembership', so it matches but grants nothing; add a 'grantMembership'`,\n\t\t\t)\n\t\t}\n\t\tif (rule.equals !== undefined && rule.contains !== undefined) {\n\t\t\terrors.push(`claimMapping rule for claim '${rule.claim}' sets both 'equals' and 'contains'; a rule may use at most one`)\n\t\t}\n\t\tif (typeof rule.equals === 'string' && rule.equals.trim() === '') {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has an empty 'equals' value; omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,\n\t\t\t)\n\t\t}\n\t\tif (typeof rule.contains === 'string' && rule.contains.trim() === '') {\n\t\t\terrors.push(\n\t\t\t\t`claimMapping rule for claim '${rule.claim}' has an empty 'contains' value, which would substring-match every string value of the claim (a match-everything grant); omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,\n\t\t\t)\n\t\t}\n\t\tfor (const variable of rule.grantMembership?.variables ?? []) {\n\t\t\tif (variable.from?.where !== undefined && variable.from.pick === undefined) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`claimMapping variable '${variable.name}' uses 'from.where' without 'from.pick'; it can only ever resolve to no values — set 'pick' (the field to take from each matched element)`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (variable.from?.split === '') {\n\t\t\t\terrors.push(\n\t\t\t\t\t`claimMapping variable '${variable.name}' has an empty 'from.split' delimiter, which splits every claim value into its individual characters; omit 'split' to keep the value whole, or set a non-empty delimiter`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\treturn errors\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const ClaimMapping = require("./ClaimMapping.cjs");
|
|
4
|
+
const evaluateClaimMapping = (mapping, claims) => {
|
|
5
|
+
const membershipByKey = /* @__PURE__ */ new Map();
|
|
6
|
+
for (const rule of mapping.rules) {
|
|
7
|
+
if (!ruleMatches(rule, resolvePath(claims, rule.claim))) {
|
|
8
|
+
continue;
|
|
9
|
+
}
|
|
10
|
+
if (rule.grantMembership) {
|
|
11
|
+
const membership = toMembership(rule.grantMembership, claims);
|
|
12
|
+
const key = JSON.stringify([membership.project, membership.role]);
|
|
13
|
+
const existing = membershipByKey.get(key);
|
|
14
|
+
membershipByKey.set(key, existing ? mergeMembershipVariables(existing, membership) : membership);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return [...membershipByKey.values()];
|
|
18
|
+
};
|
|
19
|
+
const toMembership = (membership, claims) => ({
|
|
20
|
+
project: membership.project,
|
|
21
|
+
role: membership.role,
|
|
22
|
+
// Union by name so a single grant that lists the same variable twice (e.g. two `locale` entries)
|
|
23
|
+
// combines their values into one entry, rather than emitting duplicate entries that would later race
|
|
24
|
+
// and clobber each other when each is written as a full-replace of the same (membership, variable).
|
|
25
|
+
variables: unionVariablesByName(
|
|
26
|
+
(membership.variables ?? []).map((variable) => ({ name: variable.name, values: resolveVariableValues(variable, claims) }))
|
|
27
|
+
)
|
|
28
|
+
});
|
|
29
|
+
const mergeMembershipVariables = (a, b) => ({
|
|
30
|
+
project: a.project,
|
|
31
|
+
role: a.role,
|
|
32
|
+
variables: unionVariablesByName([...a.variables, ...b.variables])
|
|
33
|
+
});
|
|
34
|
+
const unionVariablesByName = (variables) => {
|
|
35
|
+
const valuesByName = /* @__PURE__ */ new Map();
|
|
36
|
+
for (const variable of variables) {
|
|
37
|
+
const values = valuesByName.get(variable.name) ?? /* @__PURE__ */ new Set();
|
|
38
|
+
for (const value of variable.values) {
|
|
39
|
+
values.add(value);
|
|
40
|
+
}
|
|
41
|
+
valuesByName.set(variable.name, values);
|
|
42
|
+
}
|
|
43
|
+
return [...valuesByName].map(([name, values]) => ({ name, values: [...values].sort() }));
|
|
44
|
+
};
|
|
45
|
+
const resolveVariableValues = (variable, claims) => {
|
|
46
|
+
const values = new Set(variable.values ?? []);
|
|
47
|
+
if (variable.from) {
|
|
48
|
+
const allow = variable.allow ? new Set(variable.allow) : null;
|
|
49
|
+
for (const raw of extractClaimValues(variable.from, claims)) {
|
|
50
|
+
const mapped = variable.map && Object.prototype.hasOwnProperty.call(variable.map, raw) ? variable.map[raw] : variable.passthrough ? [raw] : [];
|
|
51
|
+
for (const value of mapped) {
|
|
52
|
+
if (!allow || allow.has(value)) {
|
|
53
|
+
values.add(value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...values];
|
|
59
|
+
};
|
|
60
|
+
const extractClaimValues = (source, claims) => {
|
|
61
|
+
const resolved = resolvePath(claims, source.claim);
|
|
62
|
+
const items = Array.isArray(resolved) ? resolved : [resolved];
|
|
63
|
+
const out = [];
|
|
64
|
+
for (const item of items) {
|
|
65
|
+
let value = item;
|
|
66
|
+
if (source.where !== void 0 || source.pick !== void 0) {
|
|
67
|
+
if (!ClaimMapping.isRecord(item)) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (source.where && !scalarEquals(resolvePath(item, source.where.field), source.where.equals)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
value = source.pick !== void 0 ? resolvePath(item, source.pick) : void 0;
|
|
74
|
+
}
|
|
75
|
+
if (typeof value === "string" && source.split !== void 0) {
|
|
76
|
+
for (const part of value.split(source.split)) {
|
|
77
|
+
const trimmed = part.trim();
|
|
78
|
+
if (trimmed.length > 0) {
|
|
79
|
+
out.push(trimmed);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const scalar = coerceToString(value);
|
|
85
|
+
if (scalar !== null) {
|
|
86
|
+
out.push(scalar);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [...new Set(out)];
|
|
90
|
+
};
|
|
91
|
+
const resolvePath = (root, path) => {
|
|
92
|
+
if (ClaimMapping.isRecord(root) && Object.prototype.hasOwnProperty.call(root, path)) {
|
|
93
|
+
return root[path];
|
|
94
|
+
}
|
|
95
|
+
let current = root;
|
|
96
|
+
for (const key of path.split(".")) {
|
|
97
|
+
if (!ClaimMapping.isRecord(current) || !Object.prototype.hasOwnProperty.call(current, key)) {
|
|
98
|
+
return void 0;
|
|
99
|
+
}
|
|
100
|
+
current = current[key];
|
|
101
|
+
}
|
|
102
|
+
return current;
|
|
103
|
+
};
|
|
104
|
+
const coerceToString = (value) => {
|
|
105
|
+
if (typeof value === "string") {
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
109
|
+
return String(value);
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
const ruleMatches = (rule, claimValue) => {
|
|
114
|
+
if (rule.equals !== void 0) {
|
|
115
|
+
return matchEquals(claimValue, rule.equals);
|
|
116
|
+
}
|
|
117
|
+
if (rule.contains !== void 0) {
|
|
118
|
+
return matchContains(claimValue, rule.contains);
|
|
119
|
+
}
|
|
120
|
+
if (claimValue === void 0 || claimValue === null || claimValue === false || claimValue === "") {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (Array.isArray(claimValue)) {
|
|
124
|
+
return claimValue.length > 0;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
};
|
|
128
|
+
const matchEquals = (claimValue, expected) => {
|
|
129
|
+
if (Array.isArray(claimValue)) {
|
|
130
|
+
return claimValue.some((it) => scalarEquals(it, expected));
|
|
131
|
+
}
|
|
132
|
+
return scalarEquals(claimValue, expected);
|
|
133
|
+
};
|
|
134
|
+
const matchContains = (claimValue, needle) => {
|
|
135
|
+
if (needle === "") {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
if (Array.isArray(claimValue)) {
|
|
139
|
+
return claimValue.some((it) => scalarEquals(it, needle));
|
|
140
|
+
}
|
|
141
|
+
if (typeof claimValue === "string" && typeof needle === "string") {
|
|
142
|
+
return claimValue.includes(needle);
|
|
143
|
+
}
|
|
144
|
+
return scalarEquals(claimValue, needle);
|
|
145
|
+
};
|
|
146
|
+
const scalarEquals = (value, expected) => {
|
|
147
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value === null) {
|
|
148
|
+
return value === expected;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
};
|
|
152
|
+
exports.evaluateClaimMapping = evaluateClaimMapping;
|
|
153
|
+
exports.extractClaimValues = extractClaimValues;
|
|
154
|
+
exports.resolveVariableValues = resolveVariableValues;
|
|
155
|
+
//# sourceMappingURL=ClaimMappingEvaluator.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaimMappingEvaluator.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/ClaimMappingEvaluator.ts"],"sourcesContent":["import { ClaimMapping, ClaimMappingMembership, ClaimMappingRule, ClaimMappingVariable, ClaimValueSource, isRecord } from './ClaimMapping.js'\n\nexport type MappedMembership = {\n\treadonly project: string\n\treadonly role: string\n\treadonly variables: readonly { readonly name: string; readonly values: readonly string[] }[]\n}\n\n/**\n * Evaluate every rule of a claim mapping against the claims of an IdP response and collect the union\n * of granted project memberships (keyed implicitly by (project, role)). Pure: no DB, no side effects —\n * the caller decides how to apply the result (and whether to add-only or replace, per `unmatched`).\n */\nexport const evaluateClaimMapping = (mapping: ClaimMapping, claims: Record<string, unknown>): MappedMembership[] => {\n\tconst membershipByKey = new Map<string, MappedMembership>()\n\n\tfor (const rule of mapping.rules) {\n\t\tif (!ruleMatches(rule, resolvePath(claims, rule.claim))) {\n\t\t\tcontinue\n\t\t}\n\t\tif (rule.grantMembership) {\n\t\t\tconst membership = toMembership(rule.grantMembership, claims)\n\t\t\t// JSON-encode the (project, role) pair so the dedup key can't collide on a delimiter that a\n\t\t\t// slug could itself contain (a plain `${project}::${role}` would fold `a::b`/`c` into `a`/`b::c`).\n\t\t\tconst key = JSON.stringify([membership.project, membership.role])\n\t\t\tconst existing = membershipByKey.get(key)\n\t\t\tmembershipByKey.set(key, existing ? mergeMembershipVariables(existing, membership) : membership)\n\t\t}\n\t}\n\n\treturn [...membershipByKey.values()]\n}\n\nconst toMembership = (membership: ClaimMappingMembership, claims: Record<string, unknown>): MappedMembership => ({\n\tproject: membership.project,\n\trole: membership.role,\n\t// Union by name so a single grant that lists the same variable twice (e.g. two `locale` entries)\n\t// combines their values into one entry, rather than emitting duplicate entries that would later race\n\t// and clobber each other when each is written as a full-replace of the same (membership, variable).\n\tvariables: unionVariablesByName(\n\t\t(membership.variables ?? []).map(variable => ({ name: variable.name, values: resolveVariableValues(variable, claims) })),\n\t),\n})\n\n/**\n * Merge two grants of the same (project, role) by unioning their membership variables per name — so\n * several matching rules granting the same membership combine their variables (consistent with how\n * global roles union), rather than the last rule silently overwriting the variables of the earlier ones.\n */\nconst mergeMembershipVariables = (a: MappedMembership, b: MappedMembership): MappedMembership => ({\n\tproject: a.project,\n\trole: a.role,\n\tvariables: unionVariablesByName([...a.variables, ...b.variables]),\n})\n\n/**\n * Union a list of membership variables by name: several entries for the same variable name — whether from\n * one grant listing it twice or from several rules granting the same membership — combine their values into\n * a single entry. Values are de-duplicated and SORTED so the result is canonical: the same effective grant\n * always yields the same value array regardless of claim/rule order. That keeps the persisted JSON stable\n * (no redundant rewrite when an IdP returns a multi-valued claim in a different order across sign-ins) and\n * the audit delta order-insensitive. Variable entries keep first-seen order.\n */\nconst unionVariablesByName = (\n\tvariables: readonly { readonly name: string; readonly values: readonly string[] }[],\n): { name: string; values: string[] }[] => {\n\tconst valuesByName = new Map<string, Set<string>>()\n\tfor (const variable of variables) {\n\t\tconst values = valuesByName.get(variable.name) ?? new Set<string>()\n\t\tfor (const value of variable.values) {\n\t\t\tvalues.add(value)\n\t\t}\n\t\tvaluesByName.set(variable.name, values)\n\t}\n\treturn [...valuesByName].map(([name, values]) => ({ name, values: [...values].sort() }))\n}\n\n/**\n * Resolve a membership variable to its final string values: constant `values` (always kept) unioned\n * with values derived from `from` (extracted from the claims, then mapped / passed through / allow-\n * filtered). Pure; an empty result simply means the variable is not applied — `IDPClaimSyncService`\n * drops empty-valued variables so an empty `set` never soft-deletes the membership.\n */\nexport const resolveVariableValues = (variable: ClaimMappingVariable, claims: Record<string, unknown>): string[] => {\n\tconst values = new Set<string>(variable.values ?? [])\n\tif (variable.from) {\n\t\tconst allow = variable.allow ? new Set(variable.allow) : null\n\t\tfor (const raw of extractClaimValues(variable.from, claims)) {\n\t\t\t// `raw` is an external claim value used as a `map` key — look it up as an OWN property only.\n\t\t\t// A plain `map?.[raw]` would let a hostile claim like `__proto__` / `constructor` resolve to an\n\t\t\t// inherited prototype member (a non-array object/function), which then slips past `?? []` and\n\t\t\t// throws `not iterable` in the loop below — aborting the sign-in transaction.\n\t\t\tconst mapped = variable.map && Object.prototype.hasOwnProperty.call(variable.map, raw)\n\t\t\t\t? variable.map[raw]\n\t\t\t\t: (variable.passthrough ? [raw] : [])\n\t\t\tfor (const value of mapped) {\n\t\t\t\tif (!allow || allow.has(value)) {\n\t\t\t\t\tvalues.add(value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn [...values]\n}\n\n/**\n * Extract a flat, de-duplicated list of string values from a single claim per a {@link ClaimValueSource}:\n * resolves the (possibly nested) claim, normalises scalar/array, optionally filters + projects an\n * array of objects (`where` / `pick`), and optionally splits a delimited string (`split`). Non-scalar\n * leaves (objects, null/undefined) are skipped; finite numbers are coerced to their string form.\n */\nexport const extractClaimValues = (source: ClaimValueSource, claims: Record<string, unknown>): string[] => {\n\tconst resolved = resolvePath(claims, source.claim)\n\tconst items: unknown[] = Array.isArray(resolved) ? resolved : [resolved]\n\tconst out: string[] = []\n\tfor (const item of items) {\n\t\tlet value: unknown = item\n\t\tif (source.where !== undefined || source.pick !== undefined) {\n\t\t\tif (!isRecord(item)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (source.where && !scalarEquals(resolvePath(item, source.where.field), source.where.equals)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvalue = source.pick !== undefined ? resolvePath(item, source.pick) : undefined\n\t\t}\n\t\tif (typeof value === 'string' && source.split !== undefined) {\n\t\t\tfor (const part of value.split(source.split)) {\n\t\t\t\tconst trimmed = part.trim()\n\t\t\t\tif (trimmed.length > 0) {\n\t\t\t\t\tout.push(trimmed)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tconst scalar = coerceToString(value)\n\t\tif (scalar !== null) {\n\t\t\tout.push(scalar)\n\t\t}\n\t}\n\treturn [...new Set(out)]\n}\n\n/**\n * Resolve a claim name — a rule's `claim` and a variable's `from.claim` / `pick` / `where.field` all\n * use this same lookup. The EXACT name is tried first, so a claim whose name literally contains dots\n * (URL-namespaced, e.g. Auth0's `https://example.com/roles`) stays addressable and wins over a nested\n * path of the same spelling; only then is the name treated as a dot-path into nested objects\n * (`realm_access.roles`). Own-property only at every step: never descend into inherited members, so a\n * claim object can't surface `Object.prototype` via a `__proto__` segment (and a configured path can't\n * read a prototype member).\n */\nconst resolvePath = (root: unknown, path: string): unknown => {\n\tif (isRecord(root) && Object.prototype.hasOwnProperty.call(root, path)) {\n\t\treturn root[path]\n\t}\n\tlet current: unknown = root\n\tfor (const key of path.split('.')) {\n\t\tif (!isRecord(current) || !Object.prototype.hasOwnProperty.call(current, key)) {\n\t\t\treturn undefined\n\t\t}\n\t\tcurrent = current[key]\n\t}\n\treturn current\n}\n\nconst coerceToString = (value: unknown): string | null => {\n\tif (typeof value === 'string') {\n\t\treturn value\n\t}\n\tif (typeof value === 'number' && Number.isFinite(value)) {\n\t\treturn String(value)\n\t}\n\treturn null\n}\n\nconst ruleMatches = (rule: ClaimMappingRule, claimValue: unknown): boolean => {\n\tif (rule.equals !== undefined) {\n\t\treturn matchEquals(claimValue, rule.equals)\n\t}\n\tif (rule.contains !== undefined) {\n\t\treturn matchContains(claimValue, rule.contains)\n\t}\n\t// No condition: match on mere PRESENCE of a non-empty value. Treated as absent: `undefined` / `null`\n\t// (claim not present), the boolean `false` (a `groups`-style flag only grants when truthy), an empty\n\t// array (e.g. `groups: []` — the user is in no group), and an empty string. \"Presence\" therefore means\n\t// the claim actually carries a value, not merely that the field exists but is empty.\n\tif (claimValue === undefined || claimValue === null || claimValue === false || claimValue === '') {\n\t\treturn false\n\t}\n\tif (Array.isArray(claimValue)) {\n\t\treturn claimValue.length > 0\n\t}\n\treturn true\n}\n\nconst matchEquals = (claimValue: unknown, expected: string | number | boolean | null): boolean => {\n\tif (Array.isArray(claimValue)) {\n\t\treturn claimValue.some(it => scalarEquals(it, expected))\n\t}\n\treturn scalarEquals(claimValue, expected)\n}\n\nconst matchContains = (claimValue: unknown, needle: string | number | boolean | null): boolean => {\n\t// An empty-string needle would substring-match EVERY string claim (`s.includes('') === true`) — a\n\t// match-everyone grant to every user of the IdP. Config-time validation rejects it, but a config planted\n\t// out-of-band (a direct `identity_provider.configuration` JSONB edit) bypasses that guard; refuse it here\n\t// too so the evaluator never honours a degenerate match-everyone rule, regardless of how it arrived (SEC-1).\n\tif (needle === '') {\n\t\treturn false\n\t}\n\tif (Array.isArray(claimValue)) {\n\t\treturn claimValue.some(it => scalarEquals(it, needle))\n\t}\n\tif (typeof claimValue === 'string' && typeof needle === 'string') {\n\t\treturn claimValue.includes(needle)\n\t}\n\treturn scalarEquals(claimValue, needle)\n}\n\nconst scalarEquals = (value: unknown, expected: string | number | boolean | null): boolean => {\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value === null) {\n\t\treturn value === expected\n\t}\n\treturn false\n}\n"],"names":["isRecord"],"mappings":"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"}
|