@contember/engine-tenant-api 2.2.0-alpha.3 → 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,1244 @@
1
+ import { executeTenantTest } from '../../../src/testTenant.js'
2
+ import { testUuid } from '../../../src/testUuid.js'
3
+ import { expect, test } from 'bun:test'
4
+ import { signInIDP } from './gql/signInIdp.js'
5
+ import { sqlTransaction } from './sql/sqlTransaction.js'
6
+ import { getIdpBySlugSql } from './sql/getIdpBySlugSql.js'
7
+ import { getPersonByIdpSql } from './sql/getPersonByIdpSql.js'
8
+ import { createSessionKeySql } from './sql/createSessionKeySql.js'
9
+ import { getIdentityProjectsSql } from './sql/getIdentityProjectsSql.js'
10
+ import { selectMembershipsSql } from './sql/selectMembershipsSql.js'
11
+ import { getConfigSql } from './sql/getConfigSql.js'
12
+ import { getIdentityByIdSql } from './sql/getIdentityByIdSql.js'
13
+ import { getAuthPoliciesSql } from './sql/authPolicySql.js'
14
+ import { getProjectBySlugSql } from './sql/getProjectBySlugSql.js'
15
+ import { createMembershipSql } from './sql/createMembershipSql.js'
16
+ import { createMembershipVariableSql } from './sql/createMembershipVariableSql.js'
17
+ import { removeMembershipSql } from './sql/removeMembershipSql.js'
18
+ import { createIdentitySql } from './sql/createIdentitySql.js'
19
+ import { createPersonSql } from './sql/createPersonSql.js'
20
+
21
+ // A09 claim mapping grants PROJECT MEMBERSHIPS only (never global/tenant roles). These tests drive a
22
+ // configured `claimMapping` through the IdP sign-in path and assert the exact membership reconciliation
23
+ // SQL plus the `idp_role_mapped` audit delta. The audit before/after carries `{ memberships }` only.
24
+
25
+ const baseSignInQuery = signInIDP({
26
+ identityProvider: 'mock',
27
+ idpResponse: { url: 'test' },
28
+ redirectUrl: 'test',
29
+ sessionData: {},
30
+ })
31
+
32
+ const externalIdentifier = 'abcd'
33
+ const email = 'john@doe.com'
34
+ const mappedProject = (id: string) => ({ id, name: 'demo', slug: 'demo', config: {} } as any)
35
+
36
+ test('claim mapping grants a project membership on sign-in', async () => {
37
+ const identityId = testUuid(2)
38
+ const personId = testUuid(7)
39
+ const idpId = testUuid(20)
40
+ const mappedProjectId = testUuid(30)
41
+ const sessionProjectId = testUuid(10)
42
+ // uuid() is a global incrementing generator: the membership insert consumes #1, the session key #2.
43
+ const membershipId = testUuid(1)
44
+ const apiKeyId = testUuid(2)
45
+ const project = mappedProject(mappedProjectId)
46
+ await executeTenantTest({
47
+ query: baseSignInQuery,
48
+ executes: [
49
+ ...sqlTransaction(
50
+ getIdpBySlugSql({
51
+ slug: 'mock',
52
+ response: {
53
+ id: idpId,
54
+ autoSignUp: false,
55
+ exclusive: false,
56
+ initReturnsConfig: false,
57
+ requireVerifiedEmail: false,
58
+ assumeEmailVerified: false,
59
+ configuration: {
60
+ externalIdentifier,
61
+ email,
62
+ claims: { department: 'Editorial' },
63
+ claimMapping: {
64
+ rules: [
65
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
66
+ ],
67
+ },
68
+ },
69
+ disabledAt: null,
70
+ slug: 'mock',
71
+ type: 'mock',
72
+ },
73
+ }),
74
+ getPersonByIdpSql({
75
+ externalIdentifier,
76
+ identityProviderId: idpId,
77
+ response: { email, password: '123', identityId, personId, roles: [] },
78
+ }),
79
+ // before snapshot: memberships of the mapped project
80
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
81
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
82
+ // apply memberships: resolve project, insert membership
83
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
84
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
85
+ // after snapshot
86
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
87
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
88
+ getConfigSql(),
89
+ getIdentityByIdSql({ identityId }),
90
+ getAuthPoliciesSql(),
91
+ createSessionKeySql({ apiKeyId, identityId }),
92
+ ),
93
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
94
+ selectMembershipsSql({
95
+ identityId,
96
+ projectId: sessionProjectId,
97
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }],
98
+ }),
99
+ ],
100
+ return: {
101
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
102
+ },
103
+ expectedAuthLog: [
104
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
105
+ {
106
+ type: 'idp_role_mapped',
107
+ response: expect.objectContaining({ ok: true }),
108
+ personId,
109
+ targetPersonId: personId,
110
+ identityProviderId: idpId,
111
+ eventData: {
112
+ before: { memberships: [] },
113
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
114
+ syncPolicy: 'always',
115
+ unmatched: 'keep',
116
+ },
117
+ },
118
+ ],
119
+ })
120
+ })
121
+
122
+ test('claim mapping grants a membership with a claim-derived variable (mapped values written)', async () => {
123
+ const identityId = testUuid(2)
124
+ const personId = testUuid(7)
125
+ const idpId = testUuid(20)
126
+ const mappedProjectId = testUuid(30)
127
+ const sessionProjectId = testUuid(10)
128
+ // membership insert #1, the membership-variable insert #2, the session key #3.
129
+ const membershipId = testUuid(1)
130
+ const variableId = testUuid(2)
131
+ const apiKeyId = testUuid(3)
132
+ const project = mappedProject(mappedProjectId)
133
+ await executeTenantTest({
134
+ query: baseSignInQuery,
135
+ executes: [
136
+ ...sqlTransaction(
137
+ getIdpBySlugSql({
138
+ slug: 'mock',
139
+ response: {
140
+ id: idpId,
141
+ autoSignUp: false,
142
+ exclusive: false,
143
+ initReturnsConfig: false,
144
+ requireVerifiedEmail: false,
145
+ assumeEmailVerified: false,
146
+ configuration: {
147
+ externalIdentifier,
148
+ email,
149
+ // `langs` is the source claim for the `locale` membership variable; it maps cs -> uuid-cs.
150
+ claims: { department: 'Editorial', langs: 'cs' },
151
+ claimMapping: {
152
+ rules: [
153
+ {
154
+ claim: 'department',
155
+ equals: 'Editorial',
156
+ grantMembership: {
157
+ project: 'demo',
158
+ role: 'editor',
159
+ variables: [{ name: 'locale', from: { claim: 'langs', split: ',' }, map: { cs: ['uuid-cs'] } }],
160
+ },
161
+ },
162
+ ],
163
+ },
164
+ },
165
+ disabledAt: null,
166
+ slug: 'mock',
167
+ type: 'mock',
168
+ },
169
+ }),
170
+ getPersonByIdpSql({
171
+ externalIdentifier,
172
+ identityProviderId: idpId,
173
+ response: { email, password: '123', identityId, personId, roles: [] },
174
+ }),
175
+ // before snapshot
176
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
177
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
178
+ // apply: resolve project, create membership, write the claim-derived `locale` variable
179
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
180
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
181
+ createMembershipVariableSql({ variableId, membershipId, variableName: 'locale', values: ['uuid-cs'] }),
182
+ // after snapshot
183
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
184
+ selectMembershipsSql({
185
+ identityId,
186
+ projectId: mappedProjectId,
187
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['uuid-cs'] }] }],
188
+ }),
189
+ getConfigSql(),
190
+ getIdentityByIdSql({ identityId }),
191
+ getAuthPoliciesSql(),
192
+ createSessionKeySql({ apiKeyId, identityId }),
193
+ ),
194
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
195
+ selectMembershipsSql({
196
+ identityId,
197
+ projectId: sessionProjectId,
198
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['uuid-cs'] }] }],
199
+ }),
200
+ ],
201
+ return: {
202
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
203
+ },
204
+ expectedAuthLog: [
205
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
206
+ {
207
+ type: 'idp_role_mapped',
208
+ response: expect.objectContaining({ ok: true }),
209
+ personId,
210
+ targetPersonId: personId,
211
+ identityProviderId: idpId,
212
+ eventData: {
213
+ before: { memberships: [] },
214
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [{ name: 'locale', values: ['uuid-cs'] }] }] },
215
+ syncPolicy: 'always',
216
+ unmatched: 'keep',
217
+ },
218
+ },
219
+ ],
220
+ })
221
+ })
222
+
223
+ test('a granted membership whose declared variable resolves to no values keeps the membership (no empty-set soft-delete)', async () => {
224
+ const identityId = testUuid(2)
225
+ const personId = testUuid(7)
226
+ const idpId = testUuid(20)
227
+ const mappedProjectId = testUuid(30)
228
+ const sessionProjectId = testUuid(10)
229
+ const membershipId = testUuid(1)
230
+ const apiKeyId = testUuid(2)
231
+ const project = mappedProject(mappedProjectId)
232
+ await executeTenantTest({
233
+ query: baseSignInQuery,
234
+ executes: [
235
+ ...sqlTransaction(
236
+ getIdpBySlugSql({
237
+ slug: 'mock',
238
+ response: {
239
+ id: idpId,
240
+ autoSignUp: false,
241
+ exclusive: false,
242
+ initReturnsConfig: false,
243
+ requireVerifiedEmail: false,
244
+ assumeEmailVerified: false,
245
+ configuration: {
246
+ externalIdentifier,
247
+ email,
248
+ // The match claim is present, but the variable's source claim `langs` is absent, so
249
+ // `locale` resolves to no values. Under `keep` (default) the empty variable is simply
250
+ // dropped — the membership row must survive (no empty `set` → no soft-delete).
251
+ claims: { department: 'Editorial' },
252
+ claimMapping: {
253
+ rules: [
254
+ {
255
+ claim: 'department',
256
+ equals: 'Editorial',
257
+ grantMembership: {
258
+ project: 'demo',
259
+ role: 'editor',
260
+ variables: [{ name: 'locale', from: { claim: 'langs', split: ',' }, map: { cs: ['uuid-cs'] } }],
261
+ },
262
+ },
263
+ ],
264
+ },
265
+ },
266
+ disabledAt: null,
267
+ slug: 'mock',
268
+ type: 'mock',
269
+ },
270
+ }),
271
+ getPersonByIdpSql({
272
+ externalIdentifier,
273
+ identityProviderId: idpId,
274
+ response: { email, password: '123', identityId, personId, roles: [] },
275
+ }),
276
+ // before snapshot
277
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
278
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
279
+ // apply: resolve project, create membership only — the empty `locale` variable is NOT written
280
+ // (no createMembershipVariableSql) and the membership row is NOT deleted.
281
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
282
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
283
+ // after snapshot
284
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
285
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
286
+ getConfigSql(),
287
+ getIdentityByIdSql({ identityId }),
288
+ getAuthPoliciesSql(),
289
+ createSessionKeySql({ apiKeyId, identityId }),
290
+ ),
291
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
292
+ selectMembershipsSql({ identityId, projectId: sessionProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
293
+ ],
294
+ return: {
295
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
296
+ },
297
+ expectedAuthLog: [
298
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
299
+ {
300
+ type: 'idp_role_mapped',
301
+ response: expect.objectContaining({ ok: true }),
302
+ personId,
303
+ targetPersonId: personId,
304
+ identityProviderId: idpId,
305
+ eventData: {
306
+ before: { memberships: [] },
307
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
308
+ syncPolicy: 'always',
309
+ unmatched: 'keep',
310
+ },
311
+ },
312
+ ],
313
+ })
314
+ })
315
+
316
+ test('sticky sync policy skips re-mapping for an existing person (no membership change, no audit)', async () => {
317
+ const identityId = testUuid(2)
318
+ const personId = testUuid(7)
319
+ const projectId = testUuid(10)
320
+ const apiKeyId = testUuid(1)
321
+ const idpId = testUuid(20)
322
+ await executeTenantTest({
323
+ query: baseSignInQuery,
324
+ executes: [
325
+ ...sqlTransaction(
326
+ getIdpBySlugSql({
327
+ slug: 'mock',
328
+ response: {
329
+ id: idpId,
330
+ autoSignUp: false,
331
+ exclusive: false,
332
+ initReturnsConfig: false,
333
+ requireVerifiedEmail: false,
334
+ assumeEmailVerified: false,
335
+ configuration: {
336
+ externalIdentifier,
337
+ email,
338
+ claims: { department: 'Editorial' },
339
+ claimMapping: {
340
+ syncPolicy: 'sticky',
341
+ rules: [
342
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
343
+ ],
344
+ },
345
+ },
346
+ disabledAt: null,
347
+ slug: 'mock',
348
+ type: 'mock',
349
+ },
350
+ }),
351
+ getPersonByIdpSql({
352
+ externalIdentifier,
353
+ identityProviderId: idpId,
354
+ response: { email, password: '123', identityId, personId, roles: [] },
355
+ }),
356
+ // sticky + existing person → mapping is skipped entirely, no snapshot / apply queries
357
+ getConfigSql(),
358
+ getIdentityByIdSql({ identityId }),
359
+ getAuthPoliciesSql(),
360
+ createSessionKeySql({ apiKeyId, identityId }),
361
+ ),
362
+ getIdentityProjectsSql({ identityId, projectId }),
363
+ selectMembershipsSql({
364
+ identityId,
365
+ projectId,
366
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }],
367
+ }),
368
+ ],
369
+ return: {
370
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
371
+ },
372
+ // Only the login is audited — no idp_role_mapped because nothing was synced.
373
+ expectedAuthLog: { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
374
+ })
375
+ })
376
+
377
+ test('a malformed stored claimMapping is skipped (fail-open) — sign-in succeeds, audited as idp_role_mapping_failed', async () => {
378
+ const identityId = testUuid(2)
379
+ const personId = testUuid(7)
380
+ const projectId = testUuid(10)
381
+ const apiKeyId = testUuid(1)
382
+ const idpId = testUuid(20)
383
+ await executeTenantTest({
384
+ query: baseSignInQuery,
385
+ executes: [
386
+ ...sqlTransaction(
387
+ getIdpBySlugSql({
388
+ slug: 'mock',
389
+ response: {
390
+ id: idpId,
391
+ autoSignUp: false,
392
+ exclusive: false,
393
+ initReturnsConfig: false,
394
+ requireVerifiedEmail: false,
395
+ assumeEmailVerified: false,
396
+ configuration: {
397
+ externalIdentifier,
398
+ email,
399
+ claims: { department: 'Editorial' },
400
+ // A persisted-but-malformed mapping (a rule with no `claim`) — e.g. written out-of-band
401
+ // before validation existed. parseClaimMapping throws → fail-open: sign-in proceeds
402
+ // without claim mapping and the failure is audited; the user is NOT locked out.
403
+ claimMapping: { rules: [{ contains: 'x', grantMembership: { project: 'demo', role: 'editor' } }] },
404
+ },
405
+ disabledAt: null,
406
+ slug: 'mock',
407
+ type: 'mock',
408
+ },
409
+ }),
410
+ getPersonByIdpSql({
411
+ externalIdentifier,
412
+ identityProviderId: idpId,
413
+ response: { email, password: '123', identityId, personId, roles: [] },
414
+ }),
415
+ // parse failed before any snapshot/apply query — sign-in continues normally
416
+ getConfigSql(),
417
+ getIdentityByIdSql({ identityId }),
418
+ getAuthPoliciesSql(),
419
+ createSessionKeySql({ apiKeyId, identityId }),
420
+ ),
421
+ getIdentityProjectsSql({ identityId, projectId }),
422
+ selectMembershipsSql({ identityId, projectId, membershipsResponse: [] }),
423
+ ],
424
+ return: {
425
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
426
+ },
427
+ expectedAuthLog: [
428
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
429
+ {
430
+ type: 'idp_role_mapping_failed',
431
+ response: expect.objectContaining({ ok: true }),
432
+ personId,
433
+ targetPersonId: personId,
434
+ identityProviderId: idpId,
435
+ },
436
+ ],
437
+ })
438
+ })
439
+
440
+ test('a claim mapping referencing a non-existent project is skipped, sign-in still succeeds (no audit)', async () => {
441
+ const identityId = testUuid(2)
442
+ const personId = testUuid(7)
443
+ const projectId = testUuid(10)
444
+ const apiKeyId = testUuid(1)
445
+ const idpId = testUuid(20)
446
+ await executeTenantTest({
447
+ query: baseSignInQuery,
448
+ executes: [
449
+ ...sqlTransaction(
450
+ getIdpBySlugSql({
451
+ slug: 'mock',
452
+ response: {
453
+ id: idpId,
454
+ autoSignUp: false,
455
+ exclusive: false,
456
+ initReturnsConfig: false,
457
+ requireVerifiedEmail: false,
458
+ assumeEmailVerified: false,
459
+ configuration: {
460
+ externalIdentifier,
461
+ email,
462
+ claims: { department: 'Editorial' },
463
+ claimMapping: {
464
+ rules: [
465
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
466
+ ],
467
+ },
468
+ },
469
+ disabledAt: null,
470
+ slug: 'mock',
471
+ type: 'mock',
472
+ },
473
+ }),
474
+ getPersonByIdpSql({
475
+ externalIdentifier,
476
+ identityProviderId: idpId,
477
+ response: { email, password: '123', identityId, personId, roles: [] },
478
+ }),
479
+ // before snapshot: project 'demo' does not resolve → skipped (no membership query)
480
+ getProjectBySlugSql({ projectSlug: 'demo', response: null }),
481
+ // apply: project still does not resolve → grant skipped, nothing created/removed
482
+ getProjectBySlugSql({ projectSlug: 'demo', response: null }),
483
+ // after snapshot: still empty → before == after → no audit
484
+ getProjectBySlugSql({ projectSlug: 'demo', response: null }),
485
+ getConfigSql(),
486
+ getIdentityByIdSql({ identityId }),
487
+ getAuthPoliciesSql(),
488
+ createSessionKeySql({ apiKeyId, identityId }),
489
+ ),
490
+ getIdentityProjectsSql({ identityId, projectId }),
491
+ selectMembershipsSql({ identityId, projectId, membershipsResponse: [] }),
492
+ ],
493
+ return: {
494
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
495
+ },
496
+ // Nothing changed (project missing) → only the login is audited.
497
+ expectedAuthLog: { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
498
+ })
499
+ })
500
+
501
+ test('unmatched: remove strips a no-longer-granted membership in a mapped project', async () => {
502
+ const identityId = testUuid(2)
503
+ const personId = testUuid(7)
504
+ const idpId = testUuid(20)
505
+ const mappedProjectId = testUuid(30)
506
+ const sessionProjectId = testUuid(10)
507
+ // the membership insert consumes #1, the session key #2.
508
+ const membershipId = testUuid(1)
509
+ const apiKeyId = testUuid(2)
510
+ const project = mappedProject(mappedProjectId)
511
+ await executeTenantTest({
512
+ query: baseSignInQuery,
513
+ executes: [
514
+ ...sqlTransaction(
515
+ getIdpBySlugSql({
516
+ slug: 'mock',
517
+ response: {
518
+ id: idpId,
519
+ autoSignUp: false,
520
+ exclusive: false,
521
+ initReturnsConfig: false,
522
+ requireVerifiedEmail: false,
523
+ assumeEmailVerified: false,
524
+ configuration: {
525
+ externalIdentifier,
526
+ email,
527
+ claims: { department: 'Editorial' },
528
+ claimMapping: {
529
+ unmatched: 'remove',
530
+ rules: [
531
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
532
+ // `reviewer` is in the mapping's membership vocabulary (named by this rule) but its
533
+ // claim does not match this sign-in, so under `remove` it is the stale membership stripped.
534
+ { claim: 'department', equals: 'Management', grantMembership: { project: 'demo', role: 'reviewer' } },
535
+ ],
536
+ },
537
+ },
538
+ disabledAt: null,
539
+ slug: 'mock',
540
+ type: 'mock',
541
+ },
542
+ }),
543
+ getPersonByIdpSql({
544
+ externalIdentifier,
545
+ identityProviderId: idpId,
546
+ response: { email, password: '123', identityId, personId, roles: [] },
547
+ }),
548
+ // before snapshot: identity holds `editor` (still granted) and a stale `reviewer`.
549
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
550
+ selectMembershipsSql({
551
+ identityId,
552
+ projectId: mappedProjectId,
553
+ membershipsResponse: [{ role: 'editor', variables: [] }, { role: 'reviewer', variables: [] }],
554
+ }),
555
+ // apply memberships: resolve project, drop the no-longer-granted `reviewer`, (re)create `editor`.
556
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
557
+ selectMembershipsSql({
558
+ identityId,
559
+ projectId: mappedProjectId,
560
+ membershipsResponse: [{ role: 'editor', variables: [] }, { role: 'reviewer', variables: [] }],
561
+ }),
562
+ removeMembershipSql({ projectId: mappedProjectId, identityId, role: 'reviewer' }),
563
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
564
+ // after snapshot: only `editor` remains.
565
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
566
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
567
+ getConfigSql(),
568
+ getIdentityByIdSql({ identityId }),
569
+ getAuthPoliciesSql(),
570
+ createSessionKeySql({ apiKeyId, identityId }),
571
+ ),
572
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
573
+ selectMembershipsSql({
574
+ identityId,
575
+ projectId: sessionProjectId,
576
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }],
577
+ }),
578
+ ],
579
+ return: {
580
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
581
+ },
582
+ expectedAuthLog: [
583
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
584
+ {
585
+ type: 'idp_role_mapped',
586
+ response: expect.objectContaining({ ok: true }),
587
+ personId,
588
+ targetPersonId: personId,
589
+ identityProviderId: idpId,
590
+ eventData: {
591
+ before: { memberships: [{ project: 'demo', role: 'editor', variables: [] }, { project: 'demo', role: 'reviewer', variables: [] }] },
592
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
593
+ syncPolicy: 'always',
594
+ unmatched: 'remove',
595
+ },
596
+ },
597
+ ],
598
+ })
599
+ })
600
+
601
+ test('unmatched: remove revokes the whole membership when a declared variable resolves empty (no empty-variable grant)', async () => {
602
+ const identityId = testUuid(2)
603
+ const personId = testUuid(7)
604
+ const idpId = testUuid(20)
605
+ const mappedProjectId = testUuid(30)
606
+ const sessionProjectId = testUuid(10)
607
+ // No membership is (re)created: the `editor` grant is REVOKED because its declared `locale` variable resolves
608
+ // empty. The system does not allow an empty membership variable (the direct add-member path hard-deletes such a
609
+ // grant), and CORR-1: clearing a `condition` variable to `[]` would widen it to allow-all — so the whole
610
+ // membership is removed. Revoking is a DELETE (no uuid), so the only uuid consumed is the session key (#1).
611
+ const apiKeyId = testUuid(1)
612
+ const project = mappedProject(mappedProjectId)
613
+ await executeTenantTest({
614
+ query: baseSignInQuery,
615
+ executes: [
616
+ ...sqlTransaction(
617
+ getIdpBySlugSql({
618
+ slug: 'mock',
619
+ response: {
620
+ id: idpId,
621
+ autoSignUp: false,
622
+ exclusive: false,
623
+ initReturnsConfig: false,
624
+ requireVerifiedEmail: false,
625
+ assumeEmailVerified: false,
626
+ configuration: {
627
+ externalIdentifier,
628
+ email,
629
+ // The match claim is present (the rule matches), but the variable's source claim `langs`
630
+ // is gone, so `locale` resolves to no values — an empty-scoped, invalid grant under `remove`.
631
+ claims: { department: 'Editorial' },
632
+ claimMapping: {
633
+ unmatched: 'remove',
634
+ rules: [
635
+ {
636
+ claim: 'department',
637
+ equals: 'Editorial',
638
+ grantMembership: {
639
+ project: 'demo',
640
+ role: 'editor',
641
+ variables: [{ name: 'locale', from: { claim: 'langs', split: ',' }, map: { cs: ['uuid-cs'] } }],
642
+ },
643
+ },
644
+ ],
645
+ },
646
+ },
647
+ disabledAt: null,
648
+ slug: 'mock',
649
+ type: 'mock',
650
+ },
651
+ }),
652
+ getPersonByIdpSql({
653
+ externalIdentifier,
654
+ identityProviderId: idpId,
655
+ response: { email, password: '123', identityId, personId, roles: [] },
656
+ }),
657
+ // before snapshot: identity holds `editor` in demo with a stale claim-derived `locale`.
658
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
659
+ selectMembershipsSql({
660
+ identityId,
661
+ projectId: mappedProjectId,
662
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['uuid-stale'] }] }],
663
+ }),
664
+ // apply: resolve project; the removal loop keeps `editor` (still granted this sign-in), but the create
665
+ // loop then REVOKES the whole `editor` membership because its declared `locale` resolves empty — an
666
+ // empty membership variable is not a valid grant (and clearing a condition variable to `[]` would
667
+ // widen it to allow-all instead of denying).
668
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
669
+ selectMembershipsSql({
670
+ identityId,
671
+ projectId: mappedProjectId,
672
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['uuid-stale'] }] }],
673
+ }),
674
+ removeMembershipSql({ projectId: mappedProjectId, identityId, role: 'editor' }),
675
+ // after snapshot: `editor` is gone (revoked).
676
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
677
+ selectMembershipsSql({
678
+ identityId,
679
+ projectId: mappedProjectId,
680
+ membershipsResponse: [],
681
+ }),
682
+ getConfigSql(),
683
+ getIdentityByIdSql({ identityId }),
684
+ getAuthPoliciesSql(),
685
+ createSessionKeySql({ apiKeyId, identityId }),
686
+ ),
687
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
688
+ selectMembershipsSql({
689
+ identityId,
690
+ projectId: sessionProjectId,
691
+ membershipsResponse: [],
692
+ }),
693
+ ],
694
+ return: {
695
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
696
+ },
697
+ expectedAuthLog: [
698
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
699
+ {
700
+ type: 'idp_role_mapped',
701
+ response: expect.objectContaining({ ok: true }),
702
+ personId,
703
+ targetPersonId: personId,
704
+ identityProviderId: idpId,
705
+ eventData: {
706
+ before: { memberships: [{ project: 'demo', role: 'editor', variables: [{ name: 'locale', values: ['uuid-stale'] }] }] },
707
+ // the whole `editor` membership is revoked (an empty declared variable is not a valid grant).
708
+ after: { memberships: [] },
709
+ syncPolicy: 'always',
710
+ unmatched: 'remove',
711
+ },
712
+ },
713
+ ],
714
+ })
715
+ })
716
+
717
+ test('sticky sync policy APPLIES on a brand-new auto-signed-up person', async () => {
718
+ // uuid order: identity #1, person #2, person_identity_provider #3, membership #4, session key #5.
719
+ const identityId = testUuid(1)
720
+ const personId = testUuid(2)
721
+ const idpId = testUuid(20)
722
+ const mappedProjectId = testUuid(30)
723
+ const sessionProjectId = testUuid(10)
724
+ const membershipId = testUuid(4)
725
+ const apiKeyId = testUuid(5)
726
+ const project = mappedProject(mappedProjectId)
727
+ await executeTenantTest({
728
+ query: baseSignInQuery,
729
+ executes: [
730
+ ...sqlTransaction(
731
+ getIdpBySlugSql({
732
+ slug: 'mock',
733
+ response: {
734
+ id: idpId,
735
+ autoSignUp: true,
736
+ exclusive: true,
737
+ initReturnsConfig: false,
738
+ requireVerifiedEmail: false,
739
+ assumeEmailVerified: false,
740
+ configuration: {
741
+ externalIdentifier,
742
+ email,
743
+ claims: { department: 'Editorial' },
744
+ // sticky → applies ONLY at account creation; this sign-in creates the account.
745
+ claimMapping: {
746
+ syncPolicy: 'sticky',
747
+ rules: [
748
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
749
+ ],
750
+ },
751
+ },
752
+ disabledAt: null,
753
+ slug: 'mock',
754
+ type: 'mock',
755
+ },
756
+ }),
757
+ // no existing person → auto sign-up creates the identity + person + IdP link
758
+ getPersonByIdpSql({ externalIdentifier, identityProviderId: idpId, response: null }),
759
+ createIdentitySql({ identityId, roles: ['person'] }),
760
+ createPersonSql({ personId, identityId, name: 'john', idpOnly: true }),
761
+ {
762
+ sql: `insert into "tenant"."person_identity_provider" ("id", "identity_provider_id", "person_id", "external_identifier") values (?, ?, ?, ?)`,
763
+ parameters: [testUuid(3), idpId, personId, externalIdentifier],
764
+ response: { rowCount: 1 },
765
+ },
766
+ // claim sync runs with isNewPerson=true → sticky applies → membership granted
767
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
768
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
769
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
770
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
771
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
772
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
773
+ getConfigSql(),
774
+ getIdentityByIdSql({ identityId }),
775
+ getAuthPoliciesSql(),
776
+ createSessionKeySql({ apiKeyId, identityId }),
777
+ ),
778
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
779
+ selectMembershipsSql({ identityId, projectId: sessionProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
780
+ ],
781
+ return: {
782
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
783
+ },
784
+ expectedAuthLog: [
785
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
786
+ {
787
+ type: 'idp_role_mapped',
788
+ response: expect.objectContaining({ ok: true }),
789
+ personId,
790
+ targetPersonId: personId,
791
+ identityProviderId: idpId,
792
+ eventData: {
793
+ before: { memberships: [] },
794
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
795
+ syncPolicy: 'sticky',
796
+ unmatched: 'keep',
797
+ },
798
+ },
799
+ ],
800
+ })
801
+ })
802
+
803
+ test('unmatched: remove revokes a vocabulary membership even when no rule matches this sign-in', async () => {
804
+ const identityId = testUuid(2)
805
+ const personId = testUuid(7)
806
+ const idpId = testUuid(20)
807
+ const mappedProjectId = testUuid(30)
808
+ const sessionProjectId = testUuid(10)
809
+ // Nothing is created (only a removal), so the session key is the first uuid() consumer.
810
+ const apiKeyId = testUuid(1)
811
+ const project = mappedProject(mappedProjectId)
812
+ await executeTenantTest({
813
+ query: baseSignInQuery,
814
+ executes: [
815
+ ...sqlTransaction(
816
+ getIdpBySlugSql({
817
+ slug: 'mock',
818
+ response: {
819
+ id: idpId,
820
+ autoSignUp: false,
821
+ exclusive: false,
822
+ initReturnsConfig: false,
823
+ requireVerifiedEmail: false,
824
+ assumeEmailVerified: false,
825
+ configuration: {
826
+ externalIdentifier,
827
+ email,
828
+ // The claim no longer matches at all (department changed), so `editor` is not granted —
829
+ // yet `demo::editor` is in the mapping's vocabulary and must still be reconciled away.
830
+ claims: { department: 'Sales' },
831
+ claimMapping: {
832
+ unmatched: 'remove',
833
+ rules: [
834
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
835
+ ],
836
+ },
837
+ },
838
+ disabledAt: null,
839
+ slug: 'mock',
840
+ type: 'mock',
841
+ },
842
+ }),
843
+ getPersonByIdpSql({
844
+ externalIdentifier,
845
+ identityProviderId: idpId,
846
+ response: { email, password: '123', identityId, personId, roles: [] },
847
+ }),
848
+ // before snapshot: identity still holds the stale `editor` in demo.
849
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
850
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
851
+ // apply memberships: demo is in vocabulary, so it is reconciled even though nothing was granted;
852
+ // `editor` is in vocabulary and not granted now → stripped. Nothing to create.
853
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
854
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
855
+ removeMembershipSql({ projectId: mappedProjectId, identityId, role: 'editor' }),
856
+ // after snapshot: demo membership is gone.
857
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
858
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
859
+ getConfigSql(),
860
+ getIdentityByIdSql({ identityId }),
861
+ getAuthPoliciesSql(),
862
+ createSessionKeySql({ apiKeyId, identityId }),
863
+ ),
864
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
865
+ selectMembershipsSql({ identityId, projectId: sessionProjectId, membershipsResponse: [] }),
866
+ ],
867
+ return: {
868
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
869
+ },
870
+ expectedAuthLog: [
871
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
872
+ {
873
+ type: 'idp_role_mapped',
874
+ response: expect.objectContaining({ ok: true }),
875
+ personId,
876
+ targetPersonId: personId,
877
+ identityProviderId: idpId,
878
+ eventData: {
879
+ before: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
880
+ after: { memberships: [] },
881
+ syncPolicy: 'always',
882
+ unmatched: 'remove',
883
+ },
884
+ },
885
+ ],
886
+ })
887
+ })
888
+
889
+ test('unmatched: remove never strips a membership outside the mapping vocabulary (a manually-granted admin survives)', async () => {
890
+ const identityId = testUuid(2)
891
+ const personId = testUuid(7)
892
+ const idpId = testUuid(20)
893
+ const mappedProjectId = testUuid(30)
894
+ const sessionProjectId = testUuid(10)
895
+ // editor (re)created consumes #1, the session key #2.
896
+ const membershipId = testUuid(1)
897
+ const apiKeyId = testUuid(2)
898
+ const project = mappedProject(mappedProjectId)
899
+ // before/apply: identity holds editor (still granted), a stale reviewer (in the mapping vocabulary)
900
+ // and admin (named by NO rule → outside the vocabulary). Only reviewer may be removed; admin and the
901
+ // re-granted editor must survive — this pins the `vocabularyRoles.has(...)` bound in applyMemberships.
902
+ // admin survives in the DB (no remove command, still in the after-snapshot response) but, being outside
903
+ // the vocabulary, is NOT disclosed in the audit before/after delta (snapshot is vocabulary-bounded).
904
+ const existing = [
905
+ { role: 'editor', variables: [] },
906
+ { role: 'reviewer', variables: [] },
907
+ { role: 'admin', variables: [] },
908
+ ]
909
+ await executeTenantTest({
910
+ query: baseSignInQuery,
911
+ executes: [
912
+ ...sqlTransaction(
913
+ getIdpBySlugSql({
914
+ slug: 'mock',
915
+ response: {
916
+ id: idpId,
917
+ autoSignUp: false,
918
+ exclusive: false,
919
+ initReturnsConfig: false,
920
+ requireVerifiedEmail: false,
921
+ assumeEmailVerified: false,
922
+ configuration: {
923
+ externalIdentifier,
924
+ email,
925
+ claims: { department: 'Editorial' },
926
+ claimMapping: {
927
+ unmatched: 'remove',
928
+ rules: [
929
+ { claim: 'department', equals: 'Editorial', grantMembership: { project: 'demo', role: 'editor' } },
930
+ { claim: 'department', equals: 'Management', grantMembership: { project: 'demo', role: 'reviewer' } },
931
+ ],
932
+ },
933
+ },
934
+ disabledAt: null,
935
+ slug: 'mock',
936
+ type: 'mock',
937
+ },
938
+ }),
939
+ getPersonByIdpSql({
940
+ externalIdentifier,
941
+ identityProviderId: idpId,
942
+ response: { email, password: '123', identityId, personId, roles: [] },
943
+ }),
944
+ // before snapshot
945
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
946
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: existing }),
947
+ // apply: reconcile — only the in-vocabulary, no-longer-granted `reviewer` is removed; `admin`
948
+ // (outside the vocabulary) is left untouched, `editor` (granted) is (re)created.
949
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
950
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: existing }),
951
+ removeMembershipSql({ projectId: mappedProjectId, identityId, role: 'reviewer' }),
952
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
953
+ // after snapshot: editor + admin remain, reviewer gone.
954
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
955
+ selectMembershipsSql({
956
+ identityId,
957
+ projectId: mappedProjectId,
958
+ membershipsResponse: [{ role: 'editor', variables: [] }, { role: 'admin', variables: [] }],
959
+ }),
960
+ getConfigSql(),
961
+ getIdentityByIdSql({ identityId }),
962
+ getAuthPoliciesSql(),
963
+ createSessionKeySql({ apiKeyId, identityId }),
964
+ ),
965
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
966
+ selectMembershipsSql({ identityId, projectId: sessionProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
967
+ ],
968
+ return: {
969
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
970
+ },
971
+ expectedAuthLog: [
972
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
973
+ {
974
+ type: 'idp_role_mapped',
975
+ response: expect.objectContaining({ ok: true }),
976
+ personId,
977
+ targetPersonId: personId,
978
+ identityProviderId: idpId,
979
+ eventData: {
980
+ // admin is held but outside the vocabulary → excluded from the delta (SEC-1: the snapshot is
981
+ // bounded to the mapping's own (project, role) pairs, so memberships managed outside it are not
982
+ // disclosed in the audit). before = editor + the stale reviewer; after = only editor.
983
+ before: {
984
+ memberships: [
985
+ { project: 'demo', role: 'editor', variables: [] },
986
+ { project: 'demo', role: 'reviewer', variables: [] },
987
+ ],
988
+ },
989
+ after: {
990
+ memberships: [
991
+ { project: 'demo', role: 'editor', variables: [] },
992
+ ],
993
+ },
994
+ syncPolicy: 'always',
995
+ unmatched: 'remove',
996
+ },
997
+ },
998
+ ],
999
+ })
1000
+ })
1001
+
1002
+ test('a passthrough claim-derived variable writes only allow-listed values (the disallowed raw claim is filtered)', async () => {
1003
+ const identityId = testUuid(2)
1004
+ const personId = testUuid(7)
1005
+ const idpId = testUuid(20)
1006
+ const mappedProjectId = testUuid(30)
1007
+ const sessionProjectId = testUuid(10)
1008
+ // membership insert #1, the membership-variable insert #2, the session key #3.
1009
+ const membershipId = testUuid(1)
1010
+ const variableId = testUuid(2)
1011
+ const apiKeyId = testUuid(3)
1012
+ const project = mappedProject(mappedProjectId)
1013
+ await executeTenantTest({
1014
+ query: baseSignInQuery,
1015
+ executes: [
1016
+ ...sqlTransaction(
1017
+ getIdpBySlugSql({
1018
+ slug: 'mock',
1019
+ response: {
1020
+ id: idpId,
1021
+ autoSignUp: false,
1022
+ exclusive: false,
1023
+ initReturnsConfig: false,
1024
+ requireVerifiedEmail: false,
1025
+ assumeEmailVerified: false,
1026
+ configuration: {
1027
+ externalIdentifier,
1028
+ email,
1029
+ // `langs` carries an allowed value (cs) and a disallowed one (de); passthrough would write
1030
+ // both verbatim, but `allow` must filter the raw claim down to `cs` before it is persisted.
1031
+ claims: { department: 'Editorial', langs: 'cs,de' },
1032
+ claimMapping: {
1033
+ rules: [
1034
+ {
1035
+ claim: 'department',
1036
+ equals: 'Editorial',
1037
+ grantMembership: {
1038
+ project: 'demo',
1039
+ role: 'editor',
1040
+ variables: [{ name: 'locale', from: { claim: 'langs', split: ',' }, passthrough: true, allow: ['cs', 'en'] }],
1041
+ },
1042
+ },
1043
+ ],
1044
+ },
1045
+ },
1046
+ disabledAt: null,
1047
+ slug: 'mock',
1048
+ type: 'mock',
1049
+ },
1050
+ }),
1051
+ getPersonByIdpSql({
1052
+ externalIdentifier,
1053
+ identityProviderId: idpId,
1054
+ response: { email, password: '123', identityId, personId, roles: [] },
1055
+ }),
1056
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1057
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
1058
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1059
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
1060
+ // only the allow-listed `cs` is written; the disallowed raw `de` never reaches the DB.
1061
+ createMembershipVariableSql({ variableId, membershipId, variableName: 'locale', values: ['cs'] }),
1062
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1063
+ selectMembershipsSql({
1064
+ identityId,
1065
+ projectId: mappedProjectId,
1066
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }],
1067
+ }),
1068
+ getConfigSql(),
1069
+ getIdentityByIdSql({ identityId }),
1070
+ getAuthPoliciesSql(),
1071
+ createSessionKeySql({ apiKeyId, identityId }),
1072
+ ),
1073
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
1074
+ selectMembershipsSql({
1075
+ identityId,
1076
+ projectId: sessionProjectId,
1077
+ membershipsResponse: [{ role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }],
1078
+ }),
1079
+ ],
1080
+ return: {
1081
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
1082
+ },
1083
+ expectedAuthLog: [
1084
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
1085
+ {
1086
+ type: 'idp_role_mapped',
1087
+ response: expect.objectContaining({ ok: true }),
1088
+ personId,
1089
+ targetPersonId: personId,
1090
+ identityProviderId: idpId,
1091
+ eventData: {
1092
+ before: { memberships: [] },
1093
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [{ name: 'locale', values: ['cs'] }] }] },
1094
+ syncPolicy: 'always',
1095
+ unmatched: 'keep',
1096
+ },
1097
+ },
1098
+ ],
1099
+ })
1100
+ })
1101
+
1102
+ test('TEST-4: a claimMapping carrying only the OIDC identity-field remap (no rules) is a no-op for A09 (no apply, no audit)', async () => {
1103
+ // The OIDC provider stores its identity-field remap under the same `configuration.claimMapping` key.
1104
+ // A09 only acts on `rules`, so a remap-only object is "no A09 mapping" (parseClaimMapping → null): the
1105
+ // sign-in runs NO membership snapshot/apply SQL and emits neither idp_role_mapped nor idp_role_mapping_failed.
1106
+ const identityId = testUuid(2)
1107
+ const personId = testUuid(7)
1108
+ const projectId = testUuid(10)
1109
+ const apiKeyId = testUuid(1)
1110
+ const idpId = testUuid(20)
1111
+ await executeTenantTest({
1112
+ query: baseSignInQuery,
1113
+ executes: [
1114
+ ...sqlTransaction(
1115
+ getIdpBySlugSql({
1116
+ slug: 'mock',
1117
+ response: {
1118
+ id: idpId,
1119
+ autoSignUp: false,
1120
+ exclusive: false,
1121
+ initReturnsConfig: false,
1122
+ requireVerifiedEmail: false,
1123
+ assumeEmailVerified: false,
1124
+ configuration: {
1125
+ externalIdentifier,
1126
+ email,
1127
+ claims: { department: 'Editorial' },
1128
+ // remap-only claimMapping (the OIDC identity-field remap) — no `rules`, so A09 self-skips
1129
+ claimMapping: { email: 'mail', name: 'displayName', externalIdentifier: 'sub' },
1130
+ },
1131
+ disabledAt: null,
1132
+ slug: 'mock',
1133
+ type: 'mock',
1134
+ },
1135
+ }),
1136
+ getPersonByIdpSql({
1137
+ externalIdentifier,
1138
+ identityProviderId: idpId,
1139
+ response: { email, password: '123', identityId, personId, roles: [] },
1140
+ }),
1141
+ // no rules → A09 self-skips: no snapshot / project / membership SQL at all
1142
+ getConfigSql(),
1143
+ getIdentityByIdSql({ identityId }),
1144
+ getAuthPoliciesSql(),
1145
+ createSessionKeySql({ apiKeyId, identityId }),
1146
+ ),
1147
+ getIdentityProjectsSql({ identityId, projectId }),
1148
+ selectMembershipsSql({ identityId, projectId, membershipsResponse: [] }),
1149
+ ],
1150
+ return: {
1151
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
1152
+ },
1153
+ // A09 self-skipped (no rules) → only the login is audited
1154
+ expectedAuthLog: { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
1155
+ })
1156
+ })
1157
+
1158
+ test('a passthrough claim-derived variable with allow:[] writes no variable, keeping the membership', async () => {
1159
+ const identityId = testUuid(2)
1160
+ const personId = testUuid(7)
1161
+ const idpId = testUuid(20)
1162
+ const mappedProjectId = testUuid(30)
1163
+ const sessionProjectId = testUuid(10)
1164
+ const membershipId = testUuid(1)
1165
+ const apiKeyId = testUuid(2)
1166
+ const project = mappedProject(mappedProjectId)
1167
+ await executeTenantTest({
1168
+ query: baseSignInQuery,
1169
+ executes: [
1170
+ ...sqlTransaction(
1171
+ getIdpBySlugSql({
1172
+ slug: 'mock',
1173
+ response: {
1174
+ id: idpId,
1175
+ autoSignUp: false,
1176
+ exclusive: false,
1177
+ initReturnsConfig: false,
1178
+ requireVerifiedEmail: false,
1179
+ assumeEmailVerified: false,
1180
+ configuration: {
1181
+ externalIdentifier,
1182
+ email,
1183
+ claims: { department: 'Editorial', langs: 'cs,de' },
1184
+ // allow:[] rejects every derived value → `locale` resolves empty → no variable row is
1185
+ // written, and the membership itself is still created (empty variables are dropped).
1186
+ claimMapping: {
1187
+ rules: [
1188
+ {
1189
+ claim: 'department',
1190
+ equals: 'Editorial',
1191
+ grantMembership: {
1192
+ project: 'demo',
1193
+ role: 'editor',
1194
+ variables: [{ name: 'locale', from: { claim: 'langs', split: ',' }, passthrough: true, allow: [] }],
1195
+ },
1196
+ },
1197
+ ],
1198
+ },
1199
+ },
1200
+ disabledAt: null,
1201
+ slug: 'mock',
1202
+ type: 'mock',
1203
+ },
1204
+ }),
1205
+ getPersonByIdpSql({
1206
+ externalIdentifier,
1207
+ identityProviderId: idpId,
1208
+ response: { email, password: '123', identityId, personId, roles: [] },
1209
+ }),
1210
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1211
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [] }),
1212
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1213
+ createMembershipSql({ membershipId, identityId, projectId: mappedProjectId, role: 'editor' }),
1214
+ getProjectBySlugSql({ projectSlug: 'demo', response: project }),
1215
+ selectMembershipsSql({ identityId, projectId: mappedProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
1216
+ getConfigSql(),
1217
+ getIdentityByIdSql({ identityId }),
1218
+ getAuthPoliciesSql(),
1219
+ createSessionKeySql({ apiKeyId, identityId }),
1220
+ ),
1221
+ getIdentityProjectsSql({ identityId, projectId: sessionProjectId }),
1222
+ selectMembershipsSql({ identityId, projectId: sessionProjectId, membershipsResponse: [{ role: 'editor', variables: [] }] }),
1223
+ ],
1224
+ return: {
1225
+ data: { signInIDP: { ok: true, errors: [], result: { token: '0000000000000000000000000000000000000000' } } },
1226
+ },
1227
+ expectedAuthLog: [
1228
+ { type: 'idp_login', response: expect.objectContaining({ ok: true }) },
1229
+ {
1230
+ type: 'idp_role_mapped',
1231
+ response: expect.objectContaining({ ok: true }),
1232
+ personId,
1233
+ targetPersonId: personId,
1234
+ identityProviderId: idpId,
1235
+ eventData: {
1236
+ before: { memberships: [] },
1237
+ after: { memberships: [{ project: 'demo', role: 'editor', variables: [] }] },
1238
+ syncPolicy: 'always',
1239
+ unmatched: 'keep',
1240
+ },
1241
+ },
1242
+ ],
1243
+ })
1244
+ })