@workos-inc/widgets 1.18.0 → 1.19.0-next.1790102694835

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 (340) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +16 -20
  3. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-audit-log-streaming.client.d.cts +2 -0
  5. package/dist/cjs/admin-portal-domain-verification.client.cjs +42 -34
  6. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  7. package/dist/cjs/admin-portal-domain-verification.client.d.cts +2 -0
  8. package/dist/cjs/admin-portal-sso-connection.client.cjs +77 -50
  9. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
  10. package/dist/cjs/api/client-graphql/client.cjs +2 -1
  11. package/dist/cjs/api/client-graphql/client.cjs.map +1 -1
  12. package/dist/cjs/api/client-graphql/generated.cjs +2295 -6
  13. package/dist/cjs/api/client-graphql/generated.cjs.map +1 -1
  14. package/dist/cjs/api/client-graphql/generated.d.cts +2989 -7
  15. package/dist/cjs/api/client-graphql/hooks.cjs +67 -0
  16. package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -0
  17. package/dist/cjs/api/client-graphql/hooks.d.cts +44 -0
  18. package/dist/cjs/api/endpoint.cjs +43 -27
  19. package/dist/cjs/api/endpoint.cjs.map +1 -1
  20. package/dist/cjs/api/endpoint.d.cts +53 -20
  21. package/dist/cjs/api-keys.client.cjs +1 -2
  22. package/dist/cjs/api-keys.client.cjs.map +1 -1
  23. package/dist/cjs/directory-sync.client.cjs +54 -13
  24. package/dist/cjs/directory-sync.client.cjs.map +1 -1
  25. package/dist/cjs/experimental/api/fetch.cjs +44 -16
  26. package/dist/cjs/experimental/api/fetch.cjs.map +1 -1
  27. package/dist/cjs/experimental/api/fetch.d.cts +38 -9
  28. package/dist/cjs/experimental/api/react-query.cjs +75 -38
  29. package/dist/cjs/experimental/api/react-query.cjs.map +1 -1
  30. package/dist/cjs/experimental/api/react-query.d.cts +57 -24
  31. package/dist/cjs/experimental/api/swr.cjs +77 -35
  32. package/dist/cjs/experimental/api/swr.cjs.map +1 -1
  33. package/dist/cjs/experimental/api/swr.d.cts +49 -20
  34. package/dist/cjs/index.d.cts +4 -0
  35. package/dist/cjs/lib/add-mfa-dialog.cjs +39 -33
  36. package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
  37. package/dist/cjs/lib/admin-portal-audit-log-streaming.cjs.map +1 -1
  38. package/dist/cjs/lib/admin-portal-audit-log-streaming.d.cts +5 -3
  39. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  40. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +4 -2
  41. package/dist/cjs/lib/api/api-key.cjs +128 -40
  42. package/dist/cjs/lib/api/api-key.cjs.map +1 -1
  43. package/dist/cjs/lib/api/api-key.d.cts +20 -9
  44. package/dist/cjs/lib/api/me.cjs +70 -0
  45. package/dist/cjs/lib/api/me.cjs.map +1 -0
  46. package/dist/cjs/lib/api/me.d.cts +37 -0
  47. package/dist/cjs/lib/api/pipes.cjs +419 -0
  48. package/dist/cjs/lib/api/pipes.cjs.map +1 -0
  49. package/dist/cjs/lib/api/pipes.d.cts +69 -0
  50. package/dist/cjs/lib/api/user-api-key.cjs +116 -45
  51. package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
  52. package/dist/cjs/lib/api/user-api-key.d.cts +17 -12
  53. package/dist/cjs/lib/api/user.cjs +170 -51
  54. package/dist/cjs/lib/api/user.cjs.map +1 -1
  55. package/dist/cjs/lib/api/user.d.cts +4 -25
  56. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +2 -2
  57. package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
  58. package/dist/cjs/lib/api-keys/create-api-key.cjs +1 -2
  59. package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
  60. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +5 -13
  61. package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
  62. package/dist/cjs/lib/change-email-dialog.cjs +39 -26
  63. package/dist/cjs/lib/change-email-dialog.cjs.map +1 -1
  64. package/dist/cjs/lib/change-email-dialog.d.cts +4 -3
  65. package/dist/cjs/lib/change-password-dialog.cjs +14 -13
  66. package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
  67. package/dist/cjs/lib/client-graphql-result.cjs +116 -0
  68. package/dist/cjs/lib/client-graphql-result.cjs.map +1 -0
  69. package/dist/cjs/lib/client-graphql-result.d.cts +32 -0
  70. package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
  71. package/dist/cjs/lib/delete-domain-dialog.d.cts +3 -4
  72. package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
  73. package/dist/cjs/lib/delete-user-dialog.d.cts +3 -2
  74. package/dist/cjs/lib/directory-sync.cjs +59 -23
  75. package/dist/cjs/lib/directory-sync.cjs.map +1 -1
  76. package/dist/cjs/lib/directory-sync.d.cts +23 -5
  77. package/dist/cjs/lib/domain-actions.cjs.map +1 -1
  78. package/dist/cjs/lib/domain-actions.d.cts +3 -4
  79. package/dist/cjs/lib/domain-item.cjs.map +1 -1
  80. package/dist/cjs/lib/domain-item.d.cts +3 -4
  81. package/dist/cjs/lib/edit-user-profile-dialog.cjs +19 -19
  82. package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
  83. package/dist/cjs/lib/edit-user-profile-dialog.d.cts +4 -3
  84. package/dist/cjs/lib/edit-user-role-dialog.cjs +3 -8
  85. package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
  86. package/dist/cjs/lib/edit-user-role-dialog.d.cts +5 -4
  87. package/dist/cjs/lib/elevated-access.cjs +22 -13
  88. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  89. package/dist/cjs/lib/elevated-access.d.cts +1 -1
  90. package/dist/cjs/lib/invite-user-dialog.cjs +9 -15
  91. package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
  92. package/dist/cjs/lib/logout-all-sessions-dialog.cjs +13 -5
  93. package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
  94. package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
  95. package/dist/cjs/lib/logout-dialog.cjs +10 -6
  96. package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
  97. package/dist/cjs/lib/logout-dialog.d.cts +3 -4
  98. package/dist/cjs/lib/name-server-icon.cjs.map +1 -1
  99. package/dist/cjs/lib/name-server-icon.d.cts +3 -4
  100. package/dist/cjs/lib/oauth-icons.cjs +13 -2
  101. package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
  102. package/dist/cjs/lib/oauth-icons.d.cts +2 -1
  103. package/dist/cjs/lib/organization-switcher.cjs +3 -3
  104. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  105. package/dist/cjs/lib/organization-switcher.d.cts +6 -3
  106. package/dist/cjs/lib/password-error-utils.cjs +28 -43
  107. package/dist/cjs/lib/password-error-utils.cjs.map +1 -1
  108. package/dist/cjs/lib/password-error-utils.d.cts +3 -13
  109. package/dist/cjs/lib/pipes-admin.cjs +109 -79
  110. package/dist/cjs/lib/pipes-admin.cjs.map +1 -1
  111. package/dist/cjs/lib/pipes-admin.d.cts +1 -1
  112. package/dist/cjs/lib/pipes.cjs +133 -60
  113. package/dist/cjs/lib/pipes.cjs.map +1 -1
  114. package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
  115. package/dist/cjs/lib/resend-invite-dialog.d.cts +3 -2
  116. package/dist/cjs/lib/reset-mfa-dialog.cjs +11 -3
  117. package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
  118. package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
  119. package/dist/cjs/lib/revoke-invite-dialog.d.cts +3 -2
  120. package/dist/cjs/lib/set-password-dialog.cjs +16 -3
  121. package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
  122. package/dist/cjs/lib/use-security-settings.cjs +5 -25
  123. package/dist/cjs/lib/use-security-settings.cjs.map +1 -1
  124. package/dist/cjs/lib/use-security-settings.d.cts +2 -2
  125. package/dist/cjs/lib/user-actions-dropdown.cjs +2 -6
  126. package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
  127. package/dist/cjs/lib/user-actions-dropdown.d.cts +3 -2
  128. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs +3 -10
  129. package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs.map +1 -1
  130. package/dist/cjs/lib/user-profile.cjs +10 -5
  131. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  132. package/dist/cjs/lib/user-profile.d.cts +5 -2
  133. package/dist/cjs/lib/user-security.cjs +4 -5
  134. package/dist/cjs/lib/user-security.cjs.map +1 -1
  135. package/dist/cjs/lib/user-security.d.cts +6 -2
  136. package/dist/cjs/lib/user-sessions.cjs +2 -2
  137. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  138. package/dist/cjs/lib/user-sessions.d.cts +6 -4
  139. package/dist/cjs/lib/users-filter.cjs.map +1 -1
  140. package/dist/cjs/lib/users-filter.d.cts +4 -3
  141. package/dist/cjs/lib/users-management-context.cjs.map +1 -1
  142. package/dist/cjs/lib/users-management-context.d.cts +4 -18
  143. package/dist/cjs/lib/users-management-state.cjs.map +1 -1
  144. package/dist/cjs/lib/users-management-state.d.cts +4 -25
  145. package/dist/cjs/lib/users-management.cjs.map +1 -1
  146. package/dist/cjs/lib/users-management.d.cts +7 -7
  147. package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
  148. package/dist/cjs/lib/view-dns-record-dialog.d.cts +3 -4
  149. package/dist/cjs/organization-switcher.client.cjs +7 -6
  150. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  151. package/dist/cjs/organization-switcher.client.d.cts +3 -1
  152. package/dist/cjs/pipes-admin.client.cjs +7 -4
  153. package/dist/cjs/pipes-admin.client.cjs.map +1 -1
  154. package/dist/cjs/pipes.client.cjs +17 -16
  155. package/dist/cjs/pipes.client.cjs.map +1 -1
  156. package/dist/cjs/user-CgBDfSHl.d.cts +502 -0
  157. package/dist/cjs/user-profile.client.cjs +3 -3
  158. package/dist/cjs/user-profile.client.cjs.map +1 -1
  159. package/dist/cjs/user-profile.client.d.cts +4 -1
  160. package/dist/cjs/user-security.client.cjs +25 -14
  161. package/dist/cjs/user-security.client.cjs.map +1 -1
  162. package/dist/cjs/user-security.client.d.cts +2 -0
  163. package/dist/cjs/user-sessions.client.cjs +12 -29
  164. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  165. package/dist/cjs/user-sessions.client.d.cts +2 -0
  166. package/dist/cjs/users-management.client.cjs +1 -4
  167. package/dist/cjs/users-management.client.cjs.map +1 -1
  168. package/dist/cjs/users-management.client.d.cts +4 -1
  169. package/dist/cjs/utils.cjs +2 -1
  170. package/dist/cjs/utils.cjs.map +1 -1
  171. package/dist/esm/admin-portal-audit-log-streaming.client.d.ts +2 -0
  172. package/dist/esm/admin-portal-audit-log-streaming.client.js +20 -23
  173. package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
  174. package/dist/esm/admin-portal-domain-verification.client.d.ts +2 -0
  175. package/dist/esm/admin-portal-domain-verification.client.js +45 -39
  176. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  177. package/dist/esm/admin-portal-sso-connection.client.js +80 -52
  178. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
  179. package/dist/esm/api/client-graphql/client.js +2 -1
  180. package/dist/esm/api/client-graphql/client.js.map +1 -1
  181. package/dist/esm/api/client-graphql/generated.d.ts +2989 -7
  182. package/dist/esm/api/client-graphql/generated.js +2203 -0
  183. package/dist/esm/api/client-graphql/generated.js.map +1 -1
  184. package/dist/esm/api/client-graphql/hooks.d.ts +44 -0
  185. package/dist/esm/api/client-graphql/hooks.js +43 -0
  186. package/dist/esm/api/client-graphql/hooks.js.map +1 -0
  187. package/dist/esm/api/endpoint.d.ts +53 -20
  188. package/dist/esm/api/endpoint.js +43 -27
  189. package/dist/esm/api/endpoint.js.map +1 -1
  190. package/dist/esm/api-keys.client.js +4 -2
  191. package/dist/esm/api-keys.client.js.map +1 -1
  192. package/dist/esm/directory-sync.client.js +56 -7
  193. package/dist/esm/directory-sync.client.js.map +1 -1
  194. package/dist/esm/experimental/api/fetch.d.ts +38 -9
  195. package/dist/esm/experimental/api/fetch.js +44 -16
  196. package/dist/esm/experimental/api/fetch.js.map +1 -1
  197. package/dist/esm/experimental/api/react-query.d.ts +57 -24
  198. package/dist/esm/experimental/api/react-query.js +75 -38
  199. package/dist/esm/experimental/api/react-query.js.map +1 -1
  200. package/dist/esm/experimental/api/swr.d.ts +49 -20
  201. package/dist/esm/experimental/api/swr.js +77 -35
  202. package/dist/esm/experimental/api/swr.js.map +1 -1
  203. package/dist/esm/index.d.ts +4 -0
  204. package/dist/esm/lib/add-mfa-dialog.js +39 -36
  205. package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
  206. package/dist/esm/lib/admin-portal-audit-log-streaming.d.ts +5 -3
  207. package/dist/esm/lib/admin-portal-audit-log-streaming.js.map +1 -1
  208. package/dist/esm/lib/admin-portal-domain-verification.d.ts +4 -2
  209. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  210. package/dist/esm/lib/api/api-key.d.ts +20 -9
  211. package/dist/esm/lib/api/api-key.js +124 -49
  212. package/dist/esm/lib/api/api-key.js.map +1 -1
  213. package/dist/esm/lib/api/me.d.ts +37 -0
  214. package/dist/esm/lib/api/me.js +37 -0
  215. package/dist/esm/lib/api/me.js.map +1 -0
  216. package/dist/esm/lib/api/pipes.d.ts +69 -0
  217. package/dist/esm/lib/api/pipes.js +380 -0
  218. package/dist/esm/lib/api/pipes.js.map +1 -0
  219. package/dist/esm/lib/api/user-api-key.d.ts +17 -12
  220. package/dist/esm/lib/api/user-api-key.js +113 -52
  221. package/dist/esm/lib/api/user-api-key.js.map +1 -1
  222. package/dist/esm/lib/api/user.d.ts +4 -25
  223. package/dist/esm/lib/api/user.js +173 -59
  224. package/dist/esm/lib/api/user.js.map +1 -1
  225. package/dist/esm/lib/api-keys/api-key-details-dialog.js +1 -3
  226. package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
  227. package/dist/esm/lib/api-keys/create-api-key.js +2 -2
  228. package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
  229. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +5 -15
  230. package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
  231. package/dist/esm/lib/change-email-dialog.d.ts +4 -3
  232. package/dist/esm/lib/change-email-dialog.js +39 -31
  233. package/dist/esm/lib/change-email-dialog.js.map +1 -1
  234. package/dist/esm/lib/change-password-dialog.js +14 -13
  235. package/dist/esm/lib/change-password-dialog.js.map +1 -1
  236. package/dist/esm/lib/client-graphql-result.d.ts +32 -0
  237. package/dist/esm/lib/client-graphql-result.js +89 -0
  238. package/dist/esm/lib/client-graphql-result.js.map +1 -0
  239. package/dist/esm/lib/delete-domain-dialog.d.ts +3 -4
  240. package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
  241. package/dist/esm/lib/delete-user-dialog.d.ts +3 -2
  242. package/dist/esm/lib/delete-user-dialog.js.map +1 -1
  243. package/dist/esm/lib/directory-sync.d.ts +23 -5
  244. package/dist/esm/lib/directory-sync.js +46 -14
  245. package/dist/esm/lib/directory-sync.js.map +1 -1
  246. package/dist/esm/lib/domain-actions.d.ts +3 -4
  247. package/dist/esm/lib/domain-actions.js.map +1 -1
  248. package/dist/esm/lib/domain-item.d.ts +3 -4
  249. package/dist/esm/lib/domain-item.js.map +1 -1
  250. package/dist/esm/lib/edit-user-profile-dialog.d.ts +4 -3
  251. package/dist/esm/lib/edit-user-profile-dialog.js +19 -19
  252. package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
  253. package/dist/esm/lib/edit-user-role-dialog.d.ts +5 -4
  254. package/dist/esm/lib/edit-user-role-dialog.js +7 -11
  255. package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
  256. package/dist/esm/lib/elevated-access.d.ts +1 -1
  257. package/dist/esm/lib/elevated-access.js +20 -11
  258. package/dist/esm/lib/elevated-access.js.map +1 -1
  259. package/dist/esm/lib/invite-user-dialog.js +10 -16
  260. package/dist/esm/lib/invite-user-dialog.js.map +1 -1
  261. package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
  262. package/dist/esm/lib/logout-all-sessions-dialog.js +16 -5
  263. package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
  264. package/dist/esm/lib/logout-dialog.d.ts +3 -4
  265. package/dist/esm/lib/logout-dialog.js +12 -8
  266. package/dist/esm/lib/logout-dialog.js.map +1 -1
  267. package/dist/esm/lib/name-server-icon.d.ts +3 -4
  268. package/dist/esm/lib/name-server-icon.js.map +1 -1
  269. package/dist/esm/lib/oauth-icons.d.ts +2 -1
  270. package/dist/esm/lib/oauth-icons.js +11 -1
  271. package/dist/esm/lib/oauth-icons.js.map +1 -1
  272. package/dist/esm/lib/organization-switcher.d.ts +6 -3
  273. package/dist/esm/lib/organization-switcher.js +3 -3
  274. package/dist/esm/lib/organization-switcher.js.map +1 -1
  275. package/dist/esm/lib/password-error-utils.d.ts +3 -13
  276. package/dist/esm/lib/password-error-utils.js +28 -43
  277. package/dist/esm/lib/password-error-utils.js.map +1 -1
  278. package/dist/esm/lib/pipes-admin.d.ts +1 -1
  279. package/dist/esm/lib/pipes-admin.js +105 -78
  280. package/dist/esm/lib/pipes-admin.js.map +1 -1
  281. package/dist/esm/lib/pipes.js +140 -71
  282. package/dist/esm/lib/pipes.js.map +1 -1
  283. package/dist/esm/lib/resend-invite-dialog.d.ts +3 -2
  284. package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
  285. package/dist/esm/lib/reset-mfa-dialog.js +11 -3
  286. package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
  287. package/dist/esm/lib/revoke-invite-dialog.d.ts +3 -2
  288. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
  289. package/dist/esm/lib/set-password-dialog.js +16 -3
  290. package/dist/esm/lib/set-password-dialog.js.map +1 -1
  291. package/dist/esm/lib/use-security-settings.d.ts +2 -2
  292. package/dist/esm/lib/use-security-settings.js +5 -27
  293. package/dist/esm/lib/use-security-settings.js.map +1 -1
  294. package/dist/esm/lib/user-actions-dropdown.d.ts +3 -2
  295. package/dist/esm/lib/user-actions-dropdown.js +2 -6
  296. package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
  297. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js +3 -11
  298. package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js.map +1 -1
  299. package/dist/esm/lib/user-profile.d.ts +5 -2
  300. package/dist/esm/lib/user-profile.js +15 -6
  301. package/dist/esm/lib/user-profile.js.map +1 -1
  302. package/dist/esm/lib/user-security.d.ts +6 -2
  303. package/dist/esm/lib/user-security.js +4 -5
  304. package/dist/esm/lib/user-security.js.map +1 -1
  305. package/dist/esm/lib/user-sessions.d.ts +6 -4
  306. package/dist/esm/lib/user-sessions.js +2 -2
  307. package/dist/esm/lib/user-sessions.js.map +1 -1
  308. package/dist/esm/lib/users-filter.d.ts +4 -3
  309. package/dist/esm/lib/users-filter.js.map +1 -1
  310. package/dist/esm/lib/users-management-context.d.ts +4 -18
  311. package/dist/esm/lib/users-management-context.js.map +1 -1
  312. package/dist/esm/lib/users-management-state.d.ts +4 -25
  313. package/dist/esm/lib/users-management-state.js.map +1 -1
  314. package/dist/esm/lib/users-management.d.ts +7 -7
  315. package/dist/esm/lib/users-management.js.map +1 -1
  316. package/dist/esm/lib/view-dns-record-dialog.d.ts +3 -4
  317. package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
  318. package/dist/esm/organization-switcher.client.d.ts +3 -1
  319. package/dist/esm/organization-switcher.client.js +10 -6
  320. package/dist/esm/organization-switcher.client.js.map +1 -1
  321. package/dist/esm/pipes-admin.client.js +10 -4
  322. package/dist/esm/pipes-admin.client.js.map +1 -1
  323. package/dist/esm/pipes.client.js +17 -14
  324. package/dist/esm/pipes.client.js.map +1 -1
  325. package/dist/esm/user-BE5sIud6.d.ts +502 -0
  326. package/dist/esm/user-profile.client.d.ts +4 -1
  327. package/dist/esm/user-profile.client.js +2 -2
  328. package/dist/esm/user-profile.client.js.map +1 -1
  329. package/dist/esm/user-security.client.d.ts +2 -0
  330. package/dist/esm/user-security.client.js +28 -14
  331. package/dist/esm/user-security.client.js.map +1 -1
  332. package/dist/esm/user-sessions.client.d.ts +2 -0
  333. package/dist/esm/user-sessions.client.js +16 -30
  334. package/dist/esm/user-sessions.client.js.map +1 -1
  335. package/dist/esm/users-management.client.d.ts +4 -1
  336. package/dist/esm/users-management.client.js +2 -5
  337. package/dist/esm/users-management.client.js.map +1 -1
  338. package/dist/esm/utils.js +2 -1
  339. package/dist/esm/utils.js.map +1 -1
  340. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/resend-invite-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { useResendUserInvite } from \"./api/user.js\";\nimport { AlertDialog, Button, Dialog } from \"./elements.js\";\nimport { Member } from \"../api/endpoint.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface ResendInviteDialogProps extends AlertDialog.RootProps {\n user: Member;\n children?: React.ReactNode;\n}\n\nexport function ResendInviteDialog({\n children,\n user,\n ...props\n}: ResendInviteDialogProps) {\n const resendInvite = useResendUserInvite();\n const cancelButtonRef = React.useRef<HTMLButtonElement>(null);\n const successButtonRef = React.useRef<HTMLButtonElement>(null);\n const [successDialogIsOpen, setSuccessDialogIsOpen] = React.useState(false);\n\n const onSubmitForm = () => {\n resendInvite.mutate(\n { userId: user.id },\n {\n onSuccess: () => {\n setSuccessDialogIsOpen(true);\n },\n },\n );\n };\n\n return (\n <>\n <AlertDialog.Root {...props}>\n {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n <AlertDialog.Content\n maxWidth=\"480px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n cancelButtonRef.current?.focus();\n });\n }}\n >\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Resend invite?\"\n id=\"oSINc8\"\n description=\"Dialog title asking to confirm resending an invitation\"\n />\n </AlertDialog.Title>\n <Flex mb=\"4\" direction=\"column\" gap=\"3\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Are you sure you want to resend the invite to {email}?\"\n id=\"46jEJT\"\n description=\"Confirmation message asking if user wants to resend invite to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </AlertDialog.Description>\n </Flex>\n\n {resendInvite.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(resendInvite.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n type=\"button\"\n variant=\"secondary\"\n ref={cancelButtonRef}\n disabled={resendInvite.isPending}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"Ecig7v\"\n description=\"Button to cancel resending invite\"\n />\n </Button>\n </AlertDialog.Cancel>\n <Button\n variant=\"destructive\"\n type=\"submit\"\n loading={resendInvite.isPending}\n >\n <Translation\n defaultMessage=\"Resend\"\n id=\"t73qag\"\n description=\"Button to confirm resending the invitation\"\n />\n </Button>\n </form>\n </Flex>\n </AlertDialog.Content>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(resendInvite.error)}\n </section>\n </VisuallyHidden>\n </AlertDialog.Root>\n <Dialog.Root\n open={successDialogIsOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n props.onOpenChange?.(false);\n }\n setSuccessDialogIsOpen(isOpen);\n }}\n >\n <Dialog.Content\n maxWidth=\"360px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n successButtonRef.current?.focus();\n });\n }}\n >\n <Dialog.Title>\n <Translation\n defaultMessage=\"Invite sent\"\n id=\"5uMNqG\"\n description=\"Dialog title confirming invite was sent\"\n />\n </Dialog.Title>\n <Dialog.Description>\n <Translation\n defaultMessage=\"The invite email has been resent to {email}\"\n id=\"fb2S3+\"\n description=\"Message confirming invite was resent to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </Dialog.Description>\n <Flex gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button ref={successButtonRef}>\n <Translation\n defaultMessage=\"Close\"\n id=\"Mixw+w\"\n description=\"Button to close the success dialog\"\n />\n </Button>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n </>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return \"\";\n }\n // TODO Handle server errors\n return (\n <Translation\n defaultMessage=\"There was an error sending the invite. Please try again.\"\n id=\"090qDK\"\n description=\"Error message shown when resending invite fails\"\n />\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/resend-invite-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { useResendUserInvite, type Member } from \"./api/user.js\";\nimport { AlertDialog, Button, Dialog } from \"./elements.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface ResendInviteDialogProps extends AlertDialog.RootProps {\n user: Member;\n children?: React.ReactNode;\n}\n\nexport function ResendInviteDialog({\n children,\n user,\n ...props\n}: ResendInviteDialogProps) {\n const resendInvite = useResendUserInvite();\n const cancelButtonRef = React.useRef<HTMLButtonElement>(null);\n const successButtonRef = React.useRef<HTMLButtonElement>(null);\n const [successDialogIsOpen, setSuccessDialogIsOpen] = React.useState(false);\n\n const onSubmitForm = () => {\n resendInvite.mutate(\n { userId: user.id },\n {\n onSuccess: () => {\n setSuccessDialogIsOpen(true);\n },\n },\n );\n };\n\n return (\n <>\n <AlertDialog.Root {...props}>\n {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n <AlertDialog.Content\n maxWidth=\"480px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n cancelButtonRef.current?.focus();\n });\n }}\n >\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Resend invite?\"\n id=\"oSINc8\"\n description=\"Dialog title asking to confirm resending an invitation\"\n />\n </AlertDialog.Title>\n <Flex mb=\"4\" direction=\"column\" gap=\"3\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Are you sure you want to resend the invite to {email}?\"\n id=\"46jEJT\"\n description=\"Confirmation message asking if user wants to resend invite to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </AlertDialog.Description>\n </Flex>\n\n {resendInvite.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(resendInvite.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n type=\"button\"\n variant=\"secondary\"\n ref={cancelButtonRef}\n disabled={resendInvite.isPending}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"Ecig7v\"\n description=\"Button to cancel resending invite\"\n />\n </Button>\n </AlertDialog.Cancel>\n <Button\n variant=\"destructive\"\n type=\"submit\"\n loading={resendInvite.isPending}\n >\n <Translation\n defaultMessage=\"Resend\"\n id=\"t73qag\"\n description=\"Button to confirm resending the invitation\"\n />\n </Button>\n </form>\n </Flex>\n </AlertDialog.Content>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(resendInvite.error)}\n </section>\n </VisuallyHidden>\n </AlertDialog.Root>\n <Dialog.Root\n open={successDialogIsOpen}\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n props.onOpenChange?.(false);\n }\n setSuccessDialogIsOpen(isOpen);\n }}\n >\n <Dialog.Content\n maxWidth=\"360px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n successButtonRef.current?.focus();\n });\n }}\n >\n <Dialog.Title>\n <Translation\n defaultMessage=\"Invite sent\"\n id=\"5uMNqG\"\n description=\"Dialog title confirming invite was sent\"\n />\n </Dialog.Title>\n <Dialog.Description>\n <Translation\n defaultMessage=\"The invite email has been resent to {email}\"\n id=\"fb2S3+\"\n description=\"Message confirming invite was resent to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </Dialog.Description>\n <Flex gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button ref={successButtonRef}>\n <Translation\n defaultMessage=\"Close\"\n id=\"Mixw+w\"\n description=\"Button to close the success dialog\"\n />\n </Button>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n </>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return \"\";\n }\n // TODO Handle server errors\n return (\n <Translation\n defaultMessage=\"There was an error sending the invite. Please try again.\"\n id=\"090qDK\"\n description=\"Error message shown when resending invite fails\"\n />\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,8 +1,9 @@
1
1
  import * as React from 'react';
2
+ import { a as Member } from '../user-CgBDfSHl.cjs';
2
3
  import { RootProps } from '@radix-ui/themes/components/alert-dialog';
3
- import { Member } from '../api/endpoint.cjs';
4
+ import '../api/client-graphql/generated.cjs';
5
+ import 'graphql-request';
4
6
  import '@tanstack/react-query';
5
- import '../api/widgets-api-client.cjs';
6
7
 
7
8
  interface ResendInviteDialogProps extends RootProps {
8
9
  user: Member;
@@ -36,7 +36,9 @@ var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var React = __toESM(require("react"), 1);
37
37
  var import_themes = require("@radix-ui/themes");
38
38
  var import_elements = require("./elements.js");
39
- var import_endpoint = require("../api/endpoint.js");
39
+ var import_hooks = require("../api/client-graphql/hooks.js");
40
+ var import_api_provider = require("../api/api-provider.js");
41
+ var import_client_graphql_result = require("./client-graphql-result.js");
40
42
  var import_use_security_settings = require("./use-security-settings.js");
41
43
  var import_elevated_access = require("./elevated-access.js");
42
44
  var import_save_button = require("./save-button.js");
@@ -61,9 +63,15 @@ function Content({
61
63
  isPasswordSet
62
64
  }) {
63
65
  const securitySettings = (0, import_use_security_settings.useSecuritySettings)();
64
- const resetMfa = (0, import_endpoint.useDeleteTotpFactors)();
66
+ const { elevatedAccess } = (0, import_api_provider.useElevatedAccessToken)();
67
+ const resetMfa = (0, import_hooks.useClientGraphqlMutation)({
68
+ mutationFn: async (sdk, elevatedAccessToken) => (0, import_client_graphql_result.expectResultMember)(
69
+ (await sdk.RemoveMfaFactor({ input: { elevatedAccessToken } })).removeMfaFactor,
70
+ "MfaFactorRemoved"
71
+ )
72
+ });
65
73
  const onSubmitForm = () => {
66
- resetMfa.mutate();
74
+ resetMfa.mutate(elevatedAccess?.token ?? "");
67
75
  };
68
76
  (0, import_use_dialog_close.useDialogClose)(resetMfa.isSuccess, () => {
69
77
  securitySettings.update("Mfa", false);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/reset-mfa-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Flex } from \"@radix-ui/themes\";\nimport { type ReactNode } from \"react\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { useDeleteTotpFactors } from \"../api/endpoint.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface ResetMfaDialogProps extends AlertDialog.RootProps {\n children?: ReactNode;\n isPasswordSet: boolean;\n}\n\nexport function ResetMfaDialog({\n children,\n isPasswordSet,\n ...props\n}: ResetMfaDialogProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <AlertDialog.Root {...props} open={open} onOpenChange={setOpen}>\n <AlertDialog.Trigger>{children}</AlertDialog.Trigger>\n\n <AlertDialog.Content maxWidth=\"480px\">\n <ElevatedAccess type=\"alert\">\n <Content onClose={handleClose} isPasswordSet={isPasswordSet} />\n </ElevatedAccess>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n\nfunction Content({\n onClose,\n isPasswordSet,\n}: {\n onClose: () => void;\n isPasswordSet: boolean;\n}) {\n const securitySettings = useSecuritySettings();\n const resetMfa = useDeleteTotpFactors();\n\n const onSubmitForm = () => {\n resetMfa.mutate();\n };\n\n useDialogClose(resetMfa.isSuccess, () => {\n securitySettings.update(\"Mfa\", false);\n });\n\n return (\n <>\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Disable multi-factor authentication?\"\n id=\"a4wDlZ\"\n description=\"Dialog title asking to confirm disabling MFA\"\n />\n </AlertDialog.Title>\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Turning off MFA will remove the additional layer of security on your account.\"\n id=\"24huc/\"\n description=\"Warning that disabling MFA reduces security\"\n trailingSpace\n />\n {isPasswordSet ? (\n <Translation\n defaultMessage=\"We will only ask for your password during sign-in.\"\n id=\"Z6coCJ\"\n description=\"Explanation when password is set but MFA will be disabled\"\n />\n ) : (\n <Translation\n defaultMessage=\"We will not ask for additional verification during sign-in.\"\n id=\"4SH+qg\"\n description=\"Explanation when no password set and MFA will be disabled\"\n />\n )}\n </AlertDialog.Description>\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n variant=\"secondary\"\n disabled={resetMfa.isPending || resetMfa.isSuccess}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"OdCEs1\"\n description=\"Button to cancel disabling MFA\"\n />\n </Button>\n </AlertDialog.Cancel>\n\n <SaveButton\n type=\"submit\"\n loading={resetMfa.isPending}\n done={resetMfa.isSuccess}\n onDone={onClose}\n variant=\"destructive\"\n >\n <Translation\n defaultMessage=\"Disable\"\n id=\"uvxVJM\"\n description=\"Button to confirm disabling MFA\"\n />\n </SaveButton>\n </form>\n </Flex>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BI;AA5BJ,YAAuB;AACvB,oBAAqB;AAErB,sBAAoC;AACpC,sBAAqC;AACrC,mCAAoC;AACpC,6BAA+B;AAC/B,yBAA2B;AAC3B,8BAA+B;AAC/B,yBAA4B;AAOrB,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAE5C,QAAM,cAAc,MAAM,YAAY,MAAM;AAC1C,YAAQ,KAAK;AAAA,EACf,GAAG,CAAC,CAAC;AAEL,SACE,6CAAC,4BAAY,MAAZ,EAAkB,GAAG,OAAO,MAAY,cAAc,SACrD;AAAA,gDAAC,4BAAY,SAAZ,EAAqB,UAAS;AAAA,IAE/B,4CAAC,4BAAY,SAAZ,EAAoB,UAAS,SAC5B,sDAAC,yCAAe,MAAK,SACnB,sDAAC,WAAQ,SAAS,aAAa,eAA8B,GAC/D,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,QAAQ;AAAA,EACf;AAAA,EACA;AACF,GAGG;AACD,QAAM,uBAAmB,kDAAoB;AAC7C,QAAM,eAAW,sCAAqB;AAEtC,QAAM,eAAe,MAAM;AACzB,aAAS,OAAO;AAAA,EAClB;AAEA,8CAAe,SAAS,WAAW,MAAM;AACvC,qBAAiB,OAAO,OAAO,KAAK;AAAA,EACtC,CAAC;AAED,SACE,4EACE;AAAA,gDAAC,4BAAY,OAAZ,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,6CAAC,4BAAY,aAAZ,EACC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,gBAAe;AAAA,UACf,IAAG;AAAA,UACH,aAAY;AAAA,UACZ,eAAa;AAAA;AAAA,MACf;AAAA,MACC,gBACC;AAAA,QAAC;AAAA;AAAA,UACC,gBAAe;AAAA,UACf,IAAG;AAAA,UACH,aAAY;AAAA;AAAA,MACd,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,gBAAe;AAAA,UACf,IAAG;AAAA,UACH,aAAY;AAAA;AAAA,MACd;AAAA,OAEJ;AAAA,IAEA,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,CAAC,UAAU;AACnB,gBAAM,eAAe;AACrB,uBAAa;AAAA,QACf;AAAA,QAEA;AAAA,sDAAC,4BAAY,QAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAQ;AAAA,cACR,UAAU,SAAS,aAAa,SAAS;AAAA,cAEzC;AAAA,gBAAC;AAAA;AAAA,kBACC,gBAAe;AAAA,kBACf,IAAG;AAAA,kBACH,aAAY;AAAA;AAAA,cACd;AAAA;AAAA,UACF,GACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,SAAS;AAAA,cAClB,MAAM,SAAS;AAAA,cACf,QAAQ;AAAA,cACR,SAAQ;AAAA,cAER;AAAA,gBAAC;AAAA;AAAA,kBACC,gBAAe;AAAA,kBACf,IAAG;AAAA,kBACH,aAAY;AAAA;AAAA,cACd;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF,GACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/reset-mfa-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Flex } from \"@radix-ui/themes\";\nimport { type ReactNode } from \"react\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { useClientGraphqlMutation } from \"../api/client-graphql/hooks.js\";\nimport { useElevatedAccessToken } from \"../api/api-provider.js\";\nimport { expectResultMember } from \"./client-graphql-result.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface ResetMfaDialogProps extends AlertDialog.RootProps {\n children?: ReactNode;\n isPasswordSet: boolean;\n}\n\nexport function ResetMfaDialog({\n children,\n isPasswordSet,\n ...props\n}: ResetMfaDialogProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <AlertDialog.Root {...props} open={open} onOpenChange={setOpen}>\n <AlertDialog.Trigger>{children}</AlertDialog.Trigger>\n\n <AlertDialog.Content maxWidth=\"480px\">\n <ElevatedAccess type=\"alert\">\n <Content onClose={handleClose} isPasswordSet={isPasswordSet} />\n </ElevatedAccess>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n\nfunction Content({\n onClose,\n isPasswordSet,\n}: {\n onClose: () => void;\n isPasswordSet: boolean;\n}) {\n const securitySettings = useSecuritySettings();\n const { elevatedAccess } = useElevatedAccessToken();\n const resetMfa = useClientGraphqlMutation({\n mutationFn: async (sdk, elevatedAccessToken: string) =>\n expectResultMember(\n (await sdk.RemoveMfaFactor({ input: { elevatedAccessToken } }))\n .removeMfaFactor,\n \"MfaFactorRemoved\",\n ),\n });\n\n const onSubmitForm = () => {\n resetMfa.mutate(elevatedAccess?.token ?? \"\");\n };\n\n useDialogClose(resetMfa.isSuccess, () => {\n securitySettings.update(\"Mfa\", false);\n });\n\n return (\n <>\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Disable multi-factor authentication?\"\n id=\"a4wDlZ\"\n description=\"Dialog title asking to confirm disabling MFA\"\n />\n </AlertDialog.Title>\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Turning off MFA will remove the additional layer of security on your account.\"\n id=\"24huc/\"\n description=\"Warning that disabling MFA reduces security\"\n trailingSpace\n />\n {isPasswordSet ? (\n <Translation\n defaultMessage=\"We will only ask for your password during sign-in.\"\n id=\"Z6coCJ\"\n description=\"Explanation when password is set but MFA will be disabled\"\n />\n ) : (\n <Translation\n defaultMessage=\"We will not ask for additional verification during sign-in.\"\n id=\"4SH+qg\"\n description=\"Explanation when no password set and MFA will be disabled\"\n />\n )}\n </AlertDialog.Description>\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n variant=\"secondary\"\n disabled={resetMfa.isPending || resetMfa.isSuccess}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"OdCEs1\"\n description=\"Button to cancel disabling MFA\"\n />\n </Button>\n </AlertDialog.Cancel>\n\n <SaveButton\n type=\"submit\"\n loading={resetMfa.isPending}\n done={resetMfa.isSuccess}\n onDone={onClose}\n variant=\"destructive\"\n >\n <Translation\n defaultMessage=\"Disable\"\n id=\"uvxVJM\"\n description=\"Button to confirm disabling MFA\"\n />\n </SaveButton>\n </form>\n </Flex>\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/revoke-invite-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useRevokeUserInvite } from \"./api/user.js\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { Member } from \"../api/endpoint.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface RevokeInviteDialogProps extends AlertDialog.RootProps {\n user: Member;\n children?: ReactNode;\n}\n\nexport function RevokeInviteDialog({\n children,\n user,\n ...props\n}: RevokeInviteDialogProps) {\n const revokeInvite = useRevokeUserInvite();\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\n\n const onSubmitForm = () => {\n revokeInvite.mutate(\n { userId: user.id },\n {\n onSuccess: () => {\n props.onOpenChange?.(false);\n },\n },\n );\n };\n\n return (\n <AlertDialog.Root {...props}>\n {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n <AlertDialog.Content\n maxWidth=\"480px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n cancelButtonRef.current?.focus();\n });\n }}\n >\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Revoke invite?\"\n id=\"/fEPAD\"\n description=\"Dialog title asking to confirm revoking an invitation\"\n />\n </AlertDialog.Title>\n <Flex mb=\"4\" direction=\"column\" gap=\"3\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Are you sure you want to revoke the invite to {email}? This action is immediate and cannot be undone.\"\n id=\"wt2qe9\"\n description=\"Warning message about revoking invite to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </AlertDialog.Description>\n </Flex>\n\n {revokeInvite.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(revokeInvite.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n variant=\"secondary\"\n ref={cancelButtonRef}\n disabled={revokeInvite.isPending}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"+p4qwy\"\n description=\"Button to cancel revoking invite\"\n />\n </Button>\n </AlertDialog.Cancel>\n\n <Button\n variant=\"destructive\"\n type=\"submit\"\n loading={revokeInvite.isPending}\n >\n <Translation\n defaultMessage=\"Revoke\"\n id=\"Nkz6Xi\"\n description=\"Button to confirm revoking the invitation\"\n />\n </Button>\n </form>\n </Flex>\n </AlertDialog.Content>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(revokeInvite.error)}\n </section>\n </VisuallyHidden>\n </AlertDialog.Root>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return (\n <Translation\n defaultMessage=\"There was an error revoking the invite. Please try again.\"\n id=\"zG7XDc\"\n description=\"Error message shown when revoking invite fails\"\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmCmB;AAjCnB,oBAAoD;AACpD,mBAAuC;AACvC,kBAAoC;AACpC,sBAAoC;AAEpC,yBAA4B;AAOrB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,mBAAe,iCAAoB;AACzC,QAAM,sBAAkB,qBAA0B,IAAI;AAEtD,QAAM,eAAe,MAAM;AACzB,iBAAa;AAAA,MACX,EAAE,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,eAAe,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE,6CAAC,4BAAY,MAAZ,EAAkB,GAAG,OACnB;AAAA,gBAAY,4CAAC,4BAAY,SAAZ,EAAqB,UAAS;AAAA,IAE5C;AAAA,MAAC,4BAAY;AAAA,MAAZ;AAAA,QACC,UAAS;AAAA,QACT,iBAAiB,MAAM;AACrB,gCAAsB,MAAM;AAC1B,4BAAgB,SAAS,MAAM;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,QAEA;AAAA,sDAAC,4BAAY,OAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA;AAAA,UACd,GACF;AAAA,UACA,4CAAC,sBAAK,IAAG,KAAI,WAAU,UAAS,KAAI,KAClC,sDAAC,4BAAY,aAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA,cACZ,QAAQ,EAAE,OAAO,4CAAC,sBAAK,QAAO,QAAQ,eAAK,OAAM,EAAQ;AAAA;AAAA,UAC3D,GACF,GACF;AAAA,UAEC,aAAa,QACZ,4CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,IAAG,KAAI,IAAG,MAClC,sDAAC,sBAAQ,MAAR,EACE,kCAAwB,aAAa,KAAK,GAC7C,GACF,IACE;AAAA,UAEJ,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AACnB,sBAAM,eAAe;AACrB,6BAAa;AAAA,cACf;AAAA,cAEA;AAAA,4DAAC,4BAAY,QAAZ,EACC;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,KAAK;AAAA,oBACL,UAAU,aAAa;AAAA,oBAEvB;AAAA,sBAAC;AAAA;AAAA,wBACC,gBAAe;AAAA,wBACf,IAAG;AAAA,wBACH,aAAY;AAAA;AAAA,oBACd;AAAA;AAAA,gBACF,GACF;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,aAAa;AAAA,oBAEtB;AAAA,sBAAC;AAAA;AAAA,wBACC,gBAAe;AAAA,wBACf,IAAG;AAAA,wBACH,aAAY;AAAA;AAAA,oBACd;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF;AAAA;AAAA;AAAA,IACF;AAAA,IAGA,4CAAC,gCAAe,SAAO,MACrB,sDAAC,aAAQ,aAAU,UAChB,kCAAwB,aAAa,KAAK,GAC7C,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,wBAAwB,OAAgB;AAC/C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAe;AAAA,MACf,IAAG;AAAA,MACH,aAAY;AAAA;AAAA,EACd;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/revoke-invite-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useRevokeUserInvite, type Member } from \"./api/user.js\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface RevokeInviteDialogProps extends AlertDialog.RootProps {\n user: Member;\n children?: ReactNode;\n}\n\nexport function RevokeInviteDialog({\n children,\n user,\n ...props\n}: RevokeInviteDialogProps) {\n const revokeInvite = useRevokeUserInvite();\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\n\n const onSubmitForm = () => {\n revokeInvite.mutate(\n { userId: user.id },\n {\n onSuccess: () => {\n props.onOpenChange?.(false);\n },\n },\n );\n };\n\n return (\n <AlertDialog.Root {...props}>\n {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n <AlertDialog.Content\n maxWidth=\"480px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n cancelButtonRef.current?.focus();\n });\n }}\n >\n <AlertDialog.Title>\n <Translation\n defaultMessage=\"Revoke invite?\"\n id=\"/fEPAD\"\n description=\"Dialog title asking to confirm revoking an invitation\"\n />\n </AlertDialog.Title>\n <Flex mb=\"4\" direction=\"column\" gap=\"3\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"Are you sure you want to revoke the invite to {email}? This action is immediate and cannot be undone.\"\n id=\"wt2qe9\"\n description=\"Warning message about revoking invite to specific email\"\n values={{ email: <Text weight=\"bold\">{user.email}</Text> }}\n />\n </AlertDialog.Description>\n </Flex>\n\n {revokeInvite.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(revokeInvite.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button\n variant=\"secondary\"\n ref={cancelButtonRef}\n disabled={revokeInvite.isPending}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"+p4qwy\"\n description=\"Button to cancel revoking invite\"\n />\n </Button>\n </AlertDialog.Cancel>\n\n <Button\n variant=\"destructive\"\n type=\"submit\"\n loading={revokeInvite.isPending}\n >\n <Translation\n defaultMessage=\"Revoke\"\n id=\"Nkz6Xi\"\n description=\"Button to confirm revoking the invitation\"\n />\n </Button>\n </form>\n </Flex>\n </AlertDialog.Content>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(revokeInvite.error)}\n </section>\n </VisuallyHidden>\n </AlertDialog.Root>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return (\n <Translation\n defaultMessage=\"There was an error revoking the invite. Please try again.\"\n id=\"zG7XDc\"\n description=\"Error message shown when revoking invite fails\"\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCmB;AAhCnB,oBAAoD;AACpD,mBAAuC;AACvC,kBAAiD;AACjD,sBAAoC;AACpC,yBAA4B;AAOrB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA4B;AAC1B,QAAM,mBAAe,iCAAoB;AACzC,QAAM,sBAAkB,qBAA0B,IAAI;AAEtD,QAAM,eAAe,MAAM;AACzB,iBAAa;AAAA,MACX,EAAE,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,eAAe,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE,6CAAC,4BAAY,MAAZ,EAAkB,GAAG,OACnB;AAAA,gBAAY,4CAAC,4BAAY,SAAZ,EAAqB,UAAS;AAAA,IAE5C;AAAA,MAAC,4BAAY;AAAA,MAAZ;AAAA,QACC,UAAS;AAAA,QACT,iBAAiB,MAAM;AACrB,gCAAsB,MAAM;AAC1B,4BAAgB,SAAS,MAAM;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,QAEA;AAAA,sDAAC,4BAAY,OAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA;AAAA,UACd,GACF;AAAA,UACA,4CAAC,sBAAK,IAAG,KAAI,WAAU,UAAS,KAAI,KAClC,sDAAC,4BAAY,aAAZ,EACC;AAAA,YAAC;AAAA;AAAA,cACC,gBAAe;AAAA,cACf,IAAG;AAAA,cACH,aAAY;AAAA,cACZ,QAAQ,EAAE,OAAO,4CAAC,sBAAK,QAAO,QAAQ,eAAK,OAAM,EAAQ;AAAA;AAAA,UAC3D,GACF,GACF;AAAA,UAEC,aAAa,QACZ,4CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,IAAG,KAAI,IAAG,MAClC,sDAAC,sBAAQ,MAAR,EACE,kCAAwB,aAAa,KAAK,GAC7C,GACF,IACE;AAAA,UAEJ,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AACnB,sBAAM,eAAe;AACrB,6BAAa;AAAA,cACf;AAAA,cAEA;AAAA,4DAAC,4BAAY,QAAZ,EACC;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,KAAK;AAAA,oBACL,UAAU,aAAa;AAAA,oBAEvB;AAAA,sBAAC;AAAA;AAAA,wBACC,gBAAe;AAAA,wBACf,IAAG;AAAA,wBACH,aAAY;AAAA;AAAA,oBACd;AAAA;AAAA,gBACF,GACF;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,aAAa;AAAA,oBAEtB;AAAA,sBAAC;AAAA;AAAA,wBACC,gBAAe;AAAA,wBACf,IAAG;AAAA,wBACH,aAAY;AAAA;AAAA,oBACd;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UACF,GACF;AAAA;AAAA;AAAA,IACF;AAAA,IAGA,4CAAC,gCAAe,SAAO,MACrB,sDAAC,aAAQ,aAAU,UAChB,kCAAwB,aAAa,KAAK,GAC7C,GACF;AAAA,KACF;AAEJ;AAEA,SAAS,wBAAwB,OAAgB;AAC/C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAe;AAAA,MACf,IAAG;AAAA,MACH,aAAY;AAAA;AAAA,EACd;AAEJ;","names":[]}
@@ -1,9 +1,10 @@
1
1
  import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
+ import { a as Member } from '../user-CgBDfSHl.cjs';
3
4
  import { RootProps } from '@radix-ui/themes/components/alert-dialog';
4
- import { Member } from '../api/endpoint.cjs';
5
+ import '../api/client-graphql/generated.cjs';
6
+ import 'graphql-request';
5
7
  import '@tanstack/react-query';
6
- import '../api/widgets-api-client.cjs';
7
8
 
8
9
  interface RevokeInviteDialogProps extends RootProps {
9
10
  user: Member;
@@ -38,7 +38,9 @@ var import_themes = require("@radix-ui/themes");
38
38
  var React = __toESM(require("react"), 1);
39
39
  var import_elements = require("./elements.js");
40
40
  var Form = __toESM(require("./form.js"), 1);
41
- var import_endpoint = require("../api/endpoint.js");
41
+ var import_hooks = require("../api/client-graphql/hooks.js");
42
+ var import_api_provider = require("../api/api-provider.js");
43
+ var import_client_graphql_result = require("./client-graphql-result.js");
42
44
  var import_password_error_utils = require("./password-error-utils.js");
43
45
  var import_use_security_settings = require("./use-security-settings.js");
44
46
  var import_elevated_access = require("./elevated-access.js");
@@ -68,7 +70,18 @@ function SetPasswordForm({
68
70
  description
69
71
  }) {
70
72
  const translate = (0, import_use_translation.useTranslation)();
71
- const setPassword = (0, import_endpoint.useCreatePassword)();
73
+ const { elevatedAccess } = (0, import_api_provider.useElevatedAccessToken)();
74
+ const setPassword = (0, import_hooks.useClientGraphqlMutation)({
75
+ mutationFn: async (sdk, password) => (0, import_client_graphql_result.expectResultMember)(
76
+ (await sdk.CreatePassword({
77
+ input: {
78
+ password,
79
+ elevatedAccessToken: elevatedAccess?.token ?? ""
80
+ }
81
+ })).createPassword,
82
+ "PasswordCreated"
83
+ )
84
+ });
72
85
  const securitySettings = (0, import_use_security_settings.useSecuritySettings)();
73
86
  const [disableSubmit, setDisableSubmit] = React.useState(true);
74
87
  const handleSubmit = async (event) => {
@@ -78,7 +91,7 @@ function SetPasswordForm({
78
91
  if (!password) {
79
92
  return;
80
93
  }
81
- setPassword.mutate({ data: { password } });
94
+ setPassword.mutate(password);
82
95
  };
83
96
  const validationErrors = React.useMemo(
84
97
  () => setPassword.error ? (0, import_password_error_utils.getPasswordValidationErrors)(setPassword.error) : [],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/set-password-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport { Dialog, Label, PasswordField, Button } from \"./elements.js\";\nimport * as Form from \"./form.js\";\nimport { useCreatePassword } from \"../api/endpoint.js\";\nimport {\n getPasswordValidationErrors,\n getPasswordValidationAriaTexts,\n PasswordValidationErrorList,\n} from \"./password-error-utils.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface SetPasswordDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n}\n\nexport function SetPasswordDialog({\n children,\n ...props\n}: SetPasswordDialogProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Dialog.Root {...props} open={open} onOpenChange={setOpen}>\n <Dialog.Trigger>{children}</Dialog.Trigger>\n\n <Dialog.Content maxWidth=\"480px\">\n <ElevatedAccess>\n <Content onClose={handleClose} />\n </ElevatedAccess>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n onClose: () => void;\n}\n\nfunction Content({ onClose }: ContentProps) {\n return <SetPasswordForm onSuccess={onClose} />;\n}\n\ninterface SetPasswordFormProps {\n onSuccess?: () => void;\n cancel?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport function SetPasswordForm({\n onSuccess,\n cancel,\n description,\n}: SetPasswordFormProps) {\n const translate = useTranslation();\n const setPassword = useCreatePassword();\n const securitySettings = useSecuritySettings();\n const [disableSubmit, setDisableSubmit] = React.useState(true);\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const password = formData.get(\"password\")?.toString();\n\n if (!password) {\n return;\n }\n\n setPassword.mutate({ data: { password } });\n };\n\n const validationErrors = React.useMemo(\n () =>\n setPassword.error ? getPasswordValidationErrors(setPassword.error) : [],\n [setPassword.error],\n );\n\n const ariaErrorText = React.useMemo(() => {\n const parts: string[] = [];\n const msg = setPassword.error\n ? getMutationErrorMessage(setPassword.error)\n : null;\n if (msg && typeof msg === \"string\") {\n parts.push(msg);\n }\n parts.push(...getPasswordValidationAriaTexts(validationErrors, translate));\n return parts.join(\". \") || undefined;\n }, [setPassword.error, validationErrors, translate]);\n\n useDialogClose(setPassword.isSuccess, () => {\n securitySettings.update(\"Password\", true);\n });\n\n return (\n <Flex direction=\"column\" gap=\"5\">\n <Flex direction=\"column\" gap=\"2\">\n <Dialog.Title>\n <Translation\n defaultMessage=\"Set a password\"\n id=\"0N6IHb\"\n description=\"Dialog title for setting a password\"\n />\n </Dialog.Title>\n {description ?? (\n <VisuallyHidden>\n <Dialog.Description>\n <Translation\n defaultMessage=\"Set a new password for your account\"\n id=\"KYv5vS\"\n description=\"Screen reader description for set password dialog\"\n />\n </Dialog.Description>\n </VisuallyHidden>\n )}\n </Flex>\n\n {setPassword.error ? (\n <Callout.Root color=\"red\">\n <Callout.Text>\n {getMutationErrorMessage(setPassword.error)}\n </Callout.Text>\n <PasswordValidationErrorList errors={validationErrors} />\n </Callout.Root>\n ) : null}\n\n <Form.Root\n onSubmit={handleSubmit}\n onChange={(event) => {\n const formData = new FormData(event.currentTarget);\n const password = formData.get(\"password\")?.toString();\n const confirmPassword = formData.get(\"confirmPassword\")?.toString();\n setDisableSubmit(password === \"\" || confirmPassword === \"\");\n }}\n >\n <Flex direction=\"column\" gap=\"5\">\n <Flex direction=\"column\" gap=\"4\">\n <Form.Field name=\"password\" asChild>\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Enter a password\"\n id=\"YxbwGs\"\n description=\"Label for password input field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <PasswordField\n autoFocus\n required\n autoComplete=\"new-password\"\n placeholder={translate({\n defaultMessage: \"Password\",\n id: \"HYO1Ra\",\n description: \"Placeholder for password input\",\n })}\n disabled={setPassword.isPending || setPassword.isSuccess}\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Please enter a new password\"\n id=\"+2kQs5\"\n description=\"Error message when password field is empty\"\n />\n </Text>\n </Form.Message>\n <Form.Message match={(value) => value.length < 8} asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Password must be at least 8 characters\"\n id=\"WRjyrh\"\n description=\"Error message when password is too short\"\n />\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n\n <Form.Field name=\"confirmPassword\" asChild>\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Confirm your password\"\n id=\"/c8Kki\"\n description=\"Label for password confirmation field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <PasswordField\n required\n autoComplete=\"new-password\"\n placeholder={translate({\n defaultMessage: \"Confirm password\",\n id: \"1VNN1w\",\n description:\n \"Placeholder for password confirmation input\",\n })}\n disabled={setPassword.isPending || setPassword.isSuccess}\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Please confirm your new password\"\n id=\"vfwqWf\"\n description=\"Error message when password confirmation is empty\"\n />\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) =>\n value !== formData.get(\"password\")\n }\n asChild\n >\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"The passwords you entered don't match.\"\n id=\"ayYwQx\"\n description=\"Error message when passwords don't match\"\n />\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n </Flex>\n\n <Flex gap=\"3\" justify=\"end\">\n {cancel ?? (\n <Dialog.Close>\n <Button\n variant=\"secondary\"\n disabled={setPassword.isPending || setPassword.isSuccess}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"VJVs4m\"\n description=\"Button to cancel setting password\"\n />\n </Button>\n </Dialog.Close>\n )}\n\n <SaveButton\n loading={setPassword.isPending}\n done={setPassword.isSuccess}\n onDone={onSuccess}\n type=\"submit\"\n disabled={disableSubmit || undefined}\n >\n <Translation\n defaultMessage=\"Set password\"\n id=\"jSfqX/\"\n description=\"Button to confirm setting new password\"\n />\n </SaveButton>\n </Flex>\n </Flex>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">{ariaErrorText}</section>\n </VisuallyHidden>\n </Form.Root>\n </Flex>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return error.message;\n }\n\n return (\n <Translation\n defaultMessage=\"Something went wrong. Please try again.\"\n id=\"jLzoYu\"\n description=\"Generic error message for password setting failure\"\n />\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/set-password-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport { Dialog, Label, PasswordField, Button } from \"./elements.js\";\nimport * as Form from \"./form.js\";\nimport { useClientGraphqlMutation } from \"../api/client-graphql/hooks.js\";\nimport { useElevatedAccessToken } from \"../api/api-provider.js\";\nimport { expectResultMember } from \"./client-graphql-result.js\";\nimport {\n getPasswordValidationErrors,\n getPasswordValidationAriaTexts,\n PasswordValidationErrorList,\n} from \"./password-error-utils.js\";\nimport { useSecuritySettings } from \"./use-security-settings.js\";\nimport { ElevatedAccess } from \"./elevated-access.js\";\nimport { SaveButton } from \"./save-button.js\";\nimport { useDialogClose } from \"./use-dialog-close.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface SetPasswordDialogProps extends Dialog.RootProps {\n children?: ReactNode;\n}\n\nexport function SetPasswordDialog({\n children,\n ...props\n}: SetPasswordDialogProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Dialog.Root {...props} open={open} onOpenChange={setOpen}>\n <Dialog.Trigger>{children}</Dialog.Trigger>\n\n <Dialog.Content maxWidth=\"480px\">\n <ElevatedAccess>\n <Content onClose={handleClose} />\n </ElevatedAccess>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps {\n onClose: () => void;\n}\n\nfunction Content({ onClose }: ContentProps) {\n return <SetPasswordForm onSuccess={onClose} />;\n}\n\ninterface SetPasswordFormProps {\n onSuccess?: () => void;\n cancel?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport function SetPasswordForm({\n onSuccess,\n cancel,\n description,\n}: SetPasswordFormProps) {\n const translate = useTranslation();\n const { elevatedAccess } = useElevatedAccessToken();\n const setPassword = useClientGraphqlMutation({\n mutationFn: async (sdk, password: string) =>\n expectResultMember(\n (\n await sdk.CreatePassword({\n input: {\n password,\n elevatedAccessToken: elevatedAccess?.token ?? \"\",\n },\n })\n ).createPassword,\n \"PasswordCreated\",\n ),\n });\n const securitySettings = useSecuritySettings();\n const [disableSubmit, setDisableSubmit] = React.useState(true);\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const password = formData.get(\"password\")?.toString();\n\n if (!password) {\n return;\n }\n\n setPassword.mutate(password);\n };\n\n const validationErrors = React.useMemo(\n () =>\n setPassword.error ? getPasswordValidationErrors(setPassword.error) : [],\n [setPassword.error],\n );\n\n const ariaErrorText = React.useMemo(() => {\n const parts: string[] = [];\n const msg = setPassword.error\n ? getMutationErrorMessage(setPassword.error)\n : null;\n if (msg && typeof msg === \"string\") {\n parts.push(msg);\n }\n parts.push(...getPasswordValidationAriaTexts(validationErrors, translate));\n return parts.join(\". \") || undefined;\n }, [setPassword.error, validationErrors, translate]);\n\n useDialogClose(setPassword.isSuccess, () => {\n securitySettings.update(\"Password\", true);\n });\n\n return (\n <Flex direction=\"column\" gap=\"5\">\n <Flex direction=\"column\" gap=\"2\">\n <Dialog.Title>\n <Translation\n defaultMessage=\"Set a password\"\n id=\"0N6IHb\"\n description=\"Dialog title for setting a password\"\n />\n </Dialog.Title>\n {description ?? (\n <VisuallyHidden>\n <Dialog.Description>\n <Translation\n defaultMessage=\"Set a new password for your account\"\n id=\"KYv5vS\"\n description=\"Screen reader description for set password dialog\"\n />\n </Dialog.Description>\n </VisuallyHidden>\n )}\n </Flex>\n\n {setPassword.error ? (\n <Callout.Root color=\"red\">\n <Callout.Text>\n {getMutationErrorMessage(setPassword.error)}\n </Callout.Text>\n <PasswordValidationErrorList errors={validationErrors} />\n </Callout.Root>\n ) : null}\n\n <Form.Root\n onSubmit={handleSubmit}\n onChange={(event) => {\n const formData = new FormData(event.currentTarget);\n const password = formData.get(\"password\")?.toString();\n const confirmPassword = formData.get(\"confirmPassword\")?.toString();\n setDisableSubmit(password === \"\" || confirmPassword === \"\");\n }}\n >\n <Flex direction=\"column\" gap=\"5\">\n <Flex direction=\"column\" gap=\"4\">\n <Form.Field name=\"password\" asChild>\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Enter a password\"\n id=\"YxbwGs\"\n description=\"Label for password input field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <PasswordField\n autoFocus\n required\n autoComplete=\"new-password\"\n placeholder={translate({\n defaultMessage: \"Password\",\n id: \"HYO1Ra\",\n description: \"Placeholder for password input\",\n })}\n disabled={setPassword.isPending || setPassword.isSuccess}\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Please enter a new password\"\n id=\"+2kQs5\"\n description=\"Error message when password field is empty\"\n />\n </Text>\n </Form.Message>\n <Form.Message match={(value) => value.length < 8} asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Password must be at least 8 characters\"\n id=\"WRjyrh\"\n description=\"Error message when password is too short\"\n />\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n\n <Form.Field name=\"confirmPassword\" asChild>\n <Flex direction=\"column\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Confirm your password\"\n id=\"/c8Kki\"\n description=\"Label for password confirmation field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <PasswordField\n required\n autoComplete=\"new-password\"\n placeholder={translate({\n defaultMessage: \"Confirm password\",\n id: \"1VNN1w\",\n description:\n \"Placeholder for password confirmation input\",\n })}\n disabled={setPassword.isPending || setPassword.isSuccess}\n />\n </Form.Control>\n <Form.Message match=\"valueMissing\" asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"Please confirm your new password\"\n id=\"vfwqWf\"\n description=\"Error message when password confirmation is empty\"\n />\n </Text>\n </Form.Message>\n <Form.Message\n match={(value, formData) =>\n value !== formData.get(\"password\")\n }\n asChild\n >\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"The passwords you entered don't match.\"\n id=\"ayYwQx\"\n description=\"Error message when passwords don't match\"\n />\n </Text>\n </Form.Message>\n </Flex>\n </Form.Field>\n </Flex>\n\n <Flex gap=\"3\" justify=\"end\">\n {cancel ?? (\n <Dialog.Close>\n <Button\n variant=\"secondary\"\n disabled={setPassword.isPending || setPassword.isSuccess}\n >\n <Translation\n defaultMessage=\"Cancel\"\n id=\"VJVs4m\"\n description=\"Button to cancel setting password\"\n />\n </Button>\n </Dialog.Close>\n )}\n\n <SaveButton\n loading={setPassword.isPending}\n done={setPassword.isSuccess}\n onDone={onSuccess}\n type=\"submit\"\n disabled={disableSubmit || undefined}\n >\n <Translation\n defaultMessage=\"Set password\"\n id=\"jSfqX/\"\n description=\"Button to confirm setting new password\"\n />\n </SaveButton>\n </Flex>\n </Flex>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">{ariaErrorText}</section>\n </VisuallyHidden>\n </Form.Root>\n </Flex>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return error.message;\n }\n\n return (\n <Translation\n defaultMessage=\"Something went wrong. Please try again.\"\n id=\"jLzoYu\"\n description=\"Generic error message for password setting failure\"\n />\n );\n}\n"],"mappings":"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","names":[]}
@@ -21,34 +21,14 @@ __export(use_security_settings_exports, {
21
21
  useSecuritySettings: () => useSecuritySettings
22
22
  });
23
23
  module.exports = __toCommonJS(use_security_settings_exports);
24
- var import_endpoint = require("../api/endpoint.js");
25
- var import_react_query = require("@tanstack/react-query");
24
+ var import_me = require("./api/me.js");
26
25
  function useSecuritySettings() {
27
- const client = (0, import_react_query.useQueryClient)();
26
+ const meCache = (0, import_me.useMeCache)();
28
27
  const update = (method, isSetUp) => {
29
- const queryKey = (0, import_endpoint.getAuthenticationInformationQueryKey)();
30
- client.setQueriesData(
31
- { queryKey, exact: false },
32
- (data) => {
33
- if (!data) {
34
- return data;
35
- }
36
- return {
37
- ...data,
38
- data: {
39
- ...data.data,
40
- verificationMethods: {
41
- ...data.data.verificationMethods,
42
- [method]: { ...data.data.verificationMethods[method], isSetUp }
43
- }
44
- }
45
- };
46
- }
28
+ meCache.update(
29
+ method === "Password" ? { passwordSet: isSetUp } : { mfaEnabled: isSetUp }
47
30
  );
48
- client.invalidateQueries({
49
- queryKey: (0, import_endpoint.getAuthenticationInformationQueryKey)(),
50
- exact: false
51
- });
31
+ meCache.invalidate();
52
32
  };
53
33
  return { update };
54
34
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/use-security-settings.tsx"],"sourcesContent":["import {\n AuthenticationInformationResponse,\n getAuthenticationInformationQueryKey,\n} from \"../api/endpoint.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\ntype Methods = \"Password\" | \"Mfa\" | \"Passkey\";\n\n/**\n * A hook that provides utilities for managing security settings.\n * Allows optimistically updating verification method status (password, MFA, passkey)\n * while also triggering a server revalidation.\n */\nexport function useSecuritySettings() {\n const client = useQueryClient();\n\n const update = (method: Methods, isSetUp: boolean) => {\n const queryKey = getAuthenticationInformationQueryKey();\n\n // Optimistic update\n client.setQueriesData<AuthenticationInformationResponse>(\n { queryKey, exact: false },\n (data) => {\n if (!data) {\n return data;\n }\n\n return {\n ...data,\n data: {\n ...data.data,\n verificationMethods: {\n ...data.data.verificationMethods,\n [method]: { ...data.data.verificationMethods[method], isSetUp },\n },\n },\n };\n },\n );\n\n // Also validate it with the server\n client.invalidateQueries({\n queryKey: getAuthenticationInformationQueryKey(),\n exact: false,\n });\n };\n\n return { update };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAGO;AACP,yBAA+B;AASxB,SAAS,sBAAsB;AACpC,QAAM,aAAS,mCAAe;AAE9B,QAAM,SAAS,CAAC,QAAiB,YAAqB;AACpD,UAAM,eAAW,sDAAqC;AAGtD,WAAO;AAAA,MACL,EAAE,UAAU,OAAO,MAAM;AAAA,MACzB,CAAC,SAAS;AACR,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM;AAAA,YACJ,GAAG,KAAK;AAAA,YACR,qBAAqB;AAAA,cACnB,GAAG,KAAK,KAAK;AAAA,cACb,CAAC,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,oBAAoB,MAAM,GAAG,QAAQ;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,WAAO,kBAAkB;AAAA,MACvB,cAAU,sDAAqC;AAAA,MAC/C,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,OAAO;AAClB;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/use-security-settings.tsx"],"sourcesContent":["import { useMeCache } from \"./api/me.js\";\n\ntype Methods = \"Password\" | \"Mfa\";\n\n/**\n * A hook that provides utilities for managing security settings.\n * Allows optimistically updating verification method status (password, MFA)\n * while also triggering a server revalidation.\n */\nexport function useSecuritySettings() {\n const meCache = useMeCache();\n\n const update = (method: Methods, isSetUp: boolean) => {\n // Optimistic update\n meCache.update(\n method === \"Password\"\n ? { passwordSet: isSetUp }\n : { mfaEnabled: isSetUp },\n );\n\n // Also validate it with the server\n meCache.invalidate();\n };\n\n return { update };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAA2B;AASpB,SAAS,sBAAsB;AACpC,QAAM,cAAU,sBAAW;AAE3B,QAAM,SAAS,CAAC,QAAiB,YAAqB;AAEpD,YAAQ;AAAA,MACN,WAAW,aACP,EAAE,aAAa,QAAQ,IACvB,EAAE,YAAY,QAAQ;AAAA,IAC5B;AAGA,YAAQ,WAAW;AAAA,EACrB;AAEA,SAAO,EAAE,OAAO;AAClB;","names":[]}
@@ -1,7 +1,7 @@
1
- type Methods = "Password" | "Mfa" | "Passkey";
1
+ type Methods = "Password" | "Mfa";
2
2
  /**
3
3
  * A hook that provides utilities for managing security settings.
4
- * Allows optimistically updating verification method status (password, MFA, passkey)
4
+ * Allows optimistically updating verification method status (password, MFA)
5
5
  * while also triggering a server revalidation.
6
6
  */
7
7
  declare function useSecuritySettings(): {
@@ -34,7 +34,7 @@ __export(user_actions_dropdown_exports, {
34
34
  module.exports = __toCommonJS(user_actions_dropdown_exports);
35
35
  var import_jsx_runtime = require("react/jsx-runtime");
36
36
  var React = __toESM(require("react"), 1);
37
- var import_endpoint = require("../api/endpoint.js");
37
+ var import_user = require("./api/user.js");
38
38
  var import_delete_user_dialog = require("./delete-user-dialog.js");
39
39
  var import_edit_user_role_dialog = require("./edit-user-role-dialog.js");
40
40
  var import_elements = require("./elements.js");
@@ -47,11 +47,7 @@ const UserActionsDropdown = ({
47
47
  children
48
48
  }) => {
49
49
  const translate = (0, import_use_translation.useTranslation)();
50
- const rolesAndConfigQuery = (0, import_endpoint.useRolesAndConfig)({
51
- query: {
52
- initialData: { roles: [], multipleRolesEnabled: false }
53
- }
54
- });
50
+ const rolesAndConfigQuery = (0, import_user.useRolesAndConfig)();
55
51
  const { roles, multipleRolesEnabled: isMultipleRolesEnabled } = rolesAndConfigQuery.data;
56
52
  const [openDialog, setOpenDialog] = React.useState(
57
53
  null
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/user-actions-dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Member, useRolesAndConfig } from \"../api/endpoint.js\";\nimport { DeleteUserDialog } from \"./delete-user-dialog.js\";\nimport { EditUserRoleDialog } from \"./edit-user-role-dialog.js\";\nimport { DropdownMenu } from \"./elements.js\";\nimport { ResendInviteDialog } from \"./resend-invite-dialog.js\";\nimport { RevokeInviteDialog } from \"./revoke-invite-dialog.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface UserActionsDropdownProps {\n user: Member;\n children: React.ReactNode;\n}\n\ntype UserActionDialog =\n | \"revoke-membership\"\n | \"revoke-invite\"\n | \"resend-invite\"\n | \"edit-role\";\n\nexport const UserActionsDropdown = ({\n user,\n children,\n}: UserActionsDropdownProps) => {\n const translate = useTranslation();\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { roles, multipleRolesEnabled: isMultipleRolesEnabled } =\n rolesAndConfigQuery.data;\n const [openDialog, setOpenDialog] = React.useState<UserActionDialog | null>(\n null,\n );\n\n /**\n * Assigns a key for each dialog based on its open state to ensure its\n * internal state is cleared when it is closed.\n */\n function getDialogKey(dialog: UserActionDialog) {\n return `${dialog}-${openDialog === dialog}-${user.id}`;\n }\n\n const { actions, items } = React.useMemo(() => {\n const actions = new Set(user.actions);\n const items: React.ReactElement[] = [];\n if (actions.has(\"edit-role\")) {\n items.push(\n <DropdownMenu.Item\n key=\"edit-role\"\n onSelect={() => setOpenDialog(\"edit-role\")}\n disabled={\n rolesAndConfigQuery.isLoading ||\n (rolesAndConfigQuery.isSuccess && roles.length <= 1)\n }\n title={\n rolesAndConfigQuery.isSuccess && roles.length <= 1\n ? translate({\n defaultMessage:\n \"You cannot update the role for this user as there is only one role available.\",\n id: \"rzvafM\",\n description:\n \"Tooltip explaining why role editing is disabled\",\n })\n : undefined\n }\n >\n {isMultipleRolesEnabled ? (\n <Translation\n defaultMessage=\"Edit roles\"\n id=\"yjbD6m\"\n description=\"Menu option to edit user roles (plural)\"\n />\n ) : (\n <Translation\n defaultMessage=\"Edit role\"\n id=\"NJqcnW\"\n description=\"Menu option to edit user role (singular)\"\n />\n )}\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"resend-invite\")) {\n items.push(\n <DropdownMenu.Item\n key=\"resend-invite\"\n onSelect={() => setOpenDialog(\"resend-invite\")}\n >\n <Translation\n defaultMessage=\"Resend invitation\"\n id=\"1fzoWe\"\n description=\"Menu option to resend user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-invite\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-invite\"\n onSelect={() => setOpenDialog(\"revoke-invite\")}\n >\n <Translation\n defaultMessage=\"Revoke invitation\"\n id=\"0Ie4dM\"\n description=\"Menu option to revoke user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-membership\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-membership\"\n onSelect={() => setOpenDialog(\"revoke-membership\")}\n >\n <Translation\n defaultMessage=\"Remove user\"\n id=\"qGSR1P\"\n description=\"Menu option to remove user from organization\"\n />\n </DropdownMenu.Item>,\n );\n }\n return {\n actions,\n items,\n };\n }, [\n rolesAndConfigQuery,\n user.actions,\n isMultipleRolesEnabled,\n roles,\n translate,\n ]);\n\n if (user.isLoggedInUser || items.length === 0) {\n return null;\n }\n\n return (\n <>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>{children}</DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n {items}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n\n {actions.has(\"edit-role\") && (\n <EditUserRoleDialog\n key={getDialogKey(\"edit-role\")}\n user={user}\n open={openDialog === \"edit-role\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-membership\") && (\n <DeleteUserDialog\n key={getDialogKey(\"revoke-membership\")}\n user={user}\n open={openDialog === \"revoke-membership\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-invite\") && (\n <RevokeInviteDialog\n key={getDialogKey(\"revoke-invite\")}\n user={user}\n open={openDialog === \"revoke-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"resend-invite\") && (\n <ResendInviteDialog\n key={getDialogKey(\"resend-invite\")}\n user={user}\n open={openDialog === \"resend-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n </>\n );\n};\n"],"mappings":"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","names":["actions","items"]}
1
+ {"version":3,"sources":["../../../src/lib/user-actions-dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useRolesAndConfig, type Member } from \"./api/user.js\";\nimport { DeleteUserDialog } from \"./delete-user-dialog.js\";\nimport { EditUserRoleDialog } from \"./edit-user-role-dialog.js\";\nimport { DropdownMenu } from \"./elements.js\";\nimport { ResendInviteDialog } from \"./resend-invite-dialog.js\";\nimport { RevokeInviteDialog } from \"./revoke-invite-dialog.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface UserActionsDropdownProps {\n user: Member;\n children: React.ReactNode;\n}\n\ntype UserActionDialog =\n | \"revoke-membership\"\n | \"revoke-invite\"\n | \"resend-invite\"\n | \"edit-role\";\n\nexport const UserActionsDropdown = ({\n user,\n children,\n}: UserActionsDropdownProps) => {\n const translate = useTranslation();\n const rolesAndConfigQuery = useRolesAndConfig();\n const { roles, multipleRolesEnabled: isMultipleRolesEnabled } =\n rolesAndConfigQuery.data;\n const [openDialog, setOpenDialog] = React.useState<UserActionDialog | null>(\n null,\n );\n\n /**\n * Assigns a key for each dialog based on its open state to ensure its\n * internal state is cleared when it is closed.\n */\n function getDialogKey(dialog: UserActionDialog) {\n return `${dialog}-${openDialog === dialog}-${user.id}`;\n }\n\n const { actions, items } = React.useMemo(() => {\n const actions = new Set(user.actions);\n const items: React.ReactElement[] = [];\n if (actions.has(\"edit-role\")) {\n items.push(\n <DropdownMenu.Item\n key=\"edit-role\"\n onSelect={() => setOpenDialog(\"edit-role\")}\n disabled={\n rolesAndConfigQuery.isLoading ||\n (rolesAndConfigQuery.isSuccess && roles.length <= 1)\n }\n title={\n rolesAndConfigQuery.isSuccess && roles.length <= 1\n ? translate({\n defaultMessage:\n \"You cannot update the role for this user as there is only one role available.\",\n id: \"rzvafM\",\n description:\n \"Tooltip explaining why role editing is disabled\",\n })\n : undefined\n }\n >\n {isMultipleRolesEnabled ? (\n <Translation\n defaultMessage=\"Edit roles\"\n id=\"yjbD6m\"\n description=\"Menu option to edit user roles (plural)\"\n />\n ) : (\n <Translation\n defaultMessage=\"Edit role\"\n id=\"NJqcnW\"\n description=\"Menu option to edit user role (singular)\"\n />\n )}\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"resend-invite\")) {\n items.push(\n <DropdownMenu.Item\n key=\"resend-invite\"\n onSelect={() => setOpenDialog(\"resend-invite\")}\n >\n <Translation\n defaultMessage=\"Resend invitation\"\n id=\"1fzoWe\"\n description=\"Menu option to resend user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-invite\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-invite\"\n onSelect={() => setOpenDialog(\"revoke-invite\")}\n >\n <Translation\n defaultMessage=\"Revoke invitation\"\n id=\"0Ie4dM\"\n description=\"Menu option to revoke user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-membership\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-membership\"\n onSelect={() => setOpenDialog(\"revoke-membership\")}\n >\n <Translation\n defaultMessage=\"Remove user\"\n id=\"qGSR1P\"\n description=\"Menu option to remove user from organization\"\n />\n </DropdownMenu.Item>,\n );\n }\n return {\n actions,\n items,\n };\n }, [\n rolesAndConfigQuery,\n user.actions,\n isMultipleRolesEnabled,\n roles,\n translate,\n ]);\n\n if (user.isLoggedInUser || items.length === 0) {\n return null;\n }\n\n return (\n <>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>{children}</DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n {items}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n\n {actions.has(\"edit-role\") && (\n <EditUserRoleDialog\n key={getDialogKey(\"edit-role\")}\n user={user}\n open={openDialog === \"edit-role\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-membership\") && (\n <DeleteUserDialog\n key={getDialogKey(\"revoke-membership\")}\n user={user}\n open={openDialog === \"revoke-membership\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-invite\") && (\n <RevokeInviteDialog\n key={getDialogKey(\"revoke-invite\")}\n user={user}\n open={openDialog === \"revoke-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"resend-invite\") && (\n <ResendInviteDialog\n key={getDialogKey(\"resend-invite\")}\n user={user}\n open={openDialog === \"resend-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoEY;AAlEZ,YAAuB;AACvB,kBAA+C;AAC/C,gCAAiC;AACjC,mCAAmC;AACnC,sBAA6B;AAC7B,kCAAmC;AACnC,kCAAmC;AACnC,yBAA4B;AAC5B,6BAA+B;AAaxB,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AACF,MAAgC;AAC9B,QAAM,gBAAY,uCAAe;AACjC,QAAM,0BAAsB,+BAAkB;AAC9C,QAAM,EAAE,OAAO,sBAAsB,uBAAuB,IAC1D,oBAAoB;AACtB,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM;AAAA,IACxC;AAAA,EACF;AAMA,WAAS,aAAa,QAA0B;AAC9C,WAAO,GAAG,MAAM,IAAI,eAAe,MAAM,IAAI,KAAK,EAAE;AAAA,EACtD;AAEA,QAAM,EAAE,SAAS,MAAM,IAAI,MAAM,QAAQ,MAAM;AAC7C,UAAMA,WAAU,IAAI,IAAI,KAAK,OAAO;AACpC,UAAMC,SAA8B,CAAC;AACrC,QAAID,SAAQ,IAAI,WAAW,GAAG;AAC5B,MAAAC,OAAM;AAAA,QACJ;AAAA,UAAC,6BAAa;AAAA,UAAb;AAAA,YAEC,UAAU,MAAM,cAAc,WAAW;AAAA,YACzC,UACE,oBAAoB,aACnB,oBAAoB,aAAa,MAAM,UAAU;AAAA,YAEpD,OACE,oBAAoB,aAAa,MAAM,UAAU,IAC7C,UAAU;AAAA,cACR,gBACE;AAAA,cACF,IAAI;AAAA,cACJ,aACE;AAAA,YACJ,CAAC,IACD;AAAA,YAGL,mCACC;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd,IAEA;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,UA7BE;AAAA,QA+BN;AAAA,MACF;AAAA,IACF;AACA,QAAID,SAAQ,IAAI,eAAe,GAAG;AAChC,MAAAC,OAAM;AAAA,QACJ;AAAA,UAAC,6BAAa;AAAA,UAAb;AAAA,YAEC,UAAU,MAAM,cAAc,eAAe;AAAA,YAE7C;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,UAPI;AAAA,QAQN;AAAA,MACF;AAAA,IACF;AACA,QAAID,SAAQ,IAAI,eAAe,GAAG;AAChC,MAAAC,OAAM;AAAA,QACJ;AAAA,UAAC,6BAAa;AAAA,UAAb;AAAA,YACC,SAAQ;AAAA,YAER,UAAU,MAAM,cAAc,eAAe;AAAA,YAE7C;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,UAPI;AAAA,QAQN;AAAA,MACF;AAAA,IACF;AACA,QAAID,SAAQ,IAAI,mBAAmB,GAAG;AACpC,MAAAC,OAAM;AAAA,QACJ;AAAA,UAAC,6BAAa;AAAA,UAAb;AAAA,YACC,SAAQ;AAAA,YAER,UAAU,MAAM,cAAc,mBAAmB;AAAA,YAEjD;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,UAPI;AAAA,QAQN;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,SAAAD;AAAA,MACA,OAAAC;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,KAAK,kBAAkB,MAAM,WAAW,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,SACE,4EACE;AAAA,iDAAC,6BAAa,MAAb,EACC;AAAA,kDAAC,6BAAa,SAAb,EAAsB,UAAS;AAAA,MAChC,4CAAC,6BAAa,SAAb,EAAqB,MAAK,KAAI,OAAM,OAClC,iBACH;AAAA,OACF;AAAA,IAEC,QAAQ,IAAI,WAAW,KACtB;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,cAAc,CAAC,SAAS,CAAC,QAAQ,cAAc,IAAI;AAAA;AAAA,MAH9C,aAAa,WAAW;AAAA,IAI/B;AAAA,IAGD,QAAQ,IAAI,mBAAmB,KAC9B;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,cAAc,CAAC,SAAS,CAAC,QAAQ,cAAc,IAAI;AAAA;AAAA,MAH9C,aAAa,mBAAmB;AAAA,IAIvC;AAAA,IAGD,QAAQ,IAAI,eAAe,KAC1B;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,cAAc,CAAC,SAAS,CAAC,QAAQ,cAAc,IAAI;AAAA;AAAA,MAH9C,aAAa,eAAe;AAAA,IAInC;AAAA,IAGD,QAAQ,IAAI,eAAe,KAC1B;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,MAAM,eAAe;AAAA,QACrB,cAAc,CAAC,SAAS,CAAC,QAAQ,cAAc,IAAI;AAAA;AAAA,MAH9C,aAAa,eAAe;AAAA,IAInC;AAAA,KAEJ;AAEJ;","names":["actions","items"]}
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
- import { Member } from '../api/endpoint.cjs';
2
+ import { a as Member } from '../user-CgBDfSHl.cjs';
3
+ import '../api/client-graphql/generated.cjs';
4
+ import 'graphql-request';
3
5
  import '@tanstack/react-query';
4
- import '../api/widgets-api-client.cjs';
5
6
 
6
7
  interface UserActionsDropdownProps {
7
8
  user: Member;
@@ -25,7 +25,6 @@ var import_jsx_runtime = require("react/jsx-runtime");
25
25
  var import_themes = require("@radix-ui/themes");
26
26
  var import_user_api_key_details_card = require("./user-api-key-details-card.js");
27
27
  var import_user_api_key = require("../api/user-api-key.js");
28
- var import_react_query = require("@tanstack/react-query");
29
28
  var import_react_icons = require("@radix-ui/react-icons");
30
29
  var import_elements = require("../elements.js");
31
30
  var import_translation = require("../i18n/translation.js");
@@ -35,7 +34,6 @@ function RevokeUserApiKeyDialog({
35
34
  open,
36
35
  onOpenChange
37
36
  }) {
38
- const queryClient = (0, import_react_query.useQueryClient)();
39
37
  const { dispatch } = (0, import_user_api_keys_context.useUserApiKeysContext)();
40
38
  const {
41
39
  mutate: deleteUserApiKey,
@@ -43,14 +41,9 @@ function RevokeUserApiKeyDialog({
43
41
  error,
44
42
  isSuccess
45
43
  } = (0, import_user_api_key.useDeleteUserApiKey)({
46
- mutation: {
47
- onSuccess: () => {
48
- dispatch({ type: "RESET_PAGINATION" });
49
- queryClient.invalidateQueries({
50
- queryKey: (0, import_user_api_key.getListUserApiKeysQueryKey)()
51
- });
52
- onOpenChange(false);
53
- }
44
+ onSuccess: () => {
45
+ dispatch({ type: "RESET_PAGINATION" });
46
+ onOpenChange(false);
54
47
  }
55
48
  });
56
49
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Content, { maxWidth: "529px", children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/user-api-keys/revoke-user-api-key-dialog.tsx"],"sourcesContent":["import { Flex, Callout } from \"@radix-ui/themes\";\nimport { UserApiKeyDetailsCard } from \"./user-api-key-details-card.js\";\nimport {\n getListUserApiKeysQueryKey,\n type ListUserApiKeysResponseData,\n useDeleteUserApiKey,\n} from \"../api/user-api-key.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { ExclamationTriangleIcon } from \"@radix-ui/react-icons\";\nimport { AlertDialog, Button } from \"../elements.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\n\nexport function RevokeUserApiKeyDialog({\n apiKey,\n open,\n onOpenChange,\n}: {\n apiKey: ListUserApiKeysResponseData;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const queryClient = useQueryClient();\n const { dispatch } = useUserApiKeysContext();\n const {\n mutate: deleteUserApiKey,\n isPending,\n error,\n isSuccess,\n } = useDeleteUserApiKey({\n mutation: {\n onSuccess: () => {\n dispatch({ type: \"RESET_PAGINATION\" });\n queryClient.invalidateQueries({\n queryKey: getListUserApiKeysQueryKey(),\n });\n onOpenChange(false);\n },\n },\n });\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content maxWidth=\"529px\">\n <AlertDialog.Title mb=\"2\">\n <Translation\n defaultMessage=\"Revoke API key?\"\n id=\"e18ZsK\"\n description=\"Dialog title for confirming API key revocation\"\n />\n </AlertDialog.Title>\n <Flex direction=\"column\" gap=\"5\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"This API key will be immediately disabled. API request made using this key will be rejected, which could cause any systems still depending on it to break.\"\n id=\"GLPUiU\"\n description=\"Warning about revoking API key\"\n />\n <strong>\n <Translation\n defaultMessage=\"This action cannot be undone.\"\n id=\"PTbRJT\"\n description=\"Warning that API key revocation is permanent\"\n />\n </strong>\n </AlertDialog.Description>\n {error ? (\n <Callout.Root color=\"red\" role=\"alert\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"An error occurred while revoking the API key.\"\n id=\"edrdLd\"\n description=\"Error message when API key revocation fails\"\n />\n </Callout.Text>\n </Callout.Root>\n ) : null}\n <UserApiKeyDetailsCard apiKey={apiKey} />\n <Flex justify=\"end\" gap=\"2\">\n <AlertDialog.Cancel>\n <Button variant=\"secondary\">\n <Translation\n defaultMessage=\"Cancel\"\n id=\"EKf0ES\"\n description=\"Button to cancel API key revocation\"\n />\n </Button>\n </AlertDialog.Cancel>\n <Button\n variant=\"destructive\"\n disabled={isPending || isSuccess}\n loading={isPending || isSuccess}\n onClick={() => deleteUserApiKey({ apiKeyId: apiKey.id })}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KSosDD\"\n description=\"Button to confirm API key revocation\"\n />\n </Button>\n </Flex>\n </Flex>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6CU;AA7CV,oBAA8B;AAC9B,uCAAsC;AACtC,0BAIO;AACP,yBAA+B;AAC/B,yBAAwC;AACxC,sBAAoC;AACpC,yBAA4B;AAC5B,mCAAsC;AAE/B,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,kBAAc,mCAAe;AACnC,QAAM,EAAE,SAAS,QAAI,oDAAsB;AAC3C,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yCAAoB;AAAA,IACtB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,iBAAS,EAAE,MAAM,mBAAmB,CAAC;AACrC,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,gDAA2B;AAAA,QACvC,CAAC;AACD,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,SACE,4CAAC,4BAAY,MAAZ,EAAiB,MAAY,cAC5B,uDAAC,4BAAY,SAAZ,EAAoB,UAAS,SAC5B;AAAA,gDAAC,4BAAY,OAAZ,EAAkB,IAAG,KACpB;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,6CAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,mDAAC,4BAAY,aAAZ,EACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd;AAAA,QACA,4CAAC,YACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,SACF;AAAA,MACC,QACC,6CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,MAAK,SAC7B;AAAA,oDAAC,sBAAQ,MAAR,EACC,sDAAC,8CAAwB,GAC3B;AAAA,QACA,4CAAC,sBAAQ,MAAR,EACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,SACF,IACE;AAAA,MACJ,4CAAC,0DAAsB,QAAgB;AAAA,MACvC,6CAAC,sBAAK,SAAQ,OAAM,KAAI,KACtB;AAAA,oDAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aACd;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,UAAU,aAAa;AAAA,YACvB,SAAS,aAAa;AAAA,YACtB,SAAS,MAAM,iBAAiB,EAAE,UAAU,OAAO,GAAG,CAAC;AAAA,YAEvD;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/user-api-keys/revoke-user-api-key-dialog.tsx"],"sourcesContent":["import { Flex, Callout } from \"@radix-ui/themes\";\nimport { UserApiKeyDetailsCard } from \"./user-api-key-details-card.js\";\nimport {\n type ListUserApiKeysResponseData,\n useDeleteUserApiKey,\n} from \"../api/user-api-key.js\";\nimport { ExclamationTriangleIcon } from \"@radix-ui/react-icons\";\nimport { AlertDialog, Button } from \"../elements.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\n\nexport function RevokeUserApiKeyDialog({\n apiKey,\n open,\n onOpenChange,\n}: {\n apiKey: ListUserApiKeysResponseData;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}) {\n const { dispatch } = useUserApiKeysContext();\n const {\n mutate: deleteUserApiKey,\n isPending,\n error,\n isSuccess,\n } = useDeleteUserApiKey({\n onSuccess: () => {\n dispatch({ type: \"RESET_PAGINATION\" });\n onOpenChange(false);\n },\n });\n\n return (\n <AlertDialog.Root open={open} onOpenChange={onOpenChange}>\n <AlertDialog.Content maxWidth=\"529px\">\n <AlertDialog.Title mb=\"2\">\n <Translation\n defaultMessage=\"Revoke API key?\"\n id=\"e18ZsK\"\n description=\"Dialog title for confirming API key revocation\"\n />\n </AlertDialog.Title>\n <Flex direction=\"column\" gap=\"5\">\n <AlertDialog.Description>\n <Translation\n defaultMessage=\"This API key will be immediately disabled. API request made using this key will be rejected, which could cause any systems still depending on it to break.\"\n id=\"GLPUiU\"\n description=\"Warning about revoking API key\"\n />\n <strong>\n <Translation\n defaultMessage=\"This action cannot be undone.\"\n id=\"PTbRJT\"\n description=\"Warning that API key revocation is permanent\"\n />\n </strong>\n </AlertDialog.Description>\n {error ? (\n <Callout.Root color=\"red\" role=\"alert\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"An error occurred while revoking the API key.\"\n id=\"edrdLd\"\n description=\"Error message when API key revocation fails\"\n />\n </Callout.Text>\n </Callout.Root>\n ) : null}\n <UserApiKeyDetailsCard apiKey={apiKey} />\n <Flex justify=\"end\" gap=\"2\">\n <AlertDialog.Cancel>\n <Button variant=\"secondary\">\n <Translation\n defaultMessage=\"Cancel\"\n id=\"EKf0ES\"\n description=\"Button to cancel API key revocation\"\n />\n </Button>\n </AlertDialog.Cancel>\n <Button\n variant=\"destructive\"\n disabled={isPending || isSuccess}\n loading={isPending || isSuccess}\n onClick={() => deleteUserApiKey({ apiKeyId: apiKey.id })}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KSosDD\"\n description=\"Button to confirm API key revocation\"\n />\n </Button>\n </Flex>\n </Flex>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCU;AArCV,oBAA8B;AAC9B,uCAAsC;AACtC,0BAGO;AACP,yBAAwC;AACxC,sBAAoC;AACpC,yBAA4B;AAC5B,mCAAsC;AAE/B,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,SAAS,QAAI,oDAAsB;AAC3C,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF,QAAI,yCAAoB;AAAA,IACtB,WAAW,MAAM;AACf,eAAS,EAAE,MAAM,mBAAmB,CAAC;AACrC,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,CAAC;AAED,SACE,4CAAC,4BAAY,MAAZ,EAAiB,MAAY,cAC5B,uDAAC,4BAAY,SAAZ,EAAoB,UAAS,SAC5B;AAAA,gDAAC,4BAAY,OAAZ,EAAkB,IAAG,KACpB;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,6CAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,mDAAC,4BAAY,aAAZ,EACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd;AAAA,QACA,4CAAC,YACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,SACF;AAAA,MACC,QACC,6CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,MAAK,SAC7B;AAAA,oDAAC,sBAAQ,MAAR,EACC,sDAAC,8CAAwB,GAC3B;AAAA,QACA,4CAAC,sBAAQ,MAAR,EACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,SACF,IACE;AAAA,MACJ,4CAAC,0DAAsB,QAAgB;AAAA,MACvC,6CAAC,sBAAK,SAAQ,OAAM,KAAI,KACtB;AAAA,oDAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aACd;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,SAAQ;AAAA,YACR,UAAU,aAAa;AAAA,YACvB,SAAS,aAAa;AAAA,YACtB,SAAS,MAAM,iBAAiB,EAAE,UAAU,OAAO,GAAG,CAAC;AAAA,YAEvD;AAAA,cAAC;AAAA;AAAA,gBACC,gBAAe;AAAA,gBACf,IAAG;AAAA,gBACH,aAAY;AAAA;AAAA,YACd;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -45,11 +45,16 @@ var import_utils = require("./utils.js");
45
45
  var import_oauth_icons = require("./oauth-icons.js");
46
46
  var import_generic_error = require("./generic-error.js");
47
47
  var import_translation = require("./i18n/translation.js");
48
+ function isSupportedConnectedAccount(account) {
49
+ return (0, import_oauth_icons.isOAuthAccount)(account.provider);
50
+ }
48
51
  const UserProfile = ({
49
52
  userData: user,
50
53
  ...domProps
51
54
  }) => {
52
- const oauthAccounts = user.oauthProfiles ? Object.entries(user.oauthProfiles) : [];
55
+ const oauthAccounts = user.connectedAccounts.filter(
56
+ isSupportedConnectedAccount
57
+ );
53
58
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("resolved", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(List, { children: [
54
59
  user.profilePictureUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
55
60
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ListItem, { children: [
@@ -158,13 +163,13 @@ const UserProfile = ({
158
163
  description: "Label for user's connected OAuth accounts"
159
164
  }
160
165
  ) }),
161
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListValue, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "2", children: oauthAccounts.map(([account, data]) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
166
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListValue, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "2", children: oauthAccounts.map((account) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
162
167
  OAuthAccount,
163
168
  {
164
- account,
165
- email: data?.email
169
+ account: account.provider,
170
+ email: account.email
166
171
  },
167
- account
172
+ account.id
168
173
  )) }) })
169
174
  ] })
170
175
  ] })