@contember/engine-tenant-api 2.2.0-alpha.2 → 2.2.0-alpha.5

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 (1181) hide show
  1. package/CLAUDE.md +35 -2
  2. package/dist/development/index.cjs +30 -0
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +31 -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/runner.cjs +9 -2
  27. package/dist/development/src/migrations/runner.cjs.map +1 -1
  28. package/dist/development/src/migrations/runner.js +9 -2
  29. package/dist/development/src/migrations/runner.js.map +1 -1
  30. package/dist/development/src/migrations/snapshot.cjs +6 -1
  31. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  32. package/dist/development/src/migrations/snapshot.js +6 -1
  33. package/dist/development/src/migrations/snapshot.js.map +1 -1
  34. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
  35. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  36. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
  37. package/dist/development/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  38. package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
  39. package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
  40. package/dist/development/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
  41. package/dist/development/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
  42. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
  43. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  44. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
  45. package/dist/development/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  46. package/dist/development/src/model/commands/person/EnablePersonCommand.cjs +17 -0
  47. package/dist/development/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
  48. package/dist/development/src/model/commands/person/EnablePersonCommand.js +17 -0
  49. package/dist/development/src/model/commands/person/EnablePersonCommand.js.map +1 -0
  50. package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
  51. package/dist/development/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  52. package/dist/development/src/model/queries/configuration/ConfigurationQuery.js +4 -0
  53. package/dist/development/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  54. package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
  55. package/dist/development/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  56. package/dist/development/src/model/queries/membership/ProjectMembersQuery.js +1 -1
  57. package/dist/development/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  58. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
  59. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  60. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
  61. package/dist/development/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  62. package/dist/development/src/model/service/AuthLogService.cjs +8 -2
  63. package/dist/development/src/model/service/AuthLogService.cjs.map +1 -1
  64. package/dist/development/src/model/service/AuthLogService.js +8 -2
  65. package/dist/development/src/model/service/AuthLogService.js.map +1 -1
  66. package/dist/development/src/model/service/IDPSignInManager.cjs +29 -2
  67. package/dist/development/src/model/service/IDPSignInManager.cjs.map +1 -1
  68. package/dist/development/src/model/service/IDPSignInManager.js +29 -2
  69. package/dist/development/src/model/service/IDPSignInManager.js.map +1 -1
  70. package/dist/development/src/model/service/PanelAccessResolver.cjs +31 -0
  71. package/dist/development/src/model/service/PanelAccessResolver.cjs.map +1 -0
  72. package/dist/development/src/model/service/PanelAccessResolver.js +31 -0
  73. package/dist/development/src/model/service/PanelAccessResolver.js.map +1 -0
  74. package/dist/development/src/model/service/PersonAccessManager.cjs +10 -2
  75. package/dist/development/src/model/service/PersonAccessManager.cjs.map +1 -1
  76. package/dist/development/src/model/service/PersonAccessManager.js +10 -2
  77. package/dist/development/src/model/service/PersonAccessManager.js.map +1 -1
  78. package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
  79. package/dist/development/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  80. package/dist/development/src/model/service/apiKey/ApiKeyManager.js +4 -3
  81. package/dist/development/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  82. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
  83. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
  84. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
  85. package/dist/development/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
  86. package/dist/development/src/model/service/idp/ClaimMapping.cjs +187 -0
  87. package/dist/development/src/model/service/idp/ClaimMapping.cjs.map +1 -0
  88. package/dist/development/src/model/service/idp/ClaimMapping.js +170 -0
  89. package/dist/development/src/model/service/idp/ClaimMapping.js.map +1 -0
  90. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
  91. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
  92. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
  93. package/dist/development/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
  94. package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
  95. package/dist/development/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
  96. package/dist/development/src/model/service/idp/ClaimMappingValidation.js +83 -0
  97. package/dist/development/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
  98. package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
  99. package/dist/development/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
  100. package/dist/development/src/model/service/idp/IDPClaimSyncService.js +260 -0
  101. package/dist/development/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
  102. package/dist/development/src/model/service/idp/IDPManager.cjs +96 -20
  103. package/dist/development/src/model/service/idp/IDPManager.cjs.map +1 -1
  104. package/dist/development/src/model/service/idp/IDPManager.js +96 -20
  105. package/dist/development/src/model/service/idp/IDPManager.js.map +1 -1
  106. package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
  107. package/dist/development/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
  108. package/dist/development/src/model/service/idp/IdpSessionRevalidator.js +55 -1
  109. package/dist/development/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
  110. package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
  111. package/dist/development/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  112. package/dist/development/src/model/service/idp/providers/OIDCHelpers.js +69 -33
  113. package/dist/development/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  114. package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
  115. package/dist/development/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  116. package/dist/development/src/model/service/idp/providers/OIDCProvider.js +4 -1
  117. package/dist/development/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  118. package/dist/development/src/model/utils/DatabaseContext.cjs +7 -2
  119. package/dist/development/src/model/utils/DatabaseContext.cjs.map +1 -1
  120. package/dist/development/src/model/utils/DatabaseContext.js +8 -3
  121. package/dist/development/src/model/utils/DatabaseContext.js.map +1 -1
  122. package/dist/development/src/resolvers/ResolverFactory.cjs +6 -2
  123. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  124. package/dist/development/src/resolvers/ResolverFactory.js +6 -2
  125. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  126. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
  127. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  128. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
  129. package/dist/development/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  130. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +2 -1
  131. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  132. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
  133. package/dist/development/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  134. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
  135. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
  136. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
  137. package/dist/development/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
  138. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
  139. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  140. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
  141. package/dist/development/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  142. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
  143. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  144. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
  145. package/dist/development/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  146. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +2 -1
  147. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  148. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js +2 -1
  149. package/dist/development/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  150. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
  151. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  152. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
  153. package/dist/development/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  154. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
  155. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
  156. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
  157. package/dist/development/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
  158. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
  159. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  160. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
  161. package/dist/development/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  162. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +2 -1
  163. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  164. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +2 -1
  165. package/dist/development/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  166. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
  167. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  168. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
  169. package/dist/development/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  170. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
  171. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  172. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
  173. package/dist/development/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  174. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
  175. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  176. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
  177. package/dist/development/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  178. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
  179. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  180. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
  181. package/dist/development/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  182. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
  183. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
  184. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
  185. package/dist/development/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
  186. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
  187. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
  188. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
  189. package/dist/development/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
  190. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
  191. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
  192. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
  193. package/dist/development/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
  194. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
  195. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
  196. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
  197. package/dist/development/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
  198. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
  199. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  200. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
  201. package/dist/development/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  202. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
  203. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  204. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
  205. package/dist/development/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  206. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs +2 -1
  207. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  208. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
  209. package/dist/development/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  210. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +2 -1
  211. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  212. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js +2 -1
  213. package/dist/development/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  214. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
  215. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
  216. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
  217. package/dist/development/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
  218. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
  219. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  220. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
  221. package/dist/development/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  222. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
  223. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
  224. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
  225. package/dist/development/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
  226. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
  227. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
  228. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
  229. package/dist/development/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
  230. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs +2 -1
  231. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  232. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js +2 -1
  233. package/dist/development/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  234. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
  235. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  236. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
  237. package/dist/development/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  238. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
  239. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  240. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
  241. package/dist/development/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  242. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +2 -1
  243. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  244. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
  245. package/dist/development/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  246. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
  247. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  248. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
  249. package/dist/development/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  250. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +2 -1
  251. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  252. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
  253. package/dist/development/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  254. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
  255. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  256. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
  257. package/dist/development/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  258. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
  259. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  260. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
  261. package/dist/development/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  262. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
  263. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  264. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
  265. package/dist/development/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  266. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
  267. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  268. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
  269. package/dist/development/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  270. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
  271. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
  272. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
  273. package/dist/development/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
  274. package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
  275. package/dist/development/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
  276. package/dist/development/src/resolvers/query/AuthLogQueryResolver.js +2 -1
  277. package/dist/development/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
  278. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
  279. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
  280. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
  281. package/dist/development/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
  282. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
  283. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  284. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
  285. package/dist/development/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  286. package/dist/development/src/resolvers/query/IDPQueryResolver.cjs +2 -1
  287. package/dist/development/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  288. package/dist/development/src/resolvers/query/IDPQueryResolver.js +2 -1
  289. package/dist/development/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  290. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
  291. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  292. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
  293. package/dist/development/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  294. package/dist/development/src/resolvers/query/PersonQueryResolver.cjs +2 -1
  295. package/dist/development/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  296. package/dist/development/src/resolvers/query/PersonQueryResolver.js +2 -1
  297. package/dist/development/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  298. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
  299. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  300. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
  301. package/dist/development/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  302. package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
  303. package/dist/development/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  304. package/dist/development/src/resolvers/query/ProjectQueryResolver.js +5 -3
  305. package/dist/development/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  306. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
  307. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
  308. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
  309. package/dist/development/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
  310. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
  311. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  312. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
  313. package/dist/development/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  314. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
  315. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
  316. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
  317. package/dist/development/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
  318. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
  319. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  320. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
  321. package/dist/development/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  322. package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
  323. package/dist/development/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  324. package/dist/development/src/resolvers/types/IdentityTypeResolver.js +37 -4
  325. package/dist/development/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  326. package/dist/development/src/resolvers/types/PersonTypeResolver.cjs +30 -1
  327. package/dist/development/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
  328. package/dist/development/src/resolvers/types/PersonTypeResolver.js +30 -1
  329. package/dist/development/src/resolvers/types/PersonTypeResolver.js.map +1 -1
  330. package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
  331. package/dist/development/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  332. package/dist/development/src/resolvers/types/ProjectTypeResolver.js +25 -1
  333. package/dist/development/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  334. package/dist/development/src/schema/tenant.graphql.cjs +116 -0
  335. package/dist/development/src/schema/tenant.graphql.cjs.map +1 -1
  336. package/dist/development/src/schema/tenant.graphql.js +116 -0
  337. package/dist/development/src/schema/tenant.graphql.js.map +1 -1
  338. package/dist/production/index.cjs +30 -0
  339. package/dist/production/index.cjs.map +1 -1
  340. package/dist/production/index.js +31 -1
  341. package/dist/production/index.js.map +1 -1
  342. package/dist/production/src/TenantContainer.cjs +15 -3
  343. package/dist/production/src/TenantContainer.cjs.map +1 -1
  344. package/dist/production/src/TenantContainer.js +15 -3
  345. package/dist/production/src/TenantContainer.js.map +1 -1
  346. package/dist/production/src/bridges/system/IdentityFetcher.cjs +2 -1
  347. package/dist/production/src/bridges/system/IdentityFetcher.cjs.map +1 -1
  348. package/dist/production/src/bridges/system/IdentityFetcher.js +2 -1
  349. package/dist/production/src/bridges/system/IdentityFetcher.js.map +1 -1
  350. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs +10 -0
  351. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.cjs.map +1 -0
  352. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js +11 -0
  353. package/dist/production/src/migrations/2026-06-18-120000-idp-claim-mapping.js.map +1 -0
  354. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs +9 -0
  355. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.cjs.map +1 -0
  356. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js +10 -0
  357. package/dist/production/src/migrations/2026-08-03-120000-person-enable-auth-log.js.map +1 -0
  358. package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs +11 -0
  359. package/dist/production/src/migrations/2026-08-04-120000-config-panel.cjs.map +1 -0
  360. package/dist/production/src/migrations/2026-08-04-120000-config-panel.js +12 -0
  361. package/dist/production/src/migrations/2026-08-04-120000-config-panel.js.map +1 -0
  362. package/dist/production/src/migrations/runner.cjs +9 -2
  363. package/dist/production/src/migrations/runner.cjs.map +1 -1
  364. package/dist/production/src/migrations/runner.js +9 -2
  365. package/dist/production/src/migrations/runner.js.map +1 -1
  366. package/dist/production/src/migrations/snapshot.cjs +6 -1
  367. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  368. package/dist/production/src/migrations/snapshot.js +6 -1
  369. package/dist/production/src/migrations/snapshot.js.map +1 -1
  370. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs +5 -3
  371. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.cjs.map +1 -1
  372. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js +5 -3
  373. package/dist/production/src/model/commands/configuration/UpdateConfigurationCommand.js.map +1 -1
  374. package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.cjs → RemoveProjectMembershipCommand.cjs} +1 -1
  375. package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.cjs.map +1 -0
  376. package/dist/production/src/model/commands/membership/{RemoveProjectMembershipsCommand.js → RemoveProjectMembershipCommand.js} +1 -1
  377. package/dist/production/src/model/commands/membership/RemoveProjectMembershipCommand.js.map +1 -0
  378. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs +2 -2
  379. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.cjs.map +1 -1
  380. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js +1 -1
  381. package/dist/production/src/model/commands/membership/UpdateProjectMemberCommand.js.map +1 -1
  382. package/dist/production/src/model/commands/person/EnablePersonCommand.cjs +17 -0
  383. package/dist/production/src/model/commands/person/EnablePersonCommand.cjs.map +1 -0
  384. package/dist/production/src/model/commands/person/EnablePersonCommand.js +17 -0
  385. package/dist/production/src/model/commands/person/EnablePersonCommand.js.map +1 -0
  386. package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs +4 -0
  387. package/dist/production/src/model/queries/configuration/ConfigurationQuery.cjs.map +1 -1
  388. package/dist/production/src/model/queries/configuration/ConfigurationQuery.js +4 -0
  389. package/dist/production/src/model/queries/configuration/ConfigurationQuery.js.map +1 -1
  390. package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs +1 -1
  391. package/dist/production/src/model/queries/membership/ProjectMembersQuery.cjs.map +1 -1
  392. package/dist/production/src/model/queries/membership/ProjectMembersQuery.js +1 -1
  393. package/dist/production/src/model/queries/membership/ProjectMembersQuery.js.map +1 -1
  394. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs +1 -1
  395. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.cjs.map +1 -1
  396. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js +1 -1
  397. package/dist/production/src/model/queries/person/PersonQueryBuilderFactory.js.map +1 -1
  398. package/dist/production/src/model/service/AuthLogService.cjs +8 -2
  399. package/dist/production/src/model/service/AuthLogService.cjs.map +1 -1
  400. package/dist/production/src/model/service/AuthLogService.js +8 -2
  401. package/dist/production/src/model/service/AuthLogService.js.map +1 -1
  402. package/dist/production/src/model/service/IDPSignInManager.cjs +29 -2
  403. package/dist/production/src/model/service/IDPSignInManager.cjs.map +1 -1
  404. package/dist/production/src/model/service/IDPSignInManager.js +29 -2
  405. package/dist/production/src/model/service/IDPSignInManager.js.map +1 -1
  406. package/dist/production/src/model/service/PanelAccessResolver.cjs +31 -0
  407. package/dist/production/src/model/service/PanelAccessResolver.cjs.map +1 -0
  408. package/dist/production/src/model/service/PanelAccessResolver.js +31 -0
  409. package/dist/production/src/model/service/PanelAccessResolver.js.map +1 -0
  410. package/dist/production/src/model/service/PersonAccessManager.cjs +10 -2
  411. package/dist/production/src/model/service/PersonAccessManager.cjs.map +1 -1
  412. package/dist/production/src/model/service/PersonAccessManager.js +10 -2
  413. package/dist/production/src/model/service/PersonAccessManager.js.map +1 -1
  414. package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs +4 -3
  415. package/dist/production/src/model/service/apiKey/ApiKeyManager.cjs.map +1 -1
  416. package/dist/production/src/model/service/apiKey/ApiKeyManager.js +4 -3
  417. package/dist/production/src/model/service/apiKey/ApiKeyManager.js.map +1 -1
  418. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs +7 -0
  419. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.cjs.map +1 -1
  420. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js +8 -1
  421. package/dist/production/src/model/service/apiKey/UnpersistedApiKeyManager.js.map +1 -1
  422. package/dist/production/src/model/service/idp/ClaimMapping.cjs +187 -0
  423. package/dist/production/src/model/service/idp/ClaimMapping.cjs.map +1 -0
  424. package/dist/production/src/model/service/idp/ClaimMapping.js +170 -0
  425. package/dist/production/src/model/service/idp/ClaimMapping.js.map +1 -0
  426. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs +155 -0
  427. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.cjs.map +1 -0
  428. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js +155 -0
  429. package/dist/production/src/model/service/idp/ClaimMappingEvaluator.js.map +1 -0
  430. package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs +83 -0
  431. package/dist/production/src/model/service/idp/ClaimMappingValidation.cjs.map +1 -0
  432. package/dist/production/src/model/service/idp/ClaimMappingValidation.js +83 -0
  433. package/dist/production/src/model/service/idp/ClaimMappingValidation.js.map +1 -0
  434. package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs +260 -0
  435. package/dist/production/src/model/service/idp/IDPClaimSyncService.cjs.map +1 -0
  436. package/dist/production/src/model/service/idp/IDPClaimSyncService.js +260 -0
  437. package/dist/production/src/model/service/idp/IDPClaimSyncService.js.map +1 -0
  438. package/dist/production/src/model/service/idp/IDPManager.cjs +96 -20
  439. package/dist/production/src/model/service/idp/IDPManager.cjs.map +1 -1
  440. package/dist/production/src/model/service/idp/IDPManager.js +96 -20
  441. package/dist/production/src/model/service/idp/IDPManager.js.map +1 -1
  442. package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs +55 -1
  443. package/dist/production/src/model/service/idp/IdpSessionRevalidator.cjs.map +1 -1
  444. package/dist/production/src/model/service/idp/IdpSessionRevalidator.js +55 -1
  445. package/dist/production/src/model/service/idp/IdpSessionRevalidator.js.map +1 -1
  446. package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs +69 -33
  447. package/dist/production/src/model/service/idp/providers/OIDCHelpers.cjs.map +1 -1
  448. package/dist/production/src/model/service/idp/providers/OIDCHelpers.js +69 -33
  449. package/dist/production/src/model/service/idp/providers/OIDCHelpers.js.map +1 -1
  450. package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs +4 -1
  451. package/dist/production/src/model/service/idp/providers/OIDCProvider.cjs.map +1 -1
  452. package/dist/production/src/model/service/idp/providers/OIDCProvider.js +4 -1
  453. package/dist/production/src/model/service/idp/providers/OIDCProvider.js.map +1 -1
  454. package/dist/production/src/model/utils/DatabaseContext.cjs +7 -2
  455. package/dist/production/src/model/utils/DatabaseContext.cjs.map +1 -1
  456. package/dist/production/src/model/utils/DatabaseContext.js +8 -3
  457. package/dist/production/src/model/utils/DatabaseContext.js.map +1 -1
  458. package/dist/production/src/resolvers/ResolverFactory.cjs +6 -2
  459. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  460. package/dist/production/src/resolvers/ResolverFactory.js +6 -2
  461. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  462. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs +2 -1
  463. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.cjs.map +1 -1
  464. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js +2 -1
  465. package/dist/production/src/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.js.map +1 -1
  466. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs +2 -1
  467. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.cjs.map +1 -1
  468. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js +2 -1
  469. package/dist/production/src/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.js.map +1 -1
  470. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs +2 -1
  471. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.cjs.map +1 -1
  472. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js +2 -1
  473. package/dist/production/src/resolvers/mutation/configuration/AuthPolicyMutationResolver.js.map +1 -1
  474. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs +2 -1
  475. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.cjs.map +1 -1
  476. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js +2 -1
  477. package/dist/production/src/resolvers/mutation/configuration/ConfigurationMutationResolver.js.map +1 -1
  478. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs +2 -1
  479. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.cjs.map +1 -1
  480. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js +2 -1
  481. package/dist/production/src/resolvers/mutation/identity/GlobalRolesMutationResolver.js.map +1 -1
  482. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs +2 -1
  483. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.cjs.map +1 -1
  484. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js +2 -1
  485. package/dist/production/src/resolvers/mutation/idp/AddIDPMutationResolver.js.map +1 -1
  486. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs +2 -1
  487. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.cjs.map +1 -1
  488. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js +2 -1
  489. package/dist/production/src/resolvers/mutation/idp/DisableIDPMutationResolver.js.map +1 -1
  490. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs +2 -1
  491. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.cjs.map +1 -1
  492. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js +2 -1
  493. package/dist/production/src/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.js.map +1 -1
  494. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs +2 -1
  495. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.cjs.map +1 -1
  496. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js +2 -1
  497. package/dist/production/src/resolvers/mutation/idp/EnableIDPMutationResolver.js.map +1 -1
  498. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs +2 -1
  499. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.cjs.map +1 -1
  500. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js +2 -1
  501. package/dist/production/src/resolvers/mutation/idp/UpdateIDPMutationResolver.js.map +1 -1
  502. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs +2 -1
  503. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.cjs.map +1 -1
  504. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js +2 -1
  505. package/dist/production/src/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.js.map +1 -1
  506. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs +2 -1
  507. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.cjs.map +1 -1
  508. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js +2 -1
  509. package/dist/production/src/resolvers/mutation/person/ChangePasswordMutationResolver.js.map +1 -1
  510. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs +2 -1
  511. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.cjs.map +1 -1
  512. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js +2 -1
  513. package/dist/production/src/resolvers/mutation/person/ChangeProfileMutationResolver.js.map +1 -1
  514. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs +4 -3
  515. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.cjs.map +1 -1
  516. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js +4 -3
  517. package/dist/production/src/resolvers/mutation/person/DisablePersonMutationResolver.js.map +1 -1
  518. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs +2 -1
  519. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.cjs.map +1 -1
  520. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js +2 -1
  521. package/dist/production/src/resolvers/mutation/person/EmailOtpMutationResolver.js.map +1 -1
  522. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs +2 -1
  523. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.cjs.map +1 -1
  524. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js +2 -1
  525. package/dist/production/src/resolvers/mutation/person/EmailVerificationMutationResolver.js.map +1 -1
  526. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs +60 -0
  527. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.cjs.map +1 -0
  528. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js +60 -0
  529. package/dist/production/src/resolvers/mutation/person/EnablePersonMutationResolver.js.map +1 -0
  530. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs +2 -1
  531. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.cjs.map +1 -1
  532. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js +2 -1
  533. package/dist/production/src/resolvers/mutation/person/ForceSignOutMutationResolver.js.map +1 -1
  534. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs +27 -1
  535. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.cjs.map +1 -1
  536. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js +27 -1
  537. package/dist/production/src/resolvers/mutation/person/IDPMutationResolver.js.map +1 -1
  538. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs +2 -1
  539. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.cjs.map +1 -1
  540. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js +2 -1
  541. package/dist/production/src/resolvers/mutation/person/InviteMutationResolver.js.map +1 -1
  542. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs +2 -1
  543. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.cjs.map +1 -1
  544. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js +2 -1
  545. package/dist/production/src/resolvers/mutation/person/OtpMutationResolver.js.map +1 -1
  546. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs +2 -1
  547. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.cjs.map +1 -1
  548. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js +2 -1
  549. package/dist/production/src/resolvers/mutation/person/PasswordlessMutationResolver.js.map +1 -1
  550. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs +2 -1
  551. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.cjs.map +1 -1
  552. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js +2 -1
  553. package/dist/production/src/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.js.map +1 -1
  554. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs +2 -1
  555. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.cjs.map +1 -1
  556. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js +2 -1
  557. package/dist/production/src/resolvers/mutation/person/ResetPasswordMutationResolver.js.map +1 -1
  558. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs +2 -1
  559. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.cjs.map +1 -1
  560. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js +2 -1
  561. package/dist/production/src/resolvers/mutation/person/ResetPersonMfaMutationResolver.js.map +1 -1
  562. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs +2 -1
  563. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.cjs.map +1 -1
  564. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js +2 -1
  565. package/dist/production/src/resolvers/mutation/person/RevokeSessionMutationResolver.js.map +1 -1
  566. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs +2 -1
  567. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.cjs.map +1 -1
  568. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js +2 -1
  569. package/dist/production/src/resolvers/mutation/person/SignInMutationResolver.js.map +1 -1
  570. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs +2 -1
  571. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.cjs.map +1 -1
  572. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js +2 -1
  573. package/dist/production/src/resolvers/mutation/person/SignOutMutationResolver.js.map +1 -1
  574. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs +2 -1
  575. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.cjs.map +1 -1
  576. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js +2 -1
  577. package/dist/production/src/resolvers/mutation/person/SignUpMutationResolver.js.map +1 -1
  578. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs +2 -1
  579. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.cjs.map +1 -1
  580. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js +2 -1
  581. package/dist/production/src/resolvers/mutation/person/TogglePasswordlessMutationResolver.js.map +1 -1
  582. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs +2 -1
  583. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.cjs.map +1 -1
  584. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js +2 -1
  585. package/dist/production/src/resolvers/mutation/project/CreateProjectMutationResolver.js.map +1 -1
  586. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs +2 -1
  587. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.cjs.map +1 -1
  588. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js +2 -1
  589. package/dist/production/src/resolvers/mutation/project/SetProjectSecretMutationResolver.js.map +1 -1
  590. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs +2 -1
  591. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.cjs.map +1 -1
  592. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js +2 -1
  593. package/dist/production/src/resolvers/mutation/project/UpdateProjectMutationResolver.js.map +1 -1
  594. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs +2 -1
  595. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.cjs.map +1 -1
  596. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js +2 -1
  597. package/dist/production/src/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.js.map +1 -1
  598. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs +2 -1
  599. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.cjs.map +1 -1
  600. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js +2 -1
  601. package/dist/production/src/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.js.map +1 -1
  602. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs +2 -1
  603. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.cjs.map +1 -1
  604. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js +2 -1
  605. package/dist/production/src/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.js.map +1 -1
  606. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs +2 -1
  607. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.cjs.map +1 -1
  608. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js +2 -1
  609. package/dist/production/src/resolvers/query/ApiKeyQueryResolver.js.map +1 -1
  610. package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs +2 -1
  611. package/dist/production/src/resolvers/query/AuthLogQueryResolver.cjs.map +1 -1
  612. package/dist/production/src/resolvers/query/AuthLogQueryResolver.js +2 -1
  613. package/dist/production/src/resolvers/query/AuthLogQueryResolver.js.map +1 -1
  614. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs +2 -1
  615. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.cjs.map +1 -1
  616. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js +2 -1
  617. package/dist/production/src/resolvers/query/AuthPolicyQueryResolver.js.map +1 -1
  618. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs +2 -1
  619. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.cjs.map +1 -1
  620. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js +2 -1
  621. package/dist/production/src/resolvers/query/ConfigurationQueryResolver.js.map +1 -1
  622. package/dist/production/src/resolvers/query/IDPQueryResolver.cjs +2 -1
  623. package/dist/production/src/resolvers/query/IDPQueryResolver.cjs.map +1 -1
  624. package/dist/production/src/resolvers/query/IDPQueryResolver.js +2 -1
  625. package/dist/production/src/resolvers/query/IDPQueryResolver.js.map +1 -1
  626. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs +2 -1
  627. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.cjs.map +1 -1
  628. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js +2 -1
  629. package/dist/production/src/resolvers/query/MailTemplateQueryResolver.js.map +1 -1
  630. package/dist/production/src/resolvers/query/PersonQueryResolver.cjs +2 -1
  631. package/dist/production/src/resolvers/query/PersonQueryResolver.cjs.map +1 -1
  632. package/dist/production/src/resolvers/query/PersonQueryResolver.js +2 -1
  633. package/dist/production/src/resolvers/query/PersonQueryResolver.js.map +1 -1
  634. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs +2 -1
  635. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.cjs.map +1 -1
  636. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js +2 -1
  637. package/dist/production/src/resolvers/query/ProjectMembersQueryResolver.js.map +1 -1
  638. package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs +5 -3
  639. package/dist/production/src/resolvers/query/ProjectQueryResolver.cjs.map +1 -1
  640. package/dist/production/src/resolvers/query/ProjectQueryResolver.js +5 -3
  641. package/dist/production/src/resolvers/query/ProjectQueryResolver.js.map +1 -1
  642. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs +2 -1
  643. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.cjs.map +1 -1
  644. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js +2 -1
  645. package/dist/production/src/resolvers/responseHelpers/ApiKeyResponseFactory.js.map +1 -1
  646. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs +5 -0
  647. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.cjs.map +1 -1
  648. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js +5 -0
  649. package/dist/production/src/resolvers/responseHelpers/PersonResponseFactory.js.map +1 -1
  650. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs +23 -0
  651. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.cjs.map +1 -0
  652. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js +23 -0
  653. package/dist/production/src/resolvers/responseHelpers/ProjectResponseFactory.js.map +1 -0
  654. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs +2 -1
  655. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.cjs.map +1 -1
  656. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js +2 -1
  657. package/dist/production/src/resolvers/responseHelpers/SignInResponseFactory.js.map +1 -1
  658. package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs +37 -4
  659. package/dist/production/src/resolvers/types/IdentityTypeResolver.cjs.map +1 -1
  660. package/dist/production/src/resolvers/types/IdentityTypeResolver.js +37 -4
  661. package/dist/production/src/resolvers/types/IdentityTypeResolver.js.map +1 -1
  662. package/dist/production/src/resolvers/types/PersonTypeResolver.cjs +30 -1
  663. package/dist/production/src/resolvers/types/PersonTypeResolver.cjs.map +1 -1
  664. package/dist/production/src/resolvers/types/PersonTypeResolver.js +30 -1
  665. package/dist/production/src/resolvers/types/PersonTypeResolver.js.map +1 -1
  666. package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs +25 -1
  667. package/dist/production/src/resolvers/types/ProjectTypeResolver.cjs.map +1 -1
  668. package/dist/production/src/resolvers/types/ProjectTypeResolver.js +25 -1
  669. package/dist/production/src/resolvers/types/ProjectTypeResolver.js.map +1 -1
  670. package/dist/production/src/schema/tenant.graphql.cjs +116 -0
  671. package/dist/production/src/schema/tenant.graphql.cjs.map +1 -1
  672. package/dist/production/src/schema/tenant.graphql.js +116 -0
  673. package/dist/production/src/schema/tenant.graphql.js.map +1 -1
  674. package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts +2 -0
  675. package/dist/tests/cases/integration/mocked/configurationPanel.test.d.ts.map +1 -0
  676. package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts +2 -0
  677. package/dist/tests/cases/integration/mocked/disablePersonMutation.test.d.ts.map +1 -0
  678. package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts +2 -0
  679. package/dist/tests/cases/integration/mocked/enablePersonMutation.test.d.ts.map +1 -0
  680. package/dist/tests/cases/integration/mocked/gql/addProjectMember.d.ts.map +1 -1
  681. package/dist/tests/cases/integration/mocked/gql/changeMyPassword.d.ts.map +1 -1
  682. package/dist/tests/cases/integration/mocked/gql/changeMyProfile.d.ts.map +1 -1
  683. package/dist/tests/cases/integration/mocked/gql/changePassword.d.ts.map +1 -1
  684. package/dist/tests/cases/integration/mocked/gql/changeProfile.d.ts.map +1 -1
  685. package/dist/tests/cases/integration/mocked/gql/confirmOtp.d.ts.map +1 -1
  686. package/dist/tests/cases/integration/mocked/gql/createApiKey.d.ts.map +1 -1
  687. package/dist/tests/cases/integration/mocked/gql/createResetPasswordRequest.d.ts.map +1 -1
  688. package/dist/tests/cases/integration/mocked/gql/createSessionToken.d.ts.map +1 -1
  689. package/dist/tests/cases/integration/mocked/gql/emailOtp.d.ts.map +1 -1
  690. package/dist/tests/cases/integration/mocked/gql/emailVerification.d.ts.map +1 -1
  691. package/dist/tests/cases/integration/mocked/gql/invite.d.ts.map +1 -1
  692. package/dist/tests/cases/integration/mocked/gql/myIdentityProviders.d.ts.map +1 -1
  693. package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts +1 -1
  694. package/dist/tests/cases/integration/mocked/gql/passwordless.d.ts.map +1 -1
  695. package/dist/tests/cases/integration/mocked/gql/prepareOtp.d.ts.map +1 -1
  696. package/dist/tests/cases/integration/mocked/gql/resetPassword.d.ts.map +1 -1
  697. package/dist/tests/cases/integration/mocked/gql/signIn.d.ts.map +1 -1
  698. package/dist/tests/cases/integration/mocked/gql/signInIdp.d.ts.map +1 -1
  699. package/dist/tests/cases/integration/mocked/gql/signUp.d.ts.map +1 -1
  700. package/dist/tests/cases/integration/mocked/gql/unmanagedInvite.d.ts.map +1 -1
  701. package/dist/tests/cases/integration/mocked/gql/updateProjectMember.d.ts.map +1 -1
  702. package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts +2 -0
  703. package/dist/tests/cases/integration/mocked/idpClaimMappingConfig.test.d.ts.map +1 -0
  704. package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts +2 -0
  705. package/dist/tests/cases/integration/mocked/permissionsQuery.test.d.ts.map +1 -0
  706. package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts +2 -0
  707. package/dist/tests/cases/integration/mocked/signInIdpClaimMapping.test.d.ts.map +1 -0
  708. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts +2 -0
  709. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.d.ts.map +1 -0
  710. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts +2 -0
  711. package/dist/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.d.ts.map +1 -0
  712. package/dist/tests/cases/integration/mocked/sql/authLogSql.d.ts.map +1 -1
  713. package/dist/tests/cases/integration/mocked/sql/authPolicySql.d.ts.map +1 -1
  714. package/dist/tests/cases/integration/mocked/sql/consumeBackupCodeSql.d.ts.map +1 -1
  715. package/dist/tests/cases/integration/mocked/sql/createApiKeySql.d.ts.map +1 -1
  716. package/dist/tests/cases/integration/mocked/sql/createIdentitySql.d.ts.map +1 -1
  717. package/dist/tests/cases/integration/mocked/sql/createMembershipSql.d.ts.map +1 -1
  718. package/dist/tests/cases/integration/mocked/sql/createMembershipVariableSql.d.ts.map +1 -1
  719. package/dist/tests/cases/integration/mocked/sql/createPersonSql.d.ts.map +1 -1
  720. package/dist/tests/cases/integration/mocked/sql/createPersonTokenSql.d.ts.map +1 -1
  721. package/dist/tests/cases/integration/mocked/sql/createSessionKeySql.d.ts.map +1 -1
  722. package/dist/tests/cases/integration/mocked/sql/disableApiKeySql.d.ts.map +1 -1
  723. package/dist/tests/cases/integration/mocked/sql/disableOneOffKeySql.d.ts.map +1 -1
  724. package/dist/tests/cases/integration/mocked/sql/emailOtpSql.d.ts.map +1 -1
  725. package/dist/tests/cases/integration/mocked/sql/generateBackupCodesSql.d.ts.map +1 -1
  726. package/dist/tests/cases/integration/mocked/sql/getApiKeySql.d.ts.map +1 -1
  727. package/dist/tests/cases/integration/mocked/sql/getConfigSql.d.ts.map +1 -1
  728. package/dist/tests/cases/integration/mocked/sql/getIdentityByIdSql.d.ts.map +1 -1
  729. package/dist/tests/cases/integration/mocked/sql/getIdentityProjectsSql.d.ts.map +1 -1
  730. package/dist/tests/cases/integration/mocked/sql/getIdpBySlugSql.d.ts.map +1 -1
  731. package/dist/tests/cases/integration/mocked/sql/getIdpSessionByApiKeySql.d.ts.map +1 -1
  732. package/dist/tests/cases/integration/mocked/sql/getMailTemplateSql.d.ts.map +1 -1
  733. package/dist/tests/cases/integration/mocked/sql/getNextLoginAttemptSql.d.ts.map +1 -1
  734. package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts +1 -1
  735. package/dist/tests/cases/integration/mocked/sql/getNextMailAttemptSql.d.ts.map +1 -1
  736. package/dist/tests/cases/integration/mocked/sql/getPersonByEmailSql.d.ts.map +1 -1
  737. package/dist/tests/cases/integration/mocked/sql/getPersonByIdSql.d.ts.map +1 -1
  738. package/dist/tests/cases/integration/mocked/sql/getPersonByIdentity.d.ts.map +1 -1
  739. package/dist/tests/cases/integration/mocked/sql/getPersonByIdpSql.d.ts.map +1 -1
  740. package/dist/tests/cases/integration/mocked/sql/getPersonsByIdentitySql.d.ts.map +1 -1
  741. package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts +1 -1
  742. package/dist/tests/cases/integration/mocked/sql/getProjectBySlugSql.d.ts.map +1 -1
  743. package/dist/tests/cases/integration/mocked/sql/getProjectMembershipSql.d.ts.map +1 -1
  744. package/dist/tests/cases/integration/mocked/sql/listApiKeysSql.d.ts.map +1 -1
  745. package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts +2 -0
  746. package/dist/tests/cases/integration/mocked/sql/listPersonsSql.d.ts.map +1 -1
  747. package/dist/tests/cases/integration/mocked/sql/listProjectSecretsSql.d.ts.map +1 -1
  748. package/dist/tests/cases/integration/mocked/sql/listSessionsSql.d.ts.map +1 -1
  749. package/dist/tests/cases/integration/mocked/sql/loginHistorySql.d.ts.map +1 -1
  750. package/dist/tests/cases/integration/mocked/sql/patchVariablesSql.d.ts.map +1 -1
  751. package/dist/tests/cases/integration/mocked/sql/personIdentityProvidersSql.d.ts.map +1 -1
  752. package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts +8 -0
  753. package/dist/tests/cases/integration/mocked/sql/removeMembershipSql.d.ts.map +1 -0
  754. package/dist/tests/cases/integration/mocked/sql/selectMembershipsSql.d.ts.map +1 -1
  755. package/dist/tests/cases/integration/mocked/sql/setEmailOtpEnabledSql.d.ts.map +1 -1
  756. package/dist/tests/cases/integration/mocked/sql/sqlTransaction.d.ts.map +1 -1
  757. package/dist/tests/cases/integration/mocked/sql/updatePesonNameSql.d.ts.map +1 -1
  758. package/dist/tests/cases/integration/mocked/sql/updatePesonPasswordSql.d.ts.map +1 -1
  759. package/dist/tests/cases/unit/databaseContextRetry.test.d.ts +2 -0
  760. package/dist/tests/cases/unit/databaseContextRetry.test.d.ts.map +1 -0
  761. package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts +2 -0
  762. package/dist/tests/cases/unit/idp/claimMappingEvaluator.test.d.ts.map +1 -0
  763. package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts +2 -0
  764. package/dist/tests/cases/unit/idp/claimMappingValidation.test.d.ts.map +1 -0
  765. package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts +2 -0
  766. package/dist/tests/cases/unit/idp/idpManagerConfigMerge.test.d.ts.map +1 -0
  767. package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts +2 -0
  768. package/dist/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.d.ts.map +1 -0
  769. package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts +2 -0
  770. package/dist/tests/cases/unit/idp/oidcClaims.test.d.ts.map +1 -0
  771. package/dist/tests/cases/unit/panelAccessResolver.test.d.ts +2 -0
  772. package/dist/tests/cases/unit/panelAccessResolver.test.d.ts.map +1 -0
  773. package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts +2 -0
  774. package/dist/tests/cases/unit/updateConfigurationCommand.test.d.ts.map +1 -0
  775. package/dist/tests/src/IdPMock.d.ts.map +1 -1
  776. package/dist/tests/src/dbUtils.d.ts.map +1 -1
  777. package/dist/tests/src/tags.d.ts.map +1 -1
  778. package/dist/tests/src/testGraphql.d.ts.map +1 -1
  779. package/dist/tests/src/testTenant.d.ts +7 -1
  780. package/dist/tests/src/testTenant.d.ts.map +1 -1
  781. package/dist/tests/src/testUuid.d.ts.map +1 -1
  782. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  783. package/dist/types/TenantContainer.d.ts +21 -13
  784. package/dist/types/TenantContainer.d.ts.map +1 -1
  785. package/dist/types/bridges/system/IdentityFetcher.d.ts +2 -2
  786. package/dist/types/bridges/system/IdentityFetcher.d.ts.map +1 -1
  787. package/dist/types/exceptions.d.ts.map +1 -1
  788. package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts +3 -0
  789. package/dist/types/migrations/2026-06-18-120000-idp-claim-mapping.d.ts.map +1 -0
  790. package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts +3 -0
  791. package/dist/types/migrations/2026-08-03-120000-person-enable-auth-log.d.ts.map +1 -0
  792. package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts +3 -0
  793. package/dist/types/migrations/2026-08-04-120000-config-panel.d.ts.map +1 -0
  794. package/dist/types/migrations/runner.d.ts.map +1 -1
  795. package/dist/types/migrations/snapshot-factory.d.ts.map +1 -1
  796. package/dist/types/migrations/snapshot.d.ts.map +1 -1
  797. package/dist/types/migrations/tenantCredentials.d.ts.map +1 -1
  798. package/dist/types/model/authorization/AclSchemaAccessNodeFactory.d.ts.map +1 -1
  799. package/dist/types/model/authorization/DirectPermissionsAccessNode.d.ts.map +1 -1
  800. package/dist/types/model/authorization/Identity.d.ts.map +1 -1
  801. package/dist/types/model/authorization/IdentityFactory.d.ts.map +1 -1
  802. package/dist/types/model/authorization/IdentityScope.d.ts.map +1 -1
  803. package/dist/types/model/authorization/MembershipMatcher.d.ts.map +1 -1
  804. package/dist/types/model/authorization/PermissionActions.d.ts.map +1 -1
  805. package/dist/types/model/authorization/PermissionContext.d.ts.map +1 -1
  806. package/dist/types/model/authorization/PermissionContextFactory.d.ts.map +1 -1
  807. package/dist/types/model/authorization/PermissionsFactory.d.ts.map +1 -1
  808. package/dist/types/model/authorization/ProjectScope.d.ts.map +1 -1
  809. package/dist/types/model/authorization/ProjectScopeFactory.d.ts.map +1 -1
  810. package/dist/types/model/commands/CommandBus.d.ts.map +1 -1
  811. package/dist/types/model/commands/apiKey/ApiKeyHelper.d.ts.map +1 -1
  812. package/dist/types/model/commands/apiKey/CreateApiKeyCommand.d.ts.map +1 -1
  813. package/dist/types/model/commands/apiKey/DisableApiKeyCommand.d.ts.map +1 -1
  814. package/dist/types/model/commands/apiKey/DisableIdentityApiKeysCommand.d.ts.map +1 -1
  815. package/dist/types/model/commands/apiKey/DisableOneOffApiKeyCommand.d.ts.map +1 -1
  816. package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts +1 -1
  817. package/dist/types/model/commands/apiKey/ProlongApiKeyCommand.d.ts.map +1 -1
  818. package/dist/types/model/commands/authLog/CreateAuthLogEntryCommand.d.ts.map +1 -1
  819. package/dist/types/model/commands/authPolicy/CreateAuthPolicyCommand.d.ts.map +1 -1
  820. package/dist/types/model/commands/authPolicy/DeleteAuthPolicyCommand.d.ts.map +1 -1
  821. package/dist/types/model/commands/authPolicy/UpdateAuthPolicyCommand.d.ts.map +1 -1
  822. package/dist/types/model/commands/backupCode/ConsumeBackupCodeCommand.d.ts.map +1 -1
  823. package/dist/types/model/commands/backupCode/CreateBackupCodeCommand.d.ts.map +1 -1
  824. package/dist/types/model/commands/backupCode/DeleteBackupCodesCommand.d.ts.map +1 -1
  825. package/dist/types/model/commands/configuration/UpdateConfigurationCommand.d.ts.map +1 -1
  826. package/dist/types/model/commands/identity/CreateIdentityCommand.d.ts.map +1 -1
  827. package/dist/types/model/commands/identity/PatchIdentityGlobalRoles.d.ts.map +1 -1
  828. package/dist/types/model/commands/idp/ClaimIdpRevalidationCommand.d.ts.map +1 -1
  829. package/dist/types/model/commands/idp/CreateIdpCommand.d.ts.map +1 -1
  830. package/dist/types/model/commands/idp/CreateIdpSessionCommand.d.ts.map +1 -1
  831. package/dist/types/model/commands/idp/DisableIdpCommand.d.ts.map +1 -1
  832. package/dist/types/model/commands/idp/DisconnectPersonIdentityProviderCommand.d.ts.map +1 -1
  833. package/dist/types/model/commands/idp/EnableIdpCommand.d.ts.map +1 -1
  834. package/dist/types/model/commands/idp/UpdateIdpCommand.d.ts.map +1 -1
  835. package/dist/types/model/commands/idp/UpdateIdpSessionCommand.d.ts.map +1 -1
  836. package/dist/types/model/commands/mailTemplate/AddMailTemplateCommand.d.ts.map +1 -1
  837. package/dist/types/model/commands/mailTemplate/RemoveMailTemplateCommand.d.ts.map +1 -1
  838. package/dist/types/model/commands/membership/AddProjectMemberCommand.d.ts.map +1 -1
  839. package/dist/types/model/commands/membership/CreateOrUpdateProjectMembershipCommand.d.ts.map +1 -1
  840. package/dist/types/model/commands/membership/RemoveProjectMemberCommand.d.ts.map +1 -1
  841. package/dist/types/model/commands/membership/{RemoveProjectMembershipsCommand.d.ts → RemoveProjectMembershipCommand.d.ts} +1 -1
  842. package/dist/types/model/commands/membership/RemoveProjectMembershipCommand.d.ts.map +1 -0
  843. package/dist/types/model/commands/membership/UpdateProjectMemberCommand.d.ts.map +1 -1
  844. package/dist/types/model/commands/membership/index.d.ts +2 -1
  845. package/dist/types/model/commands/membership/index.d.ts.map +1 -1
  846. package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariableValuesCommand.d.ts.map +1 -1
  847. package/dist/types/model/commands/membership/variables/PatchProjectMembershipVariablesCommand.d.ts.map +1 -1
  848. package/dist/types/model/commands/membership/variables/SetProjectMembershipVariableValuesCommand.d.ts.map +1 -1
  849. package/dist/types/model/commands/membership/variables/index.d.ts +1 -0
  850. package/dist/types/model/commands/membership/variables/index.d.ts.map +1 -1
  851. package/dist/types/model/commands/otp/ConfirmOtpCommand.d.ts.map +1 -1
  852. package/dist/types/model/commands/otp/DisableOtpCommand.d.ts.map +1 -1
  853. package/dist/types/model/commands/otp/PrepareOtpCommand.d.ts.map +1 -1
  854. package/dist/types/model/commands/otp/ReEncryptOtpSecretCommand.d.ts.map +1 -1
  855. package/dist/types/model/commands/otp/SetEmailOtpEnabledCommand.d.ts.map +1 -1
  856. package/dist/types/model/commands/person/ChangePasswordCommand.d.ts.map +1 -1
  857. package/dist/types/model/commands/person/ChangeProfileCommand.d.ts.map +1 -1
  858. package/dist/types/model/commands/person/CreatePersonCommand.d.ts.map +1 -1
  859. package/dist/types/model/commands/person/CreatePersonIdentityProviderIdentifierCommand.d.ts.map +1 -1
  860. package/dist/types/model/commands/person/DisablePersonCommand.d.ts.map +1 -1
  861. package/dist/types/model/commands/person/EnablePersonCommand.d.ts +7 -0
  862. package/dist/types/model/commands/person/EnablePersonCommand.d.ts.map +1 -0
  863. package/dist/types/model/commands/person/MarkEmailVerifiedCommand.d.ts.map +1 -1
  864. package/dist/types/model/commands/person/ResetPersonMfaCommand.d.ts.map +1 -1
  865. package/dist/types/model/commands/person/SetMfaGraceUntilCommand.d.ts.map +1 -1
  866. package/dist/types/model/commands/person/TogglePersonPasswordlessCommand.d.ts.map +1 -1
  867. package/dist/types/model/commands/personToken/ActivateOtpCommand.d.ts.map +1 -1
  868. package/dist/types/model/commands/personToken/ClaimOtpAttemptCommand.d.ts.map +1 -1
  869. package/dist/types/model/commands/personToken/CreatePersonTokenCommand.d.ts.map +1 -1
  870. package/dist/types/model/commands/personToken/IncreaseOtpAttemptCommand.d.ts.map +1 -1
  871. package/dist/types/model/commands/personToken/InvalidateEmailOtpTokensCommand.d.ts.map +1 -1
  872. package/dist/types/model/commands/personToken/InvalidateTokenCommand.d.ts.map +1 -1
  873. package/dist/types/model/commands/personToken/ResetPasswordCommand.d.ts.map +1 -1
  874. package/dist/types/model/commands/personToken/SaveEmailOtpTokenCommand.d.ts.map +1 -1
  875. package/dist/types/model/commands/personToken/SavePersonTokenCommand.d.ts.map +1 -1
  876. package/dist/types/model/commands/project/CreateProjectCommand.d.ts.map +1 -1
  877. package/dist/types/model/commands/project/SetProjectSecretCommand.d.ts.map +1 -1
  878. package/dist/types/model/commands/project/UpdateProjectCommand.d.ts.map +1 -1
  879. package/dist/types/model/commands/rateLimit/RecordRateLimitEventCommand.d.ts.map +1 -1
  880. package/dist/types/model/dtos/Password.d.ts.map +1 -1
  881. package/dist/types/model/mailing/UserMailer.d.ts.map +1 -1
  882. package/dist/types/model/mailing/templates/BackupCodesExhausted.mustache.d.ts.map +1 -1
  883. package/dist/types/model/mailing/templates/EmailChangeNotify.mustache.d.ts.map +1 -1
  884. package/dist/types/model/mailing/templates/EmailChangeVerify.mustache.d.ts.map +1 -1
  885. package/dist/types/model/mailing/templates/EmailOtp.mustache.d.ts.map +1 -1
  886. package/dist/types/model/mailing/templates/EmailVerification.mustache.d.ts.map +1 -1
  887. package/dist/types/model/mailing/templates/ExistingUserInvited.mustache.d.ts.map +1 -1
  888. package/dist/types/model/mailing/templates/ForcedSignOut.mustache.d.ts.map +1 -1
  889. package/dist/types/model/mailing/templates/Layout.mustache.d.ts.map +1 -1
  890. package/dist/types/model/mailing/templates/NewUserInvited.mustache.d.ts.map +1 -1
  891. package/dist/types/model/mailing/templates/PasswordReset.mustache.d.ts.map +1 -1
  892. package/dist/types/model/mailing/templates/PasswordlessSignIn.mustache.d.ts.map +1 -1
  893. package/dist/types/model/mailing/templates/UnusualLogin.mustache.d.ts.map +1 -1
  894. package/dist/types/model/mailing/type.d.ts.map +1 -1
  895. package/dist/types/model/queries/apiKey/ApiKeyListQuery.d.ts.map +1 -1
  896. package/dist/types/model/queries/apiKey/ApiKeyQuery.d.ts.map +1 -1
  897. package/dist/types/model/queries/apiKey/ApiKeySessionsQuery.d.ts.map +1 -1
  898. package/dist/types/model/queries/authLog/AuthLogQuery.d.ts.map +1 -1
  899. package/dist/types/model/queries/authLog/NextLoginAttemptQuery.d.ts.map +1 -1
  900. package/dist/types/model/queries/authLog/NextMailAttemptQuery.d.ts.map +1 -1
  901. package/dist/types/model/queries/authPolicy/AuthPoliciesQuery.d.ts.map +1 -1
  902. package/dist/types/model/queries/configuration/ConfigurationQuery.d.ts.map +1 -1
  903. package/dist/types/model/queries/identity/IdentityQuery.d.ts.map +1 -1
  904. package/dist/types/model/queries/idp/IdentityProviderBySlugQuery.d.ts.map +1 -1
  905. package/dist/types/model/queries/idp/IdentityProvidersQuery.d.ts.map +1 -1
  906. package/dist/types/model/queries/idp/IdpSessionByApiKeyQuery.d.ts.map +1 -1
  907. package/dist/types/model/queries/idp/IdpSessionsBySidQuery.d.ts.map +1 -1
  908. package/dist/types/model/queries/idp/IdpSessionsBySubQuery.d.ts.map +1 -1
  909. package/dist/types/model/queries/idp/PersonIdentityProvidersQuery.d.ts.map +1 -1
  910. package/dist/types/model/queries/idp/helpers.d.ts.map +1 -1
  911. package/dist/types/model/queries/mailTemplate/MailTemplateListQuery.d.ts.map +1 -1
  912. package/dist/types/model/queries/mailTemplate/MailTemplateQuery.d.ts.map +1 -1
  913. package/dist/types/model/queries/membership/AllProjectRolesByIdentityQuery.d.ts.map +1 -1
  914. package/dist/types/model/queries/membership/ProjectMembersQuery.d.ts.map +1 -1
  915. package/dist/types/model/queries/membership/ProjectMembershipByIdentityQuery.d.ts.map +1 -1
  916. package/dist/types/model/queries/membership/ProjectRolesByIdentityQuery.d.ts.map +1 -1
  917. package/dist/types/model/queries/membership/ProjectSlugSpecification.d.ts.map +1 -1
  918. package/dist/types/model/queries/person/PersonByIdPQuery.d.ts.map +1 -1
  919. package/dist/types/model/queries/person/PersonByIdentityBatchQuery.d.ts.map +1 -1
  920. package/dist/types/model/queries/person/PersonQuery.d.ts.map +1 -1
  921. package/dist/types/model/queries/person/PersonQueryBuilderFactory.d.ts.map +1 -1
  922. package/dist/types/model/queries/person/PersonsQuery.d.ts.map +1 -1
  923. package/dist/types/model/queries/person/types.d.ts +1 -0
  924. package/dist/types/model/queries/person/types.d.ts.map +1 -1
  925. package/dist/types/model/queries/personToken/PersonTokenQuery.d.ts.map +1 -1
  926. package/dist/types/model/queries/project/ProjectBySlugQuery.d.ts.map +1 -1
  927. package/dist/types/model/queries/project/ProjectSecretKeysQuery.d.ts.map +1 -1
  928. package/dist/types/model/queries/project/ProjectSecretsQuery.d.ts.map +1 -1
  929. package/dist/types/model/queries/project/ProjectUpdateTimestampQuery.d.ts.map +1 -1
  930. package/dist/types/model/queries/project/ProjectsByIdentityQuery.d.ts.map +1 -1
  931. package/dist/types/model/queries/project/ProjectsQuery.d.ts.map +1 -1
  932. package/dist/types/model/queries/rateLimit/RateLimitCountQuery.d.ts.map +1 -1
  933. package/dist/types/model/service/AuthLogService.d.ts.map +1 -1
  934. package/dist/types/model/service/AuthPolicyManager.d.ts.map +1 -1
  935. package/dist/types/model/service/AuthPolicyResolver.d.ts.map +1 -1
  936. package/dist/types/model/service/BackupCodeManager.d.ts.map +1 -1
  937. package/dist/types/model/service/ConfigurationManager.d.ts.map +1 -1
  938. package/dist/types/model/service/EmailChangeManager.d.ts.map +1 -1
  939. package/dist/types/model/service/EmailOtpManager.d.ts.map +1 -1
  940. package/dist/types/model/service/EmailValidator.d.ts.map +1 -1
  941. package/dist/types/model/service/EmailVerificationManager.d.ts.map +1 -1
  942. package/dist/types/model/service/HibpChecker.d.ts.map +1 -1
  943. package/dist/types/model/service/IDPSignInManager.d.ts +11 -1
  944. package/dist/types/model/service/IDPSignInManager.d.ts.map +1 -1
  945. package/dist/types/model/service/InviteManager.d.ts.map +1 -1
  946. package/dist/types/model/service/LoginRiskAnalyzer.d.ts +1 -1
  947. package/dist/types/model/service/LoginRiskAnalyzer.d.ts.map +1 -1
  948. package/dist/types/model/service/MailTemplateManager.d.ts.map +1 -1
  949. package/dist/types/model/service/MembershipValidator.d.ts.map +1 -1
  950. package/dist/types/model/service/OtpAuthenticator.d.ts.map +1 -1
  951. package/dist/types/model/service/OtpManager.d.ts.map +1 -1
  952. package/dist/types/model/service/PanelAccessResolver.d.ts +19 -0
  953. package/dist/types/model/service/PanelAccessResolver.d.ts.map +1 -0
  954. package/dist/types/model/service/PasswordChangeManager.d.ts.map +1 -1
  955. package/dist/types/model/service/PasswordResetManager.d.ts.map +1 -1
  956. package/dist/types/model/service/PasswordStrengthValidator.d.ts.map +1 -1
  957. package/dist/types/model/service/PasswordlessSignInManager.d.ts.map +1 -1
  958. package/dist/types/model/service/PersonAccessManager.d.ts +5 -2
  959. package/dist/types/model/service/PersonAccessManager.d.ts.map +1 -1
  960. package/dist/types/model/service/PersonManager.d.ts.map +1 -1
  961. package/dist/types/model/service/ProjectManager.d.ts.map +1 -1
  962. package/dist/types/model/service/ProjectMemberManager.d.ts.map +1 -1
  963. package/dist/types/model/service/RateLimiter.d.ts.map +1 -1
  964. package/dist/types/model/service/RolesManager.d.ts.map +1 -1
  965. package/dist/types/model/service/SecretsManager.d.ts.map +1 -1
  966. package/dist/types/model/service/SignInManager.d.ts.map +1 -1
  967. package/dist/types/model/service/SignOutManager.d.ts.map +1 -1
  968. package/dist/types/model/service/SignUpManager.d.ts.map +1 -1
  969. package/dist/types/model/service/apiKey/ApiKeyManager.d.ts.map +1 -1
  970. package/dist/types/model/service/apiKey/ApiKeyService.d.ts.map +1 -1
  971. package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts +18 -0
  972. package/dist/types/model/service/apiKey/UnpersistedApiKeyManager.d.ts.map +1 -1
  973. package/dist/types/model/service/captcha/CaptchaValidator.d.ts.map +1 -1
  974. package/dist/types/model/service/captcha/HCaptchaProvider.d.ts.map +1 -1
  975. package/dist/types/model/service/captcha/RecaptchaV3Provider.d.ts.map +1 -1
  976. package/dist/types/model/service/captcha/TurnstileProvider.d.ts.map +1 -1
  977. package/dist/types/model/service/helpers/getPreferredProject.d.ts.map +1 -1
  978. package/dist/types/model/service/helpers/isPasswordlessEnabled.d.ts.map +1 -1
  979. package/dist/types/model/service/idp/BackchannelLogoutManager.d.ts.map +1 -1
  980. package/dist/types/model/service/idp/ClaimMapping.d.ts +330 -0
  981. package/dist/types/model/service/idp/ClaimMapping.d.ts.map +1 -0
  982. package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts +30 -0
  983. package/dist/types/model/service/idp/ClaimMappingEvaluator.d.ts.map +1 -0
  984. package/dist/types/model/service/idp/ClaimMappingValidation.d.ts +55 -0
  985. package/dist/types/model/service/idp/ClaimMappingValidation.d.ts.map +1 -0
  986. package/dist/types/model/service/idp/IDPClaimSyncService.d.ts +113 -0
  987. package/dist/types/model/service/idp/IDPClaimSyncService.d.ts.map +1 -0
  988. package/dist/types/model/service/idp/IDPHandlerRegistry.d.ts.map +1 -1
  989. package/dist/types/model/service/idp/IDPManager.d.ts +31 -1
  990. package/dist/types/model/service/idp/IDPManager.d.ts.map +1 -1
  991. package/dist/types/model/service/idp/IdentityProviderHandler.d.ts +7 -0
  992. package/dist/types/model/service/idp/IdentityProviderHandler.d.ts.map +1 -1
  993. package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts +13 -1
  994. package/dist/types/model/service/idp/IdpSessionRevalidator.d.ts.map +1 -1
  995. package/dist/types/model/service/idp/PersonIdentityProviderManager.d.ts.map +1 -1
  996. package/dist/types/model/service/idp/index.d.ts +4 -0
  997. package/dist/types/model/service/idp/index.d.ts.map +1 -1
  998. package/dist/types/model/service/idp/providers/AppleProvider.d.ts +2 -2
  999. package/dist/types/model/service/idp/providers/AppleProvider.d.ts.map +1 -1
  1000. package/dist/types/model/service/idp/providers/FacebookProvider.d.ts +2 -2
  1001. package/dist/types/model/service/idp/providers/FacebookProvider.d.ts.map +1 -1
  1002. package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts +13 -1
  1003. package/dist/types/model/service/idp/providers/OIDCHelpers.d.ts.map +1 -1
  1004. package/dist/types/model/service/idp/providers/OIDCProvider.d.ts +1 -1
  1005. package/dist/types/model/service/idp/providers/OIDCProvider.d.ts.map +1 -1
  1006. package/dist/types/model/service/idp/providers/OIDCTypes.d.ts +5 -5
  1007. package/dist/types/model/service/idp/providers/helpers.d.ts.map +1 -1
  1008. package/dist/types/model/service/index.d.ts +1 -0
  1009. package/dist/types/model/service/index.d.ts.map +1 -1
  1010. package/dist/types/model/service/membershipUtils.d.ts.map +1 -1
  1011. package/dist/types/model/type/AuthLog.d.ts +1 -1
  1012. package/dist/types/model/type/AuthLog.d.ts.map +1 -1
  1013. package/dist/types/model/type/Config.d.ts +2 -0
  1014. package/dist/types/model/type/Config.d.ts.map +1 -1
  1015. package/dist/types/model/type/RateLimit.d.ts +6 -6
  1016. package/dist/types/model/type/RateLimit.d.ts.map +1 -1
  1017. package/dist/types/model/utils/DatabaseContext.d.ts +14 -1
  1018. package/dist/types/model/utils/DatabaseContext.d.ts.map +1 -1
  1019. package/dist/types/model/utils/Response.d.ts.map +1 -1
  1020. package/dist/types/model/utils/email.d.ts.map +1 -1
  1021. package/dist/types/model/utils/hex.d.ts.map +1 -1
  1022. package/dist/types/model/utils/interval.d.ts.map +1 -1
  1023. package/dist/types/model/utils/time.d.ts.map +1 -1
  1024. package/dist/types/model/utils/token.d.ts.map +1 -1
  1025. package/dist/types/resolvers/ResolverFactory.d.ts +2 -0
  1026. package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
  1027. package/dist/types/resolvers/TenantResolverContextFactory.d.ts.map +1 -1
  1028. package/dist/types/resolvers/errorUtils.d.ts.map +1 -1
  1029. package/dist/types/resolvers/membershipUtils.d.ts.map +1 -1
  1030. package/dist/types/resolvers/mutation/apiKey/CreateApiKeyMutationResolver.d.ts.map +1 -1
  1031. package/dist/types/resolvers/mutation/apiKey/DisableApiKeyMutationResolver.d.ts.map +1 -1
  1032. package/dist/types/resolvers/mutation/configuration/AuthPolicyMutationResolver.d.ts.map +1 -1
  1033. package/dist/types/resolvers/mutation/configuration/ConfigurationMutationResolver.d.ts.map +1 -1
  1034. package/dist/types/resolvers/mutation/identity/GlobalRolesMutationResolver.d.ts.map +1 -1
  1035. package/dist/types/resolvers/mutation/idp/AddIDPMutationResolver.d.ts.map +1 -1
  1036. package/dist/types/resolvers/mutation/idp/DisableIDPMutationResolver.d.ts.map +1 -1
  1037. package/dist/types/resolvers/mutation/idp/DisconnectMyIdentityProviderMutationResolver.d.ts.map +1 -1
  1038. package/dist/types/resolvers/mutation/idp/EnableIDPMutationResolver.d.ts.map +1 -1
  1039. package/dist/types/resolvers/mutation/idp/UpdateIDPMutationResolver.d.ts.map +1 -1
  1040. package/dist/types/resolvers/mutation/idp/audit.d.ts.map +1 -1
  1041. package/dist/types/resolvers/mutation/mailTemplates/MailTemplateMutationResolver.d.ts.map +1 -1
  1042. package/dist/types/resolvers/mutation/person/ChangePasswordMutationResolver.d.ts.map +1 -1
  1043. package/dist/types/resolvers/mutation/person/ChangeProfileMutationResolver.d.ts.map +1 -1
  1044. package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts +1 -1
  1045. package/dist/types/resolvers/mutation/person/DisablePersonMutationResolver.d.ts.map +1 -1
  1046. package/dist/types/resolvers/mutation/person/EmailOtpMutationResolver.d.ts.map +1 -1
  1047. package/dist/types/resolvers/mutation/person/EmailVerificationMutationResolver.d.ts.map +1 -1
  1048. package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts +11 -0
  1049. package/dist/types/resolvers/mutation/person/EnablePersonMutationResolver.d.ts.map +1 -0
  1050. package/dist/types/resolvers/mutation/person/ForceSignOutMutationResolver.d.ts.map +1 -1
  1051. package/dist/types/resolvers/mutation/person/IDPMutationResolver.d.ts.map +1 -1
  1052. package/dist/types/resolvers/mutation/person/InviteMutationResolver.d.ts.map +1 -1
  1053. package/dist/types/resolvers/mutation/person/OtpMutationResolver.d.ts.map +1 -1
  1054. package/dist/types/resolvers/mutation/person/PasswordlessMutationResolver.d.ts.map +1 -1
  1055. package/dist/types/resolvers/mutation/person/RegenerateBackupCodesMutationResolver.d.ts.map +1 -1
  1056. package/dist/types/resolvers/mutation/person/ResetPasswordMutationResolver.d.ts.map +1 -1
  1057. package/dist/types/resolvers/mutation/person/ResetPersonMfaMutationResolver.d.ts.map +1 -1
  1058. package/dist/types/resolvers/mutation/person/RevokeSessionMutationResolver.d.ts.map +1 -1
  1059. package/dist/types/resolvers/mutation/person/SignInMutationResolver.d.ts.map +1 -1
  1060. package/dist/types/resolvers/mutation/person/SignOutMutationResolver.d.ts.map +1 -1
  1061. package/dist/types/resolvers/mutation/person/SignUpMutationResolver.d.ts.map +1 -1
  1062. package/dist/types/resolvers/mutation/person/TogglePasswordlessMutationResolver.d.ts.map +1 -1
  1063. package/dist/types/resolvers/mutation/project/CreateProjectMutationResolver.d.ts.map +1 -1
  1064. package/dist/types/resolvers/mutation/project/SetProjectSecretMutationResolver.d.ts.map +1 -1
  1065. package/dist/types/resolvers/mutation/project/UpdateProjectMutationResolver.d.ts.map +1 -1
  1066. package/dist/types/resolvers/mutation/projectMember/AddProjectMemberMutationResolver.d.ts.map +1 -1
  1067. package/dist/types/resolvers/mutation/projectMember/RemoveProjectMemberMutationResolver.d.ts.map +1 -1
  1068. package/dist/types/resolvers/mutation/projectMember/UpdateProjectMemberMutationResolver.d.ts.map +1 -1
  1069. package/dist/types/resolvers/mutation/projectMember/audit.d.ts +1 -1
  1070. package/dist/types/resolvers/mutation/projectMember/audit.d.ts.map +1 -1
  1071. package/dist/types/resolvers/query/ApiKeyQueryResolver.d.ts.map +1 -1
  1072. package/dist/types/resolvers/query/AuthLogQueryResolver.d.ts.map +1 -1
  1073. package/dist/types/resolvers/query/AuthPolicyQueryResolver.d.ts.map +1 -1
  1074. package/dist/types/resolvers/query/ConfigurationQueryResolver.d.ts.map +1 -1
  1075. package/dist/types/resolvers/query/IDPQueryResolver.d.ts.map +1 -1
  1076. package/dist/types/resolvers/query/MailTemplateQueryResolver.d.ts.map +1 -1
  1077. package/dist/types/resolvers/query/MeQueryResolver.d.ts.map +1 -1
  1078. package/dist/types/resolvers/query/PersonQueryResolver.d.ts.map +1 -1
  1079. package/dist/types/resolvers/query/ProjectMembersQueryResolver.d.ts.map +1 -1
  1080. package/dist/types/resolvers/query/ProjectQueryResolver.d.ts.map +1 -1
  1081. package/dist/types/resolvers/responseHelpers/ApiKeyResponseFactory.d.ts.map +1 -1
  1082. package/dist/types/resolvers/responseHelpers/PersonResponseFactory.d.ts.map +1 -1
  1083. package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts +10 -0
  1084. package/dist/types/resolvers/responseHelpers/ProjectResponseFactory.d.ts.map +1 -0
  1085. package/dist/types/resolvers/responseHelpers/SignInResponseFactory.d.ts.map +1 -1
  1086. package/dist/types/resolvers/types/IdentityTypeResolver.d.ts.map +1 -1
  1087. package/dist/types/resolvers/types/PersonTypeResolver.d.ts +15 -1
  1088. package/dist/types/resolvers/types/PersonTypeResolver.d.ts.map +1 -1
  1089. package/dist/types/resolvers/types/ProjectTypeResolver.d.ts +15 -6
  1090. package/dist/types/resolvers/types/ProjectTypeResolver.d.ts.map +1 -1
  1091. package/dist/types/schema/index.d.ts +161 -0
  1092. package/dist/types/schema/index.d.ts.map +1 -1
  1093. package/dist/types/schema/tenant.graphql.d.ts.map +1 -1
  1094. package/dist/types/schema/types.d.ts +2 -2
  1095. package/dist/types/schema/types.d.ts.map +1 -1
  1096. package/dist/types/tsconfig.tsbuildinfo +1 -1
  1097. package/dist/types/utils/Mailer.d.ts.map +1 -1
  1098. package/dist/types/utils/TemplateRenderer.d.ts.map +1 -1
  1099. package/dist/types/utils/array.d.ts.map +1 -1
  1100. package/dist/types/utils/batchQuery.d.ts.map +1 -1
  1101. package/package.json +12 -12
  1102. package/src/TenantContainer.ts +17 -3
  1103. package/src/migrations/2026-06-18-120000-idp-claim-mapping.ts +15 -0
  1104. package/src/migrations/2026-08-03-120000-person-enable-auth-log.ts +12 -0
  1105. package/src/migrations/2026-08-04-120000-config-panel.ts +13 -0
  1106. package/src/migrations/runner.ts +6 -0
  1107. package/src/migrations/snapshot.ts +6 -1
  1108. package/src/model/commands/configuration/UpdateConfigurationCommand.ts +5 -4
  1109. package/src/model/commands/membership/UpdateProjectMemberCommand.ts +1 -1
  1110. package/src/model/commands/membership/index.ts +2 -1
  1111. package/src/model/commands/membership/variables/index.ts +1 -0
  1112. package/src/model/commands/person/EnablePersonCommand.ts +18 -0
  1113. package/src/model/queries/configuration/ConfigurationQuery.ts +4 -0
  1114. package/src/model/queries/membership/ProjectMembersQuery.ts +1 -0
  1115. package/src/model/queries/person/PersonQueryBuilderFactory.ts +1 -0
  1116. package/src/model/queries/person/types.ts +1 -0
  1117. package/src/model/service/AuthLogService.ts +18 -2
  1118. package/src/model/service/IDPSignInManager.ts +49 -1
  1119. package/src/model/service/PanelAccessResolver.ts +32 -0
  1120. package/src/model/service/PersonAccessManager.ts +19 -3
  1121. package/src/model/service/apiKey/ApiKeyManager.ts +5 -3
  1122. package/src/model/service/apiKey/UnpersistedApiKeyManager.ts +24 -0
  1123. package/src/model/service/idp/ClaimMapping.ts +283 -0
  1124. package/src/model/service/idp/ClaimMappingEvaluator.ts +226 -0
  1125. package/src/model/service/idp/ClaimMappingValidation.ts +158 -0
  1126. package/src/model/service/idp/IDPClaimSyncService.ts +401 -0
  1127. package/src/model/service/idp/IDPManager.ts +126 -21
  1128. package/src/model/service/idp/IdentityProviderHandler.ts +7 -0
  1129. package/src/model/service/idp/IdpSessionRevalidator.ts +90 -0
  1130. package/src/model/service/idp/index.ts +4 -0
  1131. package/src/model/service/idp/providers/OIDCHelpers.ts +161 -53
  1132. package/src/model/service/idp/providers/OIDCProvider.ts +4 -1
  1133. package/src/model/service/index.ts +1 -0
  1134. package/src/model/type/AuthLog.ts +3 -0
  1135. package/src/model/type/Config.ts +3 -0
  1136. package/src/model/utils/DatabaseContext.ts +27 -6
  1137. package/src/resolvers/ResolverFactory.ts +6 -0
  1138. package/src/resolvers/mutation/person/DisablePersonMutationResolver.ts +3 -3
  1139. package/src/resolvers/mutation/person/EnablePersonMutationResolver.ts +50 -0
  1140. package/src/resolvers/mutation/person/IDPMutationResolver.ts +31 -0
  1141. package/src/resolvers/query/ProjectQueryResolver.ts +3 -2
  1142. package/src/resolvers/responseHelpers/PersonResponseFactory.ts +5 -0
  1143. package/src/resolvers/responseHelpers/ProjectResponseFactory.ts +24 -0
  1144. package/src/resolvers/types/IdentityTypeResolver.ts +39 -3
  1145. package/src/resolvers/types/PersonTypeResolver.ts +35 -2
  1146. package/src/resolvers/types/ProjectTypeResolver.ts +33 -1
  1147. package/src/schema/index.ts +183 -0
  1148. package/src/schema/tenant.graphql.ts +116 -0
  1149. package/tests/cases/integration/mocked/configurationPanel.test.ts +105 -0
  1150. package/tests/cases/integration/mocked/disablePersonMutation.test.ts +89 -0
  1151. package/tests/cases/integration/mocked/enablePersonMutation.test.ts +130 -0
  1152. package/tests/cases/integration/mocked/idpClaimMappingConfig.test.ts +332 -0
  1153. package/tests/cases/integration/mocked/listProjectMembersQuery.test.ts +8 -3
  1154. package/tests/cases/integration/mocked/permissionsQuery.test.ts +153 -0
  1155. package/tests/cases/integration/mocked/personsQuery.test.ts +38 -5
  1156. package/tests/cases/integration/mocked/signInIdpClaimMapping.test.ts +1244 -0
  1157. package/tests/cases/integration/mocked/signInIdpClaimMappingFixes.test.ts +340 -0
  1158. package/tests/cases/integration/mocked/signInIdpClaimMappingSafety.test.ts +525 -0
  1159. package/tests/cases/integration/mocked/sql/getConfigSql.ts +3 -0
  1160. package/tests/cases/integration/mocked/sql/getProjectBySlugSql.ts +1 -1
  1161. package/tests/cases/integration/mocked/sql/listPersonsSql.ts +5 -2
  1162. package/tests/cases/integration/mocked/sql/removeMembershipSql.ts +14 -0
  1163. package/tests/cases/unit/databaseContextRetry.test.ts +81 -0
  1164. package/tests/cases/unit/idp/claimMappingEvaluator.test.ts +554 -0
  1165. package/tests/cases/unit/idp/claimMappingValidation.test.ts +134 -0
  1166. package/tests/cases/unit/idp/idpManagerConfigMerge.test.ts +97 -0
  1167. package/tests/cases/unit/idp/idpManagerUnknownConfigKeys.test.ts +101 -0
  1168. package/tests/cases/unit/idp/idpSessionRevalidator.test.ts +226 -24
  1169. package/tests/cases/unit/idp/oidcClaims.test.ts +29 -0
  1170. package/tests/cases/unit/idp/oidcResponse.test.ts +54 -0
  1171. package/tests/cases/unit/idp/oidcRevalidate.test.ts +94 -2
  1172. package/tests/cases/unit/panelAccessResolver.test.ts +57 -0
  1173. package/tests/cases/unit/updateConfigurationCommand.test.ts +63 -0
  1174. package/tests/src/IdPMock.ts +4 -0
  1175. package/tests/src/testTenant.ts +32 -1
  1176. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
  1177. package/dist/development/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
  1178. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.cjs.map +0 -1
  1179. package/dist/production/src/model/commands/membership/RemoveProjectMembershipsCommand.js.map +0 -1
  1180. package/dist/types/model/commands/membership/RemoveProjectMembershipsCommand.d.ts.map +0 -1
  1181. /package/src/model/commands/membership/{RemoveProjectMembershipsCommand.ts → RemoveProjectMembershipCommand.ts} +0 -0
@@ -0,0 +1,283 @@
1
+ import * as Typesafe from '@contember/typesafe'
2
+
3
+ /**
4
+ * Provider-agnostic mapping of IdP claims/attributes to Contember project memberships (A09).
5
+ * Stored on an IdP's `configuration.claimMapping`, so it rides inside the existing
6
+ * `identity_provider.configuration` JSONB and needs no schema change — `addIDP` / `updateIDP`
7
+ * already accept an opaque configuration object.
8
+ *
9
+ * The mapping grants **project memberships only** (a project role plus optional membership
10
+ * variables). It deliberately does NOT grant global/tenant roles: those are privilege-bearing
11
+ * and granting them from external claims would be a privilege-escalation path, so global-role
12
+ * mapping was dropped. A project membership stays within what the IdP configurer
13
+ * (`project_admin`, holding `IDP_ADD` / `IDP_UPDATE`) may already grant directly.
14
+ *
15
+ * Coexistence: the OIDC provider also uses `configuration.claimMapping` for an unrelated
16
+ * identity-field remap (`email` / `name` / `externalIdentifier` / `attributesKey`). A09 only
17
+ * looks at the `rules` field, so the two coexist in the same object — {@link parseClaimMapping}
18
+ * returns `null` when no `rules` are present (an OIDC-only remap) instead of rejecting it.
19
+ *
20
+ * Each rule inspects one `claim` from the IdP response (the raw claims flow through verbatim,
21
+ * since `IDPResponse` is `& Record<string, unknown>`) and, when it matches, grants a project
22
+ * membership. Rules are independent and additive — every matching rule contributes; a
23
+ * non-matching rule is simply skipped.
24
+ *
25
+ * Matching is declarative, never code:
26
+ * - `equals` — the claim equals the value (scalar compare; for array claims, the value is one
27
+ * of the elements).
28
+ * - `contains` — the claim contains the value: substring for string claims, membership for array
29
+ * claims. This is the natural fit for multi-valued `groups`.
30
+ * - neither — the rule matches whenever the claim is merely present (and truthy for booleans).
31
+ */
32
+ /**
33
+ * Where a membership variable's values come from when they are not constant. Reads one `claim` from the
34
+ * IdP response — by exact name first (a URL-namespaced claim with literal dots works), then as a dot-path
35
+ * (nested claims like `profile.languages`) — and shapes the raw value(s) into a flat list of strings:
36
+ * - array claim → its elements (`languages: ['cs','en']`)
37
+ * - `split` → split a delimited string claim (`'cs,en'`, OIDC-style `'cs en'`) into elements
38
+ * - `pick` / `where` → for an array-of-objects claim, keep elements matching `where` and take their
39
+ * `pick` field (`orgs: [{ code, role }]` → codes of the elements where role matches)
40
+ *
41
+ * The extracted raw values are then run through {@link ClaimMappingVariable}'s `map` / `passthrough`.
42
+ */
43
+ export const ClaimValueSource = Typesafe.noExtraProps(Typesafe.intersection(
44
+ Typesafe.object({
45
+ /** Claim to read: the exact name first (URL-namespaced names work), then as a dot-path (e.g. `profile.languages`). */
46
+ claim: Typesafe.string,
47
+ }),
48
+ Typesafe.partial({
49
+ /** Split each string value on this delimiter (e.g. `,` or ` `): a scalar string claim and every string element of an array claim. A no-op for non-string values. */
50
+ split: Typesafe.string,
51
+ /** For an array-of-objects claim, take this (dot-path) field from each element. */
52
+ pick: Typesafe.string,
53
+ /** For an array-of-objects claim, keep only elements whose `field` equals `equals`. */
54
+ where: Typesafe.noExtraProps(Typesafe.object({
55
+ field: Typesafe.string,
56
+ equals: Typesafe.scalar,
57
+ })),
58
+ }),
59
+ ))
60
+
61
+ export type ClaimValueSource = ReturnType<typeof ClaimValueSource>
62
+
63
+ /**
64
+ * One membership variable to set on a granted membership. Either constant (`values`), claim-derived
65
+ * (`from`), or both — the two sets are unioned. When derived from a claim:
66
+ * - `map` — lookup table from a raw claim value to the value(s) actually set, e.g.
67
+ * `{ cs: ['<locale-uuid>'] }`. A raw value absent from the map is dropped…
68
+ * - `passthrough` — …unless `passthrough` is `true`, in which case it is set verbatim. Off by
69
+ * default: raw external claim values then flow straight into row-level ACL
70
+ * variables, so enable it only when the variable legitimately holds claim values
71
+ * (not opaque ids), and prefer `map` / `allow` to bound what an IdP can inject.
72
+ * - `allow` — optional allowlist applied to the claim-derived values (constants are never filtered).
73
+ */
74
+ export const ClaimMappingVariable = Typesafe.noExtraProps(Typesafe.intersection(
75
+ Typesafe.object({
76
+ name: Typesafe.string,
77
+ }),
78
+ Typesafe.partial({
79
+ /** Constant values, set regardless of any claim (the original static form). */
80
+ values: Typesafe.array(Typesafe.string),
81
+ /** Derive (additional) values from a claim. */
82
+ from: ClaimValueSource,
83
+ /** Lookup table applied to each raw value from `from`. A raw value with no entry is dropped unless `passthrough`. */
84
+ map: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),
85
+ /** When `true`, a raw value from `from` not present in `map` is set verbatim. See the security note above. */
86
+ passthrough: Typesafe.boolean,
87
+ /** Allowlist applied to the values derived from `from` (constants in `values` are unaffected). */
88
+ allow: Typesafe.array(Typesafe.string),
89
+ }),
90
+ ))
91
+
92
+ export type ClaimMappingVariable = ReturnType<typeof ClaimMappingVariable>
93
+
94
+ export const ClaimMappingMembership = Typesafe.noExtraProps(Typesafe.intersection(
95
+ Typesafe.object({
96
+ project: Typesafe.string,
97
+ role: Typesafe.string,
98
+ }),
99
+ Typesafe.partial({
100
+ /**
101
+ * Membership variables to set. Each is constant (`values`, e.g. `[{ name: 'locale', values: ['cs'] }]`)
102
+ * and/or claim-derived (`from`, e.g. map a `languages` claim through a lookup table to locale ids).
103
+ */
104
+ variables: Typesafe.array(ClaimMappingVariable),
105
+ }),
106
+ ))
107
+
108
+ export type ClaimMappingMembership = ReturnType<typeof ClaimMappingMembership>
109
+
110
+ export const ClaimMappingRule = Typesafe.noExtraProps(Typesafe.intersection(
111
+ Typesafe.object({
112
+ /** Claim/attribute from the IdP response to inspect: the exact name first, then as a dot-path into nested objects. */
113
+ claim: Typesafe.string,
114
+ }),
115
+ Typesafe.partial({
116
+ /** Match when the claim equals this value (array claims: when it contains this element). */
117
+ equals: Typesafe.scalar,
118
+ /** Match when the claim contains this value (substring for strings, element for arrays). */
119
+ contains: Typesafe.scalar,
120
+ /** Project membership to grant when the rule matches. */
121
+ grantMembership: ClaimMappingMembership,
122
+ }),
123
+ ))
124
+
125
+ export type ClaimMappingRule = ReturnType<typeof ClaimMappingRule>
126
+
127
+ /**
128
+ * The validated A09 mapping. `rules` is required here — {@link parseClaimMapping} only returns a
129
+ * mapping once it has confirmed `rules` is present, and returns `null` otherwise (so an OIDC-only
130
+ * `claimMapping` is treated as "no role mapping", not an error).
131
+ */
132
+ export const ClaimMapping = Typesafe.intersection(
133
+ Typesafe.object({
134
+ rules: Typesafe.array(ClaimMappingRule),
135
+ }),
136
+ Typesafe.partial({
137
+ /**
138
+ * When to apply the mapping:
139
+ * - `always` (default) — re-sync memberships on every sign-in (and on every OIDC session refresh).
140
+ * - `sticky` — apply only when the account is first created by auto-sign-up; existing
141
+ * accounts (including one being linked to this IdP for the first time) are
142
+ * left untouched.
143
+ */
144
+ syncPolicy: Typesafe.enumeration('always', 'sticky'),
145
+ /**
146
+ * How to treat existing grants the mapping does NOT (re)assign on this sign-in:
147
+ * - `keep` (default, safer) — leave pre-existing memberships untouched.
148
+ * - `remove` — strip memberships that the mapping no longer grants (IdP becomes the source of
149
+ * truth). Only ever touches grants the mapping itself could have made; memberships
150
+ * outside the mapping's vocabulary are never removed.
151
+ */
152
+ unmatched: Typesafe.enumeration('keep', 'remove'),
153
+ }),
154
+ )
155
+
156
+ export type ClaimMapping = ReturnType<typeof ClaimMapping>
157
+
158
+ export const DEFAULT_SYNC_POLICY: NonNullable<ClaimMapping['syncPolicy']> = 'always'
159
+ export const DEFAULT_UNMATCHED: NonNullable<ClaimMapping['unmatched']> = 'keep'
160
+
161
+ export const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === 'object' && value !== null && !Array.isArray(value)
162
+
163
+ /**
164
+ * Parse the optional A09 `claimMapping` out of an IdP `configuration` blob. Returns `null` when no
165
+ * A09 mapping is present — either no `claimMapping` at all, or a `claimMapping` that carries no
166
+ * `rules` (e.g. the OIDC identity-field remap, which shares this key). Returning `null` keeps both
167
+ * the pre-A09 sign-in path and the OIDC remap untouched.
168
+ *
169
+ * Only the A09 fields (`rules`, `syncPolicy`, `unmatched`) are validated; any other keys on the
170
+ * `claimMapping` object (the OIDC remap fields) are ignored, so the two features coexist. Throws via
171
+ * Typesafe when `rules` is present but structurally malformed (e.g. a rule missing its required
172
+ * `claim`), so an A09 misconfiguration surfaces loudly rather than silently dropping grants.
173
+ *
174
+ * The nested A09 schemas (rule / membership / variable / value-source) are wrapped in
175
+ * `Typesafe.noExtraProps`, so a typo'd key on any of them (e.g. `grantMembershp`, `equls`) is
176
+ * REJECTED, not silently stripped — a misconfiguration surfaces loudly instead of degrading into a
177
+ * grants-nothing or match-everyone rule. The one exception is the top-level `claimMapping` object
178
+ * itself: it is the key SHARED with the OIDC identity-remap (`email`/`name`/`externalIdentifier`/
179
+ * `attributesKey`), so this parse first projects only the A09 fields (`rules`/`syncPolicy`/`unmatched`)
180
+ * into a fresh object (above) and deliberately does NOT apply `noExtraProps` there — the OIDC remap
181
+ * fields must coexist. The `map` lookup table is likewise a `record` (arbitrary keys are legitimate),
182
+ * not a strict object. The removed `grantRoles` key is still caught separately by
183
+ * {@link findRemovedRuleKeys} (run before this parse) for a clearer message than the generic
184
+ * extra-property error `noExtraProps` would otherwise raise.
185
+ */
186
+ export const parseClaimMapping = (configuration: Record<string, unknown>): ClaimMapping | null => {
187
+ const raw = configuration.claimMapping
188
+ if (!isRecord(raw) || raw.rules === undefined || raw.rules === null) {
189
+ return null
190
+ }
191
+ const input: Record<string, unknown> = { rules: raw.rules }
192
+ if (raw.syncPolicy !== undefined) {
193
+ input.syncPolicy = raw.syncPolicy
194
+ }
195
+ if (raw.unmatched !== undefined) {
196
+ input.unmatched = raw.unmatched
197
+ }
198
+ return ClaimMapping(input, ['claimMapping'])
199
+ }
200
+
201
+ /**
202
+ * The set of A09 rule keys that were removed when global-role mapping was dropped. Detected
203
+ * explicitly (rather than relying on Typesafe's generic "extra property" rejection) so a config
204
+ * that still tries to grant global roles gets an actionable error.
205
+ */
206
+ const REMOVED_RULE_KEYS = ['grantRoles'] as const
207
+
208
+ /**
209
+ * Returns the removed rule keys (currently only `grantRoles`) still present in a raw `claimMapping`,
210
+ * so config-time validation can reject them with a clear message pointing at `grantMembership`.
211
+ */
212
+ export const findRemovedRuleKeys = (configuration: Record<string, unknown>): string[] => {
213
+ const raw = configuration.claimMapping
214
+ if (!isRecord(raw) || !Array.isArray(raw.rules)) {
215
+ return []
216
+ }
217
+ const found = new Set<string>()
218
+ for (const rule of raw.rules) {
219
+ if (isRecord(rule)) {
220
+ for (const key of REMOVED_RULE_KEYS) {
221
+ if (key in rule) {
222
+ found.add(key)
223
+ }
224
+ }
225
+ }
226
+ }
227
+ return [...found]
228
+ }
229
+
230
+ /**
231
+ * Semantic checks on a parsed mapping that the Typesafe shape cannot express. Returns one
232
+ * human-readable message per problem (empty = ok); run at config time (IdP add/update) so a
233
+ * contradictory rule is rejected loudly rather than silently mis-matching or granting nothing:
234
+ * - a rule may use at most one of `equals` / `contains` ({@link ruleMatches} only ever honours `equals`
235
+ * when both are set, so the other would be silently ignored);
236
+ * - a rule's `equals` / `contains` must not be an empty string: an empty `contains` substring-matches EVERY
237
+ * string claim (`'...'.includes('')` is always true), i.e. a match-everything grant to every user of the
238
+ * IdP, and an empty `equals` is an always-no-op footgun — to match on the claim's mere presence, omit both;
239
+ * - a rule must carry a `grantMembership` — a rule with none matches but grants nothing. (A *misspelled*
240
+ * `grantMembership`, e.g. `grantMembershp`, is now rejected earlier by `noExtraProps` during
241
+ * {@link parseClaimMapping}; this check remains for a `grantMembership` that is genuinely OMITTED,
242
+ * which the `partial` schema permits.)
243
+ * - a variable's `from.where` requires a `from.pick` — `where` filters elements but without `pick` there
244
+ * is nothing to project, so the source can only ever resolve to no values;
245
+ * - a variable's `from.split` must not be the empty string — `''.split('')` explodes every claim value
246
+ * into its individual characters (the same class of footgun as an empty `equals` / `contains`).
247
+ */
248
+ export const findClaimMappingShapeErrors = (mapping: ClaimMapping): string[] => {
249
+ const errors: string[] = []
250
+ for (const rule of mapping.rules) {
251
+ if (rule.grantMembership === undefined) {
252
+ errors.push(
253
+ `claimMapping rule for claim '${rule.claim}' has no 'grantMembership', so it matches but grants nothing; add a 'grantMembership'`,
254
+ )
255
+ }
256
+ if (rule.equals !== undefined && rule.contains !== undefined) {
257
+ errors.push(`claimMapping rule for claim '${rule.claim}' sets both 'equals' and 'contains'; a rule may use at most one`)
258
+ }
259
+ if (typeof rule.equals === 'string' && rule.equals.trim() === '') {
260
+ errors.push(
261
+ `claimMapping rule for claim '${rule.claim}' has an empty 'equals' value; omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,
262
+ )
263
+ }
264
+ if (typeof rule.contains === 'string' && rule.contains.trim() === '') {
265
+ errors.push(
266
+ `claimMapping rule for claim '${rule.claim}' has an empty 'contains' value, which would substring-match every string value of the claim (a match-everything grant); omit both 'equals' and 'contains' to match on the claim's mere presence, or set a non-empty value`,
267
+ )
268
+ }
269
+ for (const variable of rule.grantMembership?.variables ?? []) {
270
+ if (variable.from?.where !== undefined && variable.from.pick === undefined) {
271
+ errors.push(
272
+ `claimMapping variable '${variable.name}' uses 'from.where' without 'from.pick'; it can only ever resolve to no values — set 'pick' (the field to take from each matched element)`,
273
+ )
274
+ }
275
+ if (variable.from?.split === '') {
276
+ errors.push(
277
+ `claimMapping variable '${variable.name}' has an empty 'from.split' delimiter, which splits every claim value into its individual characters; omit 'split' to keep the value whole, or set a non-empty delimiter`,
278
+ )
279
+ }
280
+ }
281
+ }
282
+ return errors
283
+ }
@@ -0,0 +1,226 @@
1
+ import { ClaimMapping, ClaimMappingMembership, ClaimMappingRule, ClaimMappingVariable, ClaimValueSource, isRecord } from './ClaimMapping.js'
2
+
3
+ export type MappedMembership = {
4
+ readonly project: string
5
+ readonly role: string
6
+ readonly variables: readonly { readonly name: string; readonly values: readonly string[] }[]
7
+ }
8
+
9
+ /**
10
+ * Evaluate every rule of a claim mapping against the claims of an IdP response and collect the union
11
+ * of granted project memberships (keyed implicitly by (project, role)). Pure: no DB, no side effects —
12
+ * the caller decides how to apply the result (and whether to add-only or replace, per `unmatched`).
13
+ */
14
+ export const evaluateClaimMapping = (mapping: ClaimMapping, claims: Record<string, unknown>): MappedMembership[] => {
15
+ const membershipByKey = new Map<string, MappedMembership>()
16
+
17
+ for (const rule of mapping.rules) {
18
+ if (!ruleMatches(rule, resolvePath(claims, rule.claim))) {
19
+ continue
20
+ }
21
+ if (rule.grantMembership) {
22
+ const membership = toMembership(rule.grantMembership, claims)
23
+ // JSON-encode the (project, role) pair so the dedup key can't collide on a delimiter that a
24
+ // slug could itself contain (a plain `${project}::${role}` would fold `a::b`/`c` into `a`/`b::c`).
25
+ const key = JSON.stringify([membership.project, membership.role])
26
+ const existing = membershipByKey.get(key)
27
+ membershipByKey.set(key, existing ? mergeMembershipVariables(existing, membership) : membership)
28
+ }
29
+ }
30
+
31
+ return [...membershipByKey.values()]
32
+ }
33
+
34
+ const toMembership = (membership: ClaimMappingMembership, claims: Record<string, unknown>): MappedMembership => ({
35
+ project: membership.project,
36
+ role: membership.role,
37
+ // Union by name so a single grant that lists the same variable twice (e.g. two `locale` entries)
38
+ // combines their values into one entry, rather than emitting duplicate entries that would later race
39
+ // and clobber each other when each is written as a full-replace of the same (membership, variable).
40
+ variables: unionVariablesByName(
41
+ (membership.variables ?? []).map(variable => ({ name: variable.name, values: resolveVariableValues(variable, claims) })),
42
+ ),
43
+ })
44
+
45
+ /**
46
+ * Merge two grants of the same (project, role) by unioning their membership variables per name — so
47
+ * several matching rules granting the same membership combine their variables (consistent with how
48
+ * global roles union), rather than the last rule silently overwriting the variables of the earlier ones.
49
+ */
50
+ const mergeMembershipVariables = (a: MappedMembership, b: MappedMembership): MappedMembership => ({
51
+ project: a.project,
52
+ role: a.role,
53
+ variables: unionVariablesByName([...a.variables, ...b.variables]),
54
+ })
55
+
56
+ /**
57
+ * Union a list of membership variables by name: several entries for the same variable name — whether from
58
+ * one grant listing it twice or from several rules granting the same membership — combine their values into
59
+ * a single entry. Values are de-duplicated and SORTED so the result is canonical: the same effective grant
60
+ * always yields the same value array regardless of claim/rule order. That keeps the persisted JSON stable
61
+ * (no redundant rewrite when an IdP returns a multi-valued claim in a different order across sign-ins) and
62
+ * the audit delta order-insensitive. Variable entries keep first-seen order.
63
+ */
64
+ const unionVariablesByName = (
65
+ variables: readonly { readonly name: string; readonly values: readonly string[] }[],
66
+ ): { name: string; values: string[] }[] => {
67
+ const valuesByName = new Map<string, Set<string>>()
68
+ for (const variable of variables) {
69
+ const values = valuesByName.get(variable.name) ?? new Set<string>()
70
+ for (const value of variable.values) {
71
+ values.add(value)
72
+ }
73
+ valuesByName.set(variable.name, values)
74
+ }
75
+ return [...valuesByName].map(([name, values]) => ({ name, values: [...values].sort() }))
76
+ }
77
+
78
+ /**
79
+ * Resolve a membership variable to its final string values: constant `values` (always kept) unioned
80
+ * with values derived from `from` (extracted from the claims, then mapped / passed through / allow-
81
+ * filtered). Pure; an empty result simply means the variable is not applied — `IDPClaimSyncService`
82
+ * drops empty-valued variables so an empty `set` never soft-deletes the membership.
83
+ */
84
+ export const resolveVariableValues = (variable: ClaimMappingVariable, claims: Record<string, unknown>): string[] => {
85
+ const values = new Set<string>(variable.values ?? [])
86
+ if (variable.from) {
87
+ const allow = variable.allow ? new Set(variable.allow) : null
88
+ for (const raw of extractClaimValues(variable.from, claims)) {
89
+ // `raw` is an external claim value used as a `map` key — look it up as an OWN property only.
90
+ // A plain `map?.[raw]` would let a hostile claim like `__proto__` / `constructor` resolve to an
91
+ // inherited prototype member (a non-array object/function), which then slips past `?? []` and
92
+ // throws `not iterable` in the loop below — aborting the sign-in transaction.
93
+ const mapped = variable.map && Object.prototype.hasOwnProperty.call(variable.map, raw)
94
+ ? variable.map[raw]
95
+ : (variable.passthrough ? [raw] : [])
96
+ for (const value of mapped) {
97
+ if (!allow || allow.has(value)) {
98
+ values.add(value)
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return [...values]
104
+ }
105
+
106
+ /**
107
+ * Extract a flat, de-duplicated list of string values from a single claim per a {@link ClaimValueSource}:
108
+ * resolves the (possibly nested) claim, normalises scalar/array, optionally filters + projects an
109
+ * array of objects (`where` / `pick`), and optionally splits a delimited string (`split`). Non-scalar
110
+ * leaves (objects, null/undefined) are skipped; finite numbers are coerced to their string form.
111
+ */
112
+ export const extractClaimValues = (source: ClaimValueSource, claims: Record<string, unknown>): string[] => {
113
+ const resolved = resolvePath(claims, source.claim)
114
+ const items: unknown[] = Array.isArray(resolved) ? resolved : [resolved]
115
+ const out: string[] = []
116
+ for (const item of items) {
117
+ let value: unknown = item
118
+ if (source.where !== undefined || source.pick !== undefined) {
119
+ if (!isRecord(item)) {
120
+ continue
121
+ }
122
+ if (source.where && !scalarEquals(resolvePath(item, source.where.field), source.where.equals)) {
123
+ continue
124
+ }
125
+ value = source.pick !== undefined ? resolvePath(item, source.pick) : undefined
126
+ }
127
+ if (typeof value === 'string' && source.split !== undefined) {
128
+ for (const part of value.split(source.split)) {
129
+ const trimmed = part.trim()
130
+ if (trimmed.length > 0) {
131
+ out.push(trimmed)
132
+ }
133
+ }
134
+ continue
135
+ }
136
+ const scalar = coerceToString(value)
137
+ if (scalar !== null) {
138
+ out.push(scalar)
139
+ }
140
+ }
141
+ return [...new Set(out)]
142
+ }
143
+
144
+ /**
145
+ * Resolve a claim name — a rule's `claim` and a variable's `from.claim` / `pick` / `where.field` all
146
+ * use this same lookup. The EXACT name is tried first, so a claim whose name literally contains dots
147
+ * (URL-namespaced, e.g. Auth0's `https://example.com/roles`) stays addressable and wins over a nested
148
+ * path of the same spelling; only then is the name treated as a dot-path into nested objects
149
+ * (`realm_access.roles`). Own-property only at every step: never descend into inherited members, so a
150
+ * claim object can't surface `Object.prototype` via a `__proto__` segment (and a configured path can't
151
+ * read a prototype member).
152
+ */
153
+ const resolvePath = (root: unknown, path: string): unknown => {
154
+ if (isRecord(root) && Object.prototype.hasOwnProperty.call(root, path)) {
155
+ return root[path]
156
+ }
157
+ let current: unknown = root
158
+ for (const key of path.split('.')) {
159
+ if (!isRecord(current) || !Object.prototype.hasOwnProperty.call(current, key)) {
160
+ return undefined
161
+ }
162
+ current = current[key]
163
+ }
164
+ return current
165
+ }
166
+
167
+ const coerceToString = (value: unknown): string | null => {
168
+ if (typeof value === 'string') {
169
+ return value
170
+ }
171
+ if (typeof value === 'number' && Number.isFinite(value)) {
172
+ return String(value)
173
+ }
174
+ return null
175
+ }
176
+
177
+ const ruleMatches = (rule: ClaimMappingRule, claimValue: unknown): boolean => {
178
+ if (rule.equals !== undefined) {
179
+ return matchEquals(claimValue, rule.equals)
180
+ }
181
+ if (rule.contains !== undefined) {
182
+ return matchContains(claimValue, rule.contains)
183
+ }
184
+ // No condition: match on mere PRESENCE of a non-empty value. Treated as absent: `undefined` / `null`
185
+ // (claim not present), the boolean `false` (a `groups`-style flag only grants when truthy), an empty
186
+ // array (e.g. `groups: []` — the user is in no group), and an empty string. "Presence" therefore means
187
+ // the claim actually carries a value, not merely that the field exists but is empty.
188
+ if (claimValue === undefined || claimValue === null || claimValue === false || claimValue === '') {
189
+ return false
190
+ }
191
+ if (Array.isArray(claimValue)) {
192
+ return claimValue.length > 0
193
+ }
194
+ return true
195
+ }
196
+
197
+ const matchEquals = (claimValue: unknown, expected: string | number | boolean | null): boolean => {
198
+ if (Array.isArray(claimValue)) {
199
+ return claimValue.some(it => scalarEquals(it, expected))
200
+ }
201
+ return scalarEquals(claimValue, expected)
202
+ }
203
+
204
+ const matchContains = (claimValue: unknown, needle: string | number | boolean | null): boolean => {
205
+ // An empty-string needle would substring-match EVERY string claim (`s.includes('') === true`) — a
206
+ // match-everyone grant to every user of the IdP. Config-time validation rejects it, but a config planted
207
+ // out-of-band (a direct `identity_provider.configuration` JSONB edit) bypasses that guard; refuse it here
208
+ // too so the evaluator never honours a degenerate match-everyone rule, regardless of how it arrived (SEC-1).
209
+ if (needle === '') {
210
+ return false
211
+ }
212
+ if (Array.isArray(claimValue)) {
213
+ return claimValue.some(it => scalarEquals(it, needle))
214
+ }
215
+ if (typeof claimValue === 'string' && typeof needle === 'string') {
216
+ return claimValue.includes(needle)
217
+ }
218
+ return scalarEquals(claimValue, needle)
219
+ }
220
+
221
+ const scalarEquals = (value: unknown, expected: string | number | boolean | null): boolean => {
222
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || value === null) {
223
+ return value === expected
224
+ }
225
+ return false
226
+ }
@@ -0,0 +1,158 @@
1
+ import { Acl } from '@contember/schema'
2
+ import { getRoleVariables, MembershipResolver, MembershipValidationErrorType } from '@contember/schema-utils'
3
+ import { ClaimMappingMembership, ClaimMappingVariable } from './ClaimMapping.js'
4
+
5
+ /**
6
+ * Why a granted membership in an A09 claim mapping is invalid against a project's live ACL schema.
7
+ * Shared by config-time validation ({@link validateClaimMappingMembership} via
8
+ * `IDPManager.assertValidClaimMapping`, which rejects the whole IdP config) and the apply-time backstop
9
+ * (`IDPClaimSyncService`, which drops the unsafe grant), so the per-membership ACL validation can never
10
+ * drift between the two. NOTE this shared check is ONLY the per-membership ACL validation; the rule-shape
11
+ * checks (`findClaimMappingShapeErrors`) and the removed-key check (`findRemovedRuleKeys`, e.g. `grantRoles`)
12
+ * run at config time only — the apply-time backstop deliberately re-checks just the ACL safety of each
13
+ * grant, not the mapping's overall shape (a malformed shape can only arrive via an out-of-band JSONB edit
14
+ * that bypassed config validation; `evaluateClaimMapping` then honours whatever shape it finds).
15
+ */
16
+ export enum ClaimMappingMembershipErrorType {
17
+ /** The granted role is not defined in the project ACL. */
18
+ roleNotFound = 'roleNotFound',
19
+ /** A membership variable is not defined for the granted role. */
20
+ variableNotFound = 'variableNotFound',
21
+ /** A predefined variable (identityID / personID) cannot be set — the runtime binds it to the signed-in identity. */
22
+ predefinedVariable = 'predefinedVariable',
23
+ /**
24
+ * A claim-derived (`from`) value would be written into a `condition` ACL variable without being bounded
25
+ * by an `allow` allowlist (or with `passthrough`). A condition variable's stored value is parsed as a
26
+ * row-level ACL condition at every content request, so this is an arbitrary-condition injection vector.
27
+ */
28
+ conditionInjection = 'conditionInjection',
29
+ /** A configured value targeting a `condition` variable is not a parseable ACL condition (it would deny at content time). */
30
+ conditionValueInvalid = 'conditionValueInvalid',
31
+ }
32
+
33
+ export interface ClaimMappingMembershipError {
34
+ readonly type: ClaimMappingMembershipErrorType
35
+ readonly message: string
36
+ }
37
+
38
+ /**
39
+ * Validate one A09 granted membership against a project's live ACL schema.
40
+ *
41
+ * The shared membership-shape checks (role exists, each set variable is defined for the role, a
42
+ * predefined variable cannot be set, a `condition` variable's stored value parses as an ACL condition)
43
+ * are DELEGATED to the very {@link MembershipResolver} the direct add-member path uses — so the IdP path
44
+ * cannot drift from it. Only the resolver's `VARIABLE_EMPTY` is excluded: A09 grants are *partial* (a
45
+ * rule sets only some of a role's variables), which is legitimate here but `VARIABLE_EMPTY` to the
46
+ * resolver. On top of the shared checks A09 adds one claim-aware guard the resolver cannot know about —
47
+ * the condition-injection guard (a claim-derived value must not flow unbounded into a `condition`
48
+ * variable). See {@link ClaimMappingMembershipErrorType}.
49
+ *
50
+ * Returns every problem found (empty array = valid). The caller decides the consequence: config-time
51
+ * validation throws on the first error (rejecting the whole IdP config), while the apply-time backstop
52
+ * (`IDPClaimSyncService`) drops any grant that produces an error.
53
+ *
54
+ * Role / variable lookups are own-property only, so a name like `constructor` / `toString` cannot
55
+ * resolve to an inherited Object.prototype member and pass as defined (the resolver and
56
+ * `getRoleVariables` are likewise own-property guarded).
57
+ */
58
+ export const validateClaimMappingMembership = (acl: Acl.Schema, membership: ClaimMappingMembership): ClaimMappingMembershipError[] => {
59
+ const errors: ClaimMappingMembershipError[] = []
60
+ const roleExists = Object.prototype.hasOwnProperty.call(acl.roles, membership.role)
61
+ const roleVariables = roleExists ? getRoleVariables(membership.role, acl) : {}
62
+
63
+ // A09-specific, claim-aware injection guard — MembershipResolver does not see `from`/`passthrough`/
64
+ // `allow`. For a `condition` ACL variable, a claim-derived value is interpreted as a row-level ACL
65
+ // condition on every content request, so it must be bounded by an explicit `allow` allowlist and must
66
+ // not use `passthrough`. Constant `values` are configurer-controlled (their shape is validated by the
67
+ // resolver below). Only checkable when the role resolves; an unknown role is reported as roleNotFound.
68
+ if (roleExists) {
69
+ for (const variable of membership.variables ?? []) {
70
+ const aclVariable = Object.prototype.hasOwnProperty.call(roleVariables, variable.name) ? roleVariables[variable.name] : undefined
71
+ if (
72
+ aclVariable?.type === Acl.VariableType.condition && variable.from !== undefined && (variable.passthrough === true || variable.allow === undefined)
73
+ ) {
74
+ errors.push({
75
+ type: ClaimMappingMembershipErrorType.conditionInjection,
76
+ message:
77
+ `claimMapping variable '${variable.name}' of role '${membership.role}' is a condition variable: a claim-derived value is interpreted as a row-level ACL condition, so it must be constrained by an 'allow' allowlist and must not use 'passthrough'`,
78
+ })
79
+ }
80
+ }
81
+ }
82
+
83
+ // Shared shape checks — delegate to MembershipResolver over the configurer-authored STATIC values the
84
+ // mapping can deposit into each variable (constants + every `map` output + the `allow` allowlist), so a
85
+ // malformed condition in ANY of them is rejected here rather than silently denying (`{ never: true }`)
86
+ // on every content request once granted. Raw claim-derived values are unknown at validation time and
87
+ // are bounded separately by the injection guard above.
88
+ const resolverMembership: Acl.Membership = {
89
+ role: membership.role,
90
+ variables: (membership.variables ?? []).map(variable => ({ name: variable.name, values: staticVariableValues(variable) })),
91
+ }
92
+ const result = new MembershipResolver().resolve(acl, [resolverMembership], MembershipResolver.UnknownIdentity, false)
93
+ for (const error of result.errors) {
94
+ const translated = translateResolverError(error.error, membership, error.variable, roleVariables)
95
+ if (translated) {
96
+ errors.push(translated)
97
+ }
98
+ }
99
+ return errors
100
+ }
101
+
102
+ /**
103
+ * Every configurer-authored value the mapping could store into a variable: constant `values`, every
104
+ * `map` output, and the `allow` allowlist (raw claim values are excluded — unknown at validation time
105
+ * and bounded by the injection guard). De-duplicated; fed to the resolver so each is shape-checked.
106
+ */
107
+ const staticVariableValues = (variable: ClaimMappingVariable): string[] => [
108
+ ...new Set([
109
+ ...(variable.values ?? []),
110
+ ...Object.values(variable.map ?? {}).flat(),
111
+ ...(variable.allow ?? []),
112
+ ]),
113
+ ]
114
+
115
+ const translateResolverError = (
116
+ type: MembershipValidationErrorType,
117
+ membership: ClaimMappingMembership,
118
+ variableName: string | undefined,
119
+ roleVariables: Acl.Variables,
120
+ ): ClaimMappingMembershipError | null => {
121
+ const aclVariable = variableName && Object.prototype.hasOwnProperty.call(roleVariables, variableName) ? roleVariables[variableName] : undefined
122
+ switch (type) {
123
+ case MembershipValidationErrorType.ROLE_NOT_FOUND:
124
+ return {
125
+ type: ClaimMappingMembershipErrorType.roleNotFound,
126
+ message: `claimMapping grants role '${membership.role}' which is not defined in the ACL of project '${membership.project}'`,
127
+ }
128
+ case MembershipValidationErrorType.VARIABLE_NOT_FOUND:
129
+ // The resolver reports a (forbidden) predefined variable as VARIABLE_NOT_FOUND when not assumed;
130
+ // surface A09's clearer `predefinedVariable` message when that is the actual cause.
131
+ if (aclVariable?.type === Acl.VariableType.predefined) {
132
+ return {
133
+ type: ClaimMappingMembershipErrorType.predefinedVariable,
134
+ message: `claimMapping cannot set the predefined variable '${variableName}' of role '${membership.role}'`,
135
+ }
136
+ }
137
+ return {
138
+ type: ClaimMappingMembershipErrorType.variableNotFound,
139
+ message: `claimMapping sets variable '${variableName}' which is not defined for role '${membership.role}' in project '${membership.project}'`,
140
+ }
141
+ case MembershipValidationErrorType.VARIABLE_INVALID:
142
+ // A predefined variable can also raise VARIABLE_INVALID (its non-id value) — already reported as
143
+ // predefinedVariable above, so don't double-report it as a bad condition value.
144
+ if (aclVariable?.type === Acl.VariableType.predefined) {
145
+ return null
146
+ }
147
+ return {
148
+ type: ClaimMappingMembershipErrorType.conditionValueInvalid,
149
+ message:
150
+ `claimMapping variable '${variableName}' of role '${membership.role}' is a condition variable, but a configured value (a constant, a 'map' output, or an 'allow' entry) is not a valid condition`,
151
+ }
152
+ case MembershipValidationErrorType.VARIABLE_EMPTY:
153
+ // A09 intentionally tolerates partial grants — a rule may set only some of a role's variables.
154
+ return null
155
+ default:
156
+ return null
157
+ }
158
+ }