@stytch/react 20.0.0-next.0 → 20.0.0-next.1

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 (270) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/{StytchSSRProxy-CUOvjF03.js → StytchSSRProxy-Bz6LNYdq.js} +186 -1
  3. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -0
  4. package/dist/cjs/adminPortal/index.cjs +102 -26
  5. package/dist/cjs/adminPortal/index.cjs.map +1 -1
  6. package/dist/cjs/b2b/index.cjs +176 -138
  7. package/dist/cjs/b2b/index.cjs.map +1 -1
  8. package/dist/cjs/b2b/index.headless.cjs +24 -24
  9. package/dist/cjs/b2b/index.headless.cjs.map +1 -1
  10. package/dist/cjs/{idpHelpers-eUP8j58U.js → idpHelpers-Bj_7pbfW.js} +7 -191
  11. package/dist/cjs/idpHelpers-Bj_7pbfW.js.map +1 -0
  12. package/dist/cjs/{index-DfiRrtK8.js → index-Ni_dyEsz.js} +3 -3
  13. package/dist/cjs/{index-DfiRrtK8.js.map → index-Ni_dyEsz.js.map} +1 -1
  14. package/dist/cjs/index.cjs +207 -196
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/index.headless.cjs +32 -32
  17. package/dist/cjs/index.headless.cjs.map +1 -1
  18. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js → passwordManagerDisableAutofillProps-DV31RTL_.js} +2 -2
  19. package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js.map → passwordManagerDisableAutofillProps-DV31RTL_.js.map} +1 -1
  20. package/dist/cjs/{shadcn-Bbv2Hk3P.js → shadcn-B8TEzQMT.js} +99 -81
  21. package/dist/cjs/shadcn-B8TEzQMT.js.map +1 -0
  22. package/dist/cjs-dev/{StytchSSRProxy-D0B5PuT0.js → StytchSSRProxy-CxXsyme4.js} +186 -1
  23. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +1 -0
  24. package/dist/cjs-dev/adminPortal/index.cjs +102 -26
  25. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  26. package/dist/cjs-dev/b2b/index.cjs +176 -138
  27. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  28. package/dist/cjs-dev/b2b/index.headless.cjs +24 -24
  29. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  30. package/dist/cjs-dev/{idpHelpers-DOOVv6dT.js → idpHelpers-Cf8Qq1B4.js} +7 -191
  31. package/dist/cjs-dev/idpHelpers-Cf8Qq1B4.js.map +1 -0
  32. package/dist/cjs-dev/{index-paeFcHjf.js → index-DdK3Jt4u.js} +3 -3
  33. package/dist/cjs-dev/{index-paeFcHjf.js.map → index-DdK3Jt4u.js.map} +1 -1
  34. package/dist/cjs-dev/index.cjs +207 -196
  35. package/dist/cjs-dev/index.cjs.map +1 -1
  36. package/dist/cjs-dev/index.headless.cjs +32 -32
  37. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  38. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js → passwordManagerDisableAutofillProps-D70WyvIu.js} +2 -2
  39. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js.map → passwordManagerDisableAutofillProps-D70WyvIu.js.map} +1 -1
  40. package/dist/cjs-dev/{shadcn-CdbmlhdF.js → shadcn-C4w3DtKK.js} +99 -81
  41. package/dist/cjs-dev/shadcn-C4w3DtKK.js.map +1 -0
  42. package/dist/esm/_virtual/index.mjs +4 -4
  43. package/dist/esm/_virtual/index3.mjs +3 -5
  44. package/dist/esm/_virtual/index3.mjs.map +1 -1
  45. package/dist/esm/_virtual/index4.mjs +5 -3
  46. package/dist/esm/_virtual/index4.mjs.map +1 -1
  47. package/dist/esm/_virtual/index6.mjs +2 -2
  48. package/dist/esm/_virtual/index7.mjs +2 -2
  49. package/dist/esm/adminPortal/index.mjs +4 -1
  50. package/dist/esm/adminPortal/index.mjs.map +1 -1
  51. package/dist/esm/b2b/index.mjs.map +1 -1
  52. package/dist/esm/node_modules/lodash.merge/index.mjs +1 -1
  53. package/dist/esm/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  54. package/dist/esm/packages/core/src/rpc/FrameClient.mjs +1 -0
  55. package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  56. package/dist/esm/packages/web/messages/b2b/en.json.mjs +10 -3
  57. package/dist/esm/packages/web/messages/b2b/en.json.mjs.map +1 -1
  58. package/dist/esm/packages/web/messages/en.json.mjs +10 -3
  59. package/dist/esm/packages/web/messages/en.json.mjs.map +1 -1
  60. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  61. package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  62. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  63. package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  64. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  65. package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  66. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  67. package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  68. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  69. package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  70. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  71. package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  72. package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  73. package/dist/esm/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  74. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  75. package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  76. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  77. package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  78. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  79. package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  80. package/dist/esm/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  81. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  82. package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  83. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  84. package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  85. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  86. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  87. package/dist/esm/packages/web/src/ui/b2b/utils.mjs +8 -1
  88. package/dist/esm/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  89. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  90. package/dist/esm/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  91. package/dist/esm/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  92. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  93. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  94. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  95. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  96. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
  97. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  98. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
  99. package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  100. package/dist/esm/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  101. package/dist/esm/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  102. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  103. package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  104. package/dist/esm/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  105. package/dist/esm/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  106. package/dist/esm/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  107. package/dist/esm/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  108. package/dist/esm/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  109. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  110. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  111. package/dist/esm/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  112. package/dist/esm/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  113. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  114. package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  115. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  116. package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  117. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  118. package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  119. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  120. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  121. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  122. package/dist/esm/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  123. package/dist/esm/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  124. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  125. package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  126. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  127. package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  128. package/dist/esm/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  129. package/dist/esm/packages/web/src/ui/components/organisms/OneTapError.mjs +1 -1
  130. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  131. package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  132. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  133. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  134. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  135. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  136. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  137. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  138. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  139. package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  140. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  141. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  142. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  143. package/dist/esm-dev/_virtual/index.mjs +4 -4
  144. package/dist/esm-dev/_virtual/index3.mjs +3 -5
  145. package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
  146. package/dist/esm-dev/_virtual/index4.mjs +5 -3
  147. package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
  148. package/dist/esm-dev/_virtual/index6.mjs +2 -2
  149. package/dist/esm-dev/_virtual/index7.mjs +2 -2
  150. package/dist/esm-dev/adminPortal/index.mjs +4 -1
  151. package/dist/esm-dev/adminPortal/index.mjs.map +1 -1
  152. package/dist/esm-dev/b2b/index.mjs.map +1 -1
  153. package/dist/esm-dev/node_modules/lodash.merge/index.mjs +1 -1
  154. package/dist/esm-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
  155. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs +1 -0
  156. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  157. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs +10 -3
  158. package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs.map +1 -1
  159. package/dist/esm-dev/packages/web/messages/en.json.mjs +10 -3
  160. package/dist/esm-dev/packages/web/messages/en.json.mjs.map +1 -1
  161. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
  162. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
  163. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
  164. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
  165. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
  166. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
  167. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
  168. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
  169. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
  170. package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
  171. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
  172. package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
  173. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  174. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
  175. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
  176. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
  177. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
  178. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
  179. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
  180. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
  181. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  182. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
  183. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
  184. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
  185. package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
  186. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
  187. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
  188. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs +8 -1
  189. package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs.map +1 -1
  190. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
  191. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  192. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  193. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
  194. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
  195. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
  196. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
  197. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
  198. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
  199. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
  200. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
  201. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  202. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  203. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
  204. package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
  205. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  206. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  207. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  208. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  209. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  210. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
  211. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
  212. package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
  213. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  214. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
  215. package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
  216. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
  217. package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
  218. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +3 -2
  219. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
  220. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
  221. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
  222. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
  223. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  224. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  225. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
  226. package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
  227. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
  228. package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
  229. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  230. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
  231. package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
  232. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
  233. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
  234. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
  235. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
  236. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
  237. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
  238. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
  239. package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
  240. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  241. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  242. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
  243. package/dist/types/{StytchB2BClient-Dq-ITB7Q.d.ts → StytchB2BClient-C_7NUKZh.d.ts} +1 -1
  244. package/dist/types/{StytchClient-BV0sT3Ox.d.ts → StytchClient-Ccvk8Nj1.d.ts} +1 -2
  245. package/dist/types/adminPortal/index.d.ts +5 -4
  246. package/dist/types/b2b/index.d.ts +11 -11
  247. package/dist/types/b2b/index.headless.d.ts +4 -4
  248. package/dist/types/{createAuthUrlHandler-Ck5TyB9J.d.ts → createAuthUrlHandler-BJRA2PHG.d.ts} +939 -39
  249. package/dist/types/idpHelpers-aCVwNrDk.d.ts +36 -0
  250. package/dist/types/index.d.ts +8 -8
  251. package/dist/types/index.headless.d.ts +4 -4
  252. package/dist/types/{shadcn-CFz8Asq0.d.ts → shadcn-0e4fkV5Z.d.ts} +6 -6
  253. package/messages/b2b/en.po +6 -3
  254. package/messages/en.po +6 -3
  255. package/package.json +1 -1
  256. package/dist/cjs/StytchSSRProxy-CUOvjF03.js.map +0 -1
  257. package/dist/cjs/idpHelpers-eUP8j58U.js.map +0 -1
  258. package/dist/cjs/shadcn-Bbv2Hk3P.js.map +0 -1
  259. package/dist/cjs-dev/StytchSSRProxy-D0B5PuT0.js.map +0 -1
  260. package/dist/cjs-dev/idpHelpers-DOOVv6dT.js.map +0 -1
  261. package/dist/cjs-dev/shadcn-CdbmlhdF.js.map +0 -1
  262. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  263. package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  264. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  265. package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  266. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
  267. package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
  268. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
  269. package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
  270. package/dist/types/idpHelpers-hBhPCtAC.d.ts +0 -936
@@ -1,8 +1,8 @@
1
1
  import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
2
- import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
2
+ import { __require as requireClassnames } from '../node_modules/classnames/index.mjs';
3
3
 
4
- var lodash_mergeExports = requireLodash_merge();
5
- var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
4
+ var classnamesExports = requireClassnames();
5
+ var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
6
6
 
7
- export { merge as default };
7
+ export { classNames as default };
8
8
  //# sourceMappingURL=index.mjs.map
@@ -1,8 +1,6 @@
1
- import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
2
- import { __require as requireClassnames } from '../node_modules/classnames/index.mjs';
1
+ import { __require as requireBs58 } from '../node_modules/bs58/index.mjs';
3
2
 
4
- var classnamesExports = requireClassnames();
5
- var classNames = /*@__PURE__*/getDefaultExportFromCjs(classnamesExports);
3
+ var bs58Exports = requireBs58();
6
4
 
7
- export { classNames as default };
5
+ export { bs58Exports as b };
8
6
  //# sourceMappingURL=index3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,6 +1,8 @@
1
- import { __require as requireBs58 } from '../node_modules/bs58/index.mjs';
1
+ import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
2
+ import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
2
3
 
3
- var bs58Exports = requireBs58();
4
+ var lodash_mergeExports = requireLodash_merge();
5
+ var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
4
6
 
5
- export { bs58Exports as b };
7
+ export { merge as default };
6
8
  //# sourceMappingURL=index4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,4 +1,4 @@
1
- var shim = {exports: {}};
1
+ var lodash_merge = {exports: {}};
2
2
 
3
- export { shim as __module };
3
+ export { lodash_merge as __module };
4
4
  //# sourceMappingURL=index6.mjs.map
@@ -1,4 +1,4 @@
1
- var lodash_merge = {exports: {}};
1
+ var shim = {exports: {}};
2
2
 
3
- export { lodash_merge as __module };
3
+ export { shim as __module };
4
4
  //# sourceMappingURL=index7.mjs.map
@@ -1,6 +1,9 @@
1
- export { AdminPortalB2BProducts } from '../packages/web/src/adminPortal/AdminPortalB2BProducts.mjs';
2
1
  export { AdminPortalMemberManagement } from '../packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs';
3
2
  export { AdminPortalOrgSettings } from '../packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs';
4
3
  export { AdminPortalSCIM } from '../packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs';
5
4
  export { AdminPortalSSO } from '../packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs';
5
+ export { AdminPortalB2BProducts } from '../packages/web/src/adminPortal/AdminPortalB2BProducts.mjs';
6
+ export { OAuthProviders, OTPMethods, OneTapPositions, RNUIProducts, StytchEventType, Wallets } from '../packages/core/src/public/ui.mjs';
7
+ export { BiometricRegistrationIdIsNullOrBlank, BiometricsAlreadyEnrolledError, BiometricsFailedError, BiometricsUnavailableError, ChallengeSigningFailedError, DFPNotConfigured, DeviceCredentialsNotAllowedError, FailedCodeChallengeError, FailedToDecryptDataError, IDPOAuthFlowMissingParamError, InternalError, InvalidAuthorizationCredentialError, InvalidCredentialTypeError, InvalidPrivateKeyLength, InvalidRedirectSchemeError, InvalidStartUrlError, JSONDataNotConvertibleToStringError, KeyInvalidatedError, KeystoreUnavailableError, MissingAttestationObjectError, MissingAuthorizationCredentialIDTokenError, MissingCipherIv, MissingGoogleClientIDError, MissingPKCEError, MissingPublicKeyError, MissingUrlError, NoBiometricsEnrolledError, NoBiometricsRegistrationError, NoCredentialsPresentError, NoCurrentSessionError, PasskeysInvalidEncoding, PasskeysMisconfigured, PasskeysUnsupportedError, RandomNumberGenerationFailed, SDKAPIUnreachableError, SDKNotConfiguredError, SignInWithAppleMisconfigured, StytchAPIError, StytchAPISchemaError, StytchAPIUnreachableError, StytchError, StytchSDKAPIError, StytchSDKError, StytchSDKSchemaError, StytchSDKUsageError, UNRECOVERABLE_ERROR_TYPES, UserCancellationError, UserLockedOutError, errorToStytchError } from '../packages/core/src/public/SDKErrors.mjs';
8
+ export { AuthFlowType, B2BMFAProducts, B2BOAuthProviders, RedirectURLType } from '../packages/core/src/public/b2b/ui.mjs';
6
9
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/b2b/index.ts"],"sourcesContent":["import { createStytchB2BClient } from '@stytch/web/b2b/headless';\n\n/**\n * @deprecated - use {@link createStytchB2BClient} instead\n */\nexport const createStytchB2BUIClient = createStytchB2BClient;\n\nexport {\n StytchB2BProvider,\n useStytchB2BClient,\n useStytchMemberSession,\n useStytchMember,\n useStytchIsAuthorized,\n useStytchOrganization,\n withStytchB2BClient,\n withStytchMemberSession,\n withStytchMember,\n withStytchOrganization,\n withStytchPermissions,\n} from './StytchB2BContext';\n\nexport * from '@stytch/web/b2b/headless';\nexport * from '@stytch/web/common';\nexport { StytchB2B, B2BIdentityProvider } from '@stytch/web/react/b2b';\nexport { B2BProducts } from '@stytch/web/b2b';\n\nexport type { StytchB2BProviderProps } from './StytchB2BContext';\nexport type { StytchB2BProps, B2BIdentityProviderProps } from '@stytch/web/react/b2b';\nexport type {\n B2BSDKConfig,\n B2BIDPSDKConfig,\n StytchB2BLoginConfig,\n B2BIDPConsentManifestGenerator,\n Strings,\n} from '@stytch/web/b2b';\n"],"names":["createStytchB2BUIClient","createStytchB2BClient"],"mappings":";;;;;;;;;;;;;;;;;AAEA;;IAGO,MAAMA,uBAAAA,GAA0BC;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/b2b/index.ts"],"sourcesContent":["import { createStytchB2BClient } from '@stytch/web/b2b/headless';\n\n/**\n * @deprecated - use {@link createStytchB2BClient} instead\n */\nexport const createStytchB2BUIClient = createStytchB2BClient;\n\nexport {\n StytchB2BProvider,\n useStytchB2BClient,\n useStytchMemberSession,\n useStytchMember,\n useStytchIsAuthorized,\n useStytchOrganization,\n withStytchB2BClient,\n withStytchMemberSession,\n withStytchMember,\n withStytchOrganization,\n withStytchPermissions,\n} from './StytchB2BContext';\n\nexport * from '@stytch/web/b2b/headless';\nexport * from '@stytch/web/common';\nexport { StytchB2B, B2BIdentityProvider } from '@stytch/web/react/b2b';\nexport { B2BProducts } from '@stytch/web/b2b';\n\nexport type { StytchB2BProviderProps } from './StytchB2BContext';\nexport type { StytchB2BProps, B2BIdentityProviderProps } from '@stytch/web/react/b2b';\nexport type {\n B2BSDKConfig,\n B2BIDPSDKConfig,\n StytchB2BUIConfig,\n B2BIDPConsentManifestGenerator,\n Strings,\n} from '@stytch/web/b2b';\n"],"names":["createStytchB2BUIClient","createStytchB2BClient"],"mappings":";;;;;;;;;;;;;;;;;AAEA;;IAGO,MAAMA,uBAAAA,GAA0BC;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { commonjsGlobal } from '../../_virtual/_commonjsHelpers.mjs';
2
- import { __module as lodash_merge } from '../../_virtual/index7.mjs';
2
+ import { __module as lodash_merge } from '../../_virtual/index6.mjs';
3
3
 
4
4
  /**
5
5
  * Lodash (Custom Build) <https://lodash.com/>
@@ -1,4 +1,4 @@
1
- import { __module as shim } from '../../../_virtual/index6.mjs';
1
+ import { __module as shim } from '../../../_virtual/index7.mjs';
2
2
  import { __require as requireUseSyncExternalStoreShim_production } from '../cjs/use-sync-external-store-shim.production.mjs';
3
3
 
4
4
  var hasRequiredShim;
@@ -18,6 +18,7 @@ class IframeHostClient {
18
18
  existingIframe.style.width = '0';
19
19
  existingIframe.style.height = '0';
20
20
  existingIframe.style.border = '0';
21
+ existingIframe.role = 'none';
21
22
  document.body.appendChild(existingIframe);
22
23
  } else {
23
24
  logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);
@@ -1 +1 @@
1
- {"version":3,"file":"FrameClient.mjs","sources":["../../../../../../../core/src/rpc/FrameClient.ts"],"sourcesContent":["import { ErrorMarshaller } from '../ErrorMarshaller';\nimport { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from '../constants';\nimport { logger } from '../utils';\n\ntype RequestPayload = {\n method: string;\n args: unknown[];\n};\n\ntype ResponsePayload<T> = {\n success: boolean;\n payload: T;\n error: Record<string, unknown>;\n};\n\nexport class IframeHostClient {\n frame!: Promise<HTMLIFrameElement>;\n\n constructor(private iframeURL: string) {\n this.createIframe();\n }\n\n private createIframe() {\n let existingIframe = document.querySelector(`[src~=\"${this.iframeURL}\"]`) as HTMLIFrameElement;\n\n /* If an iframe does not exist yet, create one */\n if (!existingIframe) {\n existingIframe = document.createElement('iframe');\n existingIframe.src = this.iframeURL;\n existingIframe.style.position = 'absolute';\n existingIframe.style.width = '0';\n existingIframe.style.height = '0';\n existingIframe.style.border = '0';\n document.body.appendChild(existingIframe);\n } else {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n }\n\n /**\n * [NASTY BUG]\n * If we postMessage to an iframe that is _not yet loaded_, chrome will give a cryptic error message\n * Failed to execute 'postMessage' on 'DOMWindow':\n * The target origin provided ('https://js.stytch.com') does not match the recipient window's origin ('http://localhost:3000').\n * There is no builtin way to determine if an iframe is already loaded,\n * so we set a dataset attr in our onload handler and use that to determine loading state\n */\n if (existingIframe.dataset.loaded === 'true') {\n this.frame = Promise.resolve(existingIframe);\n return;\n }\n\n this.frame = new Promise((resolve) => {\n existingIframe.addEventListener(\n 'load',\n () => {\n existingIframe.dataset.loaded = 'true';\n resolve(existingIframe);\n },\n { once: true },\n );\n });\n }\n\n async call<T>(method: string, args: unknown[]): Promise<T> {\n const frame = await this.frame;\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (event) => {\n const resp = event.data as ResponsePayload<T>;\n channel.port1.close();\n if (resp.success) {\n resolve(resp.payload);\n } else {\n reject(ErrorMarshaller.unmarshall(resp.error));\n }\n };\n\n const message: RequestPayload = {\n method,\n args,\n };\n\n frame.contentWindow?.postMessage(message, this.iframeURL, [channel.port2]);\n });\n }\n}\n"],"names":["IframeHostClient","frame","constructor","iframeURL","createIframe","existingIframe","document","querySelector","createElement","src","style","position","width","height","border","body","appendChild","logger","warn","MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING","dataset","loaded","Promise","resolve","addEventListener","once","call","method","args","channel","MessageChannel","reject","port1","onmessage","event","resp","data","close","success","payload","ErrorMarshaller","unmarshall","error","message","contentWindow","postMessage","port2"],"mappings":";;;;AAeO,MAAMA,gBAAAA,CAAAA;;IACXC,KAAAA;IAEAC,WAAAA,CAAoBC,SAAiB,CAAE;aAAnBA,SAAAA,GAAAA,SAAAA;AAClB,QAAA,IAAI,CAACC,YAAY,EAAA;AACnB,IAAA;IAEQA,YAAAA,GAAe;AACrB,QAAA,IAAIC,cAAAA,GAAiBC,QAAAA,CAASC,aAAa,CAAC,CAAC,OAAO,EAAE,IAAI,CAACJ,SAAS,CAAC,EAAE,CAAC,CAAA;0DAGxE,IAAI,CAACE,cAAAA,EAAgB;YACnBA,cAAAA,GAAiBC,QAAAA,CAASE,aAAa,CAAC,QAAA,CAAA;AACxCH,YAAAA,cAAAA,CAAeI,GAAG,GAAG,IAAI,CAACN,SAAS;YACnCE,cAAAA,CAAeK,KAAK,CAACC,QAAQ,GAAG,UAAA;YAChCN,cAAAA,CAAeK,KAAK,CAACE,KAAK,GAAG,GAAA;YAC7BP,cAAAA,CAAeK,KAAK,CAACG,MAAM,GAAG,GAAA;YAC9BR,cAAAA,CAAeK,KAAK,CAACI,MAAM,GAAG,GAAA;YAC9BR,QAAAA,CAASS,IAAI,CAACC,WAAW,CAACX,cAAAA,CAAAA;QAC5B,CAAA,MAAO;AACLY,YAAAA,MAAAA,CAAOC,IAAI,CAACC,wCAAAA,CAAAA;AACd,QAAA;AAEA;;;;;;;AAOC,QACD,IAAId,cAAAA,CAAee,OAAO,CAACC,MAAM,KAAK,MAAA,EAAQ;AAC5C,YAAA,IAAI,CAACpB,KAAK,GAAGqB,OAAAA,CAAQC,OAAO,CAAClB,cAAAA,CAAAA;AAC7B,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACJ,KAAK,GAAG,IAAIqB,QAAQ,CAACC,OAAAA,GAAAA;YACxBlB,cAAAA,CAAemB,gBAAgB,CAC7B,MAAA,EACA,IAAA;gBACEnB,cAAAA,CAAee,OAAO,CAACC,MAAM,GAAG,MAAA;gBAChCE,OAAAA,CAAQlB,cAAAA,CAAAA;YACV,CAAA,EACA;gBAAEoB,IAAAA,EAAM;AAAK,aAAA,CAAA;AAEjB,QAAA,CAAA,CAAA;AACF,IAAA;AAEA,IAAA,MAAMC,IAAAA,CAAQC,MAAc,EAAEC,IAAe,EAAc;AACzD,QAAA,MAAM3B,KAAAA,GAAQ,MAAM,IAAI,CAACA,KAAK;AAC9B,QAAA,MAAM4B,UAAU,IAAIC,cAAAA,EAAAA;QAEpB,OAAO,IAAIR,OAAAA,CAAQ,CAACC,OAAAA,EAASQ,MAAAA,GAAAA;AAC3BF,YAAAA,OAAAA,CAAQG,KAAK,CAACC,SAAS,GAAG,CAACC,KAAAA,GAAAA;gBACzB,MAAMC,IAAAA,GAAOD,MAAME,IAAI;gBACvBP,OAAAA,CAAQG,KAAK,CAACK,KAAK,EAAA;gBACnB,IAAIF,IAAAA,CAAKG,OAAO,EAAE;AAChBf,oBAAAA,OAAAA,CAAQY,KAAKI,OAAO,CAAA;gBACtB,CAAA,MAAO;AACLR,oBAAAA,MAAAA,CAAOS,eAAAA,CAAgBC,UAAU,CAACN,IAAAA,CAAKO,KAAK,CAAA,CAAA;AAC9C,gBAAA;AACF,YAAA,CAAA;AAEA,YAAA,MAAMC,OAAAA,GAA0B;AAC9BhB,gBAAAA,MAAAA;AACAC,gBAAAA;AACF,aAAA;AAEA3B,YAAAA,KAAAA,CAAM2C,aAAa,EAAEC,WAAAA,CAAYF,SAAS,IAAI,CAACxC,SAAS,EAAE;AAAC0B,gBAAAA,OAAAA,CAAQiB;AAAM,aAAA,CAAA;AAC3E,QAAA,CAAA,CAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"FrameClient.mjs","sources":["../../../../../../../core/src/rpc/FrameClient.ts"],"sourcesContent":["import { ErrorMarshaller } from '../ErrorMarshaller';\nimport { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from '../constants';\nimport { logger } from '../utils';\n\ntype RequestPayload = {\n method: string;\n args: unknown[];\n};\n\ntype ResponsePayload<T> = {\n success: boolean;\n payload: T;\n error: Record<string, unknown>;\n};\n\nexport class IframeHostClient {\n frame!: Promise<HTMLIFrameElement>;\n\n constructor(private iframeURL: string) {\n this.createIframe();\n }\n\n private createIframe() {\n let existingIframe = document.querySelector(`[src~=\"${this.iframeURL}\"]`) as HTMLIFrameElement;\n\n /* If an iframe does not exist yet, create one */\n if (!existingIframe) {\n existingIframe = document.createElement('iframe');\n existingIframe.src = this.iframeURL;\n existingIframe.style.position = 'absolute';\n existingIframe.style.width = '0';\n existingIframe.style.height = '0';\n existingIframe.style.border = '0';\n existingIframe.role = 'none';\n document.body.appendChild(existingIframe);\n } else {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n }\n\n /**\n * [NASTY BUG]\n * If we postMessage to an iframe that is _not yet loaded_, chrome will give a cryptic error message\n * Failed to execute 'postMessage' on 'DOMWindow':\n * The target origin provided ('https://js.stytch.com') does not match the recipient window's origin ('http://localhost:3000').\n * There is no builtin way to determine if an iframe is already loaded,\n * so we set a dataset attr in our onload handler and use that to determine loading state\n */\n if (existingIframe.dataset.loaded === 'true') {\n this.frame = Promise.resolve(existingIframe);\n return;\n }\n\n this.frame = new Promise((resolve) => {\n existingIframe.addEventListener(\n 'load',\n () => {\n existingIframe.dataset.loaded = 'true';\n resolve(existingIframe);\n },\n { once: true },\n );\n });\n }\n\n async call<T>(method: string, args: unknown[]): Promise<T> {\n const frame = await this.frame;\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (event) => {\n const resp = event.data as ResponsePayload<T>;\n channel.port1.close();\n if (resp.success) {\n resolve(resp.payload);\n } else {\n reject(ErrorMarshaller.unmarshall(resp.error));\n }\n };\n\n const message: RequestPayload = {\n method,\n args,\n };\n\n frame.contentWindow?.postMessage(message, this.iframeURL, [channel.port2]);\n });\n }\n}\n"],"names":["IframeHostClient","frame","constructor","iframeURL","createIframe","existingIframe","document","querySelector","createElement","src","style","position","width","height","border","role","body","appendChild","logger","warn","MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING","dataset","loaded","Promise","resolve","addEventListener","once","call","method","args","channel","MessageChannel","reject","port1","onmessage","event","resp","data","close","success","payload","ErrorMarshaller","unmarshall","error","message","contentWindow","postMessage","port2"],"mappings":";;;;AAeO,MAAMA,gBAAAA,CAAAA;;IACXC,KAAAA;IAEAC,WAAAA,CAAoBC,SAAiB,CAAE;aAAnBA,SAAAA,GAAAA,SAAAA;AAClB,QAAA,IAAI,CAACC,YAAY,EAAA;AACnB,IAAA;IAEQA,YAAAA,GAAe;AACrB,QAAA,IAAIC,cAAAA,GAAiBC,QAAAA,CAASC,aAAa,CAAC,CAAC,OAAO,EAAE,IAAI,CAACJ,SAAS,CAAC,EAAE,CAAC,CAAA;0DAGxE,IAAI,CAACE,cAAAA,EAAgB;YACnBA,cAAAA,GAAiBC,QAAAA,CAASE,aAAa,CAAC,QAAA,CAAA;AACxCH,YAAAA,cAAAA,CAAeI,GAAG,GAAG,IAAI,CAACN,SAAS;YACnCE,cAAAA,CAAeK,KAAK,CAACC,QAAQ,GAAG,UAAA;YAChCN,cAAAA,CAAeK,KAAK,CAACE,KAAK,GAAG,GAAA;YAC7BP,cAAAA,CAAeK,KAAK,CAACG,MAAM,GAAG,GAAA;YAC9BR,cAAAA,CAAeK,KAAK,CAACI,MAAM,GAAG,GAAA;AAC9BT,YAAAA,cAAAA,CAAeU,IAAI,GAAG,MAAA;YACtBT,QAAAA,CAASU,IAAI,CAACC,WAAW,CAACZ,cAAAA,CAAAA;QAC5B,CAAA,MAAO;AACLa,YAAAA,MAAAA,CAAOC,IAAI,CAACC,wCAAAA,CAAAA;AACd,QAAA;AAEA;;;;;;;AAOC,QACD,IAAIf,cAAAA,CAAegB,OAAO,CAACC,MAAM,KAAK,MAAA,EAAQ;AAC5C,YAAA,IAAI,CAACrB,KAAK,GAAGsB,OAAAA,CAAQC,OAAO,CAACnB,cAAAA,CAAAA;AAC7B,YAAA;AACF,QAAA;AAEA,QAAA,IAAI,CAACJ,KAAK,GAAG,IAAIsB,QAAQ,CAACC,OAAAA,GAAAA;YACxBnB,cAAAA,CAAeoB,gBAAgB,CAC7B,MAAA,EACA,IAAA;gBACEpB,cAAAA,CAAegB,OAAO,CAACC,MAAM,GAAG,MAAA;gBAChCE,OAAAA,CAAQnB,cAAAA,CAAAA;YACV,CAAA,EACA;gBAAEqB,IAAAA,EAAM;AAAK,aAAA,CAAA;AAEjB,QAAA,CAAA,CAAA;AACF,IAAA;AAEA,IAAA,MAAMC,IAAAA,CAAQC,MAAc,EAAEC,IAAe,EAAc;AACzD,QAAA,MAAM5B,KAAAA,GAAQ,MAAM,IAAI,CAACA,KAAK;AAC9B,QAAA,MAAM6B,UAAU,IAAIC,cAAAA,EAAAA;QAEpB,OAAO,IAAIR,OAAAA,CAAQ,CAACC,OAAAA,EAASQ,MAAAA,GAAAA;AAC3BF,YAAAA,OAAAA,CAAQG,KAAK,CAACC,SAAS,GAAG,CAACC,KAAAA,GAAAA;gBACzB,MAAMC,IAAAA,GAAOD,MAAME,IAAI;gBACvBP,OAAAA,CAAQG,KAAK,CAACK,KAAK,EAAA;gBACnB,IAAIF,IAAAA,CAAKG,OAAO,EAAE;AAChBf,oBAAAA,OAAAA,CAAQY,KAAKI,OAAO,CAAA;gBACtB,CAAA,MAAO;AACLR,oBAAAA,MAAAA,CAAOS,eAAAA,CAAgBC,UAAU,CAACN,IAAAA,CAAKO,KAAK,CAAA,CAAA;AAC9C,gBAAA;AACF,YAAA,CAAA;AAEA,YAAA,MAAMC,OAAAA,GAA0B;AAC9BhB,gBAAAA,MAAAA;AACAC,gBAAAA;AACF,aAAA;AAEA5B,YAAAA,KAAAA,CAAM4C,aAAa,EAAEC,WAAAA,CAAYF,SAAS,IAAI,CAACzC,SAAS,EAAE;AAAC2B,gBAAAA,OAAAA,CAAQiB;AAAM,aAAA,CAAA;AAC3E,QAAA,CAAA,CAAA;AACF,IAAA;AACF;;;;"}
@@ -58,6 +58,13 @@ var messages = {
58
58
  ],
59
59
  "</bold>."
60
60
  ],
61
+ "emailConfirmation.emailSent": [
62
+ "Email sent! Try again in ",
63
+ [
64
+ "timeRemaining"
65
+ ],
66
+ "s"
67
+ ],
61
68
  "emailConfirmation.title": [
62
69
  "Check your email"
63
70
  ],
@@ -724,10 +731,10 @@ var messages = {
724
731
  "Enter verification code"
725
732
  ],
726
733
  "watermark.altText": [
727
- "Powered by Stytch"
734
+ "Stytch + Twilio"
728
735
  ],
729
- "watermark.twilio": [
730
- "Twilio"
736
+ "watermark.poweredBy": [
737
+ "Powered by"
731
738
  ]
732
739
  };
733
740
 
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -160,6 +160,13 @@ var messages = {
160
160
  ],
161
161
  "</bold>."
162
162
  ],
163
+ "emailConfirmation.emailSent": [
164
+ "Email sent! Try again in ",
165
+ [
166
+ "timeRemaining"
167
+ ],
168
+ "s"
169
+ ],
163
170
  "emailConfirmation.title": [
164
171
  "Check your email"
165
172
  ],
@@ -708,10 +715,10 @@ var messages = {
708
715
  "WhatsApp"
709
716
  ],
710
717
  "watermark.altText": [
711
- "Powered by Stytch"
718
+ "Stytch + Twilio"
712
719
  ],
713
- "watermark.twilio": [
714
- "Twilio"
720
+ "watermark.poweredBy": [
721
+ "Powered by"
715
722
  ]
716
723
  };
717
724
 
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -60,15 +60,17 @@ const AccessSectionBody = ({ localState, setLocalState, remoteState, implicitRol
60
60
  const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');
61
61
  const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');
62
62
  const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');
63
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
63
64
  const canUpdateMfaEnrolled = canUpdateMemberMfaEnrolledPerm || canUpdateSelfMfaEnrolledPerm && isSelf;
64
65
  const canUpdateRoles = canUpdateMemberRolesPerm;
65
66
  const canUpdateBreakglass = canUpdateMemberBreakglassPerm;
66
67
  const sortRoles = useRoleSortFn();
67
68
  const { selectItems: roleSelectItems, ...roleAutocompleteProps } = useRoleAutocomplete({
68
- excludeStytchMember: true
69
+ excludeStytchMember: true,
70
+ includeOrgRoles: canGetOrgCustomRoles
69
71
  });
70
72
  const availableRoleSelectItems = roleSelectItems.filter((roleId)=>!explicitRoleAssignments.includes(roleId));
71
- const { getRoleIdDisplayName } = useRoleDisplayInfo();
73
+ const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles);
72
74
  const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);
73
75
  const combinedRoleAssignments = useMemo(()=>{
74
76
  return [
@@ -200,6 +202,7 @@ const AccessSection = ({ member, orgRequiresMfa })=>{
200
202
  const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');
201
203
  const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');
202
204
  const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');
205
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
203
206
  const canUpdateRoles = canUpdateMemberRolesPerm;
204
207
  const canUpdateBreakglass = canUpdateMemberBreakglassPerm;
205
208
  const canUpdateMfaEnrolled = !orgRequiresMfa && (canUpdateMemberMfaEnrolledPerm || canUpdateSelfMfaEnrolledPerm && isMemberSelf);
@@ -252,7 +255,7 @@ const AccessSection = ({ member, orgRequiresMfa })=>{
252
255
  }, [
253
256
  closeLockoutWarningModal
254
257
  ]);
255
- const roles = useRoles();
258
+ const roles = useRoles(canGetOrgCustomRoles);
256
259
  const handleSave = useCallback(async ()=>{
257
260
  const memberOptions = {
258
261
  member_id: member.member_id
@@ -1 +1 @@
1
- {"version":3,"file":"AccessSection.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AccessSection.tsx"],"sourcesContent":["import { RBACPolicyRole } from '@stytch/core';\nimport { B2BOrganizationsMembersUpdateOptions, Member, MemberRole } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo, useRef, useState } from 'react';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { FlexBox } from '../components/FlexBox';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Switch } from '../components/Switch';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateMember } from '../utils/useMutateMember';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { useRoleSortFn } from '../utils/useRoleSortFn';\nimport { useRoles } from '../utils/useRoles';\nimport { useSelf } from '../utils/useSelf';\nimport { useStateSliceSetter } from '../utils/useStateSliceSetter';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\n\ntype RoleSourceType = MemberRole['sources'][number]['type'];\n\ninterface AccessFormState {\n isBreakglass: boolean;\n isMfaEnrolled: boolean;\n explicitRoleAssignments: string[];\n}\n\ninterface AccessSectionBodyProps {\n localState: AccessFormState;\n setLocalState: (state: SetStateAction<AccessFormState>) => void;\n remoteState: AccessFormState;\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n showRoleAssignment: boolean;\n isSelf: boolean;\n orgRequiresMfa: boolean;\n}\n\nconst getRoleSourceTypeDisplayName = (sourceType: RoleSourceType) => {\n switch (sourceType) {\n case 'direct_assignment':\n return 'Manual assignment';\n case 'email_assignment':\n return 'Email domain';\n case 'sso_connection':\n return 'SSO connection';\n case 'sso_connection_group':\n return 'SSO group';\n case 'scim_connection_group':\n return 'SCIM group';\n default:\n return sourceType;\n }\n};\n\nconst roleAssignmentsRowKeyExtractor = (item: { role_id: string; sourceType: RoleSourceType }): string =>\n `${item.role_id}-${item.sourceType}`;\n\nconst AccessSectionBody = ({\n localState,\n setLocalState,\n remoteState,\n implicitRoleAssignments,\n showRoleAssignment,\n isSelf,\n orgRequiresMfa,\n}: AccessSectionBodyProps) => {\n const { editing } = useSettingsContainer();\n\n const { isMfaEnrolled, explicitRoleAssignments, isBreakglass } = editing ? localState : remoteState;\n\n const handleIsMfaEnrolledChange = useStateSliceSetter(setLocalState, 'isMfaEnrolled');\n const setIsBreakglass = useStateSliceSetter(setLocalState, 'isBreakglass');\n\n const { open: openBreakGlassConfirmModal, ...breakGlassConfirmModalProps } = useModalState(() => {\n setIsBreakglass(true);\n });\n\n const handleIsBreakglassChange = useCallback(\n (value: boolean) => {\n if (value) {\n openBreakGlassConfirmModal();\n } else {\n setIsBreakglass(value);\n }\n },\n [openBreakGlassConfirmModal, setIsBreakglass],\n );\n\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const canUpdateMfaEnrolled = canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isSelf);\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n\n const sortRoles = useRoleSortFn();\n\n const { selectItems: roleSelectItems, ...roleAutocompleteProps } = useRoleAutocomplete({ excludeStytchMember: true });\n const availableRoleSelectItems = roleSelectItems.filter((roleId) => !explicitRoleAssignments.includes(roleId));\n\n const { getRoleIdDisplayName } = useRoleDisplayInfo();\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const combinedRoleAssignments = useMemo(() => {\n return [\n ...sortRoles(implicitRoleAssignments),\n ...sortRoles(\n explicitRoleAssignments.map((roleId) => ({ role_id: roleId, sourceType: 'direct_assignment' as const })),\n ),\n ];\n }, [explicitRoleAssignments, implicitRoleAssignments, sortRoles]);\n\n const [pendingAssignments, setPendingAssignments] = useState<string[]>([]);\n const { open: openRoleAssignmentModal, ...roleAssignmentModalProps } = useModalState(() => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: Array.from(new Set([...state.explicitRoleAssignments, ...pendingAssignments])),\n };\n });\n });\n\n const roleAssignmentsItemRenderer: TableItemRenderer<(typeof combinedRoleAssignments)[number]>[] = useMemo(\n () => [\n {\n title: 'Role',\n getValue: (assignment) => <Typography variant=\"body2\">{getRoleIdDisplayName(assignment.role_id)}</Typography>,\n },\n {\n title: 'Source',\n getValue: (assignment) => (\n <Typography variant=\"body2\">{getRoleSourceTypeDisplayName(assignment.sourceType)}</Typography>\n ),\n },\n ],\n [getRoleIdDisplayName],\n );\n\n const handleAddRoleAssignment = useCallback(() => {\n setPendingAssignments([]);\n openRoleAssignmentModal();\n }, [openRoleAssignmentModal]);\n\n const roleAssignmentsItemActionProps = useMemo(\n () => (item: (typeof combinedRoleAssignments)[number]) =>\n item.sourceType === 'direct_assignment'\n ? {\n warningAction: {\n text: 'Revoke',\n onClick: () => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: state.explicitRoleAssignments.filter((roleId) => roleId !== item.role_id),\n };\n });\n },\n },\n }\n : {},\n [setLocalState],\n );\n\n return (\n <FlexBox flexDirection=\"column\" gap={2}>\n {editing && (\n <Modal\n {...breakGlassConfirmModalProps}\n title=\"Exempt Member from primary auth requirements?\"\n confirmButtonText=\"Allow\"\n warning\n >\n <Typography>\n Enabling this toggle will exempt the Member from your primary authentication policy if needed (e.g. to\n update SSO configuration in the case of a lockout).\n </Typography>\n </Modal>\n )}\n {showRoleAssignment && (\n <SettingsSection title=\"Role assignments\">\n <Modal {...roleAssignmentModalProps} title=\"Add Role assignment\" confirmButtonText=\"Add Role\">\n <FlexBox flexDirection=\"column\" gap={0.5}>\n <Typography color=\"secondary\" variant=\"caption\">\n Role\n </Typography>\n <Autocomplete\n {...roleAutocompleteProps}\n selectItems={availableRoleSelectItems}\n value={pendingAssignments}\n onChange={setPendingAssignments}\n placeholder={pendingAssignments.length > 0 ? undefined : 'Select Role'}\n />\n </FlexBox>\n </Modal>\n <Typography variant=\"body2\">\n All members are automatically assigned the {stytchMemberRoleDisplayName} Role.\n </Typography>\n <ListEditor\n items={combinedRoleAssignments}\n rowKeyExtractor={roleAssignmentsRowKeyExtractor}\n itemRenderer={roleAssignmentsItemRenderer}\n addButtonText=\"Add Role assignment\"\n hideAddButton={availableRoleSelectItems.length === 0}\n readOnly={!(editing && canUpdateRoles)}\n onAdd={handleAddRoleAssignment}\n getItemActionProps={roleAssignmentsItemActionProps}\n />\n </SettingsSection>\n )}\n <SettingsSection title=\"Require MFA\">\n {orgRequiresMfa ? (\n <Typography variant=\"body2\">MFA is required for all members.</Typography>\n ) : (\n <Switch\n readOnly={!editing || !canUpdateMfaEnrolled}\n checked={isMfaEnrolled}\n onChange={handleIsMfaEnrolledChange}\n label=\"Require MFA for this Member. When enabled, the Member will be required to set up and use MFA on each login.\"\n />\n )}\n </SettingsSection>\n <SettingsSection title=\"Exempt from primary auth requirements\">\n <Switch\n readOnly={!editing || !canUpdateBreakglass}\n checked={isBreakglass}\n onChange={handleIsBreakglassChange}\n label=\"Exempt Member from your primary authentication policy\"\n />\n </SettingsSection>\n </FlexBox>\n );\n};\n\nconst rolesCanUpdateMemberRoles = (roleIds: string[], roles: RBACPolicyRole[]) => {\n return Array.from(new Set(roleIds)).some((roleId) => {\n const role = roles.find((role) => role.role_id === roleId);\n return role?.permissions.some(\n (permission) =>\n permission.resource_id === 'stytch.member' &&\n (permission.actions.includes('update.settings.roles') || permission.actions.includes('*')),\n );\n });\n};\n\nexport const AccessSection = ({ member, orgRequiresMfa }: { member: Member; orgRequiresMfa: boolean }) => {\n const { isSelf } = useSelf();\n const isMemberSelf = isSelf(member.member_id);\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n const canUpdateMfaEnrolled =\n !orgRequiresMfa && (canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isMemberSelf));\n\n const isMemberDeleted = member.status === 'deleted';\n\n const canEditSection = !isMemberDeleted && (canUpdateRoles || canUpdateBreakglass || canUpdateMfaEnrolled);\n const showRoleAssignment = !isMemberDeleted;\n\n const { explicitRoleAssignments, implicitRoleAssignments } = useMemo(() => {\n return member.roles\n .filter((role) => role.role_id !== ROLE_ID_STYTCH_MEMBER)\n .reduce<{\n explicitRoleAssignments: string[];\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n }>(\n (acc, role) => {\n const implicitAssignments = new Set(\n role.sources.filter((source) => source.type !== 'direct_assignment').map((source) => source.type),\n );\n for (const sourceType of implicitAssignments) {\n acc.implicitRoleAssignments.push({ role_id: role.role_id, sourceType });\n }\n\n const isExplicitAssignment = role.sources.some((source) => source.type === 'direct_assignment');\n if (isExplicitAssignment) {\n acc.explicitRoleAssignments.push(role.role_id);\n }\n\n return acc;\n },\n {\n explicitRoleAssignments: [],\n implicitRoleAssignments: [],\n },\n );\n }, [member.roles]);\n\n const remoteState = useMemo<AccessFormState>(\n () => ({\n isMfaEnrolled: member.mfa_enrolled,\n explicitRoleAssignments,\n isBreakglass: member.is_breakglass,\n }),\n [explicitRoleAssignments, member.is_breakglass, member.mfa_enrolled],\n );\n\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n const { mutate } = useMutateMember();\n\n const lockoutConfirmDeferred = useRef<{ resolve: () => void; reject: () => void }>();\n\n const {\n open: openLockoutWarningModal,\n close: closeLockoutWarningModal,\n ...lockoutWarningModalProps\n } = useModalState(() => {\n lockoutConfirmDeferred.current?.resolve();\n lockoutConfirmDeferred.current = undefined;\n });\n const handleLockoutWarningCancel = useCallback(() => {\n lockoutConfirmDeferred.current?.reject();\n lockoutConfirmDeferred.current = undefined;\n closeLockoutWarningModal();\n }, [closeLockoutWarningModal]);\n\n const roles = useRoles();\n\n const handleSave = useCallback(async () => {\n const memberOptions: B2BOrganizationsMembersUpdateOptions = {\n member_id: member.member_id,\n };\n\n let shouldUpdate = false;\n const setOption = <T extends keyof B2BOrganizationsMembersUpdateOptions>(\n key: T,\n value: B2BOrganizationsMembersUpdateOptions[T],\n ) => {\n memberOptions[key] = value;\n shouldUpdate = true;\n };\n\n if (localState.isMfaEnrolled !== remoteState.isMfaEnrolled) {\n setOption('mfa_enrolled', localState.isMfaEnrolled);\n }\n if (localState.isBreakglass !== remoteState.isBreakglass) {\n setOption('is_breakglass', localState.isBreakglass);\n }\n if (!arraysHaveSameContents(localState.explicitRoleAssignments, remoteState.explicitRoleAssignments)) {\n if (\n isSelf(member.member_id) &&\n roles &&\n !rolesCanUpdateMemberRoles(\n [...localState.explicitRoleAssignments, ...implicitRoleAssignments.map((role) => role.role_id)],\n roles,\n )\n ) {\n openLockoutWarningModal();\n await new Promise<void>((resolve, reject) => {\n lockoutConfirmDeferred.current = { resolve, reject };\n });\n }\n\n setOption('roles', localState.explicitRoleAssignments);\n }\n\n if (shouldUpdate) {\n await mutate(memberOptions);\n }\n }, [\n implicitRoleAssignments,\n isSelf,\n localState.explicitRoleAssignments,\n localState.isBreakglass,\n localState.isMfaEnrolled,\n member.member_id,\n mutate,\n openLockoutWarningModal,\n remoteState.explicitRoleAssignments,\n remoteState.isBreakglass,\n remoteState.isMfaEnrolled,\n roles,\n ]);\n\n const { useBlockNavigation } = useMemberManagementRouterController();\n\n return (\n <SettingsContainer\n title=\"Access requirements & permissions\"\n hasCTA={canEditSection}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n setEditing={handleSetEditing}\n >\n <Modal\n {...lockoutWarningModalProps}\n close={handleLockoutWarningCancel}\n title=\"Revoke Role assignments?\"\n confirmButtonText=\"Revoke\"\n warning\n >\n <Typography>\n Changing your Role assignments will remove your permissions to manage members. You will not be able to edit\n your Role assignments to reassign permissions.\n </Typography>\n </Modal>\n <AccessSectionBody\n remoteState={remoteState}\n localState={localState}\n setLocalState={setLocalState}\n implicitRoleAssignments={implicitRoleAssignments}\n showRoleAssignment={showRoleAssignment}\n isSelf={isMemberSelf}\n orgRequiresMfa={orgRequiresMfa}\n />\n </SettingsContainer>\n );\n};\n"],"names":["getRoleSourceTypeDisplayName","sourceType","roleAssignmentsRowKeyExtractor","item","role_id","AccessSectionBody","localState","setLocalState","remoteState","implicitRoleAssignments","showRoleAssignment","isSelf","orgRequiresMfa","editing","useSettingsContainer","isMfaEnrolled","explicitRoleAssignments","isBreakglass","handleIsMfaEnrolledChange","useStateSliceSetter","setIsBreakglass","open","openBreakGlassConfirmModal","breakGlassConfirmModalProps","useModalState","handleIsBreakglassChange","useCallback","value","data","canUpdateMemberRolesPerm","useRbac","canUpdateMemberMfaEnrolledPerm","canUpdateMemberBreakglassPerm","canUpdateSelfMfaEnrolledPerm","canUpdateMfaEnrolled","canUpdateRoles","canUpdateBreakglass","sortRoles","useRoleSortFn","selectItems","roleSelectItems","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","availableRoleSelectItems","filter","roleId","includes","getRoleIdDisplayName","useRoleDisplayInfo","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","combinedRoleAssignments","useMemo","map","pendingAssignments","setPendingAssignments","useState","openRoleAssignmentModal","roleAssignmentModalProps","state","Array","from","Set","roleAssignmentsItemRenderer","title","getValue","assignment","React","Typography","variant","handleAddRoleAssignment","roleAssignmentsItemActionProps","warningAction","text","onClick","FlexBox","flexDirection","gap","Modal","confirmButtonText","warning","SettingsSection","color","Autocomplete","onChange","placeholder","length","undefined","ListEditor","items","rowKeyExtractor","itemRenderer","addButtonText","hideAddButton","readOnly","onAdd","getItemActionProps","Switch","checked","label","rolesCanUpdateMemberRoles","roleIds","roles","some","role","find","permissions","permission","resource_id","actions","AccessSection","member","useSelf","isMemberSelf","member_id","isMemberDeleted","status","canEditSection","reduce","acc","implicitAssignments","sources","source","type","push","isExplicitAssignment","mfa_enrolled","is_breakglass","handleSetEditing","useFormState","mutate","useMutateMember","lockoutConfirmDeferred","useRef","openLockoutWarningModal","close","closeLockoutWarningModal","lockoutWarningModalProps","current","resolve","handleLockoutWarningCancel","reject","useRoles","handleSave","memberOptions","shouldUpdate","setOption","key","arraysHaveSameContents","Promise","useBlockNavigation","useMemberManagementRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}
1
+ {"version":3,"file":"AccessSection.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/AccessSection.tsx"],"sourcesContent":["import { RBACPolicyRole } from '@stytch/core';\nimport { B2BOrganizationsMembersUpdateOptions, Member, MemberRole } from '@stytch/core/public';\nimport React, { SetStateAction, useCallback, useMemo, useRef, useState } from 'react';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { FlexBox } from '../components/FlexBox';\nimport { ListEditor } from '../components/ListEditor';\nimport { Modal, useModalState } from '../components/Modal';\nimport { SettingsContainer, useSettingsContainer } from '../components/SettingsContainer';\nimport { SettingsSection } from '../components/SettingsSection';\nimport { Switch } from '../components/Switch';\nimport { Typography } from '../components/Typography';\nimport { TableItemRenderer } from '../shared/components/types';\nimport { arraysHaveSameContents } from '../utils/arraysHaveSameContents';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useFormState } from '../utils/useFormState';\nimport { useMutateMember } from '../utils/useMutateMember';\nimport { useRbac } from '../utils/useRbac';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport { useRoleDisplayInfo } from '../utils/useRoleDisplayInfo';\nimport { useRoleSortFn } from '../utils/useRoleSortFn';\nimport { useRoles } from '../utils/useRoles';\nimport { useSelf } from '../utils/useSelf';\nimport { useStateSliceSetter } from '../utils/useStateSliceSetter';\nimport { useMemberManagementRouterController } from './MemberManagementRouter';\n\ntype RoleSourceType = MemberRole['sources'][number]['type'];\n\ninterface AccessFormState {\n isBreakglass: boolean;\n isMfaEnrolled: boolean;\n explicitRoleAssignments: string[];\n}\n\ninterface AccessSectionBodyProps {\n localState: AccessFormState;\n setLocalState: (state: SetStateAction<AccessFormState>) => void;\n remoteState: AccessFormState;\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n showRoleAssignment: boolean;\n isSelf: boolean;\n orgRequiresMfa: boolean;\n}\n\nconst getRoleSourceTypeDisplayName = (sourceType: RoleSourceType) => {\n switch (sourceType) {\n case 'direct_assignment':\n return 'Manual assignment';\n case 'email_assignment':\n return 'Email domain';\n case 'sso_connection':\n return 'SSO connection';\n case 'sso_connection_group':\n return 'SSO group';\n case 'scim_connection_group':\n return 'SCIM group';\n default:\n return sourceType;\n }\n};\n\nconst roleAssignmentsRowKeyExtractor = (item: { role_id: string; sourceType: RoleSourceType }): string =>\n `${item.role_id}-${item.sourceType}`;\n\nconst AccessSectionBody = ({\n localState,\n setLocalState,\n remoteState,\n implicitRoleAssignments,\n showRoleAssignment,\n isSelf,\n orgRequiresMfa,\n}: AccessSectionBodyProps) => {\n const { editing } = useSettingsContainer();\n\n const { isMfaEnrolled, explicitRoleAssignments, isBreakglass } = editing ? localState : remoteState;\n\n const handleIsMfaEnrolledChange = useStateSliceSetter(setLocalState, 'isMfaEnrolled');\n const setIsBreakglass = useStateSliceSetter(setLocalState, 'isBreakglass');\n\n const { open: openBreakGlassConfirmModal, ...breakGlassConfirmModalProps } = useModalState(() => {\n setIsBreakglass(true);\n });\n\n const handleIsBreakglassChange = useCallback(\n (value: boolean) => {\n if (value) {\n openBreakGlassConfirmModal();\n } else {\n setIsBreakglass(value);\n }\n },\n [openBreakGlassConfirmModal, setIsBreakglass],\n );\n\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const canUpdateMfaEnrolled = canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isSelf);\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n\n const sortRoles = useRoleSortFn();\n\n const { selectItems: roleSelectItems, ...roleAutocompleteProps } = useRoleAutocomplete({\n excludeStytchMember: true,\n includeOrgRoles: canGetOrgCustomRoles,\n });\n const availableRoleSelectItems = roleSelectItems.filter((roleId) => !explicitRoleAssignments.includes(roleId));\n\n const { getRoleIdDisplayName } = useRoleDisplayInfo(canGetOrgCustomRoles);\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const combinedRoleAssignments = useMemo(() => {\n return [\n ...sortRoles(implicitRoleAssignments),\n ...sortRoles(\n explicitRoleAssignments.map((roleId) => ({ role_id: roleId, sourceType: 'direct_assignment' as const })),\n ),\n ];\n }, [explicitRoleAssignments, implicitRoleAssignments, sortRoles]);\n\n const [pendingAssignments, setPendingAssignments] = useState<string[]>([]);\n const { open: openRoleAssignmentModal, ...roleAssignmentModalProps } = useModalState(() => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: Array.from(new Set([...state.explicitRoleAssignments, ...pendingAssignments])),\n };\n });\n });\n\n const roleAssignmentsItemRenderer: TableItemRenderer<(typeof combinedRoleAssignments)[number]>[] = useMemo(\n () => [\n {\n title: 'Role',\n getValue: (assignment) => <Typography variant=\"body2\">{getRoleIdDisplayName(assignment.role_id)}</Typography>,\n },\n {\n title: 'Source',\n getValue: (assignment) => (\n <Typography variant=\"body2\">{getRoleSourceTypeDisplayName(assignment.sourceType)}</Typography>\n ),\n },\n ],\n [getRoleIdDisplayName],\n );\n\n const handleAddRoleAssignment = useCallback(() => {\n setPendingAssignments([]);\n openRoleAssignmentModal();\n }, [openRoleAssignmentModal]);\n\n const roleAssignmentsItemActionProps = useMemo(\n () => (item: (typeof combinedRoleAssignments)[number]) =>\n item.sourceType === 'direct_assignment'\n ? {\n warningAction: {\n text: 'Revoke',\n onClick: () => {\n setLocalState((state) => {\n return {\n ...state,\n explicitRoleAssignments: state.explicitRoleAssignments.filter((roleId) => roleId !== item.role_id),\n };\n });\n },\n },\n }\n : {},\n [setLocalState],\n );\n\n return (\n <FlexBox flexDirection=\"column\" gap={2}>\n {editing && (\n <Modal\n {...breakGlassConfirmModalProps}\n title=\"Exempt Member from primary auth requirements?\"\n confirmButtonText=\"Allow\"\n warning\n >\n <Typography>\n Enabling this toggle will exempt the Member from your primary authentication policy if needed (e.g. to\n update SSO configuration in the case of a lockout).\n </Typography>\n </Modal>\n )}\n {showRoleAssignment && (\n <SettingsSection title=\"Role assignments\">\n <Modal {...roleAssignmentModalProps} title=\"Add Role assignment\" confirmButtonText=\"Add Role\">\n <FlexBox flexDirection=\"column\" gap={0.5}>\n <Typography color=\"secondary\" variant=\"caption\">\n Role\n </Typography>\n <Autocomplete\n {...roleAutocompleteProps}\n selectItems={availableRoleSelectItems}\n value={pendingAssignments}\n onChange={setPendingAssignments}\n placeholder={pendingAssignments.length > 0 ? undefined : 'Select Role'}\n />\n </FlexBox>\n </Modal>\n <Typography variant=\"body2\">\n All members are automatically assigned the {stytchMemberRoleDisplayName} Role.\n </Typography>\n <ListEditor\n items={combinedRoleAssignments}\n rowKeyExtractor={roleAssignmentsRowKeyExtractor}\n itemRenderer={roleAssignmentsItemRenderer}\n addButtonText=\"Add Role assignment\"\n hideAddButton={availableRoleSelectItems.length === 0}\n readOnly={!(editing && canUpdateRoles)}\n onAdd={handleAddRoleAssignment}\n getItemActionProps={roleAssignmentsItemActionProps}\n />\n </SettingsSection>\n )}\n <SettingsSection title=\"Require MFA\">\n {orgRequiresMfa ? (\n <Typography variant=\"body2\">MFA is required for all members.</Typography>\n ) : (\n <Switch\n readOnly={!editing || !canUpdateMfaEnrolled}\n checked={isMfaEnrolled}\n onChange={handleIsMfaEnrolledChange}\n label=\"Require MFA for this Member. When enabled, the Member will be required to set up and use MFA on each login.\"\n />\n )}\n </SettingsSection>\n <SettingsSection title=\"Exempt from primary auth requirements\">\n <Switch\n readOnly={!editing || !canUpdateBreakglass}\n checked={isBreakglass}\n onChange={handleIsBreakglassChange}\n label=\"Exempt Member from your primary authentication policy\"\n />\n </SettingsSection>\n </FlexBox>\n );\n};\n\nconst rolesCanUpdateMemberRoles = (roleIds: string[], roles: RBACPolicyRole[]) => {\n return Array.from(new Set(roleIds)).some((roleId) => {\n const role = roles.find((role) => role.role_id === roleId);\n return role?.permissions.some(\n (permission) =>\n permission.resource_id === 'stytch.member' &&\n (permission.actions.includes('update.settings.roles') || permission.actions.includes('*')),\n );\n });\n};\n\nexport const AccessSection = ({ member, orgRequiresMfa }: { member: Member; orgRequiresMfa: boolean }) => {\n const { isSelf } = useSelf();\n const isMemberSelf = isSelf(member.member_id);\n const { data: canUpdateMemberRolesPerm } = useRbac('stytch.member', 'update.settings.roles');\n const { data: canUpdateMemberBreakglassPerm } = useRbac('stytch.member', 'update.settings.is-breakglass');\n const { data: canUpdateMemberMfaEnrolledPerm } = useRbac('stytch.member', 'update.settings.mfa-enrolled');\n\n const { data: canUpdateSelfMfaEnrolledPerm } = useRbac('stytch.self', 'update.settings.mfa-enrolled');\n\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const canUpdateRoles = canUpdateMemberRolesPerm;\n const canUpdateBreakglass = canUpdateMemberBreakglassPerm;\n const canUpdateMfaEnrolled =\n !orgRequiresMfa && (canUpdateMemberMfaEnrolledPerm || (canUpdateSelfMfaEnrolledPerm && isMemberSelf));\n\n const isMemberDeleted = member.status === 'deleted';\n\n const canEditSection = !isMemberDeleted && (canUpdateRoles || canUpdateBreakglass || canUpdateMfaEnrolled);\n const showRoleAssignment = !isMemberDeleted;\n\n const { explicitRoleAssignments, implicitRoleAssignments } = useMemo(() => {\n return member.roles\n .filter((role) => role.role_id !== ROLE_ID_STYTCH_MEMBER)\n .reduce<{\n explicitRoleAssignments: string[];\n implicitRoleAssignments: { role_id: string; sourceType: RoleSourceType }[];\n }>(\n (acc, role) => {\n const implicitAssignments = new Set(\n role.sources.filter((source) => source.type !== 'direct_assignment').map((source) => source.type),\n );\n for (const sourceType of implicitAssignments) {\n acc.implicitRoleAssignments.push({ role_id: role.role_id, sourceType });\n }\n\n const isExplicitAssignment = role.sources.some((source) => source.type === 'direct_assignment');\n if (isExplicitAssignment) {\n acc.explicitRoleAssignments.push(role.role_id);\n }\n\n return acc;\n },\n {\n explicitRoleAssignments: [],\n implicitRoleAssignments: [],\n },\n );\n }, [member.roles]);\n\n const remoteState = useMemo<AccessFormState>(\n () => ({\n isMfaEnrolled: member.mfa_enrolled,\n explicitRoleAssignments,\n isBreakglass: member.is_breakglass,\n }),\n [explicitRoleAssignments, member.is_breakglass, member.mfa_enrolled],\n );\n\n const { localState, setLocalState, editing, handleSetEditing } = useFormState({ remoteState });\n\n const { mutate } = useMutateMember();\n\n const lockoutConfirmDeferred = useRef<{ resolve: () => void; reject: () => void }>();\n\n const {\n open: openLockoutWarningModal,\n close: closeLockoutWarningModal,\n ...lockoutWarningModalProps\n } = useModalState(() => {\n lockoutConfirmDeferred.current?.resolve();\n lockoutConfirmDeferred.current = undefined;\n });\n const handleLockoutWarningCancel = useCallback(() => {\n lockoutConfirmDeferred.current?.reject();\n lockoutConfirmDeferred.current = undefined;\n closeLockoutWarningModal();\n }, [closeLockoutWarningModal]);\n\n const roles = useRoles(canGetOrgCustomRoles);\n\n const handleSave = useCallback(async () => {\n const memberOptions: B2BOrganizationsMembersUpdateOptions = {\n member_id: member.member_id,\n };\n\n let shouldUpdate = false;\n const setOption = <T extends keyof B2BOrganizationsMembersUpdateOptions>(\n key: T,\n value: B2BOrganizationsMembersUpdateOptions[T],\n ) => {\n memberOptions[key] = value;\n shouldUpdate = true;\n };\n\n if (localState.isMfaEnrolled !== remoteState.isMfaEnrolled) {\n setOption('mfa_enrolled', localState.isMfaEnrolled);\n }\n if (localState.isBreakglass !== remoteState.isBreakglass) {\n setOption('is_breakglass', localState.isBreakglass);\n }\n if (!arraysHaveSameContents(localState.explicitRoleAssignments, remoteState.explicitRoleAssignments)) {\n if (\n isSelf(member.member_id) &&\n roles &&\n !rolesCanUpdateMemberRoles(\n [...localState.explicitRoleAssignments, ...implicitRoleAssignments.map((role) => role.role_id)],\n roles,\n )\n ) {\n openLockoutWarningModal();\n await new Promise<void>((resolve, reject) => {\n lockoutConfirmDeferred.current = { resolve, reject };\n });\n }\n\n setOption('roles', localState.explicitRoleAssignments);\n }\n\n if (shouldUpdate) {\n await mutate(memberOptions);\n }\n }, [\n implicitRoleAssignments,\n isSelf,\n localState.explicitRoleAssignments,\n localState.isBreakglass,\n localState.isMfaEnrolled,\n member.member_id,\n mutate,\n openLockoutWarningModal,\n remoteState.explicitRoleAssignments,\n remoteState.isBreakglass,\n remoteState.isMfaEnrolled,\n roles,\n ]);\n\n const { useBlockNavigation } = useMemberManagementRouterController();\n\n return (\n <SettingsContainer\n title=\"Access requirements & permissions\"\n hasCTA={canEditSection}\n onSave={handleSave}\n useBlockNavigation={useBlockNavigation}\n editing={editing}\n setEditing={handleSetEditing}\n >\n <Modal\n {...lockoutWarningModalProps}\n close={handleLockoutWarningCancel}\n title=\"Revoke Role assignments?\"\n confirmButtonText=\"Revoke\"\n warning\n >\n <Typography>\n Changing your Role assignments will remove your permissions to manage members. You will not be able to edit\n your Role assignments to reassign permissions.\n </Typography>\n </Modal>\n <AccessSectionBody\n remoteState={remoteState}\n localState={localState}\n setLocalState={setLocalState}\n implicitRoleAssignments={implicitRoleAssignments}\n showRoleAssignment={showRoleAssignment}\n isSelf={isMemberSelf}\n orgRequiresMfa={orgRequiresMfa}\n />\n </SettingsContainer>\n );\n};\n"],"names":["getRoleSourceTypeDisplayName","sourceType","roleAssignmentsRowKeyExtractor","item","role_id","AccessSectionBody","localState","setLocalState","remoteState","implicitRoleAssignments","showRoleAssignment","isSelf","orgRequiresMfa","editing","useSettingsContainer","isMfaEnrolled","explicitRoleAssignments","isBreakglass","handleIsMfaEnrolledChange","useStateSliceSetter","setIsBreakglass","open","openBreakGlassConfirmModal","breakGlassConfirmModalProps","useModalState","handleIsBreakglassChange","useCallback","value","data","canUpdateMemberRolesPerm","useRbac","canUpdateMemberMfaEnrolledPerm","canUpdateMemberBreakglassPerm","canUpdateSelfMfaEnrolledPerm","canGetOrgCustomRoles","canUpdateMfaEnrolled","canUpdateRoles","canUpdateBreakglass","sortRoles","useRoleSortFn","selectItems","roleSelectItems","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","availableRoleSelectItems","filter","roleId","includes","getRoleIdDisplayName","useRoleDisplayInfo","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","combinedRoleAssignments","useMemo","map","pendingAssignments","setPendingAssignments","useState","openRoleAssignmentModal","roleAssignmentModalProps","state","Array","from","Set","roleAssignmentsItemRenderer","title","getValue","assignment","React","Typography","variant","handleAddRoleAssignment","roleAssignmentsItemActionProps","warningAction","text","onClick","FlexBox","flexDirection","gap","Modal","confirmButtonText","warning","SettingsSection","color","Autocomplete","onChange","placeholder","length","undefined","ListEditor","items","rowKeyExtractor","itemRenderer","addButtonText","hideAddButton","readOnly","onAdd","getItemActionProps","Switch","checked","label","rolesCanUpdateMemberRoles","roleIds","roles","some","role","find","permissions","permission","resource_id","actions","AccessSection","member","useSelf","isMemberSelf","member_id","isMemberDeleted","status","canEditSection","reduce","acc","implicitAssignments","sources","source","type","push","isExplicitAssignment","mfa_enrolled","is_breakglass","handleSetEditing","useFormState","mutate","useMutateMember","lockoutConfirmDeferred","useRef","openLockoutWarningModal","close","closeLockoutWarningModal","lockoutWarningModalProps","current","resolve","handleLockoutWarningCancel","reject","useRoles","handleSave","memberOptions","shouldUpdate","setOption","key","arraysHaveSameContents","Promise","useBlockNavigation","useMemberManagementRouterController","SettingsContainer","hasCTA","onSave","setEditing"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { Input } from '../components/Input.mjs';
5
5
  import { Modal } from '../components/Modal.mjs';
6
6
  import { ROLE_ID_STYTCH_MEMBER } from '../utils/roles.mjs';
7
7
  import { useRoleAutocomplete } from '../utils/useRoleAutocomplete.mjs';
8
+ import { useRbac } from '../utils/useRbac.mjs';
8
9
  import { useModalState } from '../shared/components/Modal.mjs';
9
10
 
10
11
  const defaultInviteRoles = [];
@@ -41,8 +42,10 @@ const useInviteModal = (inviteUser)=>{
41
42
  };
42
43
  };
43
44
  const InviteModal = ({ modalState, inviteEmail, inviteName, inviteRoles, setInviteEmail, setInviteName, setInviteRoles })=>{
45
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
44
46
  const roleAutocompleteProps = useRoleAutocomplete({
45
- excludeStytchMember: true
47
+ excludeStytchMember: true,
48
+ includeOrgRoles: canGetOrgCustomRoles ?? false
46
49
  });
47
50
  const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);
48
51
  const formIsValid = inviteEmail.trim().length > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"InviteModal.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/InviteModal.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { passwordManagerDisableAutofillProps } from '../../utils/passwordManagerDisableAutofillProps';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Input } from '../components/Input';\nimport { Modal, ModalStateType, useModalState } from '../components/Modal';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport type { SendInviteEmail } from './useSendInviteEmail';\n\nconst defaultInviteRoles: string[] = [];\n\ninterface InviteModalProps {\n modalState: Omit<ModalStateType, 'open'>;\n inviteName: string;\n setInviteName: (value: string) => void;\n inviteEmail: string;\n setInviteEmail: (value: string) => void;\n inviteRoles: string[];\n setInviteRoles: (value: string[]) => void;\n}\n\nexport const useInviteModal = (inviteUser: SendInviteEmail) => {\n const [inviteName, setInviteName] = useState('');\n const [inviteEmail, setInviteEmail] = useState('');\n const [inviteRoles, setInviteRoles] = useState(defaultInviteRoles);\n\n const { open: openInviteModal, ...modalState } = useModalState(async () => {\n await inviteUser(inviteEmail, { name: inviteName, roles: inviteRoles });\n modalState.close();\n });\n\n const handleInviteClick = useCallback(() => {\n setInviteName('');\n setInviteEmail('');\n setInviteRoles(defaultInviteRoles);\n\n openInviteModal();\n }, [openInviteModal]);\n\n return {\n handleInviteClick,\n inviteModalProps: {\n modalState,\n inviteName,\n setInviteName,\n inviteEmail,\n setInviteEmail,\n inviteRoles,\n setInviteRoles,\n } satisfies InviteModalProps,\n };\n};\n\nexport const InviteModal = ({\n modalState,\n inviteEmail,\n inviteName,\n inviteRoles,\n setInviteEmail,\n setInviteName,\n setInviteRoles,\n}: InviteModalProps) => {\n const roleAutocompleteProps = useRoleAutocomplete({ excludeStytchMember: true });\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const formIsValid = inviteEmail.trim().length > 0;\n\n return (\n <Modal\n {...modalState}\n keepOpenOnConfirm\n title=\"Invite Member\"\n confirmButtonText=\"Invite\"\n disableConfirm={!formIsValid}\n >\n <Input label=\"Name (optional)\" placeholder=\"Enter name\" value={inviteName} onChange={setInviteName} />\n <Input\n label=\"Email address\"\n placeholder=\"Enter email address\"\n value={inviteEmail}\n onChange={setInviteEmail}\n inputProps={passwordManagerDisableAutofillProps}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n placeholder={inviteRoles.length > 0 ? undefined : 'Select Role'}\n label=\"Role\"\n caption={`All members are automatically assigned the ${stytchMemberRoleDisplayName} Role. Select additional Roles to assign more permissions.`}\n value={inviteRoles}\n onChange={setInviteRoles}\n />\n </Modal>\n );\n};\n"],"names":["defaultInviteRoles","useInviteModal","inviteUser","inviteName","setInviteName","useState","inviteEmail","setInviteEmail","inviteRoles","setInviteRoles","open","openInviteModal","modalState","useModalState","name","roles","close","handleInviteClick","useCallback","inviteModalProps","InviteModal","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","formIsValid","trim","length","React","Modal","keepOpenOnConfirm","title","confirmButtonText","disableConfirm","Input","label","placeholder","value","onChange","inputProps","passwordManagerDisableAutofillProps","Autocomplete","undefined","caption"],"mappings":";;;;;;;;;AASA,MAAMA,qBAA+B,EAAE;AAYhC,MAAMC,iBAAiB,CAACC,UAAAA,GAAAA;AAC7B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,QAAAA,CAAS,EAAA,CAAA;AAC7C,IAAA,MAAM,CAACC,WAAAA,EAAaC,cAAAA,CAAe,GAAGF,QAAAA,CAAS,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACG,WAAAA,EAAaC,cAAAA,CAAe,GAAGJ,QAAAA,CAASL,kBAAAA,CAAAA;AAE/C,IAAA,MAAM,EAAEU,IAAAA,EAAMC,eAAe,EAAE,GAAGC,UAAAA,EAAY,GAAGC,aAAAA,CAAc,UAAA;AAC7D,QAAA,MAAMX,WAAWI,WAAAA,EAAa;YAAEQ,IAAAA,EAAMX,UAAAA;YAAYY,KAAAA,EAAOP;AAAY,SAAA,CAAA;AACrEI,QAAAA,UAAAA,CAAWI,KAAK,EAAA;AAClB,IAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,oBAAoBC,WAAAA,CAAY,IAAA;QACpCd,aAAAA,CAAc,EAAA,CAAA;QACdG,cAAAA,CAAe,EAAA,CAAA;QACfE,cAAAA,CAAeT,kBAAAA,CAAAA;AAEfW,QAAAA,eAAAA,EAAAA;IACF,CAAA,EAAG;AAACA,QAAAA;AAAgB,KAAA,CAAA;IAEpB,OAAO;AACLM,QAAAA,iBAAAA;QACAE,gBAAAA,EAAkB;AAChBP,YAAAA,UAAAA;AACAT,YAAAA,UAAAA;AACAC,YAAAA,aAAAA;AACAE,YAAAA,WAAAA;AACAC,YAAAA,cAAAA;AACAC,YAAAA,WAAAA;AACAC,YAAAA;AACF;AACF,KAAA;AACF;MAEaW,WAAAA,GAAc,CAAC,EAC1BR,UAAU,EACVN,WAAW,EACXH,UAAU,EACVK,WAAW,EACXD,cAAc,EACdH,aAAa,EACbK,cAAc,EACG,GAAA;AACjB,IAAA,MAAMY,wBAAwBC,mBAAAA,CAAoB;QAAEC,mBAAAA,EAAqB;AAAK,KAAA,CAAA;IAE9E,MAAMC,2BAAAA,GAA8BH,qBAAAA,CAAsBI,cAAc,CAACC,qBAAAA,CAAAA;AAEzE,IAAA,MAAMC,WAAAA,GAAcrB,WAAAA,CAAYsB,IAAI,EAAA,CAAGC,MAAM,GAAG,CAAA;AAEhD,IAAA,qBACEC,cAAA,CAAA,aAAA,CAACC,KAAAA,EAAAA;AACE,QAAA,GAAGnB,UAAU;QACdoB,iBAAAA,EAAAA,IAAAA;QACAC,KAAAA,EAAM,eAAA;QACNC,iBAAAA,EAAkB,QAAA;AAClBC,QAAAA,cAAAA,EAAgB,CAACR;qBAEjBG,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QAAMC,KAAAA,EAAM,iBAAA;QAAkBC,WAAAA,EAAY,YAAA;QAAaC,KAAAA,EAAOpC,UAAAA;QAAYqC,QAAAA,EAAUpC;sBACrF0B,cAAA,CAAA,aAAA,CAACM,KAAAA,EAAAA;QACCC,KAAAA,EAAM,eAAA;QACNC,WAAAA,EAAY,qBAAA;QACZC,KAAAA,EAAOjC,WAAAA;QACPkC,QAAAA,EAAUjC,cAAAA;QACVkC,UAAAA,EAAYC;sBAEdZ,cAAA,CAAA,aAAA,CAACa,YAAAA,EAAAA;AACE,QAAA,GAAGtB,qBAAqB;AACzBiB,QAAAA,WAAAA,EAAa9B,WAAAA,CAAYqB,MAAM,GAAG,CAAA,GAAIe,SAAAA,GAAY,aAAA;QAClDP,KAAAA,EAAM,MAAA;AACNQ,QAAAA,OAAAA,EAAS,CAAC,2CAA2C,EAAErB,2BAAAA,CAA4B,0DAA0D,CAAC;QAC9Ie,KAAAA,EAAO/B,WAAAA;QACPgC,QAAAA,EAAU/B;;AAIlB;;;;"}
1
+ {"version":3,"file":"InviteModal.mjs","sources":["../../../../../../../../web/src/adminPortal/memberManagement/InviteModal.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { passwordManagerDisableAutofillProps } from '../../utils/passwordManagerDisableAutofillProps';\nimport { Autocomplete } from '../components/Autocomplete';\nimport { Input } from '../components/Input';\nimport { Modal, ModalStateType, useModalState } from '../components/Modal';\nimport { ROLE_ID_STYTCH_MEMBER } from '../utils/roles';\nimport { useRoleAutocomplete } from '../utils/useRoleAutocomplete';\nimport type { SendInviteEmail } from './useSendInviteEmail';\nimport { useRbac } from '../utils/useRbac';\n\nconst defaultInviteRoles: string[] = [];\n\ninterface InviteModalProps {\n modalState: Omit<ModalStateType, 'open'>;\n inviteName: string;\n setInviteName: (value: string) => void;\n inviteEmail: string;\n setInviteEmail: (value: string) => void;\n inviteRoles: string[];\n setInviteRoles: (value: string[]) => void;\n}\n\nexport const useInviteModal = (inviteUser: SendInviteEmail) => {\n const [inviteName, setInviteName] = useState('');\n const [inviteEmail, setInviteEmail] = useState('');\n const [inviteRoles, setInviteRoles] = useState(defaultInviteRoles);\n\n const { open: openInviteModal, ...modalState } = useModalState(async () => {\n await inviteUser(inviteEmail, { name: inviteName, roles: inviteRoles });\n modalState.close();\n });\n\n const handleInviteClick = useCallback(() => {\n setInviteName('');\n setInviteEmail('');\n setInviteRoles(defaultInviteRoles);\n\n openInviteModal();\n }, [openInviteModal]);\n\n return {\n handleInviteClick,\n inviteModalProps: {\n modalState,\n inviteName,\n setInviteName,\n inviteEmail,\n setInviteEmail,\n inviteRoles,\n setInviteRoles,\n } satisfies InviteModalProps,\n };\n};\n\nexport const InviteModal = ({\n modalState,\n inviteEmail,\n inviteName,\n inviteRoles,\n setInviteEmail,\n setInviteName,\n setInviteRoles,\n}: InviteModalProps) => {\n const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');\n\n const roleAutocompleteProps = useRoleAutocomplete({\n excludeStytchMember: true,\n includeOrgRoles: canGetOrgCustomRoles ?? false,\n });\n\n const stytchMemberRoleDisplayName = roleAutocompleteProps.getOptionLabel(ROLE_ID_STYTCH_MEMBER);\n\n const formIsValid = inviteEmail.trim().length > 0;\n\n return (\n <Modal\n {...modalState}\n keepOpenOnConfirm\n title=\"Invite Member\"\n confirmButtonText=\"Invite\"\n disableConfirm={!formIsValid}\n >\n <Input label=\"Name (optional)\" placeholder=\"Enter name\" value={inviteName} onChange={setInviteName} />\n <Input\n label=\"Email address\"\n placeholder=\"Enter email address\"\n value={inviteEmail}\n onChange={setInviteEmail}\n inputProps={passwordManagerDisableAutofillProps}\n />\n <Autocomplete\n {...roleAutocompleteProps}\n placeholder={inviteRoles.length > 0 ? undefined : 'Select Role'}\n label=\"Role\"\n caption={`All members are automatically assigned the ${stytchMemberRoleDisplayName} Role. Select additional Roles to assign more permissions.`}\n value={inviteRoles}\n onChange={setInviteRoles}\n />\n </Modal>\n );\n};\n"],"names":["defaultInviteRoles","useInviteModal","inviteUser","inviteName","setInviteName","useState","inviteEmail","setInviteEmail","inviteRoles","setInviteRoles","open","openInviteModal","modalState","useModalState","name","roles","close","handleInviteClick","useCallback","inviteModalProps","InviteModal","data","canGetOrgCustomRoles","useRbac","roleAutocompleteProps","useRoleAutocomplete","excludeStytchMember","includeOrgRoles","stytchMemberRoleDisplayName","getOptionLabel","ROLE_ID_STYTCH_MEMBER","formIsValid","trim","length","React","Modal","keepOpenOnConfirm","title","confirmButtonText","disableConfirm","Input","label","placeholder","value","onChange","inputProps","passwordManagerDisableAutofillProps","Autocomplete","undefined","caption"],"mappings":"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"}
@@ -113,6 +113,7 @@ const MemberListScreen = ()=>{
113
113
  const { data: canUpdateSelfDefaultMfaMethodPerm } = useRbac('stytch.self', 'update.settings.default-mfa-method');
114
114
  const { data: canDeleteSelfPerm } = useRbac('stytch.self', 'delete');
115
115
  const { data: canRevokeSelfSessionsPerm } = useRbac('stytch.self', 'revoke-sessions');
116
+ const { data: canGetOrgCustomRoles } = useRbac('stytch.custom-org-roles', 'get');
116
117
  const canUpdateMember = canDeleteMemberMfaPhonePerm || canDeleteMemberMfaTotpPerm || canDeleteMemberPasswordPerm || canUpdateMemberMfaPhonePerm || canUpdateMemberNamePerm || canUpdateMemberUntrustedMetadataPerm || canUpdateMemberIsBreakglassPerm || canUpdateMemberMfaEnrolledPerm || canUpdateMemberDefaultMfaMethodPerm || canUpdateMemberRolesPerm || canRevokeMemberSessionsPerm;
117
118
  const canUpdateSelf = canUpdateSelfNamePerm || canUpdateSelfUntrustedMetadataPerm || canUpdateSelfMfaPhonePerm || canDeleteSelfMfaPhonePerm || canDeleteSelfPasswordPerm || canUpdateSelfMfaEnrolledPerm || canUpdateSelfDefaultMfaMethodPerm || canDeleteSelfPerm || canDeleteSelfMfaTotpPerm || canRevokeSelfSessionsPerm;
118
119
  const canActivateOrDeactivate = canCreateMemberPerm || canDeleteMemberPerm;
@@ -122,7 +123,8 @@ const MemberListScreen = ()=>{
122
123
  const currentMemberId = self?.member_id;
123
124
  const canInviteMember = canCreateMemberPerm && orgAllowsEmailInvites;
124
125
  const roleAutocompleteProps = useRoleAutocomplete({
125
- excludeStytchMember: true
126
+ excludeStytchMember: true,
127
+ includeOrgRoles: canGetOrgCustomRoles
126
128
  });
127
129
  const allRolesSet = useMemo(()=>new Set(roleAutocompleteProps.selectItems), [
128
130
  roleAutocompleteProps.selectItems