@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.
Files changed (1316) hide show
  1. package/CLAUDE.md +36 -2
  2. package/dist/development/index.cjs +32 -0
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +33 -1
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/src/TenantContainer.cjs +15 -3
  7. package/dist/development/src/TenantContainer.cjs.map +1 -1
  8. package/dist/development/src/TenantContainer.js +15 -3
  9. package/dist/development/src/TenantContainer.js.map +1 -1
  10. package/dist/development/src/bridges/system/IdentityFetcher.cjs +2 -1
  11. package/dist/development/src/bridges/system/IdentityFetcher.cjs.map +1 -1
  12. package/dist/development/src/bridges/system/IdentityFetcher.js +2 -1
  13. package/dist/development/src/bridges/system/IdentityFetcher.js.map +1 -1
  14. package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs +10 -0
  15. package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs.map +1 -0
  16. package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.js +11 -0
  17. package/dist/development/src/migrations/2026-06-18-120000-idp-claim-mapping.js.map +1 -0
  18. package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs +9 -0
  19. package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs.map +1 -0
  20. package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.js +10 -0
  21. package/dist/development/src/migrations/2026-08-03-120000-person-enable-auth-log.js.map +1 -0
  22. package/dist/development/src/migrations/2026-08-04-120000-config-panel.cjs +11 -0
  23. package/dist/development/src/migrations/2026-08-04-120000-config-panel.cjs.map +1 -0
  24. package/dist/development/src/migrations/2026-08-04-120000-config-panel.js +12 -0
  25. package/dist/development/src/migrations/2026-08-04-120000-config-panel.js.map +1 -0
  26. package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs +18 -0
  27. package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs.map +1 -0
  28. package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js +19 -0
  29. package/dist/development/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js.map +1 -0
  30. package/dist/development/src/migrations/runner.cjs +11 -2
  31. package/dist/development/src/migrations/runner.cjs.map +1 -1
  32. package/dist/development/src/migrations/runner.js +11 -2
  33. package/dist/development/src/migrations/runner.js.map +1 -1
  34. package/dist/development/src/migrations/snapshot.cjs +8 -2
  35. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  36. package/dist/development/src/migrations/snapshot.js +8 -2
  37. package/dist/development/src/migrations/snapshot.js.map +1 -1
  38. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
  39. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  40. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
  41. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  42. package/dist/development/src/model/commands/idp/CreateIdpCommand.cjs +8 -2
  43. package/dist/development/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
  44. package/dist/development/src/model/commands/idp/CreateIdpCommand.js +8 -2
  45. package/dist/development/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
  46. package/dist/development/src/model/commands/idp/UpdateIdpCommand.cjs +6 -2
  47. package/dist/development/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
  48. package/dist/development/src/model/commands/idp/UpdateIdpCommand.js +6 -2
  49. package/dist/development/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
  50. package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
  51. package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
  52. package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
  53. package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
  54. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
  55. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  56. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
  57. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  58. package/dist/development/src/model/commands/person/EnablePersonCommand.cjs +17 -0
  59. package/dist/development/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
  60. package/dist/development/src/model/commands/person/EnablePersonCommand.js +17 -0
  61. package/dist/development/src/model/commands/person/EnablePersonCommand.js.map +1 -0
  62. package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
  63. package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  64. package/dist/development/src/model/queries/configuration/ConfigurationQuery.js +4 -0
  65. package/dist/development/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  66. package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs +21 -0
  67. package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs.map +1 -0
  68. package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js +21 -0
  69. package/dist/development/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js.map +1 -0
  70. package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.cjs +1 -1
  71. package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.cjs.map +1 -1
  72. package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.js +1 -1
  73. package/dist/development/src/model/queries/idp/PersonIdentityProvidersQuery.js.map +1 -1
  74. package/dist/development/src/model/queries/idp/helpers.cjs +3 -3
  75. package/dist/development/src/model/queries/idp/helpers.cjs.map +1 -1
  76. package/dist/development/src/model/queries/idp/helpers.js +3 -3
  77. package/dist/development/src/model/queries/idp/helpers.js.map +1 -1
  78. package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
  79. package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  80. package/dist/development/src/model/queries/membership/ProjectMembersQuery.js +1 -1
  81. package/dist/development/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  82. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
  83. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  84. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
  85. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  86. package/dist/development/src/model/service/AuthLogService.cjs +8 -2
  87. package/dist/development/src/model/service/AuthLogService.cjs.map +1 -1
  88. package/dist/development/src/model/service/AuthLogService.js +8 -2
  89. package/dist/development/src/model/service/AuthLogService.js.map +1 -1
  90. package/dist/development/src/model/service/IDPSignInManager.cjs +29 -2
  91. package/dist/development/src/model/service/IDPSignInManager.cjs.map +1 -1
  92. package/dist/development/src/model/service/IDPSignInManager.js +29 -2
  93. package/dist/development/src/model/service/IDPSignInManager.js.map +1 -1
  94. package/dist/development/src/model/service/PanelAccessResolver.cjs +31 -0
  95. package/dist/development/src/model/service/PanelAccessResolver.cjs.map +1 -0
  96. package/dist/development/src/model/service/PanelAccessResolver.js +31 -0
  97. package/dist/development/src/model/service/PanelAccessResolver.js.map +1 -0
  98. package/dist/development/src/model/service/PasswordResetManager.cjs +5 -0
  99. package/dist/development/src/model/service/PasswordResetManager.cjs.map +1 -1
  100. package/dist/development/src/model/service/PasswordResetManager.js +5 -0
  101. package/dist/development/src/model/service/PasswordResetManager.js.map +1 -1
  102. package/dist/development/src/model/service/PasswordlessSignInManager.cjs +19 -0
  103. package/dist/development/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
  104. package/dist/development/src/model/service/PasswordlessSignInManager.js +19 -0
  105. package/dist/development/src/model/service/PasswordlessSignInManager.js.map +1 -1
  106. package/dist/development/src/model/service/PersonAccessManager.cjs +10 -2
  107. package/dist/development/src/model/service/PersonAccessManager.cjs.map +1 -1
  108. package/dist/development/src/model/service/PersonAccessManager.js +10 -2
  109. package/dist/development/src/model/service/PersonAccessManager.js.map +1 -1
  110. package/dist/development/src/model/service/SignInManager.cjs +5 -0
  111. package/dist/development/src/model/service/SignInManager.cjs.map +1 -1
  112. package/dist/development/src/model/service/SignInManager.js +5 -0
  113. package/dist/development/src/model/service/SignInManager.js.map +1 -1
  114. package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
  115. package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  116. package/dist/development/src/model/service/apiKey/ApiKeyManager.js +4 -3
  117. package/dist/development/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  118. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
  119. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
  120. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
  121. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
  122. package/dist/development/src/model/service/idp/ClaimMapping.cjs +187 -0
  123. package/dist/development/src/model/service/idp/ClaimMapping.cjs.map +1 -0
  124. package/dist/development/src/model/service/idp/ClaimMapping.js +170 -0
  125. package/dist/development/src/model/service/idp/ClaimMapping.js.map +1 -0
  126. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
  127. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
  128. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
  129. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
  130. package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
  131. package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
  132. package/dist/development/src/model/service/idp/ClaimMappingValidation.js +83 -0
  133. package/dist/development/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
  134. package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
  135. package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
  136. package/dist/development/src/model/service/idp/IDPClaimSyncService.js +260 -0
  137. package/dist/development/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
  138. package/dist/development/src/model/service/idp/IDPManager.cjs +96 -20
  139. package/dist/development/src/model/service/idp/IDPManager.cjs.map +1 -1
  140. package/dist/development/src/model/service/idp/IDPManager.js +96 -20
  141. package/dist/development/src/model/service/idp/IDPManager.js.map +1 -1
  142. package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
  143. package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
  144. package/dist/development/src/model/service/idp/IdpSessionRevalidator.js +55 -1
  145. package/dist/development/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
  146. package/dist/development/src/model/service/idp/PersonIdentityProviderManager.cjs +6 -0
  147. package/dist/development/src/model/service/idp/PersonIdentityProviderManager.cjs.map +1 -1
  148. package/dist/development/src/model/service/idp/PersonIdentityProviderManager.js +6 -0
  149. package/dist/development/src/model/service/idp/PersonIdentityProviderManager.js.map +1 -1
  150. package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
  151. package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  152. package/dist/development/src/model/service/idp/providers/OIDCHelpers.js +69 -33
  153. package/dist/development/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  154. package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
  155. package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  156. package/dist/development/src/model/service/idp/providers/OIDCProvider.js +4 -1
  157. package/dist/development/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  158. package/dist/development/src/model/utils/DatabaseContext.cjs +7 -2
  159. package/dist/development/src/model/utils/DatabaseContext.cjs.map +1 -1
  160. package/dist/development/src/model/utils/DatabaseContext.js +8 -3
  161. package/dist/development/src/model/utils/DatabaseContext.js.map +1 -1
  162. package/dist/development/src/resolvers/ResolverFactory.cjs +6 -2
  163. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  164. package/dist/development/src/resolvers/ResolverFactory.js +6 -2
  165. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  166. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
  167. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  168. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
  169. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  170. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +2 -1
  171. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  172. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
  173. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  174. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
  175. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
  176. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
  177. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
  178. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
  179. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  180. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
  181. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  182. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
  183. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  184. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
  185. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  186. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +4 -2
  187. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  188. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js +4 -2
  189. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  190. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
  191. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  192. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
  193. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  194. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
  195. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
  196. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
  197. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
  198. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
  199. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  200. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
  201. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  202. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +4 -2
  203. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  204. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +4 -2
  205. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  206. package/dist/development/src/resolvers/mutation/idp/audit.cjs +1 -0
  207. package/dist/development/src/resolvers/mutation/idp/audit.cjs.map +1 -1
  208. package/dist/development/src/resolvers/mutation/idp/audit.js +1 -0
  209. package/dist/development/src/resolvers/mutation/idp/audit.js.map +1 -1
  210. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
  211. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  212. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
  213. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  214. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
  215. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  216. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
  217. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  218. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
  219. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  220. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
  221. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  222. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
  223. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  224. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
  225. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  226. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
  227. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
  228. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
  229. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
  230. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
  231. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
  232. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
  233. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
  234. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
  235. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
  236. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
  237. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
  238. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
  239. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
  240. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
  241. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
  242. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
  243. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  244. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
  245. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  246. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
  247. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  248. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
  249. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  250. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs +2 -1
  251. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  252. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
  253. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  254. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +6 -1
  255. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  256. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js +6 -1
  257. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  258. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
  259. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
  260. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
  261. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
  262. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
  263. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  264. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
  265. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  266. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
  267. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
  268. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
  269. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
  270. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
  271. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
  272. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
  273. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
  274. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs +4 -3
  275. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  276. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js +4 -3
  277. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  278. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
  279. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  280. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
  281. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  282. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
  283. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  284. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
  285. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  286. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +2 -1
  287. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  288. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
  289. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  290. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
  291. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  292. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
  293. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  294. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +2 -1
  295. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  296. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
  297. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  298. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
  299. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  300. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
  301. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  302. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
  303. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  304. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
  305. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  306. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
  307. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  308. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
  309. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  310. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
  311. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  312. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
  313. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  314. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
  315. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
  316. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
  317. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
  318. package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
  319. package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
  320. package/dist/development/src/resolvers/query/AuthLogQueryResolver.js +2 -1
  321. package/dist/development/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
  322. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
  323. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
  324. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
  325. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
  326. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
  327. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  328. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
  329. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  330. package/dist/development/src/resolvers/query/IDPQueryResolver.cjs +2 -1
  331. package/dist/development/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  332. package/dist/development/src/resolvers/query/IDPQueryResolver.js +2 -1
  333. package/dist/development/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  334. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
  335. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  336. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
  337. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  338. package/dist/development/src/resolvers/query/PersonQueryResolver.cjs +2 -1
  339. package/dist/development/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  340. package/dist/development/src/resolvers/query/PersonQueryResolver.js +2 -1
  341. package/dist/development/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  342. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
  343. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  344. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
  345. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  346. package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
  347. package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  348. package/dist/development/src/resolvers/query/ProjectQueryResolver.js +5 -3
  349. package/dist/development/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  350. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
  351. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
  352. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
  353. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
  354. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
  355. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  356. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
  357. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  358. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
  359. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
  360. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
  361. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
  362. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
  363. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  364. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
  365. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  366. package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
  367. package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  368. package/dist/development/src/resolvers/types/IdentityTypeResolver.js +37 -4
  369. package/dist/development/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  370. package/dist/development/src/resolvers/types/PersonTypeResolver.cjs +30 -1
  371. package/dist/development/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
  372. package/dist/development/src/resolvers/types/PersonTypeResolver.js +30 -1
  373. package/dist/development/src/resolvers/types/PersonTypeResolver.js.map +1 -1
  374. package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
  375. package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  376. package/dist/development/src/resolvers/types/ProjectTypeResolver.js +25 -1
  377. package/dist/development/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  378. package/dist/development/src/schema/tenant.graphql.cjs +144 -0
  379. package/dist/development/src/schema/tenant.graphql.cjs.map +1 -1
  380. package/dist/development/src/schema/tenant.graphql.js +144 -0
  381. package/dist/development/src/schema/tenant.graphql.js.map +1 -1
  382. package/dist/production/index.cjs +32 -0
  383. package/dist/production/index.cjs.map +1 -1
  384. package/dist/production/index.js +33 -1
  385. package/dist/production/index.js.map +1 -1
  386. package/dist/production/src/TenantContainer.cjs +15 -3
  387. package/dist/production/src/TenantContainer.cjs.map +1 -1
  388. package/dist/production/src/TenantContainer.js +15 -3
  389. package/dist/production/src/TenantContainer.js.map +1 -1
  390. package/dist/production/src/bridges/system/IdentityFetcher.cjs +2 -1
  391. package/dist/production/src/bridges/system/IdentityFetcher.cjs.map +1 -1
  392. package/dist/production/src/bridges/system/IdentityFetcher.js +2 -1
  393. package/dist/production/src/bridges/system/IdentityFetcher.js.map +1 -1
  394. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs +10 -0
  395. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs.map +1 -0
  396. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js +11 -0
  397. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js.map +1 -0
  398. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs +9 -0
  399. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs.map +1 -0
  400. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js +10 -0
  401. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js.map +1 -0
  402. package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs +11 -0
  403. package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs.map +1 -0
  404. package/dist/production/src/migrations/2026-08-04-120000-config-panel.js +12 -0
  405. package/dist/production/src/migrations/2026-08-04-120000-config-panel.js.map +1 -0
  406. package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs +18 -0
  407. package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.cjs.map +1 -0
  408. package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js +19 -0
  409. package/dist/production/src/migrations/2026-09-04-120000-idp-disable-local-authentication.js.map +1 -0
  410. package/dist/production/src/migrations/runner.cjs +11 -2
  411. package/dist/production/src/migrations/runner.cjs.map +1 -1
  412. package/dist/production/src/migrations/runner.js +11 -2
  413. package/dist/production/src/migrations/runner.js.map +1 -1
  414. package/dist/production/src/migrations/snapshot.cjs +8 -2
  415. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  416. package/dist/production/src/migrations/snapshot.js +8 -2
  417. package/dist/production/src/migrations/snapshot.js.map +1 -1
  418. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
  419. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  420. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
  421. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  422. package/dist/production/src/model/commands/idp/CreateIdpCommand.cjs +8 -2
  423. package/dist/production/src/model/commands/idp/CreateIdpCommand.cjs.map +1 -1
  424. package/dist/production/src/model/commands/idp/CreateIdpCommand.js +8 -2
  425. package/dist/production/src/model/commands/idp/CreateIdpCommand.js.map +1 -1
  426. package/dist/production/src/model/commands/idp/UpdateIdpCommand.cjs +6 -2
  427. package/dist/production/src/model/commands/idp/UpdateIdpCommand.cjs.map +1 -1
  428. package/dist/production/src/model/commands/idp/UpdateIdpCommand.js +6 -2
  429. package/dist/production/src/model/commands/idp/UpdateIdpCommand.js.map +1 -1
  430. package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
  431. package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
  432. package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
  433. package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
  434. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
  435. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  436. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
  437. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  438. package/dist/production/src/model/commands/person/EnablePersonCommand.cjs +17 -0
  439. package/dist/production/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
  440. package/dist/production/src/model/commands/person/EnablePersonCommand.js +17 -0
  441. package/dist/production/src/model/commands/person/EnablePersonCommand.js.map +1 -0
  442. package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
  443. package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  444. package/dist/production/src/model/queries/configuration/ConfigurationQuery.js +4 -0
  445. package/dist/production/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  446. package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs +21 -0
  447. package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.cjs.map +1 -0
  448. package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js +21 -0
  449. package/dist/production/src/model/queries/idp/LocalAuthDisablingIdpsQuery.js.map +1 -0
  450. package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.cjs +1 -1
  451. package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.cjs.map +1 -1
  452. package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.js +1 -1
  453. package/dist/production/src/model/queries/idp/PersonIdentityProvidersQuery.js.map +1 -1
  454. package/dist/production/src/model/queries/idp/helpers.cjs +3 -3
  455. package/dist/production/src/model/queries/idp/helpers.cjs.map +1 -1
  456. package/dist/production/src/model/queries/idp/helpers.js +3 -3
  457. package/dist/production/src/model/queries/idp/helpers.js.map +1 -1
  458. package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
  459. package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  460. package/dist/production/src/model/queries/membership/ProjectMembersQuery.js +1 -1
  461. package/dist/production/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  462. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
  463. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  464. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
  465. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  466. package/dist/production/src/model/service/AuthLogService.cjs +8 -2
  467. package/dist/production/src/model/service/AuthLogService.cjs.map +1 -1
  468. package/dist/production/src/model/service/AuthLogService.js +8 -2
  469. package/dist/production/src/model/service/AuthLogService.js.map +1 -1
  470. package/dist/production/src/model/service/IDPSignInManager.cjs +29 -2
  471. package/dist/production/src/model/service/IDPSignInManager.cjs.map +1 -1
  472. package/dist/production/src/model/service/IDPSignInManager.js +29 -2
  473. package/dist/production/src/model/service/IDPSignInManager.js.map +1 -1
  474. package/dist/production/src/model/service/PanelAccessResolver.cjs +31 -0
  475. package/dist/production/src/model/service/PanelAccessResolver.cjs.map +1 -0
  476. package/dist/production/src/model/service/PanelAccessResolver.js +31 -0
  477. package/dist/production/src/model/service/PanelAccessResolver.js.map +1 -0
  478. package/dist/production/src/model/service/PasswordResetManager.cjs +5 -0
  479. package/dist/production/src/model/service/PasswordResetManager.cjs.map +1 -1
  480. package/dist/production/src/model/service/PasswordResetManager.js +5 -0
  481. package/dist/production/src/model/service/PasswordResetManager.js.map +1 -1
  482. package/dist/production/src/model/service/PasswordlessSignInManager.cjs +19 -0
  483. package/dist/production/src/model/service/PasswordlessSignInManager.cjs.map +1 -1
  484. package/dist/production/src/model/service/PasswordlessSignInManager.js +19 -0
  485. package/dist/production/src/model/service/PasswordlessSignInManager.js.map +1 -1
  486. package/dist/production/src/model/service/PersonAccessManager.cjs +10 -2
  487. package/dist/production/src/model/service/PersonAccessManager.cjs.map +1 -1
  488. package/dist/production/src/model/service/PersonAccessManager.js +10 -2
  489. package/dist/production/src/model/service/PersonAccessManager.js.map +1 -1
  490. package/dist/production/src/model/service/SignInManager.cjs +5 -0
  491. package/dist/production/src/model/service/SignInManager.cjs.map +1 -1
  492. package/dist/production/src/model/service/SignInManager.js +5 -0
  493. package/dist/production/src/model/service/SignInManager.js.map +1 -1
  494. package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
  495. package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  496. package/dist/production/src/model/service/apiKey/ApiKeyManager.js +4 -3
  497. package/dist/production/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  498. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
  499. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
  500. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
  501. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
  502. package/dist/production/src/model/service/idp/ClaimMapping.cjs +187 -0
  503. package/dist/production/src/model/service/idp/ClaimMapping.cjs.map +1 -0
  504. package/dist/production/src/model/service/idp/ClaimMapping.js +170 -0
  505. package/dist/production/src/model/service/idp/ClaimMapping.js.map +1 -0
  506. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
  507. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
  508. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
  509. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
  510. package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
  511. package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
  512. package/dist/production/src/model/service/idp/ClaimMappingValidation.js +83 -0
  513. package/dist/production/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
  514. package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
  515. package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
  516. package/dist/production/src/model/service/idp/IDPClaimSyncService.js +260 -0
  517. package/dist/production/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
  518. package/dist/production/src/model/service/idp/IDPManager.cjs +96 -20
  519. package/dist/production/src/model/service/idp/IDPManager.cjs.map +1 -1
  520. package/dist/production/src/model/service/idp/IDPManager.js +96 -20
  521. package/dist/production/src/model/service/idp/IDPManager.js.map +1 -1
  522. package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
  523. package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
  524. package/dist/production/src/model/service/idp/IdpSessionRevalidator.js +55 -1
  525. package/dist/production/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
  526. package/dist/production/src/model/service/idp/PersonIdentityProviderManager.cjs +6 -0
  527. package/dist/production/src/model/service/idp/PersonIdentityProviderManager.cjs.map +1 -1
  528. package/dist/production/src/model/service/idp/PersonIdentityProviderManager.js +6 -0
  529. package/dist/production/src/model/service/idp/PersonIdentityProviderManager.js.map +1 -1
  530. package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
  531. package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  532. package/dist/production/src/model/service/idp/providers/OIDCHelpers.js +69 -33
  533. package/dist/production/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  534. package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
  535. package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  536. package/dist/production/src/model/service/idp/providers/OIDCProvider.js +4 -1
  537. package/dist/production/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  538. package/dist/production/src/model/utils/DatabaseContext.cjs +7 -2
  539. package/dist/production/src/model/utils/DatabaseContext.cjs.map +1 -1
  540. package/dist/production/src/model/utils/DatabaseContext.js +8 -3
  541. package/dist/production/src/model/utils/DatabaseContext.js.map +1 -1
  542. package/dist/production/src/resolvers/ResolverFactory.cjs +6 -2
  543. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  544. package/dist/production/src/resolvers/ResolverFactory.js +6 -2
  545. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  546. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
  547. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  548. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
  549. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  550. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +2 -1
  551. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  552. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
  553. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  554. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
  555. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
  556. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
  557. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
  558. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
  559. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  560. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
  561. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  562. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
  563. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  564. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
  565. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  566. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +4 -2
  567. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  568. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js +4 -2
  569. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  570. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
  571. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  572. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
  573. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  574. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
  575. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
  576. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
  577. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
  578. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
  579. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  580. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
  581. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  582. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +4 -2
  583. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  584. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +4 -2
  585. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  586. package/dist/production/src/resolvers/mutation/idp/audit.cjs +1 -0
  587. package/dist/production/src/resolvers/mutation/idp/audit.cjs.map +1 -1
  588. package/dist/production/src/resolvers/mutation/idp/audit.js +1 -0
  589. package/dist/production/src/resolvers/mutation/idp/audit.js.map +1 -1
  590. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
  591. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  592. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
  593. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  594. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
  595. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  596. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
  597. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  598. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
  599. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  600. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
  601. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  602. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
  603. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  604. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
  605. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  606. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
  607. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
  608. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
  609. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
  610. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
  611. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
  612. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
  613. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
  614. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
  615. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
  616. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
  617. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
  618. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
  619. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
  620. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
  621. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
  622. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
  623. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  624. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
  625. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  626. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
  627. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  628. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
  629. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  630. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs +2 -1
  631. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  632. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
  633. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  634. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +6 -1
  635. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  636. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js +6 -1
  637. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  638. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
  639. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
  640. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
  641. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
  642. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
  643. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  644. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
  645. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  646. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
  647. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
  648. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
  649. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
  650. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
  651. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
  652. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
  653. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
  654. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs +4 -3
  655. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  656. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js +4 -3
  657. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  658. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
  659. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  660. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
  661. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  662. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
  663. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  664. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
  665. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  666. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +2 -1
  667. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  668. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
  669. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  670. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
  671. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  672. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
  673. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  674. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +2 -1
  675. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  676. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
  677. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  678. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
  679. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  680. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
  681. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  682. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
  683. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  684. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
  685. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  686. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
  687. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  688. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
  689. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  690. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
  691. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  692. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
  693. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  694. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
  695. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
  696. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
  697. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
  698. package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
  699. package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
  700. package/dist/production/src/resolvers/query/AuthLogQueryResolver.js +2 -1
  701. package/dist/production/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
  702. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
  703. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
  704. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
  705. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
  706. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
  707. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  708. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
  709. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  710. package/dist/production/src/resolvers/query/IDPQueryResolver.cjs +2 -1
  711. package/dist/production/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  712. package/dist/production/src/resolvers/query/IDPQueryResolver.js +2 -1
  713. package/dist/production/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  714. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
  715. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  716. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
  717. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  718. package/dist/production/src/resolvers/query/PersonQueryResolver.cjs +2 -1
  719. package/dist/production/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  720. package/dist/production/src/resolvers/query/PersonQueryResolver.js +2 -1
  721. package/dist/production/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  722. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
  723. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  724. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
  725. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  726. package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
  727. package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  728. package/dist/production/src/resolvers/query/ProjectQueryResolver.js +5 -3
  729. package/dist/production/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  730. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
  731. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
  732. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
  733. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
  734. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
  735. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  736. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
  737. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  738. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
  739. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
  740. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
  741. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
  742. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
  743. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  744. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
  745. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  746. package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
  747. package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  748. package/dist/production/src/resolvers/types/IdentityTypeResolver.js +37 -4
  749. package/dist/production/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  750. package/dist/production/src/resolvers/types/PersonTypeResolver.cjs +30 -1
  751. package/dist/production/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
  752. package/dist/production/src/resolvers/types/PersonTypeResolver.js +30 -1
  753. package/dist/production/src/resolvers/types/PersonTypeResolver.js.map +1 -1
  754. package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
  755. package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  756. package/dist/production/src/resolvers/types/ProjectTypeResolver.js +25 -1
  757. package/dist/production/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  758. package/dist/production/src/schema/tenant.graphql.cjs +144 -0
  759. package/dist/production/src/schema/tenant.graphql.cjs.map +1 -1
  760. package/dist/production/src/schema/tenant.graphql.js +144 -0
  761. package/dist/production/src/schema/tenant.graphql.js.map +1 -1
  762. package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts +2 -0
  763. package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts.map +1 -0
  764. package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts +2 -0
  765. package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts.map +1 -0
  766. package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts +2 -0
  767. package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts.map +1 -0
  768. package/dist/tests/cases/integration/mocked/gql/addProjectMember.d.ts.map +1 -1
  769. package/dist/tests/cases/integration/mocked/gql/changeMyPassword.d.ts.map +1 -1
  770. package/dist/tests/cases/integration/mocked/gql/changeMyProfile.d.ts.map +1 -1
  771. package/dist/tests/cases/integration/mocked/gql/changePassword.d.ts.map +1 -1
  772. package/dist/tests/cases/integration/mocked/gql/changeProfile.d.ts.map +1 -1
  773. package/dist/tests/cases/integration/mocked/gql/confirmOtp.d.ts.map +1 -1
  774. package/dist/tests/cases/integration/mocked/gql/createApiKey.d.ts.map +1 -1
  775. package/dist/tests/cases/integration/mocked/gql/createResetPasswordRequest.d.ts.map +1 -1
  776. package/dist/tests/cases/integration/mocked/gql/createSessionToken.d.ts.map +1 -1
  777. package/dist/tests/cases/integration/mocked/gql/emailOtp.d.ts.map +1 -1
  778. package/dist/tests/cases/integration/mocked/gql/emailVerification.d.ts.map +1 -1
  779. package/dist/tests/cases/integration/mocked/gql/invite.d.ts.map +1 -1
  780. package/dist/tests/cases/integration/mocked/gql/myIdentityProviders.d.ts.map +1 -1
  781. package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts +4 -1
  782. package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts.map +1 -1
  783. package/dist/tests/cases/integration/mocked/gql/prepareOtp.d.ts.map +1 -1
  784. package/dist/tests/cases/integration/mocked/gql/resetPassword.d.ts.map +1 -1
  785. package/dist/tests/cases/integration/mocked/gql/signIn.d.ts.map +1 -1
  786. package/dist/tests/cases/integration/mocked/gql/signInIdp.d.ts.map +1 -1
  787. package/dist/tests/cases/integration/mocked/gql/signUp.d.ts.map +1 -1
  788. package/dist/tests/cases/integration/mocked/gql/unmanagedInvite.d.ts.map +1 -1
  789. package/dist/tests/cases/integration/mocked/gql/updateProjectMember.d.ts.map +1 -1
  790. package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts +2 -0
  791. package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts.map +1 -0
  792. package/dist/tests/cases/integration/mocked/localAuthenticationDisabled.test.d.ts +2 -0
  793. package/dist/tests/cases/integration/mocked/localAuthenticationDisabled.test.d.ts.map +1 -0
  794. package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts +2 -0
  795. package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts.map +1 -0
  796. package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts +2 -0
  797. package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts.map +1 -0
  798. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts +2 -0
  799. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts.map +1 -0
  800. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts +2 -0
  801. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts.map +1 -0
  802. package/dist/tests/cases/integration/mocked/sql/authLogSql.d.ts.map +1 -1
  803. package/dist/tests/cases/integration/mocked/sql/authPolicySql.d.ts.map +1 -1
  804. package/dist/tests/cases/integration/mocked/sql/consumeBackupCodeSql.d.ts.map +1 -1
  805. package/dist/tests/cases/integration/mocked/sql/createApiKeySql.d.ts.map +1 -1
  806. package/dist/tests/cases/integration/mocked/sql/createIdentitySql.d.ts.map +1 -1
  807. package/dist/tests/cases/integration/mocked/sql/createMembershipSql.d.ts.map +1 -1
  808. package/dist/tests/cases/integration/mocked/sql/createMembershipVariableSql.d.ts.map +1 -1
  809. package/dist/tests/cases/integration/mocked/sql/createPersonSql.d.ts.map +1 -1
  810. package/dist/tests/cases/integration/mocked/sql/createPersonTokenSql.d.ts.map +1 -1
  811. package/dist/tests/cases/integration/mocked/sql/createSessionKeySql.d.ts.map +1 -1
  812. package/dist/tests/cases/integration/mocked/sql/disableApiKeySql.d.ts.map +1 -1
  813. package/dist/tests/cases/integration/mocked/sql/disableOneOffKeySql.d.ts.map +1 -1
  814. package/dist/tests/cases/integration/mocked/sql/emailOtpSql.d.ts.map +1 -1
  815. package/dist/tests/cases/integration/mocked/sql/generateBackupCodesSql.d.ts.map +1 -1
  816. package/dist/tests/cases/integration/mocked/sql/getApiKeySql.d.ts.map +1 -1
  817. package/dist/tests/cases/integration/mocked/sql/getConfigSql.d.ts.map +1 -1
  818. package/dist/tests/cases/integration/mocked/sql/getIdentityByIdSql.d.ts.map +1 -1
  819. package/dist/tests/cases/integration/mocked/sql/getIdentityProjectsSql.d.ts.map +1 -1
  820. package/dist/tests/cases/integration/mocked/sql/getIdpBySlugSql.d.ts.map +1 -1
  821. package/dist/tests/cases/integration/mocked/sql/getIdpSessionByApiKeySql.d.ts.map +1 -1
  822. package/dist/tests/cases/integration/mocked/sql/getMailTemplateSql.d.ts.map +1 -1
  823. package/dist/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.d.ts.map +1 -1
  824. package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts +1 -1
  825. package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts.map +1 -1
  826. package/dist/tests/cases/integration/mocked/sql/getPersonByEmailSql.d.ts.map +1 -1
  827. package/dist/tests/cases/integration/mocked/sql/getPersonByIdSql.d.ts.map +1 -1
  828. package/dist/tests/cases/integration/mocked/sql/getPersonByIdentity.d.ts.map +1 -1
  829. package/dist/tests/cases/integration/mocked/sql/getPersonByIdpSql.d.ts.map +1 -1
  830. package/dist/tests/cases/integration/mocked/sql/getPersonsByIdentitySql.d.ts.map +1 -1
  831. package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts +1 -1
  832. package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts.map +1 -1
  833. package/dist/tests/cases/integration/mocked/sql/getProjectMembershipSql.d.ts.map +1 -1
  834. package/dist/tests/cases/integration/mocked/sql/listApiKeysSql.d.ts.map +1 -1
  835. package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts +2 -0
  836. package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts.map +1 -1
  837. package/dist/tests/cases/integration/mocked/sql/listProjectSecretsSql.d.ts.map +1 -1
  838. package/dist/tests/cases/integration/mocked/sql/listSessionsSql.d.ts.map +1 -1
  839. package/dist/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.d.ts +10 -0
  840. package/dist/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.d.ts.map +1 -0
  841. package/dist/tests/cases/integration/mocked/sql/loginHistorySql.d.ts.map +1 -1
  842. package/dist/tests/cases/integration/mocked/sql/patchVariablesSql.d.ts.map +1 -1
  843. package/dist/tests/cases/integration/mocked/sql/personIdentityProvidersSql.d.ts +1 -0
  844. package/dist/tests/cases/integration/mocked/sql/personIdentityProvidersSql.d.ts.map +1 -1
  845. package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts +8 -0
  846. package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts.map +1 -0
  847. package/dist/tests/cases/integration/mocked/sql/selectMembershipsSql.d.ts.map +1 -1
  848. package/dist/tests/cases/integration/mocked/sql/setEmailOtpEnabledSql.d.ts.map +1 -1
  849. package/dist/tests/cases/integration/mocked/sql/sqlTransaction.d.ts.map +1 -1
  850. package/dist/tests/cases/integration/mocked/sql/updatePesonNameSql.d.ts.map +1 -1
  851. package/dist/tests/cases/integration/mocked/sql/updatePesonPasswordSql.d.ts.map +1 -1
  852. package/dist/tests/cases/unit/databaseContextRetry.test.d.ts +2 -0
  853. package/dist/tests/cases/unit/databaseContextRetry.test.d.ts.map +1 -0
  854. package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts +2 -0
  855. package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts.map +1 -0
  856. package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts +2 -0
  857. package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts.map +1 -0
  858. package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts +2 -0
  859. package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts.map +1 -0
  860. package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts +2 -0
  861. package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts.map +1 -0
  862. package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts +2 -0
  863. package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts.map +1 -0
  864. package/dist/tests/cases/unit/panelAccessResolver.test.d.ts +2 -0
  865. package/dist/tests/cases/unit/panelAccessResolver.test.d.ts.map +1 -0
  866. package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts +2 -0
  867. package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts.map +1 -0
  868. package/dist/tests/src/IdPMock.d.ts.map +1 -1
  869. package/dist/tests/src/dbUtils.d.ts.map +1 -1
  870. package/dist/tests/src/tags.d.ts.map +1 -1
  871. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  872. package/dist/tests/src/testTenant.d.ts +7 -1
  873. package/dist/tests/src/testTenant.d.ts.map +1 -1
  874. package/dist/tests/src/testUuid.d.ts.map +1 -1
  875. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  876. package/dist/types/TenantContainer.d.ts +21 -13
  877. package/dist/types/TenantContainer.d.ts.map +1 -1
  878. package/dist/types/bridges/system/IdentityFetcher.d.ts +2 -2
  879. package/dist/types/bridges/system/IdentityFetcher.d.ts.map +1 -1
  880. package/dist/types/exceptions.d.ts.map +1 -1
  881. package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts +3 -0
  882. package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts.map +1 -0
  883. package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts +3 -0
  884. package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts.map +1 -0
  885. package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts +3 -0
  886. package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts.map +1 -0
  887. package/dist/types/migrations/2026-09-04-120000-idp-disable-local-authentication.d.ts +3 -0
  888. package/dist/types/migrations/2026-09-04-120000-idp-disable-local-authentication.d.ts.map +1 -0
  889. package/dist/types/migrations/runner.d.ts.map +1 -1
  890. package/dist/types/migrations/snapshot-factory.d.ts.map +1 -1
  891. package/dist/types/migrations/snapshot.d.ts.map +1 -1
  892. package/dist/types/migrations/tenantCredentials.d.ts.map +1 -1
  893. package/dist/types/model/authorization/AclSchemaAccessNodeFactory.d.ts.map +1 -1
  894. package/dist/types/model/authorization/DirectPermissionsAccessNode.d.ts.map +1 -1
  895. package/dist/types/model/authorization/Identity.d.ts.map +1 -1
  896. package/dist/types/model/authorization/IdentityFactory.d.ts.map +1 -1
  897. package/dist/types/model/authorization/IdentityScope.d.ts.map +1 -1
  898. package/dist/types/model/authorization/MembershipMatcher.d.ts.map +1 -1
  899. package/dist/types/model/authorization/PermissionActions.d.ts.map +1 -1
  900. package/dist/types/model/authorization/PermissionContext.d.ts.map +1 -1
  901. package/dist/types/model/authorization/PermissionContextFactory.d.ts.map +1 -1
  902. package/dist/types/model/authorization/PermissionsFactory.d.ts.map +1 -1
  903. package/dist/types/model/authorization/ProjectScope.d.ts.map +1 -1
  904. package/dist/types/model/authorization/ProjectScopeFactory.d.ts.map +1 -1
  905. package/dist/types/model/commands/CommandBus.d.ts.map +1 -1
  906. package/dist/types/model/commands/apiKey/ApiKeyHelper.d.ts.map +1 -1
  907. package/dist/types/model/commands/apiKey/CreateApiKeyCommand.d.ts.map +1 -1
  908. package/dist/types/model/commands/apiKey/DisableApiKeyCommand.d.ts.map +1 -1
  909. package/dist/types/model/commands/apiKey/DisableIdentityApiKeysCommand.d.ts.map +1 -1
  910. package/dist/types/model/commands/apiKey/DisableOneOffApiKeyCommand.d.ts.map +1 -1
  911. package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts +1 -1
  912. package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts.map +1 -1
  913. package/dist/types/model/commands/authLog/CreateAuthLogEntryCommand.d.ts.map +1 -1
  914. package/dist/types/model/commands/authPolicy/CreateAuthPolicyCommand.d.ts.map +1 -1
  915. package/dist/types/model/commands/authPolicy/DeleteAuthPolicyCommand.d.ts.map +1 -1
  916. package/dist/types/model/commands/authPolicy/UpdateAuthPolicyCommand.d.ts.map +1 -1
  917. package/dist/types/model/commands/backupCode/ConsumeBackupCodeCommand.d.ts.map +1 -1
  918. package/dist/types/model/commands/backupCode/CreateBackupCodeCommand.d.ts.map +1 -1
  919. package/dist/types/model/commands/backupCode/DeleteBackupCodesCommand.d.ts.map +1 -1
  920. package/dist/types/model/commands/configuration/UpdateConfigurationCommand.d.ts.map +1 -1
  921. package/dist/types/model/commands/identity/CreateIdentityCommand.d.ts.map +1 -1
  922. package/dist/types/model/commands/identity/PatchIdentityGlobalRoles.d.ts.map +1 -1
  923. package/dist/types/model/commands/idp/ClaimIdpRevalidationCommand.d.ts.map +1 -1
  924. package/dist/types/model/commands/idp/CreateIdpCommand.d.ts.map +1 -1
  925. package/dist/types/model/commands/idp/CreateIdpSessionCommand.d.ts.map +1 -1
  926. package/dist/types/model/commands/idp/DisableIdpCommand.d.ts.map +1 -1
  927. package/dist/types/model/commands/idp/DisconnectPersonIdentityProviderCommand.d.ts.map +1 -1
  928. package/dist/types/model/commands/idp/EnableIdpCommand.d.ts.map +1 -1
  929. package/dist/types/model/commands/idp/UpdateIdpCommand.d.ts.map +1 -1
  930. package/dist/types/model/commands/idp/UpdateIdpSessionCommand.d.ts.map +1 -1
  931. package/dist/types/model/commands/mailTemplate/AddMailTemplateCommand.d.ts.map +1 -1
  932. package/dist/types/model/commands/mailTemplate/RemoveMailTemplateCommand.d.ts.map +1 -1
  933. package/dist/types/model/commands/membership/AddProjectMemberCommand.d.ts.map +1 -1
  934. package/dist/types/model/commands/membership/CreateOrUpdateProjectMembershipCommand.d.ts.map +1 -1
  935. package/dist/types/model/commands/membership/RemoveProjectMemberCommand.d.ts.map +1 -1
  936. package/dist/types/model/commands/membership/{RemoveProjectMembershipsCommand.d.ts → RemoveProjectMembershipCommand.d.ts} +1 -1
  937. package/dist/types/model/commands/membership/RemoveProjectMembershipCommand.d.ts.map +1 -0
  938. package/dist/types/model/commands/membership/UpdateProjectMemberCommand.d.ts.map +1 -1
  939. package/dist/types/model/commands/membership/index.d.ts +2 -1
  940. package/dist/types/model/commands/membership/index.d.ts.map +1 -1
  941. package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.d.ts.map +1 -1
  942. package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.d.ts.map +1 -1
  943. package/dist/types/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.d.ts.map +1 -1
  944. package/dist/types/model/commands/membership/variables/index.d.ts +1 -0
  945. package/dist/types/model/commands/membership/variables/index.d.ts.map +1 -1
  946. package/dist/types/model/commands/otp/ConfirmOtpCommand.d.ts.map +1 -1
  947. package/dist/types/model/commands/otp/DisableOtpCommand.d.ts.map +1 -1
  948. package/dist/types/model/commands/otp/PrepareOtpCommand.d.ts.map +1 -1
  949. package/dist/types/model/commands/otp/ReEncryptOtpSecretCommand.d.ts.map +1 -1
  950. package/dist/types/model/commands/otp/SetEmailOtpEnabledCommand.d.ts.map +1 -1
  951. package/dist/types/model/commands/person/ChangePasswordCommand.d.ts.map +1 -1
  952. package/dist/types/model/commands/person/ChangeProfileCommand.d.ts.map +1 -1
  953. package/dist/types/model/commands/person/CreatePersonCommand.d.ts.map +1 -1
  954. package/dist/types/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.d.ts.map +1 -1
  955. package/dist/types/model/commands/person/DisablePersonCommand.d.ts.map +1 -1
  956. package/dist/types/model/commands/person/EnablePersonCommand.d.ts +7 -0
  957. package/dist/types/model/commands/person/EnablePersonCommand.d.ts.map +1 -0
  958. package/dist/types/model/commands/person/MarkEmailVerifiedCommand.d.ts.map +1 -1
  959. package/dist/types/model/commands/person/ResetPersonMfaCommand.d.ts.map +1 -1
  960. package/dist/types/model/commands/person/SetMfaGraceUntilCommand.d.ts.map +1 -1
  961. package/dist/types/model/commands/person/TogglePersonPasswordlessCommand.d.ts.map +1 -1
  962. package/dist/types/model/commands/personToken/ActivateOtpCommand.d.ts.map +1 -1
  963. package/dist/types/model/commands/personToken/ClaimOtpAttemptCommand.d.ts.map +1 -1
  964. package/dist/types/model/commands/personToken/CreatePersonTokenCommand.d.ts.map +1 -1
  965. package/dist/types/model/commands/personToken/IncreaseOtpAttemptCommand.d.ts.map +1 -1
  966. package/dist/types/model/commands/personToken/InvalidateEmailOtpTokensCommand.d.ts.map +1 -1
  967. package/dist/types/model/commands/personToken/InvalidateTokenCommand.d.ts.map +1 -1
  968. package/dist/types/model/commands/personToken/ResetPasswordCommand.d.ts.map +1 -1
  969. package/dist/types/model/commands/personToken/SaveEmailOtpTokenCommand.d.ts.map +1 -1
  970. package/dist/types/model/commands/personToken/SavePersonTokenCommand.d.ts.map +1 -1
  971. package/dist/types/model/commands/project/CreateProjectCommand.d.ts.map +1 -1
  972. package/dist/types/model/commands/project/SetProjectSecretCommand.d.ts.map +1 -1
  973. package/dist/types/model/commands/project/UpdateProjectCommand.d.ts.map +1 -1
  974. package/dist/types/model/commands/rateLimit/RecordRateLimitEventCommand.d.ts.map +1 -1
  975. package/dist/types/model/dtos/Password.d.ts.map +1 -1
  976. package/dist/types/model/mailing/UserMailer.d.ts.map +1 -1
  977. package/dist/types/model/mailing/templates/BackupCodesExhausted.mustache.d.ts.map +1 -1
  978. package/dist/types/model/mailing/templates/EmailChangeNotify.mustache.d.ts.map +1 -1
  979. package/dist/types/model/mailing/templates/EmailChangeVerify.mustache.d.ts.map +1 -1
  980. package/dist/types/model/mailing/templates/EmailOtp.mustache.d.ts.map +1 -1
  981. package/dist/types/model/mailing/templates/EmailVerification.mustache.d.ts.map +1 -1
  982. package/dist/types/model/mailing/templates/ExistingUserInvited.mustache.d.ts.map +1 -1
  983. package/dist/types/model/mailing/templates/ForcedSignOut.mustache.d.ts.map +1 -1
  984. package/dist/types/model/mailing/templates/Layout.mustache.d.ts.map +1 -1
  985. package/dist/types/model/mailing/templates/NewUserInvited.mustache.d.ts.map +1 -1
  986. package/dist/types/model/mailing/templates/PasswordReset.mustache.d.ts.map +1 -1
  987. package/dist/types/model/mailing/templates/PasswordlessSignIn.mustache.d.ts.map +1 -1
  988. package/dist/types/model/mailing/templates/UnusualLogin.mustache.d.ts.map +1 -1
  989. package/dist/types/model/mailing/type.d.ts.map +1 -1
  990. package/dist/types/model/queries/apiKey/ApiKeyListQuery.d.ts.map +1 -1
  991. package/dist/types/model/queries/apiKey/ApiKeyQuery.d.ts.map +1 -1
  992. package/dist/types/model/queries/apiKey/ApiKeySessionsQuery.d.ts.map +1 -1
  993. package/dist/types/model/queries/authLog/AuthLogQuery.d.ts.map +1 -1
  994. package/dist/types/model/queries/authLog/NextLoginAttemptQuery.d.ts.map +1 -1
  995. package/dist/types/model/queries/authLog/NextMailAttemptQuery.d.ts.map +1 -1
  996. package/dist/types/model/queries/authPolicy/AuthPoliciesQuery.d.ts.map +1 -1
  997. package/dist/types/model/queries/configuration/ConfigurationQuery.d.ts.map +1 -1
  998. package/dist/types/model/queries/identity/IdentityQuery.d.ts.map +1 -1
  999. package/dist/types/model/queries/idp/IdentityProviderBySlugQuery.d.ts.map +1 -1
  1000. package/dist/types/model/queries/idp/IdentityProvidersQuery.d.ts.map +1 -1
  1001. package/dist/types/model/queries/idp/IdpSessionByApiKeyQuery.d.ts.map +1 -1
  1002. package/dist/types/model/queries/idp/IdpSessionsBySidQuery.d.ts.map +1 -1
  1003. package/dist/types/model/queries/idp/IdpSessionsBySubQuery.d.ts.map +1 -1
  1004. package/dist/types/model/queries/idp/LocalAuthDisablingIdpsQuery.d.ts +18 -0
  1005. package/dist/types/model/queries/idp/LocalAuthDisablingIdpsQuery.d.ts.map +1 -0
  1006. package/dist/types/model/queries/idp/PersonIdentityProvidersQuery.d.ts +1 -0
  1007. package/dist/types/model/queries/idp/PersonIdentityProvidersQuery.d.ts.map +1 -1
  1008. package/dist/types/model/queries/idp/helpers.d.ts +1 -1
  1009. package/dist/types/model/queries/idp/helpers.d.ts.map +1 -1
  1010. package/dist/types/model/queries/idp/index.d.ts +1 -0
  1011. package/dist/types/model/queries/idp/index.d.ts.map +1 -1
  1012. package/dist/types/model/queries/idp/types.d.ts +1 -0
  1013. package/dist/types/model/queries/idp/types.d.ts.map +1 -1
  1014. package/dist/types/model/queries/mailTemplate/MailTemplateListQuery.d.ts.map +1 -1
  1015. package/dist/types/model/queries/mailTemplate/MailTemplateQuery.d.ts.map +1 -1
  1016. package/dist/types/model/queries/membership/AllProjectRolesByIdentityQuery.d.ts.map +1 -1
  1017. package/dist/types/model/queries/membership/ProjectMembersQuery.d.ts.map +1 -1
  1018. package/dist/types/model/queries/membership/ProjectMembershipByIdentityQuery.d.ts.map +1 -1
  1019. package/dist/types/model/queries/membership/ProjectRolesByIdentityQuery.d.ts.map +1 -1
  1020. package/dist/types/model/queries/membership/ProjectSlugSpecification.d.ts.map +1 -1
  1021. package/dist/types/model/queries/person/PersonByIdPQuery.d.ts.map +1 -1
  1022. package/dist/types/model/queries/person/PersonByIdentityBatchQuery.d.ts.map +1 -1
  1023. package/dist/types/model/queries/person/PersonQuery.d.ts.map +1 -1
  1024. package/dist/types/model/queries/person/PersonQueryBuilderFactory.d.ts.map +1 -1
  1025. package/dist/types/model/queries/person/PersonsQuery.d.ts.map +1 -1
  1026. package/dist/types/model/queries/person/types.d.ts +1 -0
  1027. package/dist/types/model/queries/person/types.d.ts.map +1 -1
  1028. package/dist/types/model/queries/personToken/PersonTokenQuery.d.ts.map +1 -1
  1029. package/dist/types/model/queries/project/ProjectBySlugQuery.d.ts.map +1 -1
  1030. package/dist/types/model/queries/project/ProjectSecretKeysQuery.d.ts.map +1 -1
  1031. package/dist/types/model/queries/project/ProjectSecretsQuery.d.ts.map +1 -1
  1032. package/dist/types/model/queries/project/ProjectUpdateTimestampQuery.d.ts.map +1 -1
  1033. package/dist/types/model/queries/project/ProjectsByIdentityQuery.d.ts.map +1 -1
  1034. package/dist/types/model/queries/project/ProjectsQuery.d.ts.map +1 -1
  1035. package/dist/types/model/queries/rateLimit/RateLimitCountQuery.d.ts.map +1 -1
  1036. package/dist/types/model/service/AuthLogService.d.ts.map +1 -1
  1037. package/dist/types/model/service/AuthPolicyManager.d.ts.map +1 -1
  1038. package/dist/types/model/service/AuthPolicyResolver.d.ts.map +1 -1
  1039. package/dist/types/model/service/BackupCodeManager.d.ts.map +1 -1
  1040. package/dist/types/model/service/ConfigurationManager.d.ts.map +1 -1
  1041. package/dist/types/model/service/EmailChangeManager.d.ts.map +1 -1
  1042. package/dist/types/model/service/EmailOtpManager.d.ts.map +1 -1
  1043. package/dist/types/model/service/EmailValidator.d.ts.map +1 -1
  1044. package/dist/types/model/service/EmailVerificationManager.d.ts.map +1 -1
  1045. package/dist/types/model/service/HibpChecker.d.ts.map +1 -1
  1046. package/dist/types/model/service/IDPSignInManager.d.ts +11 -1
  1047. package/dist/types/model/service/IDPSignInManager.d.ts.map +1 -1
  1048. package/dist/types/model/service/InviteManager.d.ts.map +1 -1
  1049. package/dist/types/model/service/LoginRiskAnalyzer.d.ts +1 -1
  1050. package/dist/types/model/service/LoginRiskAnalyzer.d.ts.map +1 -1
  1051. package/dist/types/model/service/MailTemplateManager.d.ts.map +1 -1
  1052. package/dist/types/model/service/MembershipValidator.d.ts.map +1 -1
  1053. package/dist/types/model/service/OtpAuthenticator.d.ts.map +1 -1
  1054. package/dist/types/model/service/OtpManager.d.ts.map +1 -1
  1055. package/dist/types/model/service/PanelAccessResolver.d.ts +19 -0
  1056. package/dist/types/model/service/PanelAccessResolver.d.ts.map +1 -0
  1057. package/dist/types/model/service/PasswordChangeManager.d.ts.map +1 -1
  1058. package/dist/types/model/service/PasswordResetManager.d.ts.map +1 -1
  1059. package/dist/types/model/service/PasswordStrengthValidator.d.ts.map +1 -1
  1060. package/dist/types/model/service/PasswordlessSignInManager.d.ts.map +1 -1
  1061. package/dist/types/model/service/PersonAccessManager.d.ts +5 -2
  1062. package/dist/types/model/service/PersonAccessManager.d.ts.map +1 -1
  1063. package/dist/types/model/service/PersonManager.d.ts.map +1 -1
  1064. package/dist/types/model/service/ProjectManager.d.ts.map +1 -1
  1065. package/dist/types/model/service/ProjectMemberManager.d.ts.map +1 -1
  1066. package/dist/types/model/service/RateLimiter.d.ts.map +1 -1
  1067. package/dist/types/model/service/RolesManager.d.ts.map +1 -1
  1068. package/dist/types/model/service/SecretsManager.d.ts.map +1 -1
  1069. package/dist/types/model/service/SignInManager.d.ts.map +1 -1
  1070. package/dist/types/model/service/SignOutManager.d.ts.map +1 -1
  1071. package/dist/types/model/service/SignUpManager.d.ts.map +1 -1
  1072. package/dist/types/model/service/apiKey/ApiKeyManager.d.ts.map +1 -1
  1073. package/dist/types/model/service/apiKey/ApiKeyService.d.ts.map +1 -1
  1074. package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts +18 -0
  1075. package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts.map +1 -1
  1076. package/dist/types/model/service/captcha/CaptchaValidator.d.ts.map +1 -1
  1077. package/dist/types/model/service/captcha/HCaptchaProvider.d.ts.map +1 -1
  1078. package/dist/types/model/service/captcha/RecaptchaV3Provider.d.ts.map +1 -1
  1079. package/dist/types/model/service/captcha/TurnstileProvider.d.ts.map +1 -1
  1080. package/dist/types/model/service/helpers/getPreferredProject.d.ts.map +1 -1
  1081. package/dist/types/model/service/helpers/isPasswordlessEnabled.d.ts.map +1 -1
  1082. package/dist/types/model/service/idp/BackchannelLogoutManager.d.ts.map +1 -1
  1083. package/dist/types/model/service/idp/ClaimMapping.d.ts +330 -0
  1084. package/dist/types/model/service/idp/ClaimMapping.d.ts.map +1 -0
  1085. package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts +30 -0
  1086. package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts.map +1 -0
  1087. package/dist/types/model/service/idp/ClaimMappingValidation.d.ts +55 -0
  1088. package/dist/types/model/service/idp/ClaimMappingValidation.d.ts.map +1 -0
  1089. package/dist/types/model/service/idp/IDPClaimSyncService.d.ts +113 -0
  1090. package/dist/types/model/service/idp/IDPClaimSyncService.d.ts.map +1 -0
  1091. package/dist/types/model/service/idp/IDPHandlerRegistry.d.ts.map +1 -1
  1092. package/dist/types/model/service/idp/IDPManager.d.ts +31 -1
  1093. package/dist/types/model/service/idp/IDPManager.d.ts.map +1 -1
  1094. package/dist/types/model/service/idp/IdentityProviderHandler.d.ts +7 -0
  1095. package/dist/types/model/service/idp/IdentityProviderHandler.d.ts.map +1 -1
  1096. package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts +13 -1
  1097. package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts.map +1 -1
  1098. package/dist/types/model/service/idp/PersonIdentityProviderManager.d.ts.map +1 -1
  1099. package/dist/types/model/service/idp/index.d.ts +4 -0
  1100. package/dist/types/model/service/idp/index.d.ts.map +1 -1
  1101. package/dist/types/model/service/idp/providers/AppleProvider.d.ts +2 -2
  1102. package/dist/types/model/service/idp/providers/AppleProvider.d.ts.map +1 -1
  1103. package/dist/types/model/service/idp/providers/FacebookProvider.d.ts +2 -2
  1104. package/dist/types/model/service/idp/providers/FacebookProvider.d.ts.map +1 -1
  1105. package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts +13 -1
  1106. package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts.map +1 -1
  1107. package/dist/types/model/service/idp/providers/OIDCProvider.d.ts +1 -1
  1108. package/dist/types/model/service/idp/providers/OIDCProvider.d.ts.map +1 -1
  1109. package/dist/types/model/service/idp/providers/OIDCTypes.d.ts +5 -5
  1110. package/dist/types/model/service/idp/providers/helpers.d.ts.map +1 -1
  1111. package/dist/types/model/service/index.d.ts +1 -0
  1112. package/dist/types/model/service/index.d.ts.map +1 -1
  1113. package/dist/types/model/service/membershipUtils.d.ts.map +1 -1
  1114. package/dist/types/model/type/AuthLog.d.ts +1 -1
  1115. package/dist/types/model/type/AuthLog.d.ts.map +1 -1
  1116. package/dist/types/model/type/Config.d.ts +2 -0
  1117. package/dist/types/model/type/Config.d.ts.map +1 -1
  1118. package/dist/types/model/type/IdentityProvider.d.ts +2 -0
  1119. package/dist/types/model/type/IdentityProvider.d.ts.map +1 -1
  1120. package/dist/types/model/type/RateLimit.d.ts +6 -6
  1121. package/dist/types/model/type/RateLimit.d.ts.map +1 -1
  1122. package/dist/types/model/utils/DatabaseContext.d.ts +14 -1
  1123. package/dist/types/model/utils/DatabaseContext.d.ts.map +1 -1
  1124. package/dist/types/model/utils/Response.d.ts.map +1 -1
  1125. package/dist/types/model/utils/email.d.ts.map +1 -1
  1126. package/dist/types/model/utils/hex.d.ts.map +1 -1
  1127. package/dist/types/model/utils/interval.d.ts.map +1 -1
  1128. package/dist/types/model/utils/time.d.ts.map +1 -1
  1129. package/dist/types/model/utils/token.d.ts.map +1 -1
  1130. package/dist/types/resolvers/ResolverFactory.d.ts +2 -0
  1131. package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
  1132. package/dist/types/resolvers/TenantResolverContextFactory.d.ts.map +1 -1
  1133. package/dist/types/resolvers/errorUtils.d.ts.map +1 -1
  1134. package/dist/types/resolvers/membershipUtils.d.ts.map +1 -1
  1135. package/dist/types/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.d.ts.map +1 -1
  1136. package/dist/types/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.d.ts.map +1 -1
  1137. package/dist/types/resolvers/mutation/configuration/AuthPolicyMutationResolver.d.ts.map +1 -1
  1138. package/dist/types/resolvers/mutation/configuration/ConfigurationMutationResolver.d.ts.map +1 -1
  1139. package/dist/types/resolvers/mutation/identity/GlobalRolesMutationResolver.d.ts.map +1 -1
  1140. package/dist/types/resolvers/mutation/idp/AddIDPMutationResolver.d.ts.map +1 -1
  1141. package/dist/types/resolvers/mutation/idp/DisableIDPMutationResolver.d.ts.map +1 -1
  1142. package/dist/types/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.d.ts.map +1 -1
  1143. package/dist/types/resolvers/mutation/idp/EnableIDPMutationResolver.d.ts.map +1 -1
  1144. package/dist/types/resolvers/mutation/idp/UpdateIDPMutationResolver.d.ts.map +1 -1
  1145. package/dist/types/resolvers/mutation/idp/audit.d.ts.map +1 -1
  1146. package/dist/types/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.d.ts.map +1 -1
  1147. package/dist/types/resolvers/mutation/person/ChangePasswordMutationResolver.d.ts.map +1 -1
  1148. package/dist/types/resolvers/mutation/person/ChangeProfileMutationResolver.d.ts.map +1 -1
  1149. package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts +1 -1
  1150. package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts.map +1 -1
  1151. package/dist/types/resolvers/mutation/person/EmailOtpMutationResolver.d.ts.map +1 -1
  1152. package/dist/types/resolvers/mutation/person/EmailVerificationMutationResolver.d.ts.map +1 -1
  1153. package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts +11 -0
  1154. package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts.map +1 -0
  1155. package/dist/types/resolvers/mutation/person/ForceSignOutMutationResolver.d.ts.map +1 -1
  1156. package/dist/types/resolvers/mutation/person/IDPMutationResolver.d.ts.map +1 -1
  1157. package/dist/types/resolvers/mutation/person/InviteMutationResolver.d.ts.map +1 -1
  1158. package/dist/types/resolvers/mutation/person/OtpMutationResolver.d.ts.map +1 -1
  1159. package/dist/types/resolvers/mutation/person/PasswordlessMutationResolver.d.ts.map +1 -1
  1160. package/dist/types/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.d.ts.map +1 -1
  1161. package/dist/types/resolvers/mutation/person/ResetPasswordMutationResolver.d.ts.map +1 -1
  1162. package/dist/types/resolvers/mutation/person/ResetPersonMfaMutationResolver.d.ts.map +1 -1
  1163. package/dist/types/resolvers/mutation/person/RevokeSessionMutationResolver.d.ts.map +1 -1
  1164. package/dist/types/resolvers/mutation/person/SignInMutationResolver.d.ts.map +1 -1
  1165. package/dist/types/resolvers/mutation/person/SignOutMutationResolver.d.ts.map +1 -1
  1166. package/dist/types/resolvers/mutation/person/SignUpMutationResolver.d.ts.map +1 -1
  1167. package/dist/types/resolvers/mutation/person/TogglePasswordlessMutationResolver.d.ts.map +1 -1
  1168. package/dist/types/resolvers/mutation/project/CreateProjectMutationResolver.d.ts.map +1 -1
  1169. package/dist/types/resolvers/mutation/project/SetProjectSecretMutationResolver.d.ts.map +1 -1
  1170. package/dist/types/resolvers/mutation/project/UpdateProjectMutationResolver.d.ts.map +1 -1
  1171. package/dist/types/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.d.ts.map +1 -1
  1172. package/dist/types/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.d.ts.map +1 -1
  1173. package/dist/types/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.d.ts.map +1 -1
  1174. package/dist/types/resolvers/mutation/projectMember/audit.d.ts +1 -1
  1175. package/dist/types/resolvers/mutation/projectMember/audit.d.ts.map +1 -1
  1176. package/dist/types/resolvers/query/ApiKeyQueryResolver.d.ts.map +1 -1
  1177. package/dist/types/resolvers/query/AuthLogQueryResolver.d.ts.map +1 -1
  1178. package/dist/types/resolvers/query/AuthPolicyQueryResolver.d.ts.map +1 -1
  1179. package/dist/types/resolvers/query/ConfigurationQueryResolver.d.ts.map +1 -1
  1180. package/dist/types/resolvers/query/IDPQueryResolver.d.ts.map +1 -1
  1181. package/dist/types/resolvers/query/MailTemplateQueryResolver.d.ts.map +1 -1
  1182. package/dist/types/resolvers/query/MeQueryResolver.d.ts.map +1 -1
  1183. package/dist/types/resolvers/query/PersonQueryResolver.d.ts.map +1 -1
  1184. package/dist/types/resolvers/query/ProjectMembersQueryResolver.d.ts.map +1 -1
  1185. package/dist/types/resolvers/query/ProjectQueryResolver.d.ts.map +1 -1
  1186. package/dist/types/resolvers/responseHelpers/ApiKeyResponseFactory.d.ts.map +1 -1
  1187. package/dist/types/resolvers/responseHelpers/PersonResponseFactory.d.ts.map +1 -1
  1188. package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts +10 -0
  1189. package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts.map +1 -0
  1190. package/dist/types/resolvers/responseHelpers/SignInResponseFactory.d.ts.map +1 -1
  1191. package/dist/types/resolvers/types/IdentityTypeResolver.d.ts.map +1 -1
  1192. package/dist/types/resolvers/types/PersonTypeResolver.d.ts +15 -1
  1193. package/dist/types/resolvers/types/PersonTypeResolver.d.ts.map +1 -1
  1194. package/dist/types/resolvers/types/ProjectTypeResolver.d.ts +15 -6
  1195. package/dist/types/resolvers/types/ProjectTypeResolver.d.ts.map +1 -1
  1196. package/dist/types/schema/index.d.ts +194 -4
  1197. package/dist/types/schema/index.d.ts.map +1 -1
  1198. package/dist/types/schema/tenant.graphql.d.ts.map +1 -1
  1199. package/dist/types/schema/types.d.ts +2 -2
  1200. package/dist/types/schema/types.d.ts.map +1 -1
  1201. package/dist/types/tsconfig.tsbuildinfo +1 -1
  1202. package/dist/types/utils/Mailer.d.ts.map +1 -1
  1203. package/dist/types/utils/TemplateRenderer.d.ts.map +1 -1
  1204. package/dist/types/utils/array.d.ts.map +1 -1
  1205. package/dist/types/utils/batchQuery.d.ts.map +1 -1
  1206. package/package.json +12 -12
  1207. package/src/TenantContainer.ts +17 -3
  1208. package/src/migrations/2026-06-18-120000-idp-claim-mapping.ts +15 -0
  1209. package/src/migrations/2026-08-03-120000-person-enable-auth-log.ts +12 -0
  1210. package/src/migrations/2026-08-04-120000-config-panel.ts +13 -0
  1211. package/src/migrations/2026-09-04-120000-idp-disable-local-authentication.ts +18 -0
  1212. package/src/migrations/runner.ts +8 -0
  1213. package/src/migrations/snapshot.ts +8 -2
  1214. package/src/model/commands/configuration/UpdateConfigurationCommand.ts +5 -4
  1215. package/src/model/commands/idp/CreateIdpCommand.ts +7 -1
  1216. package/src/model/commands/idp/UpdateIdpCommand.ts +5 -1
  1217. package/src/model/commands/membership/UpdateProjectMemberCommand.ts +1 -1
  1218. package/src/model/commands/membership/index.ts +2 -1
  1219. package/src/model/commands/membership/variables/index.ts +1 -0
  1220. package/src/model/commands/person/EnablePersonCommand.ts +18 -0
  1221. package/src/model/queries/configuration/ConfigurationQuery.ts +4 -0
  1222. package/src/model/queries/idp/LocalAuthDisablingIdpsQuery.ts +41 -0
  1223. package/src/model/queries/idp/PersonIdentityProvidersQuery.ts +2 -0
  1224. package/src/model/queries/idp/helpers.ts +3 -2
  1225. package/src/model/queries/idp/index.ts +1 -0
  1226. package/src/model/queries/idp/types.ts +1 -0
  1227. package/src/model/queries/membership/ProjectMembersQuery.ts +1 -0
  1228. package/src/model/queries/person/PersonQueryBuilderFactory.ts +1 -0
  1229. package/src/model/queries/person/types.ts +1 -0
  1230. package/src/model/service/AuthLogService.ts +18 -2
  1231. package/src/model/service/IDPSignInManager.ts +49 -1
  1232. package/src/model/service/PanelAccessResolver.ts +32 -0
  1233. package/src/model/service/PasswordResetManager.ts +9 -1
  1234. package/src/model/service/PasswordlessSignInManager.ts +23 -1
  1235. package/src/model/service/PersonAccessManager.ts +19 -3
  1236. package/src/model/service/SignInManager.ts +9 -1
  1237. package/src/model/service/apiKey/ApiKeyManager.ts +5 -3
  1238. package/src/model/service/apiKey/UnpersistedApiKeyManager.ts +24 -0
  1239. package/src/model/service/idp/ClaimMapping.ts +283 -0
  1240. package/src/model/service/idp/ClaimMappingEvaluator.ts +226 -0
  1241. package/src/model/service/idp/ClaimMappingValidation.ts +158 -0
  1242. package/src/model/service/idp/IDPClaimSyncService.ts +401 -0
  1243. package/src/model/service/idp/IDPManager.ts +126 -21
  1244. package/src/model/service/idp/IdentityProviderHandler.ts +7 -0
  1245. package/src/model/service/idp/IdpSessionRevalidator.ts +90 -0
  1246. package/src/model/service/idp/PersonIdentityProviderManager.ts +8 -0
  1247. package/src/model/service/idp/index.ts +4 -0
  1248. package/src/model/service/idp/providers/OIDCHelpers.ts +161 -53
  1249. package/src/model/service/idp/providers/OIDCProvider.ts +4 -1
  1250. package/src/model/service/index.ts +1 -0
  1251. package/src/model/type/AuthLog.ts +3 -0
  1252. package/src/model/type/Config.ts +3 -0
  1253. package/src/model/type/IdentityProvider.ts +2 -0
  1254. package/src/model/utils/DatabaseContext.ts +27 -6
  1255. package/src/resolvers/ResolverFactory.ts +6 -0
  1256. package/src/resolvers/mutation/idp/AddIDPMutationResolver.ts +1 -0
  1257. package/src/resolvers/mutation/idp/UpdateIDPMutationResolver.ts +1 -0
  1258. package/src/resolvers/mutation/idp/audit.ts +1 -0
  1259. package/src/resolvers/mutation/person/DisablePersonMutationResolver.ts +3 -3
  1260. package/src/resolvers/mutation/person/EnablePersonMutationResolver.ts +50 -0
  1261. package/src/resolvers/mutation/person/IDPMutationResolver.ts +31 -0
  1262. package/src/resolvers/mutation/person/PasswordlessMutationResolver.ts +7 -0
  1263. package/src/resolvers/mutation/person/SignInMutationResolver.ts +2 -2
  1264. package/src/resolvers/query/ProjectQueryResolver.ts +3 -2
  1265. package/src/resolvers/responseHelpers/PersonResponseFactory.ts +5 -0
  1266. package/src/resolvers/responseHelpers/ProjectResponseFactory.ts +24 -0
  1267. package/src/resolvers/types/IdentityTypeResolver.ts +39 -3
  1268. package/src/resolvers/types/PersonTypeResolver.ts +35 -2
  1269. package/src/resolvers/types/ProjectTypeResolver.ts +33 -1
  1270. package/src/schema/index.ts +212 -0
  1271. package/src/schema/tenant.graphql.ts +144 -0
  1272. package/tests/cases/integration/mocked/configurationPanel.test.ts +105 -0
  1273. package/tests/cases/integration/mocked/disablePersonMutation.test.ts +89 -0
  1274. package/tests/cases/integration/mocked/enablePersonMutation.test.ts +130 -0
  1275. package/tests/cases/integration/mocked/gql/passwordless.ts +10 -0
  1276. package/tests/cases/integration/mocked/idpClaimMappingConfig.test.ts +332 -0
  1277. package/tests/cases/integration/mocked/listProjectMembersQuery.test.ts +8 -3
  1278. package/tests/cases/integration/mocked/localAuthenticationDisabled.test.ts +182 -0
  1279. package/tests/cases/integration/mocked/permissionsQuery.test.ts +153 -0
  1280. package/tests/cases/integration/mocked/personIdentityProviders.test.ts +67 -0
  1281. package/tests/cases/integration/mocked/personsQuery.test.ts +38 -5
  1282. package/tests/cases/integration/mocked/signInAnomalyDetection.test.ts +11 -0
  1283. package/tests/cases/integration/mocked/signInIdpClaimMapping.test.ts +1258 -0
  1284. package/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.ts +344 -0
  1285. package/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.ts +531 -0
  1286. package/tests/cases/integration/mocked/signInIdpMutation.test.ts +5 -0
  1287. package/tests/cases/integration/mocked/signInMfaEnforcement.test.ts +7 -0
  1288. package/tests/cases/integration/mocked/signInMutation.test.ts +14 -0
  1289. package/tests/cases/integration/mocked/signInPasswordlessMutation.test.ts +36 -0
  1290. package/tests/cases/integration/mocked/sql/getConfigSql.ts +3 -0
  1291. package/tests/cases/integration/mocked/sql/getIdpBySlugSql.ts +1 -1
  1292. package/tests/cases/integration/mocked/sql/getProjectBySlugSql.ts +1 -1
  1293. package/tests/cases/integration/mocked/sql/listPersonsSql.ts +5 -2
  1294. package/tests/cases/integration/mocked/sql/localAuthDisablingIdpsSql.ts +21 -0
  1295. package/tests/cases/integration/mocked/sql/personIdentityProvidersSql.ts +3 -1
  1296. package/tests/cases/integration/mocked/sql/removeMembershipSql.ts +14 -0
  1297. package/tests/cases/integration/mocked/trustForwardedClientInfo.test.ts +3 -0
  1298. package/tests/cases/unit/databaseContextRetry.test.ts +81 -0
  1299. package/tests/cases/unit/idp/claimMappingEvaluator.test.ts +554 -0
  1300. package/tests/cases/unit/idp/claimMappingValidation.test.ts +134 -0
  1301. package/tests/cases/unit/idp/idpManagerConfigMerge.test.ts +97 -0
  1302. package/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.ts +108 -0
  1303. package/tests/cases/unit/idp/idpSessionRevalidator.test.ts +226 -24
  1304. package/tests/cases/unit/idp/oidcClaims.test.ts +29 -0
  1305. package/tests/cases/unit/idp/oidcResponse.test.ts +54 -0
  1306. package/tests/cases/unit/idp/oidcRevalidate.test.ts +94 -2
  1307. package/tests/cases/unit/panelAccessResolver.test.ts +57 -0
  1308. package/tests/cases/unit/updateConfigurationCommand.test.ts +63 -0
  1309. package/tests/src/IdPMock.ts +4 -0
  1310. package/tests/src/testTenant.ts +32 -1
  1311. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
  1312. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
  1313. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
  1314. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
  1315. package/dist/types/model/commands/membership/RemoveProjectMembershipsCommand.d.ts.map +0 -1
  1316. /package/src/model/commands/membership/{RemoveProjectMembershipsCommand.ts → RemoveProjectMembershipCommand.ts} +0 -0
@@ -0,0 +1,260 @@
1
+ import { DEFAULT_SYNC_POLICY, DEFAULT_UNMATCHED } from "./ClaimMapping.js";
2
+ import { evaluateClaimMapping } from "./ClaimMappingEvaluator.js";
3
+ import { validateClaimMappingMembership } from "./ClaimMappingValidation.js";
4
+ import { ProjectRole } from "@contember/schema";
5
+ import { MembershipResolver } from "@contember/schema-utils";
6
+ import "../../queries/apiKey/ApiKeyQuery.js";
7
+ import "@contember/database";
8
+ import "../../type/ApiKey.js";
9
+ import { ProjectMembershipByIdentityQuery } from "../../queries/membership/ProjectMembershipByIdentityQuery.js";
10
+ import { ProjectBySlugQuery } from "../../queries/project/ProjectBySlugQuery.js";
11
+ import "../../authorization/PermissionActions.js";
12
+ import "@contember/authorization";
13
+ import "../../authorization/PermissionContext.js";
14
+ import "../../authorization/PermissionsFactory.js";
15
+ import "node:crypto";
16
+ import { CreateOrUpdateProjectMembershipCommand } from "../../commands/membership/CreateOrUpdateProjectMembershipCommand.js";
17
+ import { RemoveProjectMembershipCommand } from "../../commands/membership/RemoveProjectMembershipCommand.js";
18
+ class IDPClaimSyncService {
19
+ constructor(projectSchemaResolver) {
20
+ this.projectSchemaResolver = projectSchemaResolver;
21
+ }
22
+ async sync(db, mapping, claims, identity, isNewPerson, options = {}) {
23
+ if (mapping.rules.length === 0) {
24
+ return { audit: null, droppedUnsafeRules: false };
25
+ }
26
+ const syncPolicy = mapping.syncPolicy ?? DEFAULT_SYNC_POLICY;
27
+ const unmatched = options.allowRemoval === false ? "keep" : mapping.unmatched ?? DEFAULT_UNMATCHED;
28
+ if (syncPolicy === "sticky" && !isNewPerson) {
29
+ return { audit: null, droppedUnsafeRules: false };
30
+ }
31
+ const { safe: rules, dropped, aclByProject } = await this.dropUnsafeRules(db, mapping.rules);
32
+ const evaluated = evaluateClaimMapping({ ...mapping, rules }, claims);
33
+ const { safe: memberships, dropped: droppedMemberships } = this.dropUnsafeEvaluatedMemberships(evaluated, aclByProject);
34
+ const droppedUnsafeRules = dropped.length > 0 || droppedMemberships.length > 0;
35
+ const vocabularyMemberships = /* @__PURE__ */ new Map();
36
+ for (const rule of rules) {
37
+ if (rule.grantMembership) {
38
+ const roles = vocabularyMemberships.get(rule.grantMembership.project) ?? /* @__PURE__ */ new Set();
39
+ roles.add(rule.grantMembership.role);
40
+ vocabularyMemberships.set(rule.grantMembership.project, roles);
41
+ }
42
+ }
43
+ const before = await this.snapshot(db, identity.id, vocabularyMemberships);
44
+ await this.applyMemberships(db, identity.id, memberships, vocabularyMemberships, unmatched);
45
+ const after = await this.snapshot(db, identity.id, vocabularyMemberships);
46
+ if (snapshotEquals(before, after)) {
47
+ return { audit: null, droppedUnsafeRules };
48
+ }
49
+ return { audit: { before, after, syncPolicy, unmatched }, droppedUnsafeRules };
50
+ }
51
+ /**
52
+ * Partition rules into those safe to apply and those dropped by the apply-time safety backstop. A rule
53
+ * is dropped when its granted membership produces ANY validation error against the project's CURRENT ACL
54
+ * schema (fail-closed) — condition-injection above all, but also an unknown role/variable, a malformed
55
+ * condition value, or a forbidden predefined variable. A validation throw is treated as unsafe (we cannot
56
+ * prove the grant safe). Schemas (and, when needed, project existence) are resolved at most once per
57
+ * project. The dropped set is returned so the caller can emit a fail-open audit marker.
58
+ *
59
+ * When `getSchema` returns no ACL it does NOT mean "the project does not exist": it returns undefined both
60
+ * for a project that has no row yet AND for one whose row exists but whose container / content schema is
61
+ * momentarily unresolvable (mid-provisioning, transient). The two need OPPOSITE handling, so we
62
+ * disambiguate via the tenant `project` table:
63
+ * - no project row → the grant is genuinely inert (`applyMemberships` resolves the same slug and skips
64
+ * it, so nothing is written). KEEP the rule for when the project is created later.
65
+ * - project row EXISTS but the ACL is unresolvable → `applyMemberships` WOULD still write the membership
66
+ * (it resolves the slug from the tenant `project` table, independent of the content schema), so an
67
+ * UNVALIDATED grant — including a claim-derived value targeting a `condition` ACL variable — could
68
+ * land. Fail closed: DROP the rule (it re-applies on a later sign-in once the schema resolves). This
69
+ * matches the direct add-member path, which refuses a membership whose project schema can't be resolved.
70
+ *
71
+ * Returns the per-project ACL map it built (`aclByProject`) so the runtime backstop
72
+ * ({@link dropUnsafeEvaluatedMemberships}) can re-use it without re-resolving any schema.
73
+ */
74
+ async dropUnsafeRules(db, rules) {
75
+ const aclByProject = /* @__PURE__ */ new Map();
76
+ const projectExistsBySlug = /* @__PURE__ */ new Map();
77
+ const safe = [];
78
+ const dropped = [];
79
+ for (const rule of rules) {
80
+ const membership = rule.grantMembership;
81
+ if (!membership) {
82
+ safe.push(rule);
83
+ continue;
84
+ }
85
+ if (!aclByProject.has(membership.project)) {
86
+ const schema = await this.projectSchemaResolver.getSchema(membership.project);
87
+ aclByProject.set(membership.project, schema?.acl ?? null);
88
+ }
89
+ const acl = aclByProject.get(membership.project) ?? null;
90
+ if (acl === null) {
91
+ if (!projectExistsBySlug.has(membership.project)) {
92
+ const project = await db.queryHandler.fetch(new ProjectBySlugQuery(membership.project));
93
+ projectExistsBySlug.set(membership.project, project != null);
94
+ }
95
+ if (projectExistsBySlug.get(membership.project)) {
96
+ dropped.push(rule);
97
+ } else {
98
+ safe.push(rule);
99
+ }
100
+ continue;
101
+ }
102
+ let unsafe;
103
+ try {
104
+ unsafe = validateClaimMappingMembership(acl, membership).length > 0;
105
+ } catch {
106
+ unsafe = true;
107
+ }
108
+ if (unsafe) {
109
+ dropped.push(rule);
110
+ } else {
111
+ safe.push(rule);
112
+ }
113
+ }
114
+ return { safe, dropped, aclByProject };
115
+ }
116
+ /**
117
+ * RUNTIME companion to {@link dropUnsafeRules} (A09 apply-time backstop, part 2). `dropUnsafeRules`
118
+ * validates each rule's static CONFIG shape and — like config-time validation — TOLERATES a missing
119
+ * membership variable (`VARIABLE_EMPTY`): an A09 grant may legitimately set only some of a role's
120
+ * variables. For an ordinary role that tolerance is safe: a variable that resolves to no value just
121
+ * narrows CONTENT access (the membership resolver maps it to `{ never: true }` — strictly LESS access,
122
+ * never more), and a role's tenant permissions are matched against that role's OWN tenant rule (a
123
+ * missing variable there denies, never escalates).
124
+ *
125
+ * The ONE role that breaks the assumption is the project `admin` role: {@link ProjectScope} grants the
126
+ * PROJECT_ADMIN tenant role (project secrets, member management, IdP config, deploy, …) to ANY identity
127
+ * holding an `admin` membership in the project — keyed on the role NAME alone, independent of the
128
+ * membership's variables. So when a claim-derived variable meant to SCOPE an `admin` grant resolves
129
+ * empty, `applyMemberships` drops the empty variable before the write and persists a BARE `admin`
130
+ * membership — i.e. UNSCOPED project-admin, even though the operator intended a scoped grant, and a
131
+ * membership the direct add-member path ({@link MembershipResolver}, via `MembershipValidator`) would
132
+ * REJECT as `VARIABLE_EMPTY`. (`admin` is the only role-name-based grant in the whole authorization
133
+ * layer; every other privilege is gated by ACL variables/predicates, so it cannot be widened this way.)
134
+ *
135
+ * So, fail-closed, we re-validate every evaluated `admin` grant EXACTLY as it would be written (empty
136
+ * variables filtered out, as `applyMemberships` does) against the live ACL and DROP it if the resolver
137
+ * reports any error — i.e. if a required (non-fallback) `admin` variable would be absent. Under `keep`
138
+ * the bare grant is then never written; under `remove` it is absent from the granted set, so
139
+ * reconciliation revokes any pre-existing one. Non-`admin` grants are left untouched (their partial
140
+ * grants stay valid). The drop folds into `droppedUnsafeRules`, so the caller still emits the
141
+ * `idp_role_mapping_failed` fail-open marker.
142
+ */
143
+ dropUnsafeEvaluatedMemberships(memberships, aclByProject) {
144
+ const resolver = new MembershipResolver();
145
+ const safe = [];
146
+ const dropped = [];
147
+ for (const membership of memberships) {
148
+ const acl = aclByProject.get(membership.project) ?? null;
149
+ if (membership.role !== ProjectRole.ADMIN || acl === null) {
150
+ safe.push(membership);
151
+ continue;
152
+ }
153
+ const written = {
154
+ role: membership.role,
155
+ variables: membership.variables.filter((it) => it.values.length > 0).map((it) => ({ name: it.name, values: [...it.values] }))
156
+ };
157
+ let unsafe;
158
+ try {
159
+ unsafe = resolver.resolve(acl, [written], MembershipResolver.UnknownIdentity, false).errors.length > 0;
160
+ } catch {
161
+ unsafe = true;
162
+ }
163
+ if (unsafe) {
164
+ dropped.push(membership);
165
+ } else {
166
+ safe.push(membership);
167
+ }
168
+ }
169
+ return { safe, dropped };
170
+ }
171
+ // Membership writes are driven through the low-level commands directly (as InviteManager also does),
172
+ // not via ProjectMemberManager (the "normal" add/update-member path): A09 needs semantics that path does
173
+ // not offer — empty-value hard-delete avoidance under `keep`, and vocabulary-bounded removal under `remove`.
174
+ async applyMemberships(db, identityId, grantedMemberships, vocabularyMemberships, unmatched) {
175
+ const byProject = /* @__PURE__ */ new Map();
176
+ for (const membership of grantedMemberships) {
177
+ const list = byProject.get(membership.project) ?? [];
178
+ list.push(membership);
179
+ byProject.set(membership.project, list);
180
+ }
181
+ const projectSlugs = unmatched === "remove" ? /* @__PURE__ */ new Set([...vocabularyMemberships.keys(), ...byProject.keys()]) : new Set(byProject.keys());
182
+ for (const projectSlug of projectSlugs) {
183
+ const project = await db.queryHandler.fetch(new ProjectBySlugQuery(projectSlug));
184
+ if (!project) {
185
+ continue;
186
+ }
187
+ const memberships = byProject.get(projectSlug) ?? [];
188
+ const grantedRoles = new Set(memberships.map((it) => it.role));
189
+ if (unmatched === "remove") {
190
+ const vocabularyRoles = vocabularyMemberships.get(projectSlug) ?? /* @__PURE__ */ new Set();
191
+ const existing = await db.queryHandler.fetch(new ProjectMembershipByIdentityQuery({ id: project.id }, [identityId]));
192
+ for (const membership of existing) {
193
+ if (vocabularyRoles.has(membership.role) && !grantedRoles.has(membership.role)) {
194
+ await db.commandBus.execute(new RemoveProjectMembershipCommand(project.id, identityId, membership.role));
195
+ }
196
+ }
197
+ }
198
+ for (const membership of memberships) {
199
+ if (unmatched === "remove" && membership.variables.some((it) => it.values.length === 0)) {
200
+ await db.commandBus.execute(new RemoveProjectMembershipCommand(project.id, identityId, membership.role));
201
+ continue;
202
+ }
203
+ await db.commandBus.execute(
204
+ new CreateOrUpdateProjectMembershipCommand(
205
+ project.id,
206
+ identityId,
207
+ {
208
+ role: membership.role,
209
+ // Drop variables with no values: an unset variable simply isn't applied (a role with no
210
+ // variables is fine — it sends none). Under `keep` this is the only empty-handling; under
211
+ // `remove` an empty DECLARED variable already revoked the whole membership above. Because the
212
+ // filtered list never carries an empty `set`, the command's hard-delete-on-empty never fires
213
+ // here — so `keep` never revokes a grant, and `remove`'s revocation stays explicit above.
214
+ variables: membership.variables.filter((it) => it.values.length > 0).map((it) => ({ name: it.name, set: [...it.values] }))
215
+ }
216
+ )
217
+ );
218
+ }
219
+ }
220
+ }
221
+ /**
222
+ * Snapshot the identity's mapping-relevant memberships for the audit delta: its memberships (with
223
+ * variable values) for exactly the (project, role) pairs in the mapping's vocabulary. Bounding is by
224
+ * (project, role) — a membership whose ROLE no rule names is excluded entirely — which keeps the audit
225
+ * consistent with the (also vocabulary-bounded) reconciliation. NOTE the bound is per-(project, role),
226
+ * NOT per-variable-name: for an in-vocabulary membership ALL its variables are snapshotted, including any
227
+ * variable managed OUTSIDE the mapping on that same role (e.g. an admin-set `condition` filter), and a
228
+ * `passthrough` variable's value IS the verbatim external claim value. So the idp_role_mapped event_data
229
+ * can disclose claim-derived / admin-managed variable values for a mapped role to system:viewAuthLog
230
+ * readers — by design (the recorded value is the ACL grant being audited). Variable values are included
231
+ * so a sign-in that only changes a claim-derived membership variable — itself a row-level ACL grant — is
232
+ * still detected as a change and audited.
233
+ */
234
+ async snapshot(db, identityId, vocabularyMemberships) {
235
+ const memberships = [];
236
+ for (const [slug, roles] of vocabularyMemberships) {
237
+ const project = await db.queryHandler.fetch(new ProjectBySlugQuery(slug));
238
+ if (!project) {
239
+ continue;
240
+ }
241
+ const rows = await db.queryHandler.fetch(new ProjectMembershipByIdentityQuery({ id: project.id }, [identityId]));
242
+ for (const row of rows) {
243
+ if (roles.has(row.role)) {
244
+ memberships.push({ project: slug, role: row.role, variables: row.variables });
245
+ }
246
+ }
247
+ }
248
+ return { memberships: sortMemberships(memberships) };
249
+ }
250
+ }
251
+ const sortMemberships = (memberships) => [...memberships].map((membership) => ({
252
+ project: membership.project,
253
+ role: membership.role,
254
+ variables: [...membership.variables].map((variable) => ({ name: variable.name, values: [...variable.values].sort() })).sort((a, b) => a.name.localeCompare(b.name))
255
+ })).sort((a, b) => a.project.localeCompare(b.project) || a.role.localeCompare(b.role));
256
+ const snapshotEquals = (a, b) => JSON.stringify(a) === JSON.stringify(b);
257
+ export {
258
+ IDPClaimSyncService
259
+ };
260
+ //# sourceMappingURL=IDPClaimSyncService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IDPClaimSyncService.js","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPClaimSyncService.ts"],"sourcesContent":["import { DatabaseContext } from '../../utils/index.js'\nimport { ClaimMapping, ClaimMappingRule, DEFAULT_SYNC_POLICY, DEFAULT_UNMATCHED } from './ClaimMapping.js'\nimport { evaluateClaimMapping, MappedMembership } from './ClaimMappingEvaluator.js'\nimport { validateClaimMappingMembership } from './ClaimMappingValidation.js'\nimport { ProjectSchemaResolver } from '../../type/index.js'\nimport { Acl, ProjectRole } from '@contember/schema'\nimport { MembershipResolver } from '@contember/schema-utils'\nimport { ProjectBySlugQuery, ProjectMembershipByIdentityQuery } from '../../queries/index.js'\nimport { CreateOrUpdateProjectMembershipCommand, RemoveProjectMembershipCommand } from '../../commands/index.js'\n\nexport type ClaimMappingSnapshot = {\n\treadonly memberships: readonly MappedMembership[]\n}\n\nexport type ClaimMappingAudit = {\n\treadonly before: ClaimMappingSnapshot\n\treadonly after: ClaimMappingSnapshot\n\treadonly syncPolicy: NonNullable<ClaimMapping['syncPolicy']>\n\treadonly unmatched: NonNullable<ClaimMapping['unmatched']>\n}\n\nexport type ClaimMappingSyncResult = {\n\t/** Membership before/after delta — present only when the apply actually changed grants. */\n\treadonly audit: ClaimMappingAudit | null\n\t/** True when the apply-time safety backstop dropped one or more configured rules (a fail-open marker for the caller's audit). */\n\treadonly droppedUnsafeRules: boolean\n}\n\n/**\n * Applies an IdP's `claimMapping` (A09) after a person has been resolved: evaluates the declarative\n * rules against the IdP claims and grants the resulting project memberships, honouring the per-IdP\n * `syncPolicy` (`always` vs `sticky`) and `unmatched` (`keep` vs `remove`) settings. The mapping\n * grants project memberships only — never global/tenant roles (see {@link ClaimMapping}).\n *\n * Runs at sign-in (inside the sign-in transaction) and, for `always` mappings, again on each OIDC\n * session refresh (see `IdpSessionRevalidator`). Returns a {@link ClaimMappingSyncResult}: an\n * `{ before, after }` audit delta (`null` when nothing changed) plus `droppedUnsafeRules` (true when the\n * apply-time safety backstop dropped a configured rule). The caller emits the `idp_role_mapped` audit\n * from the delta and the `idp_role_mapping_failed` fail-open marker from `droppedUnsafeRules` — audit\n * lives at the caller layer, never here.\n *\n * The caller parses the mapping (via {@link parseClaimMapping}) and decides the fail-open policy: a\n * malformed config is caught by the caller before this runs, while a DB error raised here propagates\n * so the surrounding transaction rolls back the partial apply (no half-applied grants).\n */\nexport class IDPClaimSyncService {\n\tconstructor(\n\t\tprivate readonly projectSchemaResolver: ProjectSchemaResolver,\n\t) {\n\t}\n\n\tasync sync(\n\t\tdb: DatabaseContext,\n\t\tmapping: ClaimMapping,\n\t\tclaims: Record<string, unknown>,\n\t\tidentity: { id: string },\n\t\tisNewPerson: boolean,\n\t\toptions: { allowRemoval?: boolean } = {},\n\t): Promise<ClaimMappingSyncResult> {\n\t\tif (mapping.rules.length === 0) {\n\t\t\treturn { audit: null, droppedUnsafeRules: false }\n\t\t}\n\n\t\tconst syncPolicy = mapping.syncPolicy ?? DEFAULT_SYNC_POLICY\n\t\t// `unmatched: 'remove'` reconciliation is only safe when the claim surface is COMPLETE: a rule that\n\t\t// matched at sign-in but is missing from a partial surface would strip a legitimate membership with no\n\t\t// IdP change. At sign-in the surface is always complete, so the caller leaves removal enabled. On the\n\t\t// OIDC refresh path the caller passes `allowRemoval` per surface completeness (see IdpSessionRevalidator):\n\t\t// a `method: 'refresh'` that rebuilt sign-in's id-token + userinfo surface enables removal (refresh then\n\t\t// reconciles exactly like sign-in); a partial surface (userinfo-only probe, or a failed userinfo fetch)\n\t\t// disables it so refresh stays additive-only. The audit below reflects this effective value.\n\t\tconst unmatched = options.allowRemoval === false ? 'keep' : (mapping.unmatched ?? DEFAULT_UNMATCHED)\n\n\t\t// `sticky`: only apply at account creation; an existing account keeps whatever it has. This is\n\t\t// also what bounds refresh-sync to `always` mappings — a refresh passes `isNewPerson: false`.\n\t\tif (syncPolicy === 'sticky' && !isNewPerson) {\n\t\t\treturn { audit: null, droppedUnsafeRules: false }\n\t\t}\n\n\t\t// Apply-time safety backstop (A09): re-validate each granted membership against the project's LIVE\n\t\t// ACL schema and drop any that fails (fail-closed) — condition-injection above all, but ANY error\n\t\t// (unknown role/variable, a malformed condition value, an unsafe predefined). Config-time validation\n\t\t// (`IDPManager.assertValidClaimMapping`) is the primary guard, but it is skipped when the target\n\t\t// project does not exist yet, is never re-run when it is later created, and a variable's ACL type can\n\t\t// drift (e.g. entity → condition) after the mapping was authored. A dropped rule is removed from BOTH\n\t\t// the granted set and the removal vocabulary below (both derived from `rules`), so an unsafe rule\n\t\t// neither grants nor drives reconciliation. The caller is told a drop happened (`droppedUnsafeRules`)\n\t\t// so it can emit the `idp_role_mapping_failed` fail-open marker.\n\t\tconst { safe: rules, dropped, aclByProject } = await this.dropUnsafeRules(db, mapping.rules)\n\n\t\t// Apply-time safety backstop, part 2 (A09): RUNTIME re-validation of the EVALUATED memberships.\n\t\t// `dropUnsafeRules` above only sees each rule's static CONFIG shape, so — like config-time validation —\n\t\t// it tolerates a missing membership variable (an A09 grant may set only some of a role's variables).\n\t\t// Once the claims are evaluated we know each membership EXACTLY as it would be written, and can\n\t\t// fail-close on the one case that tolerance makes unsafe: an `admin` grant whose claim-derived scoping\n\t\t// variable resolved empty, which would otherwise persist a bare, UNSCOPED `admin` membership (see\n\t\t// {@link dropUnsafeEvaluatedMemberships}). Both drop sets feed the `droppedUnsafeRules` fail-open marker.\n\t\tconst evaluated = evaluateClaimMapping({ ...mapping, rules }, claims)\n\t\tconst { safe: memberships, dropped: droppedMemberships } = this.dropUnsafeEvaluatedMemberships(evaluated, aclByProject)\n\t\tconst droppedUnsafeRules = dropped.length > 0 || droppedMemberships.length > 0\n\n\t\t// The mapping's membership \"vocabulary\": every (project, role) any rule could grant a membership\n\t\t// for. Removal is strictly bounded to this set so memberships and variable names managed outside\n\t\t// the mapping are never stripped, even under `unmatched: 'remove'`.\n\t\tconst vocabularyMemberships = new Map<string, Set<string>>()\n\t\tfor (const rule of rules) {\n\t\t\tif (rule.grantMembership) {\n\t\t\t\tconst roles = vocabularyMemberships.get(rule.grantMembership.project) ?? new Set<string>()\n\t\t\t\troles.add(rule.grantMembership.role)\n\t\t\t\tvocabularyMemberships.set(rule.grantMembership.project, roles)\n\t\t\t}\n\t\t}\n\t\tconst before = await this.snapshot(db, identity.id, vocabularyMemberships)\n\n\t\tawait this.applyMemberships(db, identity.id, memberships, vocabularyMemberships, unmatched)\n\n\t\tconst after = await this.snapshot(db, identity.id, vocabularyMemberships)\n\n\t\tif (snapshotEquals(before, after)) {\n\t\t\treturn { audit: null, droppedUnsafeRules }\n\t\t}\n\n\t\treturn { audit: { before, after, syncPolicy, unmatched }, droppedUnsafeRules }\n\t}\n\n\t/**\n\t * Partition rules into those safe to apply and those dropped by the apply-time safety backstop. A rule\n\t * is dropped when its granted membership produces ANY validation error against the project's CURRENT ACL\n\t * schema (fail-closed) — condition-injection above all, but also an unknown role/variable, a malformed\n\t * condition value, or a forbidden predefined variable. A validation throw is treated as unsafe (we cannot\n\t * prove the grant safe). Schemas (and, when needed, project existence) are resolved at most once per\n\t * project. The dropped set is returned so the caller can emit a fail-open audit marker.\n\t *\n\t * When `getSchema` returns no ACL it does NOT mean \"the project does not exist\": it returns undefined both\n\t * for a project that has no row yet AND for one whose row exists but whose container / content schema is\n\t * momentarily unresolvable (mid-provisioning, transient). The two need OPPOSITE handling, so we\n\t * disambiguate via the tenant `project` table:\n\t * - no project row → the grant is genuinely inert (`applyMemberships` resolves the same slug and skips\n\t * it, so nothing is written). KEEP the rule for when the project is created later.\n\t * - project row EXISTS but the ACL is unresolvable → `applyMemberships` WOULD still write the membership\n\t * (it resolves the slug from the tenant `project` table, independent of the content schema), so an\n\t * UNVALIDATED grant — including a claim-derived value targeting a `condition` ACL variable — could\n\t * land. Fail closed: DROP the rule (it re-applies on a later sign-in once the schema resolves). This\n\t * matches the direct add-member path, which refuses a membership whose project schema can't be resolved.\n\t *\n\t * Returns the per-project ACL map it built (`aclByProject`) so the runtime backstop\n\t * ({@link dropUnsafeEvaluatedMemberships}) can re-use it without re-resolving any schema.\n\t */\n\tprivate async dropUnsafeRules(\n\t\tdb: DatabaseContext,\n\t\trules: readonly ClaimMappingRule[],\n\t): Promise<{ safe: ClaimMappingRule[]; dropped: ClaimMappingRule[]; aclByProject: Map<string, Acl.Schema | null> }> {\n\t\tconst aclByProject = new Map<string, Acl.Schema | null>()\n\t\tconst projectExistsBySlug = new Map<string, boolean>()\n\t\tconst safe: ClaimMappingRule[] = []\n\t\tconst dropped: ClaimMappingRule[] = []\n\t\tfor (const rule of rules) {\n\t\t\tconst membership = rule.grantMembership\n\t\t\tif (!membership) {\n\t\t\t\tsafe.push(rule)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!aclByProject.has(membership.project)) {\n\t\t\t\tconst schema = await this.projectSchemaResolver.getSchema(membership.project)\n\t\t\t\taclByProject.set(membership.project, schema?.acl ?? null)\n\t\t\t}\n\t\t\tconst acl = aclByProject.get(membership.project) ?? null\n\t\t\tif (acl === null) {\n\t\t\t\tif (!projectExistsBySlug.has(membership.project)) {\n\t\t\t\t\tconst project = await db.queryHandler.fetch(new ProjectBySlugQuery(membership.project))\n\t\t\t\t\tprojectExistsBySlug.set(membership.project, project != null)\n\t\t\t\t}\n\t\t\t\t// project row exists but its ACL is unresolvable → can't prove the grant safe → drop (fail-closed);\n\t\t\t\t// no row yet → genuinely inert, keep for a project created later.\n\t\t\t\tif (projectExistsBySlug.get(membership.project)) {\n\t\t\t\t\tdropped.push(rule)\n\t\t\t\t} else {\n\t\t\t\t\tsafe.push(rule)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlet unsafe: boolean\n\t\t\ttry {\n\t\t\t\tunsafe = validateClaimMappingMembership(acl, membership).length > 0\n\t\t\t} catch {\n\t\t\t\tunsafe = true\n\t\t\t}\n\t\t\tif (unsafe) {\n\t\t\t\tdropped.push(rule)\n\t\t\t} else {\n\t\t\t\tsafe.push(rule)\n\t\t\t}\n\t\t}\n\t\treturn { safe, dropped, aclByProject }\n\t}\n\n\t/**\n\t * RUNTIME companion to {@link dropUnsafeRules} (A09 apply-time backstop, part 2). `dropUnsafeRules`\n\t * validates each rule's static CONFIG shape and — like config-time validation — TOLERATES a missing\n\t * membership variable (`VARIABLE_EMPTY`): an A09 grant may legitimately set only some of a role's\n\t * variables. For an ordinary role that tolerance is safe: a variable that resolves to no value just\n\t * narrows CONTENT access (the membership resolver maps it to `{ never: true }` — strictly LESS access,\n\t * never more), and a role's tenant permissions are matched against that role's OWN tenant rule (a\n\t * missing variable there denies, never escalates).\n\t *\n\t * The ONE role that breaks the assumption is the project `admin` role: {@link ProjectScope} grants the\n\t * PROJECT_ADMIN tenant role (project secrets, member management, IdP config, deploy, …) to ANY identity\n\t * holding an `admin` membership in the project — keyed on the role NAME alone, independent of the\n\t * membership's variables. So when a claim-derived variable meant to SCOPE an `admin` grant resolves\n\t * empty, `applyMemberships` drops the empty variable before the write and persists a BARE `admin`\n\t * membership — i.e. UNSCOPED project-admin, even though the operator intended a scoped grant, and a\n\t * membership the direct add-member path ({@link MembershipResolver}, via `MembershipValidator`) would\n\t * REJECT as `VARIABLE_EMPTY`. (`admin` is the only role-name-based grant in the whole authorization\n\t * layer; every other privilege is gated by ACL variables/predicates, so it cannot be widened this way.)\n\t *\n\t * So, fail-closed, we re-validate every evaluated `admin` grant EXACTLY as it would be written (empty\n\t * variables filtered out, as `applyMemberships` does) against the live ACL and DROP it if the resolver\n\t * reports any error — i.e. if a required (non-fallback) `admin` variable would be absent. Under `keep`\n\t * the bare grant is then never written; under `remove` it is absent from the granted set, so\n\t * reconciliation revokes any pre-existing one. Non-`admin` grants are left untouched (their partial\n\t * grants stay valid). The drop folds into `droppedUnsafeRules`, so the caller still emits the\n\t * `idp_role_mapping_failed` fail-open marker.\n\t */\n\tprivate dropUnsafeEvaluatedMemberships(\n\t\tmemberships: readonly MappedMembership[],\n\t\taclByProject: ReadonlyMap<string, Acl.Schema | null>,\n\t): { safe: MappedMembership[]; dropped: MappedMembership[] } {\n\t\tconst resolver = new MembershipResolver()\n\t\tconst safe: MappedMembership[] = []\n\t\tconst dropped: MappedMembership[] = []\n\t\tfor (const membership of memberships) {\n\t\t\tconst acl = aclByProject.get(membership.project) ?? null\n\t\t\t// Only `admin` is privileged by role name independent of its variables (see above). A null ACL means\n\t\t\t// the project has no row yet — an existing-but-unresolvable project had its rule dropped upstream, so\n\t\t\t// it never reaches here — so the grant is inert (`applyMemberships` skips the missing project): keep it.\n\t\t\tif (membership.role !== ProjectRole.ADMIN || acl === null) {\n\t\t\t\tsafe.push(membership)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Validate the membership as it will be persisted: `applyMemberships` filters out empty-valued\n\t\t\t// variables before the write, so an unset required (non-fallback) variable surfaces here as\n\t\t\t// `VARIABLE_EMPTY`, exactly as the direct add-member path reports and rejects it. Any error ⇒ unsafe.\n\t\t\tconst written: Acl.Membership = {\n\t\t\t\trole: membership.role,\n\t\t\t\tvariables: membership.variables.filter(it => it.values.length > 0).map(it => ({ name: it.name, values: [...it.values] })),\n\t\t\t}\n\t\t\tlet unsafe: boolean\n\t\t\ttry {\n\t\t\t\tunsafe = resolver.resolve(acl, [written], MembershipResolver.UnknownIdentity, false).errors.length > 0\n\t\t\t} catch {\n\t\t\t\tunsafe = true\n\t\t\t}\n\t\t\tif (unsafe) {\n\t\t\t\tdropped.push(membership)\n\t\t\t} else {\n\t\t\t\tsafe.push(membership)\n\t\t\t}\n\t\t}\n\t\treturn { safe, dropped }\n\t}\n\n\t// Membership writes are driven through the low-level commands directly (as InviteManager also does),\n\t// not via ProjectMemberManager (the \"normal\" add/update-member path): A09 needs semantics that path does\n\t// not offer — empty-value hard-delete avoidance under `keep`, and vocabulary-bounded removal under `remove`.\n\tprivate async applyMemberships(\n\t\tdb: DatabaseContext,\n\t\tidentityId: string,\n\t\tgrantedMemberships: readonly MappedMembership[],\n\t\tvocabularyMemberships: ReadonlyMap<string, ReadonlySet<string>>,\n\t\tunmatched: NonNullable<ClaimMapping['unmatched']>,\n\t): Promise<void> {\n\t\t// Group granted memberships by project so each project is resolved (slug -> id) only once.\n\t\tconst byProject = new Map<string, MappedMembership[]>()\n\t\tfor (const membership of grantedMemberships) {\n\t\t\tconst list = byProject.get(membership.project) ?? []\n\t\t\tlist.push(membership)\n\t\t\tbyProject.set(membership.project, list)\n\t\t}\n\n\t\t// Under `remove`, reconcile every project in the mapping's membership vocabulary — not only the\n\t\t// projects granted this sign-in — so a membership whose claim disappeared entirely (its project is\n\t\t// then absent from `byProject`) is still revoked. `keep` only ever touches the projects it grants.\n\t\tconst projectSlugs = unmatched === 'remove'\n\t\t\t? new Set([...vocabularyMemberships.keys(), ...byProject.keys()])\n\t\t\t: new Set(byProject.keys())\n\n\t\tfor (const projectSlug of projectSlugs) {\n\t\t\tconst project = await db.queryHandler.fetch(new ProjectBySlugQuery(projectSlug))\n\t\t\tif (!project) {\n\t\t\t\t// Mapping references a project that does not exist (or was deleted) — skip it rather\n\t\t\t\t// than fail the whole sign-in. The audit's before/after won't reflect it.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst memberships = byProject.get(projectSlug) ?? []\n\t\t\tconst grantedRoles = new Set(memberships.map(it => it.role))\n\n\t\t\tif (unmatched === 'remove') {\n\t\t\t\t// Removal is bounded to the mapping's own membership vocabulary (project::role named by some\n\t\t\t\t// rule): a role the mapping could grant but doesn't this sign-in is stripped, while a\n\t\t\t\t// membership role no rule names (managed outside the mapping) is left untouched.\n\t\t\t\tconst vocabularyRoles = vocabularyMemberships.get(projectSlug) ?? new Set<string>()\n\t\t\t\tconst existing = await db.queryHandler.fetch(new ProjectMembershipByIdentityQuery({ id: project.id }, [identityId]))\n\t\t\t\tfor (const membership of existing) {\n\t\t\t\t\tif (vocabularyRoles.has(membership.role) && !grantedRoles.has(membership.role)) {\n\t\t\t\t\t\tawait db.commandBus.execute(new RemoveProjectMembershipCommand(project.id, identityId, membership.role))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const membership of memberships) {\n\t\t\t\t// Under `remove` the IdP is the source of truth, and the system does NOT allow an empty membership\n\t\t\t\t// variable — the direct add-member path hard-deletes a membership whose variable resolves to no\n\t\t\t\t// values (`CreateOrUpdateProjectMembershipCommand` deletes such a row), and the membership\n\t\t\t\t// resolver reports a missing/empty variable as VARIABLE_EMPTY. So a DECLARED variable that resolves\n\t\t\t\t// to no values means the grant is empty-scoped and meaningless: REVOKE the whole membership,\n\t\t\t\t// consistently with that invariant, rather than leaving a role with a missing/empty variable. (CORR-1:\n\t\t\t\t// clearing the variable to `[]` instead would, for a `condition` variable, parse to `{ or: [] }` =\n\t\t\t\t// allow-all — the opposite of revoking.) Under `keep` we never revoke, so an empty variable is simply\n\t\t\t\t// not applied below and the grant stays.\n\t\t\t\tif (unmatched === 'remove' && membership.variables.some(it => it.values.length === 0)) {\n\t\t\t\t\tawait db.commandBus.execute(new RemoveProjectMembershipCommand(project.id, identityId, membership.role))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tawait db.commandBus.execute(\n\t\t\t\t\tnew CreateOrUpdateProjectMembershipCommand(\n\t\t\t\t\t\tproject.id,\n\t\t\t\t\t\tidentityId,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trole: membership.role,\n\t\t\t\t\t\t\t// Drop variables with no values: an unset variable simply isn't applied (a role with no\n\t\t\t\t\t\t\t// variables is fine — it sends none). Under `keep` this is the only empty-handling; under\n\t\t\t\t\t\t\t// `remove` an empty DECLARED variable already revoked the whole membership above. Because the\n\t\t\t\t\t\t\t// filtered list never carries an empty `set`, the command's hard-delete-on-empty never fires\n\t\t\t\t\t\t\t// here — so `keep` never revokes a grant, and `remove`'s revocation stays explicit above.\n\t\t\t\t\t\t\tvariables: membership.variables\n\t\t\t\t\t\t\t\t.filter(it => it.values.length > 0)\n\t\t\t\t\t\t\t\t.map(it => ({ name: it.name, set: [...it.values] })),\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Snapshot the identity's mapping-relevant memberships for the audit delta: its memberships (with\n\t * variable values) for exactly the (project, role) pairs in the mapping's vocabulary. Bounding is by\n\t * (project, role) — a membership whose ROLE no rule names is excluded entirely — which keeps the audit\n\t * consistent with the (also vocabulary-bounded) reconciliation. NOTE the bound is per-(project, role),\n\t * NOT per-variable-name: for an in-vocabulary membership ALL its variables are snapshotted, including any\n\t * variable managed OUTSIDE the mapping on that same role (e.g. an admin-set `condition` filter), and a\n\t * `passthrough` variable's value IS the verbatim external claim value. So the idp_role_mapped event_data\n\t * can disclose claim-derived / admin-managed variable values for a mapped role to system:viewAuthLog\n\t * readers — by design (the recorded value is the ACL grant being audited). Variable values are included\n\t * so a sign-in that only changes a claim-derived membership variable — itself a row-level ACL grant — is\n\t * still detected as a change and audited.\n\t */\n\tprivate async snapshot(\n\t\tdb: DatabaseContext,\n\t\tidentityId: string,\n\t\tvocabularyMemberships: ReadonlyMap<string, ReadonlySet<string>>,\n\t): Promise<ClaimMappingSnapshot> {\n\t\tconst memberships: MappedMembership[] = []\n\t\tfor (const [slug, roles] of vocabularyMemberships) {\n\t\t\tconst project = await db.queryHandler.fetch(new ProjectBySlugQuery(slug))\n\t\t\tif (!project) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst rows = await db.queryHandler.fetch(new ProjectMembershipByIdentityQuery({ id: project.id }, [identityId]))\n\t\t\tfor (const row of rows) {\n\t\t\t\t// Only the roles the mapping itself could grant: a membership role no rule names (managed outside\n\t\t\t\t// the mapping) is neither reconciled nor disclosed in the audit delta.\n\t\t\t\tif (roles.has(row.role)) {\n\t\t\t\t\tmemberships.push({ project: slug, role: row.role, variables: row.variables })\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { memberships: sortMemberships(memberships) }\n\t}\n}\n\n// Stable ordering (memberships by project+role, variables by name, values sorted) so `snapshotEquals`\n// compares by content, not by the DB's row/array order. Assumes variable `values` are always JSON\n// string arrays (which they are — the membership commands only ever store `string[]`); a non-string\n// element would make the default sort order-unstable and the JSON.stringify comparison spurious, so\n// keep variable values string-typed.\nconst sortMemberships = (memberships: readonly MappedMembership[]): readonly MappedMembership[] =>\n\t[...memberships]\n\t\t.map(membership => ({\n\t\t\tproject: membership.project,\n\t\t\trole: membership.role,\n\t\t\tvariables: [...membership.variables]\n\t\t\t\t.map(variable => ({ name: variable.name, values: [...variable.values].sort() }))\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name)),\n\t\t}))\n\t\t.sort((a, b) => a.project.localeCompare(b.project) || a.role.localeCompare(b.role))\n\nconst snapshotEquals = (a: ClaimMappingSnapshot, b: ClaimMappingSnapshot): boolean => JSON.stringify(a) === JSON.stringify(b)\n"],"names":[],"mappings":"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"}
@@ -14,18 +14,22 @@ require("@contember/schema");
14
14
  const CreateIdpCommand = require("../../commands/idp/CreateIdpCommand.cjs");
15
15
  const IdentityProviderNotFoundError = require("./IdentityProviderNotFoundError.cjs");
16
16
  const InvalidIDPConfigurationError = require("./InvalidIDPConfigurationError.cjs");
17
+ const ClaimMapping = require("./ClaimMapping.cjs");
18
+ const ClaimMappingValidation = require("./ClaimMappingValidation.cjs");
17
19
  const DisableIdpCommand = require("../../commands/idp/DisableIdpCommand.cjs");
18
20
  const EnableIdpCommand = require("../../commands/idp/EnableIdpCommand.cjs");
19
21
  const UpdateIdpCommand = require("../../commands/idp/UpdateIdpCommand.cjs");
20
22
  class IDPManager {
21
- constructor(idpRegistry) {
23
+ constructor(idpRegistry, projectSchemaResolver) {
22
24
  this.idpRegistry = idpRegistry;
25
+ this.projectSchemaResolver = projectSchemaResolver;
23
26
  }
24
27
  async addIDP(db, idp) {
25
28
  return await db.transaction(async (db2) => {
26
29
  try {
27
30
  const providerService = this.idpRegistry.getHandler(idp.type);
28
- providerService.validateConfiguration(idp.configuration);
31
+ this.assertNoUnknownConfigurationKeys(providerService.validateConfiguration(idp.configuration), idp.configuration);
32
+ await this.assertValidClaimMapping(idp.configuration);
29
33
  } catch (e) {
30
34
  if (e instanceof IdentityProviderNotFoundError.IdentityProviderNotFoundError) {
31
35
  return new Response.ResponseError("UNKNOWN_TYPE", `IDP type ${idp.type} not found`);
@@ -73,28 +77,13 @@ class IDPManager {
73
77
  if (!existing) {
74
78
  return new Response.ResponseError("NOT_FOUND", `IDP ${slug} not found`);
75
79
  }
76
- const newConfiguration = (() => {
77
- if (!data.configuration) {
78
- return existing.configuration;
79
- }
80
- if (!mergeConfiguration) {
81
- return data.configuration;
82
- }
83
- const newConfiguration2 = { ...existing.configuration };
84
- for (const [key, value] of Object.entries(data.configuration)) {
85
- if (value === null) {
86
- delete newConfiguration2[key];
87
- } else {
88
- newConfiguration2[key] = value;
89
- }
90
- }
91
- return newConfiguration2;
92
- })();
80
+ const newConfiguration = !data.configuration ? existing.configuration : mergeConfiguration ? deepMergeConfiguration(existing.configuration, data.configuration) : data.configuration;
93
81
  try {
94
82
  const type = data.type ?? existing.type;
95
83
  const providerService = this.idpRegistry.getHandler(type);
96
84
  if (data.configuration !== void 0 || type !== existing.type) {
97
- providerService.validateConfiguration(newConfiguration);
85
+ this.assertNoUnknownConfigurationKeys(providerService.validateConfiguration(newConfiguration), newConfiguration);
86
+ await this.assertValidClaimMapping(newConfiguration);
98
87
  }
99
88
  } catch (e) {
100
89
  if (e instanceof InvalidIDPConfigurationError.InvalidIDPConfigurationError) {
@@ -111,6 +100,76 @@ class IDPManager {
111
100
  return new Response.ResponseOk(null);
112
101
  });
113
102
  }
103
+ /**
104
+ * Reject top-level `configuration` keys the provider does not recognise.
105
+ *
106
+ * Every provider configuration is parsed with `Typesafe.partial`, which silently DROPS unknown
107
+ * properties. Without this check `addIDP` / `updateIDP` answer `ok` to a configuration the
108
+ * provider will never act on — a typo like `fetchUserinfo` (lowercase i) reads as a successfully
109
+ * applied setting while the option stays off, and an option that a given engine version does not
110
+ * support yet looks indistinguishable from one that works.
111
+ *
112
+ * The parsed result carries exactly the keys the provider understood, so the difference against
113
+ * the submitted object is the set of ignored keys. All of them are reported at once (rather than
114
+ * the first, as `Typesafe.noExtraProps` would) so a configuration with several typos takes one
115
+ * round trip to fix, matching {@link findRemovedRuleKeys}.
116
+ *
117
+ * Only the top level is checked: nested shapes that need strictness validate themselves
118
+ * (`claimMapping` via {@link parseClaimMapping}). Reading a stored configuration is deliberately
119
+ * left untouched — this runs at write time only, so a row written before this check keeps
120
+ * authenticating instead of locking its users out.
121
+ */
122
+ assertNoUnknownConfigurationKeys(parsed, submitted) {
123
+ const known = new Set(Object.keys(parsed));
124
+ const unknown = Object.keys(submitted).filter((key) => !known.has(key));
125
+ if (unknown.length > 0) {
126
+ throw new InvalidIDPConfigurationError.InvalidIDPConfigurationError(
127
+ `unknown configuration ${unknown.length === 1 ? "property" : "properties"} ${unknown.join(", ")}; remove ${unknown.length === 1 ? "it" : "them"} or check the spelling — the provider would ignore ${unknown.length === 1 ? "it" : "them"}`
128
+ );
129
+ }
130
+ }
131
+ /**
132
+ * Validate the optional A09 `claimMapping` embedded in an IdP `configuration`: reject a removed
133
+ * `grantRoles` (global-role mapping was dropped — see {@link parseClaimMapping}), reject a
134
+ * malformed shape, and validate each granted membership's role against the target project's ACL
135
+ * schema (mirroring the direct add-member path). Throws {@link InvalidIDPConfigurationError},
136
+ * surfaced as `INVALID_CONFIGURATION`.
137
+ */
138
+ async assertValidClaimMapping(configuration) {
139
+ const removed = ClaimMapping.findRemovedRuleKeys(configuration);
140
+ if (removed.length > 0) {
141
+ throw new InvalidIDPConfigurationError.InvalidIDPConfigurationError(
142
+ `claimMapping no longer supports ${removed.join(", ")} (global-role mapping was removed); grant a project membership via grantMembership instead`
143
+ );
144
+ }
145
+ let mapping;
146
+ try {
147
+ mapping = ClaimMapping.parseClaimMapping(configuration);
148
+ } catch (e) {
149
+ throw new InvalidIDPConfigurationError.InvalidIDPConfigurationError(`Invalid claimMapping: ${e instanceof Error ? e.message : String(e)}`);
150
+ }
151
+ if (!mapping) {
152
+ return;
153
+ }
154
+ const shapeErrors = ClaimMapping.findClaimMappingShapeErrors(mapping);
155
+ if (shapeErrors.length > 0) {
156
+ throw new InvalidIDPConfigurationError.InvalidIDPConfigurationError(shapeErrors[0]);
157
+ }
158
+ for (const rule of mapping.rules) {
159
+ const membership = rule.grantMembership;
160
+ if (!membership) {
161
+ continue;
162
+ }
163
+ const schema = await this.projectSchemaResolver.getSchema(membership.project);
164
+ if (!schema) {
165
+ continue;
166
+ }
167
+ const errors = ClaimMappingValidation.validateClaimMappingMembership(schema.acl, membership);
168
+ if (errors.length > 0) {
169
+ throw new InvalidIDPConfigurationError.InvalidIDPConfigurationError(errors[0].message);
170
+ }
171
+ }
172
+ }
114
173
  async listIDP(db) {
115
174
  const result = await db.queryHandler.fetch(new IdentityProvidersQuery.IdentityProvidersQuery());
116
175
  return result.map((it) => {
@@ -120,5 +179,22 @@ class IDPManager {
120
179
  });
121
180
  }
122
181
  }
182
+ const deepMergeConfiguration = (base, updates) => {
183
+ const result = { ...base };
184
+ for (const [key, value] of Object.entries(updates)) {
185
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
186
+ continue;
187
+ }
188
+ if (value === null) {
189
+ delete result[key];
190
+ } else if (ClaimMapping.isRecord(value)) {
191
+ const existingChild = result[key];
192
+ result[key] = deepMergeConfiguration(ClaimMapping.isRecord(existingChild) ? existingChild : {}, value);
193
+ } else {
194
+ result[key] = value;
195
+ }
196
+ }
197
+ return result;
198
+ };
123
199
  exports.IDPManager = IDPManager;
124
200
  //# sourceMappingURL=IDPManager.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"IDPManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response.js'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema/index.js'\nimport { DatabaseContext } from '../../utils/index.js'\nimport { IdentityProviderData } from '../../type/index.js'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries/index.js'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand.js'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry.js'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError.js'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError.js'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand.js'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand.js'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand.js'\nimport { IdentityProviderDto } from '../../queries/idp/types.js'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tproviderService.validateConfiguration(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = (() => {\n\t\t\t\tif (!data.configuration) {\n\t\t\t\t\treturn existing.configuration\n\t\t\t\t}\n\t\t\t\tif (!mergeConfiguration) {\n\t\t\t\t\treturn data.configuration\n\t\t\t\t}\n\n\t\t\t\tconst newConfiguration = { ...existing.configuration }\n\t\t\t\tfor (const [key, value] of Object.entries(data.configuration)) {\n\t\t\t\t\tif (value === null) {\n\t\t\t\t\t\tdelete newConfiguration[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewConfiguration[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newConfiguration\n\t\t\t})()\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tproviderService.validateConfiguration(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(\n\t\t\t\tnew UpdateIdpCommand(existing.id, {\n\t\t\t\t\t...data,\n\t\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","IdentityProviderNotFoundError","ResponseError","InvalidIDPConfigurationError","IdentityProviderBySlugQuery","CreateIdpCommand","ResponseOk","DisableIdpCommand","EnableIdpCommand","newConfiguration","UpdateIdpCommand","IdentityProvidersQuery"],"mappings":"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"}
1
+ {"version":3,"file":"IDPManager.cjs","sources":["../../../../../../../packages/engine-tenant-api/src/model/service/idp/IDPManager.ts"],"sourcesContent":["import { Response, ResponseError, ResponseOk } from '../../utils/Response.js'\nimport { AddIdpErrorCode, DisableIdpErrorCode, EnableIdpErrorCode, UpdateIdpErrorCode } from '../../../schema/index.js'\nimport { DatabaseContext } from '../../utils/index.js'\nimport { IdentityProviderData } from '../../type/index.js'\nimport { IdentityProviderBySlugQuery, IdentityProvidersQuery } from '../../queries/index.js'\nimport { CreateIdpCommand } from '../../commands/idp/CreateIdpCommand.js'\nimport { IDPHandlerRegistry } from './IDPHandlerRegistry.js'\nimport { IdentityProviderNotFoundError } from './IdentityProviderNotFoundError.js'\nimport { InvalidIDPConfigurationError } from './InvalidIDPConfigurationError.js'\nimport { findClaimMappingShapeErrors, findRemovedRuleKeys, isRecord, parseClaimMapping } from './ClaimMapping.js'\nimport { validateClaimMappingMembership } from './ClaimMappingValidation.js'\nimport { ProjectSchemaResolver } from '../../type/index.js'\nimport { DisableIdpCommand } from '../../commands/idp/DisableIdpCommand.js'\nimport { EnableIdpCommand } from '../../commands/idp/EnableIdpCommand.js'\nimport { UpdateIdpCommand, UpdateIdpData } from '../../commands/idp/UpdateIdpCommand.js'\nimport { IdentityProviderDto } from '../../queries/idp/types.js'\n\nexport class IDPManager {\n\tconstructor(\n\t\tprivate readonly idpRegistry: IDPHandlerRegistry,\n\t\tprivate readonly projectSchemaResolver: ProjectSchemaResolver,\n\t) {\n\t}\n\n\tpublic async addIDP(db: DatabaseContext, idp: IdentityProviderData): Promise<RegisterIDPResponse> {\n\t\treturn await db.transaction(async (db): Promise<RegisterIDPResponse> => {\n\t\t\ttry {\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(idp.type)\n\t\t\t\tthis.assertNoUnknownConfigurationKeys(providerService.validateConfiguration(idp.configuration), idp.configuration)\n\t\t\t\tawait this.assertValidClaimMapping(idp.configuration)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof IdentityProviderNotFoundError) {\n\t\t\t\t\treturn new ResponseError('UNKNOWN_TYPE', `IDP type ${idp.type} not found`)\n\t\t\t\t}\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(idp.slug))\n\t\t\tif (existing) {\n\t\t\t\treturn new ResponseError('ALREADY_EXISTS', `IDP with slug ${idp.slug} already exists`)\n\t\t\t}\n\t\t\tawait db.commandBus.execute(new CreateIdpCommand(idp))\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async disableIDP(db: DatabaseContext, slug: string): Promise<DisableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (!existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new DisableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async enableIDP(db: DatabaseContext, slug: string): Promise<EnableIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\t\t\tif (existing.disabledAt) {\n\t\t\t\tawait db.commandBus.execute(new EnableIdpCommand(existing.id))\n\t\t\t}\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\tpublic async updateIDP(db: DatabaseContext, slug: string, data: UpdateIdpData, mergeConfiguration: boolean): Promise<UpdateIDPResponse> {\n\t\treturn await db.transaction(async db => {\n\t\t\tconst existing = await db.queryHandler.fetch(new IdentityProviderBySlugQuery(slug))\n\t\t\tif (!existing) {\n\t\t\t\treturn new ResponseError('NOT_FOUND', `IDP ${slug} not found`)\n\t\t\t}\n\n\t\t\tconst newConfiguration = !data.configuration\n\t\t\t\t? existing.configuration\n\t\t\t\t: (mergeConfiguration ? deepMergeConfiguration(existing.configuration, data.configuration) : data.configuration)\n\n\t\t\ttry {\n\t\t\t\tconst type = data.type ?? existing.type\n\t\t\t\tconst providerService = this.idpRegistry.getHandler(type)\n\t\t\t\tif (data.configuration !== undefined || type !== existing.type) {\n\t\t\t\t\tthis.assertNoUnknownConfigurationKeys(providerService.validateConfiguration(newConfiguration), newConfiguration)\n\t\t\t\t\tawait this.assertValidClaimMapping(newConfiguration)\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof InvalidIDPConfigurationError) {\n\t\t\t\t\treturn new ResponseError('INVALID_CONFIGURATION', `Invalid IDP configuration: ${e.message}`)\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\n\t\t\tawait db.commandBus.execute(\n\t\t\t\tnew UpdateIdpCommand(existing.id, {\n\t\t\t\t\t...data,\n\t\t\t\t\tconfiguration: data.configuration ? newConfiguration : undefined,\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\treturn new ResponseOk(null)\n\t\t})\n\t}\n\n\t/**\n\t * Reject top-level `configuration` keys the provider does not recognise.\n\t *\n\t * Every provider configuration is parsed with `Typesafe.partial`, which silently DROPS unknown\n\t * properties. Without this check `addIDP` / `updateIDP` answer `ok` to a configuration the\n\t * provider will never act on — a typo like `fetchUserinfo` (lowercase i) reads as a successfully\n\t * applied setting while the option stays off, and an option that a given engine version does not\n\t * support yet looks indistinguishable from one that works.\n\t *\n\t * The parsed result carries exactly the keys the provider understood, so the difference against\n\t * the submitted object is the set of ignored keys. All of them are reported at once (rather than\n\t * the first, as `Typesafe.noExtraProps` would) so a configuration with several typos takes one\n\t * round trip to fix, matching {@link findRemovedRuleKeys}.\n\t *\n\t * Only the top level is checked: nested shapes that need strictness validate themselves\n\t * (`claimMapping` via {@link parseClaimMapping}). Reading a stored configuration is deliberately\n\t * left untouched — this runs at write time only, so a row written before this check keeps\n\t * authenticating instead of locking its users out.\n\t */\n\tprivate assertNoUnknownConfigurationKeys(parsed: {}, submitted: Record<string, unknown>): void {\n\t\tconst known = new Set(Object.keys(parsed))\n\t\tconst unknown = Object.keys(submitted).filter(key => !known.has(key))\n\t\tif (unknown.length > 0) {\n\t\t\tthrow new InvalidIDPConfigurationError(\n\t\t\t\t`unknown configuration ${unknown.length === 1 ? 'property' : 'properties'} ${unknown.join(', ')}; `\n\t\t\t\t\t+ `remove ${unknown.length === 1 ? 'it' : 'them'} or check the spelling — the provider would ignore ${unknown.length === 1 ? 'it' : 'them'}`,\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Validate the optional A09 `claimMapping` embedded in an IdP `configuration`: reject a removed\n\t * `grantRoles` (global-role mapping was dropped — see {@link parseClaimMapping}), reject a\n\t * malformed shape, and validate each granted membership's role against the target project's ACL\n\t * schema (mirroring the direct add-member path). Throws {@link InvalidIDPConfigurationError},\n\t * surfaced as `INVALID_CONFIGURATION`.\n\t */\n\tprivate async assertValidClaimMapping(configuration: Record<string, unknown>): Promise<void> {\n\t\tconst removed = findRemovedRuleKeys(configuration)\n\t\tif (removed.length > 0) {\n\t\t\tthrow new InvalidIDPConfigurationError(\n\t\t\t\t`claimMapping no longer supports ${removed.join(', ')} (global-role mapping was removed); grant a project membership via grantMembership instead`,\n\t\t\t)\n\t\t}\n\t\tlet mapping\n\t\ttry {\n\t\t\tmapping = parseClaimMapping(configuration)\n\t\t} catch (e) {\n\t\t\tthrow new InvalidIDPConfigurationError(`Invalid claimMapping: ${e instanceof Error ? e.message : String(e)}`)\n\t\t}\n\t\tif (!mapping) {\n\t\t\treturn\n\t\t}\n\t\t// Reject contradictory / empty-by-construction rule shapes (a rule setting both equals+contains; a\n\t\t// variable's `from.where` without `from.pick`) before the per-project ACL checks, so a\n\t\t// misconfiguration is caught even when the target project does not exist yet (ACL loop skipped).\n\t\tconst shapeErrors = findClaimMappingShapeErrors(mapping)\n\t\tif (shapeErrors.length > 0) {\n\t\t\tthrow new InvalidIDPConfigurationError(shapeErrors[0])\n\t\t}\n\t\t// Validate each granted membership's role AND its variables against the target project's ACL schema,\n\t\t// via the shared {@link validateClaimMappingMembership} (the same checks `IDPClaimSyncService`\n\t\t// re-runs at apply time, so the two enforcement points can't drift). A project that does not (yet)\n\t\t// exist is skipped — it may be created later, and a sign-in referencing a missing project is\n\t\t// harmless (the grant is skipped). NOTE: this validation runs only here at add/update time and is\n\t\t// NOT re-checked when the project/role appears later; the unsafe-condition-variable case is caught\n\t\t// again at apply time by `IDPClaimSyncService`, but other drift (unknown role/variable) is not.\n\t\tfor (const rule of mapping.rules) {\n\t\t\tconst membership = rule.grantMembership\n\t\t\tif (!membership) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst schema = await this.projectSchemaResolver.getSchema(membership.project)\n\t\t\tif (!schema) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst errors = validateClaimMappingMembership(schema.acl, membership)\n\t\t\tif (errors.length > 0) {\n\t\t\t\tthrow new InvalidIDPConfigurationError(errors[0].message)\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async listIDP(db: DatabaseContext): Promise<IdentityProviderDto[]> {\n\t\tconst result = await db.queryHandler.fetch(new IdentityProvidersQuery())\n\t\treturn result.map(it => {\n\t\t\tconst providerService = this.idpRegistry.getHandlerOrNull(it.type)\n\t\t\tconst configuration = providerService?.getPublicConfiguration\n\t\t\t\t? providerService.getPublicConfiguration(it.configuration)\n\t\t\t\t: it.configuration\n\n\t\t\treturn { ...it, configuration }\n\t\t})\n\t}\n}\n\n/**\n * Recursively merge configurer-supplied `updates` into the stored `base` configuration (the\n * `mergeConfiguration: true` path of {@link IDPManager.updateIDP}), returning a new object:\n * - a plain-object value is merged INTO an existing plain-object value at the same key, so updating one\n * field of a nested config object preserves its siblings. This matters for `configuration.claimMapping`,\n * which holds two independent concerns in one object — the OIDC identity-remap (`email` / `name` /\n * `externalIdentifier` / `attributesKey`) and the A09 `rules` — so a shallow replace of `claimMapping`\n * while updating one would silently wipe the other.\n * - any non-object value (including ARRAYS, e.g. the A09 `rules` list) REPLACES wholesale — arrays are\n * never merged element-wise.\n * - a `null` value DELETES the key (the established \"send null to unset\" convention).\n * - `__proto__` / `constructor` / `prototype` keys are skipped at EVERY level: they are never a legitimate\n * config field and writing one through could pollute the object's prototype.\n */\nconst deepMergeConfiguration = (base: Record<string, unknown>, updates: Record<string, unknown>): Record<string, unknown> => {\n\tconst result: Record<string, unknown> = { ...base }\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\tif (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n\t\t\tcontinue\n\t\t}\n\t\tif (value === null) {\n\t\t\tdelete result[key]\n\t\t} else if (isRecord(value)) {\n\t\t\tconst existingChild = result[key]\n\t\t\tresult[key] = deepMergeConfiguration(isRecord(existingChild) ? existingChild : {}, value)\n\t\t} else {\n\t\t\tresult[key] = value\n\t\t}\n\t}\n\treturn result\n}\n\nexport type RegisterIDPResponse = Response<null, AddIdpErrorCode>\nexport type DisableIDPResponse = Response<null, DisableIdpErrorCode>\nexport type EnableIDPResponse = Response<null, EnableIdpErrorCode>\nexport type UpdateIDPResponse = Response<null, UpdateIdpErrorCode>\n"],"names":["db","IdentityProviderNotFoundError","ResponseError","InvalidIDPConfigurationError","IdentityProviderBySlugQuery","CreateIdpCommand","ResponseOk","DisableIdpCommand","EnableIdpCommand","UpdateIdpCommand","findRemovedRuleKeys","parseClaimMapping","findClaimMappingShapeErrors","validateClaimMappingMembership","IdentityProvidersQuery","isRecord"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBO,MAAM,WAAW;AAAA,EACvB,YACkB,aACA,uBAChB;AAFgB,SAAA,cAAA;AACA,SAAA,wBAAA;AAAA,EAElB;AAAA,EAEA,MAAa,OAAO,IAAqB,KAAyD;AACjG,WAAO,MAAM,GAAG,YAAY,OAAOA,QAAqC;AACvE,UAAI;AACH,cAAM,kBAAkB,KAAK,YAAY,WAAW,IAAI,IAAI;AAC5D,aAAK,iCAAiC,gBAAgB,sBAAsB,IAAI,aAAa,GAAG,IAAI,aAAa;AACjH,cAAM,KAAK,wBAAwB,IAAI,aAAa;AAAA,MACrD,SAAS,GAAG;AACX,YAAI,aAAaC,8BAAAA,+BAA+B;AAC/C,iBAAO,IAAIC,SAAAA,cAAc,gBAAgB,YAAY,IAAI,IAAI,YAAY;AAAA,QAC1E;AACA,YAAI,aAAaC,6BAAAA,8BAA8B;AAC9C,iBAAO,IAAID,SAAAA,cAAc,yBAAyB,8BAA8B,EAAE,OAAO,EAAE;AAAA,QAC5F;AACA,cAAM;AAAA,MACP;AAEA,YAAM,WAAW,MAAMF,IAAG,aAAa,MAAM,IAAII,4BAAAA,4BAA4B,IAAI,IAAI,CAAC;AACtF,UAAI,UAAU;AACb,eAAO,IAAIF,SAAAA,cAAc,kBAAkB,iBAAiB,IAAI,IAAI,iBAAiB;AAAA,MACtF;AACA,YAAMF,IAAG,WAAW,QAAQ,IAAIK,iBAAAA,iBAAiB,GAAG,CAAC;AACrD,aAAO,IAAIC,SAAAA,WAAW,IAAI;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,IAAqB,MAA2C;AACvF,WAAO,MAAM,GAAG,YAAY,OAAMN,QAAM;AACvC,YAAM,WAAW,MAAMA,IAAG,aAAa,MAAM,IAAII,4BAAAA,4BAA4B,IAAI,CAAC;AAClF,UAAI,CAAC,UAAU;AACd,eAAO,IAAIF,SAAAA,cAAc,aAAa,OAAO,IAAI,YAAY;AAAA,MAC9D;AACA,UAAI,CAAC,SAAS,YAAY;AACzB,cAAMF,IAAG,WAAW,QAAQ,IAAIO,kBAAAA,kBAAkB,SAAS,EAAE,CAAC;AAAA,MAC/D;AACA,aAAO,IAAID,SAAAA,WAAW,IAAI;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,MAAa,UAAU,IAAqB,MAA0C;AACrF,WAAO,MAAM,GAAG,YAAY,OAAMN,QAAM;AACvC,YAAM,WAAW,MAAMA,IAAG,aAAa,MAAM,IAAII,4BAAAA,4BAA4B,IAAI,CAAC;AAClF,UAAI,CAAC,UAAU;AACd,eAAO,IAAIF,SAAAA,cAAc,aAAa,OAAO,IAAI,YAAY;AAAA,MAC9D;AACA,UAAI,SAAS,YAAY;AACxB,cAAMF,IAAG,WAAW,QAAQ,IAAIQ,iBAAAA,iBAAiB,SAAS,EAAE,CAAC;AAAA,MAC9D;AACA,aAAO,IAAIF,SAAAA,WAAW,IAAI;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA,EAEA,MAAa,UAAU,IAAqB,MAAc,MAAqB,oBAAyD;AACvI,WAAO,MAAM,GAAG,YAAY,OAAMN,QAAM;AACvC,YAAM,WAAW,MAAMA,IAAG,aAAa,MAAM,IAAII,4BAAAA,4BAA4B,IAAI,CAAC;AAClF,UAAI,CAAC,UAAU;AACd,eAAO,IAAIF,SAAAA,cAAc,aAAa,OAAO,IAAI,YAAY;AAAA,MAC9D;AAEA,YAAM,mBAAmB,CAAC,KAAK,gBAC5B,SAAS,gBACR,qBAAqB,uBAAuB,SAAS,eAAe,KAAK,aAAa,IAAI,KAAK;AAEnG,UAAI;AACH,cAAM,OAAO,KAAK,QAAQ,SAAS;AACnC,cAAM,kBAAkB,KAAK,YAAY,WAAW,IAAI;AACxD,YAAI,KAAK,kBAAkB,UAAa,SAAS,SAAS,MAAM;AAC/D,eAAK,iCAAiC,gBAAgB,sBAAsB,gBAAgB,GAAG,gBAAgB;AAC/G,gBAAM,KAAK,wBAAwB,gBAAgB;AAAA,QACpD;AAAA,MACD,SAAS,GAAG;AACX,YAAI,aAAaC,6BAAAA,8BAA8B;AAC9C,iBAAO,IAAID,SAAAA,cAAc,yBAAyB,8BAA8B,EAAE,OAAO,EAAE;AAAA,QAC5F;AACA,cAAM;AAAA,MACP;AAEA,YAAMF,IAAG,WAAW;AAAA,QACnB,IAAIS,iBAAAA,iBAAiB,SAAS,IAAI;AAAA,UACjC,GAAG;AAAA,UACH,eAAe,KAAK,gBAAgB,mBAAmB;AAAA,QAAA,CACvD;AAAA,MAAA;AAGF,aAAO,IAAIH,SAAAA,WAAW,IAAI;AAAA,IAC3B,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBQ,iCAAiC,QAAY,WAA0C;AAC9F,UAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AACzC,UAAM,UAAU,OAAO,KAAK,SAAS,EAAE,OAAO,CAAA,QAAO,CAAC,MAAM,IAAI,GAAG,CAAC;AACpE,QAAI,QAAQ,SAAS,GAAG;AACvB,YAAM,IAAIH,6BAAAA;AAAAA,QACT,yBAAyB,QAAQ,WAAW,IAAI,aAAa,YAAY,IAAI,QAAQ,KAAK,IAAI,CAAC,YAClF,QAAQ,WAAW,IAAI,OAAO,MAAM,sDAAsD,QAAQ,WAAW,IAAI,OAAO,MAAM;AAAA,MAAA;AAAA,IAE7I;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAc,wBAAwB,eAAuD;AAC5F,UAAM,UAAUO,aAAAA,oBAAoB,aAAa;AACjD,QAAI,QAAQ,SAAS,GAAG;AACvB,YAAM,IAAIP,6BAAAA;AAAAA,QACT,mCAAmC,QAAQ,KAAK,IAAI,CAAC;AAAA,MAAA;AAAA,IAEvD;AACA,QAAI;AACJ,QAAI;AACH,gBAAUQ,aAAAA,kBAAkB,aAAa;AAAA,IAC1C,SAAS,GAAG;AACX,YAAM,IAAIR,6BAAAA,6BAA6B,yBAAyB,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,CAAC,EAAE;AAAA,IAC7G;AACA,QAAI,CAAC,SAAS;AACb;AAAA,IACD;AAIA,UAAM,cAAcS,aAAAA,4BAA4B,OAAO;AACvD,QAAI,YAAY,SAAS,GAAG;AAC3B,YAAM,IAAIT,6BAAAA,6BAA6B,YAAY,CAAC,CAAC;AAAA,IACtD;AAQA,eAAW,QAAQ,QAAQ,OAAO;AACjC,YAAM,aAAa,KAAK;AACxB,UAAI,CAAC,YAAY;AAChB;AAAA,MACD;AACA,YAAM,SAAS,MAAM,KAAK,sBAAsB,UAAU,WAAW,OAAO;AAC5E,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACA,YAAM,SAASU,uBAAAA,+BAA+B,OAAO,KAAK,UAAU;AACpE,UAAI,OAAO,SAAS,GAAG;AACtB,cAAM,IAAIV,6BAAAA,6BAA6B,OAAO,CAAC,EAAE,OAAO;AAAA,MACzD;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAa,QAAQ,IAAqD;AACzE,UAAM,SAAS,MAAM,GAAG,aAAa,MAAM,IAAIW,uBAAAA,wBAAwB;AACvE,WAAO,OAAO,IAAI,CAAA,OAAM;AACvB,YAAM,kBAAkB,KAAK,YAAY,iBAAiB,GAAG,IAAI;AACjE,YAAM,gBAAgB,iBAAiB,yBACpC,gBAAgB,uBAAuB,GAAG,aAAa,IACvD,GAAG;AAEN,aAAO,EAAE,GAAG,IAAI,cAAA;AAAA,IACjB,CAAC;AAAA,EACF;AACD;AAgBA,MAAM,yBAAyB,CAAC,MAA+B,YAA8D;AAC5H,QAAM,SAAkC,EAAE,GAAG,KAAA;AAC7C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,QAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAAa;AACxE;AAAA,IACD;AACA,QAAI,UAAU,MAAM;AACnB,aAAO,OAAO,GAAG;AAAA,IAClB,WAAWC,sBAAS,KAAK,GAAG;AAC3B,YAAM,gBAAgB,OAAO,GAAG;AAChC,aAAO,GAAG,IAAI,uBAAuBA,aAAAA,SAAS,aAAa,IAAI,gBAAgB,CAAA,GAAI,KAAK;AAAA,IACzF,OAAO;AACN,aAAO,GAAG,IAAI;AAAA,IACf;AAAA,EACD;AACA,SAAO;AACR;;"}