@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/api/user-api-key.ts"],"sourcesContent":["import {\n keepPreviousData,\n useMutation,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport {\n getListUserApiKeysQueryKey,\n type ListUserApiKeysResponseData,\n useCreateUserApiKey,\n useListUserApiKeys as useGeneratedListUserApiKeys,\n} from \"../../api/endpoint.js\";\nimport { useUserApiKeysContext } from \"../user-api-keys/user-api-keys-context.js\";\nimport {\n useWidgetsApiClient,\n type BodyType,\n} from \"../../api/widgets-api-client.js\";\n\nexport {\n getListUserApiKeysQueryKey,\n useDeleteUserApiKey,\n useListUserApiKeyPermissions,\n type CreateUserApiKeyResponse,\n type ListUserApiKeyPermission,\n type ListUserApiKeysResponse,\n type ListUserApiKeysResponseData,\n} from \"../../api/endpoint.js\";\n\nexport const useUserApiKeys = () => {\n const {\n state: { pagination, searchQuery },\n } = useUserApiKeysContext();\n const limit = 10;\n const { before, after } = pagination || {};\n\n return useGeneratedListUserApiKeys(\n {\n after: after ?? undefined,\n before: before ?? undefined,\n limit,\n search: searchQuery || undefined,\n },\n {\n query: {\n placeholderData: keepPreviousData,\n },\n },\n );\n};\n\nexport const useCreateUserApiKeyWithInvalidation = () => {\n const queryClient = useQueryClient();\n\n return useCreateUserApiKey({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListUserApiKeysQueryKey(),\n });\n },\n },\n });\n};\n\nexport const useExpireUserApiKey = () => {\n const queryClient = useQueryClient();\n const expireUserApiKey = useWidgetsApiClient<ListUserApiKeysResponseData>();\n\n return useMutation({\n mutationFn: ({\n apiKeyId,\n expiresAt,\n }: {\n apiKeyId: string;\n expiresAt: string | null;\n }) =>\n expireUserApiKey({\n url: `/_widgets/UserApiKeys/${apiKeyId}/expire`,\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { expiresAt } as BodyType<{ expiresAt: string | null }>,\n }),\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListUserApiKeysQueryKey(),\n });\n },\n });\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAEA;AAAA,EACA,sBAAsB;AAAA,OACjB;AACP,SAAS,6BAA6B;AACtC;AAAA,EACE;AAAA,OAEK;AAEP;AAAA,EACE,8BAAAA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAEA,MAAM,iBAAiB,MAAM;AAClC,QAAM;AAAA,IACJ,OAAO,EAAE,YAAY,YAAY;AAAA,EACnC,IAAI,sBAAsB;AAC1B,QAAM,QAAQ;AACd,QAAM,EAAE,QAAQ,MAAM,IAAI,cAAc,CAAC;AAEzC,SAAO;AAAA,IACL;AAAA,MACE,OAAO,SAAS;AAAA,MAChB,QAAQ,UAAU;AAAA,MAClB;AAAA,MACA,QAAQ,eAAe;AAAA,IACzB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,QACL,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,sCAAsC,MAAM;AACvD,QAAM,cAAc,eAAe;AAEnC,SAAO,oBAAoB;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,2BAA2B;AAAA,QACvC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,sBAAsB,MAAM;AACvC,QAAM,cAAc,eAAe;AACnC,QAAM,mBAAmB,oBAAiD;AAE1E,SAAO,YAAY;AAAA,IACjB,YAAY,CAAC;AAAA,MACX;AAAA,MACA;AAAA,IACF,MAIE,iBAAiB;AAAA,MACf,KAAK,yBAAyB,QAAQ;AAAA,MACtC,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,EAAE,UAAU;AAAA,IACpB,CAAC;AAAA,IACH,WAAW,MAAM;AACf,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,2BAA2B;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;","names":["getListUserApiKeysQueryKey"]}
1
+ {"version":3,"sources":["../../../../src/lib/api/user-api-key.ts"],"sourcesContent":["import { keepPreviousData, useQueryClient } from \"@tanstack/react-query\";\nimport type {\n CreateUserApiKeyRequest,\n CreateUserApiKeyResponse,\n ListUserApiKeysResponse,\n ListUserApiKeysResponseData,\n} from \"../../api/endpoint.js\";\nimport type {\n CreateUserApiKeyMutation,\n ExpireUserApiKeyMutation,\n UserApiKeyFieldsFragment,\n} from \"../../api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"../../api/client-graphql/hooks.js\";\nimport { useUserApiKeysContext } from \"../user-api-keys/user-api-keys-context.js\";\nimport { API_KEYS_PAGE_SIZE, apiKeyMutationFailure } from \"./api-key.js\";\n\n// TODO(client-graphql): see `useListOrganizationApiKeyPermissions`.\nexport {\n useListUserApiKeyPermissions,\n type CreateUserApiKeyResponse,\n type ListUserApiKeyPermission,\n type ListUserApiKeysResponse,\n type ListUserApiKeysResponseData,\n} from \"../../api/endpoint.js\";\n\nexport const userApiKeysQueryKey = clientGraphqlQueryKey(\"ListUserApiKeys\");\n\nexport function toUserApiKey(\n apiKey: UserApiKeyFieldsFragment,\n): ListUserApiKeysResponseData {\n return {\n id: apiKey.id,\n owner: {\n type: \"user\",\n id: apiKey.owner.id,\n email: apiKey.owner.email,\n firstName: apiKey.owner.firstName ?? null,\n lastName: apiKey.owner.lastName ?? null,\n displayName: apiKey.owner.displayName,\n },\n name: apiKey.name,\n obfuscatedValue: apiKey.obfuscatedValue,\n createdAt: apiKey.createdAt,\n lastUsedAt: apiKey.lastUsedAt ?? null,\n expiresAt: apiKey.expiresAt ?? null,\n permissions: apiKey.permissions,\n };\n}\n\nfunction unwrapCreateUserApiKey(\n result: CreateUserApiKeyMutation[\"createUserApiKey\"],\n): CreateUserApiKeyResponse {\n switch (result.__typename) {\n case \"UserApiKeyCreated\": {\n const { owner: _owner, ...apiKey } = toUserApiKey(result.apiKey);\n return { ...apiKey, value: result.value };\n }\n case \"ApiKeyPermissionsNotHeld\":\n case \"ApiKeyPermissionsUnsupportedForToken\":\n case \"InvalidApiKeyExpiration\":\n case \"InvalidApiKeyName\":\n case \"InvalidApiKeyPermissions\":\n throw apiKeyMutationFailure(result.__typename, result.message);\n }\n}\n\nfunction unwrapExpireUserApiKey(\n result: ExpireUserApiKeyMutation[\"expireUserApiKey\"],\n): ListUserApiKeysResponseData {\n switch (result.__typename) {\n case \"UserApiKeyExpired\":\n return toUserApiKey(result.apiKey);\n case \"ApiKeyAlreadyExpired\":\n throw apiKeyMutationFailure(\n result.__typename,\n \"API key is already expired\",\n );\n }\n}\n\nexport const useUserApiKeys = () => {\n const {\n state: { pagination, searchQuery },\n } = useUserApiKeysContext();\n const { before, after } = pagination || {};\n const variables = {\n after: after ?? undefined,\n before: before ?? undefined,\n limit: API_KEYS_PAGE_SIZE,\n search: searchQuery || undefined,\n };\n\n return useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListUserApiKeys\", variables),\n queryFn: async (sdk) => {\n const { userApiKeys } = await sdk.ListUserApiKeys(variables);\n return userApiKeys;\n },\n select: (list): ListUserApiKeysResponse => ({\n data: list.data.map(toUserApiKey),\n list_metadata: {\n after: list.listMetadata.after ?? undefined,\n before: list.listMetadata.before ?? undefined,\n },\n }),\n placeholderData: keepPreviousData,\n });\n};\n\nexport const useInvalidateUserApiKeys = () => {\n const queryClient = useQueryClient();\n return () => queryClient.invalidateQueries({ queryKey: userApiKeysQueryKey });\n};\n\nexport const useCreateUserApiKeyWithInvalidation = () => {\n const invalidate = useInvalidateUserApiKeys();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, { data }: { data: CreateUserApiKeyRequest }) => {\n const { createUserApiKey: result } = await sdk.CreateUserApiKey({\n input: {\n name: data.name,\n permissions: data.permissions,\n expiresAt: data.expiresAt ?? null,\n },\n });\n return unwrapCreateUserApiKey(result);\n },\n onSuccess: invalidate,\n });\n};\n\nexport const useDeleteUserApiKey = ({\n onSuccess,\n}: { onSuccess?: () => void } = {}) => {\n const invalidate = useInvalidateUserApiKeys();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, { apiKeyId }: { apiKeyId: string }) => {\n const { deleteUserApiKey } = await sdk.DeleteUserApiKey({ apiKeyId });\n return toUserApiKey(deleteUserApiKey);\n },\n onSuccess: () => {\n void invalidate();\n onSuccess?.();\n },\n });\n};\n\nexport const useExpireUserApiKey = () => {\n const invalidate = useInvalidateUserApiKeys();\n\n return useClientGraphqlMutation({\n mutationFn: async (\n sdk,\n { apiKeyId, expiresAt }: { apiKeyId: string; expiresAt: string | null },\n ) => {\n const { expireUserApiKey: result } = await sdk.ExpireUserApiKey({\n input: { apiKeyId, expiresAt },\n });\n return unwrapExpireUserApiKey(result);\n },\n onSuccess: invalidate,\n });\n};\n"],"mappings":"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","names":[]}
@@ -1,26 +1,5 @@
1
- import * as _tanstack_react_query from '@tanstack/react-query';
2
- import { MembersResponse, Members403, Members404, useUpdateMember, useInviteMember, RemoveMemberResponse, RemoveMember400, RemoveMember403, RemoveMember404, RevokeMemberResponse, RevokeInvite400, RevokeInvite403, RevokeInvite404, ResendInviteResponse, ResendInvite400, ResendInvite403, ResendInvite404, ResendInvite422 } from '../../api/endpoint.js';
3
- import { UsersManagementContextType } from '../users-management-context.js';
4
- import '../../api/widgets-api-client.js';
1
+ import '../../api/client-graphql/generated.js';
2
+ import '@tanstack/react-query';
3
+ export { L as ListMetadata, a as Member, g as MemberAction, M as MembersQueryResult, b as Role, R as RolesAndConfig, l as useDeleteUser, k as useInviteUser, n as useResendUserInvite, m as useRevokeUserInvite, h as useRolesAndConfig, j as useUpdateUserRole, i as useUsers } from '../../user-BE5sIud6.js';
4
+ import 'graphql-request';
5
5
  import 'react';
6
- import '../users-management-state.js';
7
-
8
- declare const useUsers: (context?: UsersManagementContextType) => _tanstack_react_query.UseQueryResult<MembersResponse, Members403 | Members404> & {
9
- queryKey: readonly unknown[] & {
10
- [dataTagSymbol]: MembersResponse;
11
- [dataTagErrorSymbol]: Members403 | Members404;
12
- };
13
- };
14
- declare const useUpdateUserRole: typeof useUpdateMember;
15
- declare const useInviteUser: typeof useInviteMember;
16
- declare const useDeleteUser: () => _tanstack_react_query.UseMutationResult<RemoveMemberResponse, RemoveMember400 | RemoveMember403 | RemoveMember404, {
17
- userId: string;
18
- }, unknown>;
19
- declare const useRevokeUserInvite: () => _tanstack_react_query.UseMutationResult<RevokeMemberResponse, RevokeInvite400 | RevokeInvite403 | RevokeInvite404, {
20
- userId: string;
21
- }, unknown>;
22
- declare const useResendUserInvite: () => _tanstack_react_query.UseMutationResult<ResendInviteResponse, ResendInvite400 | ResendInvite403 | ResendInvite404 | ResendInvite422, {
23
- userId: string;
24
- }, unknown>;
25
-
26
- export { useDeleteUser, useInviteUser, useResendUserInvite, useRevokeUserInvite, useUpdateUserRole, useUsers };
@@ -1,93 +1,207 @@
1
- import {
2
- getMembersQueryKey,
3
- useInviteMember,
4
- useMembers,
5
- useRemoveMember,
6
- useResendInvite,
7
- useRevokeInvite,
8
- useUpdateMember
9
- } from "../../api/endpoint.js";
10
1
  import { keepPreviousData, useQueryClient } from "@tanstack/react-query";
2
+ import {
3
+ clientGraphqlQueryKey,
4
+ useClientGraphqlMutation,
5
+ useClientGraphqlQuery
6
+ } from "../../api/client-graphql/hooks.js";
7
+ import { ApiError } from "../../api/errors.js";
11
8
  import { USER_ROW_LIMIT } from "../constants.js";
12
9
  import {
13
10
  useUsersManagementContext
14
11
  } from "../users-management-context.js";
12
+ const MEMBER_ACTIONS = {
13
+ EditRole: "edit-role",
14
+ ResendInvite: "resend-invite",
15
+ RevokeInvite: "revoke-invite",
16
+ RevokeMembership: "revoke-membership"
17
+ };
18
+ function toMember(member) {
19
+ return {
20
+ ...member,
21
+ actions: member.actions.map((action) => MEMBER_ACTIONS[action]),
22
+ isLoggedInUser: member.isCurrentUser
23
+ };
24
+ }
25
+ function toMembersQueryResult(data) {
26
+ const { organizationMemberships } = data;
27
+ return {
28
+ data: organizationMemberships.data.map(toMember),
29
+ listMetadata: {
30
+ before: organizationMemberships.listMetadata.before ?? null,
31
+ after: organizationMemberships.listMetadata.after ?? null
32
+ }
33
+ };
34
+ }
35
+ const EMPTY_ROLES_AND_CONFIG = {
36
+ roles: { multipleRolesEnabled: false, roles: [] }
37
+ };
38
+ const useRolesAndConfig = () => {
39
+ const query = useClientGraphqlQuery({
40
+ queryKey: clientGraphqlQueryKey("ListRoles"),
41
+ queryFn: (sdk) => sdk.ListRoles(),
42
+ select: (data) => data.roles,
43
+ initialData: EMPTY_ROLES_AND_CONFIG
44
+ });
45
+ return { ...query, data: query.data ?? EMPTY_ROLES_AND_CONFIG.roles };
46
+ };
15
47
  const useUsers = (context) => {
16
48
  const {
17
49
  state: { pagination, role, searchQuery }
18
50
  } = useUsersManagementContext(context);
19
- const limit = USER_ROW_LIMIT;
20
51
  const { before, after } = pagination || {};
21
- return useMembers(
22
- {
23
- after: after ?? void 0,
24
- before: before ?? void 0,
25
- limit: limit.toString(),
26
- role: role ?? void 0,
27
- search: searchQuery ?? void 0
28
- },
29
- {
30
- query: {
31
- placeholderData: keepPreviousData
32
- }
33
- }
34
- );
52
+ const variables = {
53
+ after: after ?? null,
54
+ before: before ?? null,
55
+ limit: USER_ROW_LIMIT,
56
+ roleSlug: role ?? null,
57
+ search: searchQuery ?? null
58
+ };
59
+ return useClientGraphqlQuery({
60
+ queryKey: clientGraphqlQueryKey("ListOrganizationMemberships", variables),
61
+ queryFn: (sdk) => sdk.ListOrganizationMemberships(variables),
62
+ select: toMembersQueryResult,
63
+ placeholderData: keepPreviousData
64
+ });
35
65
  };
36
- const useUpdateUserRole = () => {
66
+ const useInvalidateMembers = () => {
37
67
  const queryClient = useQueryClient();
38
- return useUpdateMember({
39
- mutation: {
40
- onSuccess: () => {
41
- queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
42
- }
43
- }
68
+ return () => queryClient.invalidateQueries({
69
+ queryKey: clientGraphqlQueryKey("ListOrganizationMemberships")
44
70
  });
45
71
  };
72
+ function mutationFailure(typename, message) {
73
+ return new ApiError({
74
+ message,
75
+ status: 400,
76
+ queryType: "mutation",
77
+ context: { typename }
78
+ });
79
+ }
80
+ const useUpdateUserRole = () => {
81
+ const invalidateMembers = useInvalidateMembers();
82
+ return useClientGraphqlMutation({
83
+ mutationFn: async (sdk, input) => {
84
+ const { updateMemberRole: result } = await sdk.UpdateMemberRole({
85
+ input
86
+ });
87
+ return unwrapUpdateMemberRole(result);
88
+ },
89
+ onSuccess: invalidateMembers
90
+ });
91
+ };
92
+ function unwrapUpdateMemberRole(result) {
93
+ switch (result.__typename) {
94
+ case "MemberRoleUpdated":
95
+ return result.member;
96
+ case "MemberNotFound":
97
+ throw mutationFailure(result.__typename, "Cannot edit role for user");
98
+ case "RoleNotFound":
99
+ throw mutationFailure(result.__typename, "Invalid role");
100
+ }
101
+ }
46
102
  const useInviteUser = () => {
47
- const queryClient = useQueryClient();
48
- return useInviteMember({
49
- mutation: {
50
- onSuccess: () => {
51
- queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
52
- }
53
- }
103
+ const invalidateMembers = useInvalidateMembers();
104
+ return useClientGraphqlMutation({
105
+ mutationFn: async (sdk, input) => {
106
+ const { inviteUser: result } = await sdk.InviteUser({ input });
107
+ return unwrapInviteUser(result);
108
+ },
109
+ onSuccess: invalidateMembers
54
110
  });
55
111
  };
112
+ function unwrapInviteUser(result) {
113
+ switch (result.__typename) {
114
+ case "UserInvited":
115
+ return result.invitation;
116
+ case "InviteeAlreadyMember":
117
+ throw mutationFailure(result.__typename, "User already exists");
118
+ case "InviteeAlreadyInvited":
119
+ throw mutationFailure(result.__typename, "User already invited");
120
+ case "InvalidInviteeEmail":
121
+ case "InviteeEmailNotDeliverable":
122
+ throw mutationFailure(result.__typename, "Invalid email");
123
+ case "InvalidInviteeRole":
124
+ throw mutationFailure(result.__typename, "Invalid role");
125
+ case "InvalidInvitationExpiry":
126
+ throw mutationFailure(result.__typename, "Invalid input");
127
+ case "OrganizationBlockedFromSendingInvites":
128
+ throw mutationFailure(
129
+ result.__typename,
130
+ "This organization is not allowed to send invites."
131
+ );
132
+ }
133
+ }
56
134
  const useDeleteUser = () => {
57
- const queryClient = useQueryClient();
58
- return useRemoveMember({
59
- mutation: {
60
- onSuccess: () => {
61
- queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
62
- }
63
- }
135
+ const invalidateMembers = useInvalidateMembers();
136
+ return useClientGraphqlMutation({
137
+ mutationFn: async (sdk, input) => {
138
+ const { removeMember: result } = await sdk.RemoveMember({ input });
139
+ return unwrapRemoveMember(result);
140
+ },
141
+ onSuccess: invalidateMembers
64
142
  });
65
143
  };
144
+ function unwrapRemoveMember(result) {
145
+ switch (result.__typename) {
146
+ case "MemberRemoved":
147
+ return result;
148
+ case "MemberNotFound":
149
+ case "MemberIsManagedByDirectory":
150
+ throw mutationFailure(result.__typename, "Cannot revoke membership");
151
+ }
152
+ }
66
153
  const useRevokeUserInvite = () => {
67
- const queryClient = useQueryClient();
68
- return useRevokeInvite({
69
- mutation: {
70
- onSuccess: () => {
71
- queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
72
- }
73
- }
154
+ const invalidateMembers = useInvalidateMembers();
155
+ return useClientGraphqlMutation({
156
+ mutationFn: async (sdk, input) => {
157
+ const { revokeInvitation: result } = await sdk.RevokeInvitation({
158
+ input
159
+ });
160
+ return unwrapRevokeInvitation(result);
161
+ },
162
+ onSuccess: invalidateMembers
74
163
  });
75
164
  };
165
+ function unwrapRevokeInvitation(result) {
166
+ switch (result.__typename) {
167
+ case "InvitationRevoked":
168
+ return result.invitation;
169
+ case "InvitationNotFound":
170
+ throw mutationFailure(result.__typename, "User not invited");
171
+ case "InvitationNotPending":
172
+ throw mutationFailure(result.__typename, "User already accepted invite");
173
+ }
174
+ }
76
175
  const useResendUserInvite = () => {
77
- const queryClient = useQueryClient();
78
- return useResendInvite({
79
- mutation: {
80
- onSuccess: () => {
81
- queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });
82
- }
83
- }
176
+ const invalidateMembers = useInvalidateMembers();
177
+ return useClientGraphqlMutation({
178
+ mutationFn: async (sdk, input) => {
179
+ const { resendInvitation: result } = await sdk.ResendInvitation({
180
+ input
181
+ });
182
+ return unwrapResendInvitation(result);
183
+ },
184
+ onSuccess: invalidateMembers
84
185
  });
85
186
  };
187
+ function unwrapResendInvitation(result) {
188
+ switch (result.__typename) {
189
+ case "InvitationResent":
190
+ return result.invitation;
191
+ case "ResendInvitationNotFound":
192
+ throw mutationFailure(result.__typename, "User not invited");
193
+ case "InviteeAlreadyAccepted":
194
+ throw mutationFailure(result.__typename, "User already accepted invite");
195
+ case "InviteeEmailNotDeliverable":
196
+ throw mutationFailure(result.__typename, "Invalid email");
197
+ }
198
+ }
86
199
  export {
87
200
  useDeleteUser,
88
201
  useInviteUser,
89
202
  useResendUserInvite,
90
203
  useRevokeUserInvite,
204
+ useRolesAndConfig,
91
205
  useUpdateUserRole,
92
206
  useUsers
93
207
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/api/user.ts"],"sourcesContent":["import {\n getMembersQueryKey,\n useInviteMember,\n useMembers,\n useRemoveMember,\n useResendInvite,\n useRevokeInvite,\n useUpdateMember,\n} from \"../../api/endpoint.js\";\nimport { keepPreviousData, useQueryClient } from \"@tanstack/react-query\";\nimport { USER_ROW_LIMIT } from \"../constants.js\";\nimport {\n useUsersManagementContext,\n type UsersManagementContextType,\n} from \"../users-management-context.js\";\n\nexport const useUsers = (context?: UsersManagementContextType) => {\n const {\n state: { pagination, role, searchQuery },\n } = useUsersManagementContext(context);\n const limit = USER_ROW_LIMIT;\n const { before, after } = pagination || {};\n\n return useMembers(\n {\n after: after ?? undefined,\n before: before ?? undefined,\n limit: limit.toString(),\n role: role ?? undefined,\n search: searchQuery ?? undefined,\n },\n {\n query: {\n placeholderData: keepPreviousData,\n },\n },\n );\n};\n\nexport const useUpdateUserRole: typeof useUpdateMember = () => {\n const queryClient = useQueryClient();\n\n return useUpdateMember({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });\n },\n },\n });\n};\n\nexport const useInviteUser: typeof useInviteMember = () => {\n const queryClient = useQueryClient();\n\n return useInviteMember({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });\n },\n },\n });\n};\n\nexport const useDeleteUser = () => {\n const queryClient = useQueryClient();\n\n return useRemoveMember({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });\n },\n },\n });\n};\n\nexport const useRevokeUserInvite = () => {\n const queryClient = useQueryClient();\n\n return useRevokeInvite({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });\n },\n },\n });\n};\n\nexport const useResendUserInvite = () => {\n const queryClient = useQueryClient();\n\n return useResendInvite({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: getMembersQueryKey() });\n },\n },\n });\n};\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB,sBAAsB;AACjD,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,OAEK;AAEA,MAAM,WAAW,CAAC,YAAyC;AAChE,QAAM;AAAA,IACJ,OAAO,EAAE,YAAY,MAAM,YAAY;AAAA,EACzC,IAAI,0BAA0B,OAAO;AACrC,QAAM,QAAQ;AACd,QAAM,EAAE,QAAQ,MAAM,IAAI,cAAc,CAAC;AAEzC,SAAO;AAAA,IACL;AAAA,MACE,OAAO,SAAS;AAAA,MAChB,QAAQ,UAAU;AAAA,MAClB,OAAO,MAAM,SAAS;AAAA,MACtB,MAAM,QAAQ;AAAA,MACd,QAAQ,eAAe;AAAA,IACzB;AAAA,IACA;AAAA,MACE,OAAO;AAAA,QACL,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,oBAA4C,MAAM;AAC7D,QAAM,cAAc,eAAe;AAEnC,SAAO,gBAAgB;AAAA,IACrB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,gBAAwC,MAAM;AACzD,QAAM,cAAc,eAAe;AAEnC,SAAO,gBAAgB;AAAA,IACrB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,gBAAgB,MAAM;AACjC,QAAM,cAAc,eAAe;AAEnC,SAAO,gBAAgB;AAAA,IACrB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,sBAAsB,MAAM;AACvC,QAAM,cAAc,eAAe;AAEnC,SAAO,gBAAgB;AAAA,IACrB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,MAAM,sBAAsB,MAAM;AACvC,QAAM,cAAc,eAAe;AAEnC,SAAO,gBAAgB;AAAA,IACrB,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB,EAAE,UAAU,mBAAmB,EAAE,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/api/user.ts"],"sourcesContent":["import { keepPreviousData, useQueryClient } from \"@tanstack/react-query\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"../../api/client-graphql/hooks.js\";\nimport type {\n InviteUserInput,\n InviteUserMutation,\n ListOrganizationMembershipsQuery,\n ListRolesQuery,\n OrganizationMemberAction,\n OrganizationMemberFieldsFragment,\n RemoveMemberInput,\n RemoveMemberMutation,\n ResendInvitationInput,\n ResendInvitationMutation,\n RevokeInvitationInput,\n RevokeInvitationMutation,\n RoleFieldsFragment,\n UpdateMemberRoleInput,\n UpdateMemberRoleMutation,\n} from \"../../api/client-graphql/generated.js\";\nimport { ApiError } from \"../../api/errors.js\";\nimport { USER_ROW_LIMIT } from \"../constants.js\";\nimport {\n useUsersManagementContext,\n type UsersManagementContextType,\n} from \"../users-management-context.js\";\n\nexport type Role = RoleFieldsFragment;\nexport type RolesAndConfig = ListRolesQuery[\"roles\"];\n\nexport interface ListMetadata {\n before: string | null;\n after: string | null;\n}\n\nexport type MemberAction =\n | \"edit-role\"\n | \"resend-invite\"\n | \"revoke-invite\"\n | \"revoke-membership\";\n\nexport interface Member extends Omit<\n OrganizationMemberFieldsFragment,\n \"actions\"\n> {\n actions: MemberAction[];\n isLoggedInUser: boolean;\n}\n\nexport interface MembersQueryResult {\n data: Member[];\n listMetadata: ListMetadata;\n}\n\nconst MEMBER_ACTIONS: Record<OrganizationMemberAction, MemberAction> = {\n EditRole: \"edit-role\",\n ResendInvite: \"resend-invite\",\n RevokeInvite: \"revoke-invite\",\n RevokeMembership: \"revoke-membership\",\n};\n\nfunction toMember(member: OrganizationMemberFieldsFragment): Member {\n return {\n ...member,\n actions: member.actions.map((action) => MEMBER_ACTIONS[action]),\n isLoggedInUser: member.isCurrentUser,\n };\n}\n\nfunction toMembersQueryResult(\n data: ListOrganizationMembershipsQuery,\n): MembersQueryResult {\n const { organizationMemberships } = data;\n return {\n data: organizationMemberships.data.map(toMember),\n listMetadata: {\n before: organizationMemberships.listMetadata.before ?? null,\n after: organizationMemberships.listMetadata.after ?? null,\n },\n };\n}\n\nconst EMPTY_ROLES_AND_CONFIG: ListRolesQuery = {\n roles: { multipleRolesEnabled: false, roles: [] },\n};\n\nexport const useRolesAndConfig = () => {\n const query = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListRoles\"),\n queryFn: (sdk) => sdk.ListRoles(),\n select: (data) => data.roles,\n initialData: EMPTY_ROLES_AND_CONFIG,\n });\n return { ...query, data: query.data ?? EMPTY_ROLES_AND_CONFIG.roles };\n};\n\nexport const useUsers = (context?: UsersManagementContextType) => {\n const {\n state: { pagination, role, searchQuery },\n } = useUsersManagementContext(context);\n const { before, after } = pagination || {};\n const variables = {\n after: after ?? null,\n before: before ?? null,\n limit: USER_ROW_LIMIT,\n roleSlug: role ?? null,\n search: searchQuery ?? null,\n };\n\n return useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationMemberships\", variables),\n queryFn: (sdk) => sdk.ListOrganizationMemberships(variables),\n select: toMembersQueryResult,\n placeholderData: keepPreviousData,\n });\n};\n\nconst useInvalidateMembers = () => {\n const queryClient = useQueryClient();\n return () =>\n queryClient.invalidateQueries({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationMemberships\"),\n });\n};\n\nfunction mutationFailure(typename: string, message: string): ApiError {\n return new ApiError({\n message,\n status: 400,\n queryType: \"mutation\",\n context: { typename },\n });\n}\n\nexport const useUpdateUserRole = () => {\n const invalidateMembers = useInvalidateMembers();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, input: UpdateMemberRoleInput) => {\n const { updateMemberRole: result } = await sdk.UpdateMemberRole({\n input,\n });\n return unwrapUpdateMemberRole(result);\n },\n onSuccess: invalidateMembers,\n });\n};\n\nfunction unwrapUpdateMemberRole(\n result: UpdateMemberRoleMutation[\"updateMemberRole\"],\n) {\n switch (result.__typename) {\n case \"MemberRoleUpdated\":\n return result.member;\n case \"MemberNotFound\":\n throw mutationFailure(result.__typename, \"Cannot edit role for user\");\n case \"RoleNotFound\":\n throw mutationFailure(result.__typename, \"Invalid role\");\n }\n}\n\nexport const useInviteUser = () => {\n const invalidateMembers = useInvalidateMembers();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, input: InviteUserInput) => {\n const { inviteUser: result } = await sdk.InviteUser({ input });\n return unwrapInviteUser(result);\n },\n onSuccess: invalidateMembers,\n });\n};\n\nfunction unwrapInviteUser(result: InviteUserMutation[\"inviteUser\"]) {\n switch (result.__typename) {\n case \"UserInvited\":\n return result.invitation;\n case \"InviteeAlreadyMember\":\n throw mutationFailure(result.__typename, \"User already exists\");\n case \"InviteeAlreadyInvited\":\n throw mutationFailure(result.__typename, \"User already invited\");\n case \"InvalidInviteeEmail\":\n case \"InviteeEmailNotDeliverable\":\n throw mutationFailure(result.__typename, \"Invalid email\");\n case \"InvalidInviteeRole\":\n throw mutationFailure(result.__typename, \"Invalid role\");\n case \"InvalidInvitationExpiry\":\n throw mutationFailure(result.__typename, \"Invalid input\");\n case \"OrganizationBlockedFromSendingInvites\":\n throw mutationFailure(\n result.__typename,\n \"This organization is not allowed to send invites.\",\n );\n }\n}\n\nexport const useDeleteUser = () => {\n const invalidateMembers = useInvalidateMembers();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, input: RemoveMemberInput) => {\n const { removeMember: result } = await sdk.RemoveMember({ input });\n return unwrapRemoveMember(result);\n },\n onSuccess: invalidateMembers,\n });\n};\n\nfunction unwrapRemoveMember(result: RemoveMemberMutation[\"removeMember\"]) {\n switch (result.__typename) {\n case \"MemberRemoved\":\n return result;\n case \"MemberNotFound\":\n case \"MemberIsManagedByDirectory\":\n throw mutationFailure(result.__typename, \"Cannot revoke membership\");\n }\n}\n\nexport const useRevokeUserInvite = () => {\n const invalidateMembers = useInvalidateMembers();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, input: RevokeInvitationInput) => {\n const { revokeInvitation: result } = await sdk.RevokeInvitation({\n input,\n });\n return unwrapRevokeInvitation(result);\n },\n onSuccess: invalidateMembers,\n });\n};\n\nfunction unwrapRevokeInvitation(\n result: RevokeInvitationMutation[\"revokeInvitation\"],\n) {\n switch (result.__typename) {\n case \"InvitationRevoked\":\n return result.invitation;\n case \"InvitationNotFound\":\n throw mutationFailure(result.__typename, \"User not invited\");\n case \"InvitationNotPending\":\n throw mutationFailure(result.__typename, \"User already accepted invite\");\n }\n}\n\nexport const useResendUserInvite = () => {\n const invalidateMembers = useInvalidateMembers();\n\n return useClientGraphqlMutation({\n mutationFn: async (sdk, input: ResendInvitationInput) => {\n const { resendInvitation: result } = await sdk.ResendInvitation({\n input,\n });\n return unwrapResendInvitation(result);\n },\n onSuccess: invalidateMembers,\n });\n};\n\nfunction unwrapResendInvitation(\n result: ResendInvitationMutation[\"resendInvitation\"],\n) {\n switch (result.__typename) {\n case \"InvitationResent\":\n return result.invitation;\n case \"ResendInvitationNotFound\":\n throw mutationFailure(result.__typename, \"User not invited\");\n case \"InviteeAlreadyAccepted\":\n throw mutationFailure(result.__typename, \"User already accepted invite\");\n case \"InviteeEmailNotDeliverable\":\n throw mutationFailure(result.__typename, \"Invalid email\");\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,9 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Flex, Box, Text, ScrollArea } from "@radix-ui/themes";
3
3
  import { Button, Dialog, Label } from "../elements.js";
4
4
  import { ApiKeyDetailsCard } from "./api-key-details-card.js";
5
- import {
6
- useListOrganizationApiKeyPermissions
7
- } from "../../api/endpoint.js";
5
+ import { useListOrganizationApiKeyPermissions } from "../api/api-key.js";
8
6
  import { Translation } from "../i18n/translation.js";
9
7
  function Permission({
10
8
  ...permission
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/api-keys/api-key-details-dialog.tsx"],"sourcesContent":["import { Flex, Box, Text, ScrollArea } from \"@radix-ui/themes\";\nimport { Button, Dialog, Label } from \"../elements.js\";\nimport { ApiKeyDetailsCard } from \"./api-key-details-card.js\";\nimport {\n ListOrganizationApiKeysResponseData,\n useListOrganizationApiKeyPermissions,\n} from \"../../api/endpoint.js\";\nimport { Translation } from \"../i18n/translation.js\";\n\nfunction Permission({\n ...permission\n}: {\n slug: string;\n name: string;\n description?: string | null;\n}) {\n return (\n <Box className=\"woswidgets-api-key-details-permission\" px=\"4\" py=\"3\">\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n {permission.description ? (\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n ) : null}\n </Flex>\n </Box>\n );\n}\n\nexport function ApiKeyDetailsDialog({\n open,\n onOpenChange,\n apiKey,\n permissions,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n apiKey: ListOrganizationApiKeysResponseData;\n permissions: string[];\n}) {\n const permissionsQuery = useListOrganizationApiKeyPermissions({ limit: 100 });\n const permissionBySlug = new Map(\n permissionsQuery.data?.data.map((permission) => [\n permission.slug,\n permission,\n ]) ?? [],\n );\n const displayedPermissions = permissions.map(\n (slug) =>\n permissionBySlug.get(slug) ?? {\n slug,\n name: slug,\n description: null,\n },\n );\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title>\n <Translation\n defaultMessage=\"API key details\"\n id=\"dqU4kt\"\n description=\"Dialog title for viewing API key details\"\n />\n </Dialog.Title>\n <Flex direction=\"column\" gap=\"5\">\n <ApiKeyDetailsCard apiKey={apiKey} mt=\"5\" />\n {permissions.length ? (\n <Flex direction=\"column\" gap=\"2\">\n <Label>\n <Translation\n defaultMessage=\"Permissions\"\n id=\"i0XUeg\"\n description=\"Label for API key permissions section\"\n />\n </Label>\n <Flex\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <ScrollArea style={{ maxHeight: \"calc(50vh - 150px)\" }}>\n {displayedPermissions.map((permission) => (\n <Permission key={permission.slug} {...permission} />\n ))}\n </ScrollArea>\n </Flex>\n </Flex>\n ) : null}\n </Flex>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button variant=\"secondary\">\n <Translation\n defaultMessage=\"Close\"\n id=\"/4YwoE\"\n description=\"Button to close the API key details dialog\"\n />\n </Button>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n"],"mappings":"AAkBM,SACE,KADF;AAlBN,SAAS,MAAM,KAAK,MAAM,kBAAkB;AAC5C,SAAS,QAAQ,QAAQ,aAAa;AACtC,SAAS,yBAAyB;AAClC;AAAA,EAEE;AAAA,OACK;AACP,SAAS,mBAAmB;AAE5B,SAAS,WAAW;AAAA,EAClB,GAAG;AACL,GAIG;AACD,SACE,oBAAC,OAAI,WAAU,yCAAwC,IAAG,KAAI,IAAG,KAC/D,+BAAC,QAAK,WAAU,UACd;AAAA,wBAAC,QAAK,MAAK,KAAI,QAAO,QACnB,qBAAW,MACd;AAAA,IACC,WAAW,cACV,oBAAC,QAAK,MAAK,KAAI,OAAM,QAClB,qBAAW,aACd,IACE;AAAA,KACN,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,mBAAmB,qCAAqC,EAAE,OAAO,IAAI,CAAC;AAC5E,QAAM,mBAAmB,IAAI;AAAA,IAC3B,iBAAiB,MAAM,KAAK,IAAI,CAAC,eAAe;AAAA,MAC9C,WAAW;AAAA,MACX;AAAA,IACF,CAAC,KAAK,CAAC;AAAA,EACT;AACA,QAAM,uBAAuB,YAAY;AAAA,IACvC,CAAC,SACC,iBAAiB,IAAI,IAAI,KAAK;AAAA,MAC5B;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACJ;AAEA,SACE,oBAAC,OAAO,MAAP,EAAY,MAAY,cACvB,+BAAC,OAAO,SAAP,EAAe,UAAS,SACvB;AAAA,wBAAC,OAAO,OAAP,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,qBAAC,QAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,0BAAC,qBAAkB,QAAgB,IAAG,KAAI;AAAA,MACzC,YAAY,SACX,qBAAC,QAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,4BAAC,SACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,cAAc;AAAA,cACd,aAAa;AAAA,cACb,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA,WAAU;AAAA,YACV,OAAM;AAAA,YAEN,8BAAC,cAAW,OAAO,EAAE,WAAW,qBAAqB,GAClD,+BAAqB,IAAI,CAAC,eACzB,oBAAC,cAAkC,GAAG,cAArB,WAAW,IAAsB,CACnD,GACH;AAAA;AAAA,QACF;AAAA,SACF,IACE;AAAA,OACN;AAAA,IACA,oBAAC,QAAK,OAAM,UAAS,KAAI,KAAI,SAAQ,OAAM,IAAG,KAC5C,8BAAC,OAAO,OAAP,EACC,8BAAC,UAAO,SAAQ,aACd;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF,GACF,GACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/api-keys/api-key-details-dialog.tsx"],"sourcesContent":["import { Flex, Box, Text, ScrollArea } from \"@radix-ui/themes\";\nimport { Button, Dialog, Label } from \"../elements.js\";\nimport { ApiKeyDetailsCard } from \"./api-key-details-card.js\";\nimport type { ListOrganizationApiKeysResponseData } from \"../../api/endpoint.js\";\nimport { useListOrganizationApiKeyPermissions } from \"../api/api-key.js\";\nimport { Translation } from \"../i18n/translation.js\";\n\nfunction Permission({\n ...permission\n}: {\n slug: string;\n name: string;\n description?: string | null;\n}) {\n return (\n <Box className=\"woswidgets-api-key-details-permission\" px=\"4\" py=\"3\">\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n {permission.description ? (\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n ) : null}\n </Flex>\n </Box>\n );\n}\n\nexport function ApiKeyDetailsDialog({\n open,\n onOpenChange,\n apiKey,\n permissions,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n apiKey: ListOrganizationApiKeysResponseData;\n permissions: string[];\n}) {\n const permissionsQuery = useListOrganizationApiKeyPermissions({ limit: 100 });\n const permissionBySlug = new Map(\n permissionsQuery.data?.data.map((permission) => [\n permission.slug,\n permission,\n ]) ?? [],\n );\n const displayedPermissions = permissions.map(\n (slug) =>\n permissionBySlug.get(slug) ?? {\n slug,\n name: slug,\n description: null,\n },\n );\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title>\n <Translation\n defaultMessage=\"API key details\"\n id=\"dqU4kt\"\n description=\"Dialog title for viewing API key details\"\n />\n </Dialog.Title>\n <Flex direction=\"column\" gap=\"5\">\n <ApiKeyDetailsCard apiKey={apiKey} mt=\"5\" />\n {permissions.length ? (\n <Flex direction=\"column\" gap=\"2\">\n <Label>\n <Translation\n defaultMessage=\"Permissions\"\n id=\"i0XUeg\"\n description=\"Label for API key permissions section\"\n />\n </Label>\n <Flex\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <ScrollArea style={{ maxHeight: \"calc(50vh - 150px)\" }}>\n {displayedPermissions.map((permission) => (\n <Permission key={permission.slug} {...permission} />\n ))}\n </ScrollArea>\n </Flex>\n </Flex>\n ) : null}\n </Flex>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button variant=\"secondary\">\n <Translation\n defaultMessage=\"Close\"\n id=\"/4YwoE\"\n description=\"Button to close the API key details dialog\"\n />\n </Button>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n"],"mappings":"AAgBM,SACE,KADF;AAhBN,SAAS,MAAM,KAAK,MAAM,kBAAkB;AAC5C,SAAS,QAAQ,QAAQ,aAAa;AACtC,SAAS,yBAAyB;AAElC,SAAS,4CAA4C;AACrD,SAAS,mBAAmB;AAE5B,SAAS,WAAW;AAAA,EAClB,GAAG;AACL,GAIG;AACD,SACE,oBAAC,OAAI,WAAU,yCAAwC,IAAG,KAAI,IAAG,KAC/D,+BAAC,QAAK,WAAU,UACd;AAAA,wBAAC,QAAK,MAAK,KAAI,QAAO,QACnB,qBAAW,MACd;AAAA,IACC,WAAW,cACV,oBAAC,QAAK,MAAK,KAAI,OAAM,QAClB,qBAAW,aACd,IACE;AAAA,KACN,GACF;AAEJ;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,mBAAmB,qCAAqC,EAAE,OAAO,IAAI,CAAC;AAC5E,QAAM,mBAAmB,IAAI;AAAA,IAC3B,iBAAiB,MAAM,KAAK,IAAI,CAAC,eAAe;AAAA,MAC9C,WAAW;AAAA,MACX;AAAA,IACF,CAAC,KAAK,CAAC;AAAA,EACT;AACA,QAAM,uBAAuB,YAAY;AAAA,IACvC,CAAC,SACC,iBAAiB,IAAI,IAAI,KAAK;AAAA,MAC5B;AAAA,MACA,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACJ;AAEA,SACE,oBAAC,OAAO,MAAP,EAAY,MAAY,cACvB,+BAAC,OAAO,SAAP,EAAe,UAAS,SACvB;AAAA,wBAAC,OAAO,OAAP,EACC;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF;AAAA,IACA,qBAAC,QAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,0BAAC,qBAAkB,QAAgB,IAAG,KAAI;AAAA,MACzC,YAAY,SACX,qBAAC,QAAK,WAAU,UAAS,KAAI,KAC3B;AAAA,4BAAC,SACC;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,IAAG;AAAA,YACH,aAAY;AAAA;AAAA,QACd,GACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO;AAAA,cACL,cAAc;AAAA,cACd,aAAa;AAAA,cACb,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AAAA,YACA,WAAU;AAAA,YACV,OAAM;AAAA,YAEN,8BAAC,cAAW,OAAO,EAAE,WAAW,qBAAqB,GAClD,+BAAqB,IAAI,CAAC,eACzB,oBAAC,cAAkC,GAAG,cAArB,WAAW,IAAsB,CACnD,GACH;AAAA;AAAA,QACF;AAAA,SACF,IACE;AAAA,OACN;AAAA,IACA,oBAAC,QAAK,OAAM,UAAS,KAAI,KAAI,SAAQ,OAAM,IAAG,KAC5C,8BAAC,OAAO,OAAP,EACC,8BAAC,UAAO,SAAQ,aACd;AAAA,MAAC;AAAA;AAAA,QACC,gBAAe;AAAA,QACf,IAAG;AAAA,QACH,aAAY;AAAA;AAAA,IACd,GACF,GACF,GACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -23,9 +23,9 @@ import {
23
23
  import { CopyButton, CopyIconButton } from "../copy-button.js";
24
24
  import * as React from "react";
25
25
  import {
26
+ useCreateApiKey,
26
27
  useListOrganizationApiKeyPermissions
27
- } from "../../api/endpoint.js";
28
- import { useCreateApiKey } from "../api/api-key.js";
28
+ } from "../api/api-key.js";
29
29
  import { useApiKeysContext } from "./api-keys-context.js";
30
30
  import { Translation } from "../i18n/translation.js";
31
31
  import { useTranslation } from "../i18n/use-translation.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/api-keys/create-api-key.tsx"],"sourcesContent":["import {\n Box,\n Checkbox,\n Flex,\n ScrollArea,\n Text,\n Callout,\n} from \"@radix-ui/themes\";\nimport {\n Dialog,\n Label,\n Button,\n TextField,\n TextFieldSlot,\n} from \"../elements.js\";\nimport * as Form from \"../form.js\";\nimport {\n ExclamationTriangleIcon,\n InfoCircledIcon,\n MagnifyingGlassIcon,\n} from \"@radix-ui/react-icons\";\nimport { CopyButton, CopyIconButton } from \"../copy-button.js\";\nimport * as React from \"react\";\nimport {\n useListOrganizationApiKeyPermissions,\n ListOrganizationApiKeyPermission,\n} from \"../../api/endpoint.js\";\nimport { useCreateApiKey } from \"../api/api-key.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport {\n ApiKeyExpirationSelectField,\n getApiKeyExpiresAt,\n type ApiKeyExpirationOption,\n} from \"./api-key-expiration.js\";\n\nexport function CreateApiKeyDialog() {\n const {\n state: { createDialogOpen, createdApiKey },\n dispatch,\n } = useApiKeysContext();\n\n return (\n <Dialog.Root\n open={createDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({ type: \"CLOSE_CREATE_DIALOG\" });\n }\n }}\n >\n {createdApiKey ? (\n <SaveApiKeyContent apiKey={createdApiKey.value} />\n ) : (\n <CreateApiKeyForm\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${createDialogOpen}`}\n />\n )}\n </Dialog.Root>\n );\n}\n\nfunction CreateApiKeyForm() {\n const { dispatch } = useApiKeysContext();\n const translate = useTranslation();\n const [errors, setErrors] = React.useState<{\n name: boolean;\n }>({ name: false });\n\n const validate = (formData: FormData) => {\n const name = formData.get(\"name\")?.toString() ?? \"\";\n const errors = { name: !name.trim().length };\n setErrors(errors);\n const isValid = Object.values(errors).every((error) => error === false);\n return isValid;\n };\n\n const {\n mutate: createOrganizationApiKey,\n error,\n isPending,\n isSuccess,\n } = useCreateApiKey();\n const permissions = useListOrganizationApiKeyPermissions({ limit: 100 });\n\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"eUFRNS\"\n description=\"Dialog title for creating a new API key\"\n />\n </Dialog.Title>\n <Form.Root\n onSubmit={(e) => {\n if (isPending) return;\n e.preventDefault();\n const data = new FormData(e.currentTarget);\n const isValid = validate(data);\n if (!isValid) {\n return;\n }\n\n createOrganizationApiKey(\n {\n data: {\n name: data.get(\"name\")?.toString() ?? \"\",\n permissions: data.getAll(\"permission\").map(String),\n expiresAt:\n getApiKeyExpiresAt(\n (data.get(\"expiration\")?.toString() ??\n \"never\") as ApiKeyExpirationOption,\n ) ?? null,\n },\n },\n {\n onSuccess: (data) => {\n dispatch({ type: \"RESET_PAGINATION\" });\n dispatch({ type: \"SET_CREATED_API_KEY\", apiKey: data });\n },\n },\n );\n }}\n >\n <Flex direction=\"column\" align=\"stretch\" gap=\"4\">\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 creating the API key.\"\n id=\"0LyBVd\"\n description=\"Error message when API key creation fails\"\n />\n </Callout.Text>\n </Callout.Root>\n )}\n <Form.Field name=\"name\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Name\"\n id=\"v0VmRy\"\n description=\"Label for API key name input field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"A descriptive name for the API key\",\n id: \"moyvr4\",\n description: \"Placeholder for API key name input\",\n })}\n />\n </Form.Control>\n {errors.name && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"The name is required\"\n id=\"oF9d2V\"\n description=\"Validation error when API key name is empty\"\n />\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n <ApiKeyExpirationSelectField />\n {permissions.isError ? (\n <Callout.Root color=\"amber\" role=\"status\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"Permissions are unavailable right now. You can still create an API key without selecting permissions.\"\n id=\"Pw7VUu\"\n description=\"Warning message when API key permissions fail to load\"\n />\n </Callout.Text>\n </Callout.Root>\n ) : null}\n {permissions.isSuccess && permissions.data.data.length > 0 && (\n <PermissionsField permissions={permissions.data.data} />\n )}\n </Flex>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={isPending || isSuccess}>\n <Translation\n defaultMessage=\"Cancel\"\n id=\"AyVAAW\"\n description=\"Button to cancel API key creation\"\n />\n </Button>\n </Dialog.Close>\n <Button type=\"submit\" loading={isPending || isSuccess}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"d4BNWL\"\n description=\"Button to submit and create the API key\"\n />\n </Button>\n </Flex>\n </Form.Root>\n </Dialog.Content>\n );\n}\n\nfunction SaveApiKeyContent({ apiKey }: { apiKey: string }) {\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n <Translation\n defaultMessage=\"Save your key\"\n id=\"wFFCij\"\n description=\"Dialog title prompting user to save their API key\"\n />\n </Dialog.Title>\n <Dialog.Description>\n <Translation\n defaultMessage=\"Please save this API key in a secure location. If you lose it, you'll need to generate a new one.\"\n id=\"sy+2x7\"\n description=\"Warning message about saving the API key\"\n />\n </Dialog.Description>\n <Callout.Root mt=\"5\" mb=\"4\">\n <Callout.Icon>\n <InfoCircledIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"You won't be able to access the key again. Please copy it now.\"\n id=\"EFAK/K\"\n description=\"Callout warning that the key won't be accessible again\"\n />\n </Callout.Text>\n </Callout.Root>\n <TextField value={apiKey} readOnly>\n <TextFieldSlot side=\"right\">\n <CopyIconButton value={apiKey} />\n </TextFieldSlot>\n </TextField>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton value={apiKey}>\n <Translation\n defaultMessage=\"Copy and close\"\n id=\"ViYtvQ\"\n description=\"Button to copy API key and close dialog\"\n />\n </CopyButton>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n );\n}\n\nfunction Permission({\n checked,\n permission,\n onChange,\n}: {\n checked: boolean;\n permission: ListOrganizationApiKeyPermission;\n onChange: (isChecked: boolean) => void;\n}) {\n return (\n <label\n htmlFor={permission.slug}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"var(--space-2) var(--space-4)\",\n gap: \"var(--space-3)\",\n borderBottom: \"1px solid var(--gray-6)\",\n cursor: \"pointer\",\n }}\n >\n <Checkbox\n checked={checked}\n id={permission.slug}\n name=\"permission\"\n value={permission.slug}\n onCheckedChange={(e) => onChange(e === \"indeterminate\" ? false : e)}\n />\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n </Flex>\n </label>\n );\n}\n\nfunction PermissionsField({\n permissions = [],\n}: {\n permissions: ListOrganizationApiKeyPermission[];\n}) {\n const [selectedPermissions, setSelectedPermissions] = React.useState<\n ListOrganizationApiKeyPermission[]\n >([]);\n const [filter, setFilter] = React.useState(\"\");\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n const translate = useTranslation();\n const filteredPermissions = React.useMemo(() => {\n return permissions.filter((p) => {\n return (\n !filter.trim().length ||\n p.description?.toLowerCase().match(filter.toLowerCase()) ||\n p.name.toLowerCase().match(filter.toLowerCase()) ||\n p.slug.toLowerCase().match(filter.toLowerCase())\n );\n });\n }, [permissions, filter]);\n\n React.useEffect(() => {\n const onResize = () => {\n if (fieldRef.current && filteredPermissions.length !== 0) {\n fieldRef.current.style.minHeight = \"unset\";\n }\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, [filteredPermissions.length]);\n\n return (\n <Form.Field name=\"permissions\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"1\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Permissions\"\n id=\"6YN1wO\"\n description=\"Label for API key permissions field\"\n />\n </Label>\n </Form.Label>\n <Text size=\"2\" mb=\"2\" color=\"gray\">\n <Translation\n defaultMessage=\"Only enable the minimum permissions required for your use case.\"\n id=\"q2VEtG\"\n description=\"Help text for API key permissions selection\"\n />\n </Text>\n <Flex\n ref={fieldRef}\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <TextField\n name=\"search\"\n value={filter}\n size=\"2\"\n onChange={(e) => {\n if (fieldRef.current) {\n fieldRef.current.style.minHeight =\n fieldRef.current.clientHeight + 2 + \"px\";\n }\n setFilter(e.target.value);\n }}\n style={{\n height: \"40px\",\n borderRadius: \"var(--radius-3) var(--radius-3) 0 0\",\n boxShadow: \"none\",\n }}\n placeholder={translate({\n defaultMessage: \"Search\",\n id: \"iyNcly\",\n description: \"Placeholder for permissions search input\",\n })}\n >\n <TextFieldSlot side=\"left\" px=\"3\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextFieldSlot>\n </TextField>\n {filteredPermissions.length > 0 ? (\n <>\n <ScrollArea\n scrollbars=\"vertical\"\n style={{\n flex: 1,\n maxHeight: \"calc(50vh - 150px)\",\n border: \"1px solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n {filteredPermissions.map((permission) => (\n <Permission\n checked={selectedPermissions.some(\n (sp) => sp.slug === permission.slug,\n )}\n key={permission.slug}\n permission={permission}\n onChange={(isChecked) =>\n setSelectedPermissions((prev) =>\n isChecked\n ? [...prev, permission]\n : prev.filter((sp) => sp.slug !== permission.slug),\n )\n }\n />\n ))}\n </ScrollArea>\n <Box\n px=\"4\"\n py=\"3\"\n mt={\"-1px\"}\n flexGrow=\"0\"\n style={{\n borderTop: \"0 solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n <SelectedPermissions\n total={permissions.length}\n selected={selectedPermissions.length}\n onToggle={() =>\n setSelectedPermissions((prev) =>\n prev.length === permissions.length ? [] : permissions,\n )\n }\n />\n </Box>\n </>\n ) : (\n <Flex\n gap=\"4\"\n pt=\"6\"\n pb=\"6\"\n style={{ borderTop: \"1px solid var(--gray-6)\" }}\n flexGrow=\"1\"\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n >\n <MagnifyingGlassIcon\n style={{\n color: \"var(--gray-9)\",\n width: \"var(--space-5)\",\n height: \"var(--space-5)\",\n }}\n />\n <Text size=\"2\" align=\"center\" mb=\"2\" wrap=\"balance\" weight=\"bold\">\n <Translation\n defaultMessage=\"No permissions match your search\"\n id=\"xjqT9f\"\n description=\"Empty state message when no permissions match search\"\n />\n </Text>\n <Button\n variant=\"secondary\"\n size=\"1\"\n onClick={() => setFilter(\"\")}\n >\n <Translation\n defaultMessage=\"Clear search\"\n id=\"YrMs63\"\n description=\"Button to clear permissions search\"\n />\n </Button>\n </Flex>\n )}\n </Flex>\n </Flex>\n </Form.Field>\n );\n}\n\nfunction SelectedPermissions({\n total,\n selected,\n onToggle,\n}: {\n total: number;\n selected: number;\n onToggle: () => void;\n}) {\n return (\n <Flex align=\"center\" gap=\"2\">\n <Text size=\"1\" style={{ lineHeight: 1, color: \"var(--gray-11)\" }}>\n {selected === 0 ? (\n <Translation\n defaultMessage=\"No permissions selected\"\n id=\"FqU9hv\"\n description=\"Message when no permissions are selected\"\n />\n ) : selected === 1 ? (\n <Translation\n defaultMessage=\"1 permission selected\"\n id=\"VouLgT\"\n description=\"Message showing count of selected permissions\"\n />\n ) : (\n <Translation\n defaultMessage=\"{count} permissions selected\"\n id=\"ZL90DI\"\n description=\"Message showing count of selected permissions\"\n values={{ count: selected }}\n />\n )}\n </Text>\n <Text\n size=\"1\"\n onClick={onToggle}\n style={{ cursor: \"pointer\", color: \"var(--accent-10)\" }}\n >\n {total === selected ? (\n <Translation\n defaultMessage=\"Deselect all\"\n id=\"63f7SY\"\n description=\"Button to deselect all permissions\"\n />\n ) : (\n <Translation\n defaultMessage=\"Select all\"\n id=\"onTqlA\"\n description=\"Button to select all permissions\"\n />\n )}\n </Text>\n </Flex>\n );\n}\n\nexport function CreateApiKeyButton() {\n const { dispatch } = useApiKeysContext();\n return (\n <Button onClick={() => dispatch({ type: \"OPEN_CREATE_DIALOG\" })}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"vq5724\"\n description=\"Button to open create API key dialog\"\n />\n </Button>\n );\n}\n"],"mappings":"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","names":["errors","error","data"]}
1
+ {"version":3,"sources":["../../../../src/lib/api-keys/create-api-key.tsx"],"sourcesContent":["import {\n Box,\n Checkbox,\n Flex,\n ScrollArea,\n Text,\n Callout,\n} from \"@radix-ui/themes\";\nimport {\n Dialog,\n Label,\n Button,\n TextField,\n TextFieldSlot,\n} from \"../elements.js\";\nimport * as Form from \"../form.js\";\nimport {\n ExclamationTriangleIcon,\n InfoCircledIcon,\n MagnifyingGlassIcon,\n} from \"@radix-ui/react-icons\";\nimport { CopyButton, CopyIconButton } from \"../copy-button.js\";\nimport * as React from \"react\";\nimport type { ListOrganizationApiKeyPermission } from \"../../api/endpoint.js\";\nimport {\n useCreateApiKey,\n useListOrganizationApiKeyPermissions,\n} from \"../api/api-key.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport {\n ApiKeyExpirationSelectField,\n getApiKeyExpiresAt,\n type ApiKeyExpirationOption,\n} from \"./api-key-expiration.js\";\n\nexport function CreateApiKeyDialog() {\n const {\n state: { createDialogOpen, createdApiKey },\n dispatch,\n } = useApiKeysContext();\n\n return (\n <Dialog.Root\n open={createDialogOpen}\n onOpenChange={(open) => {\n if (!open) {\n dispatch({ type: \"CLOSE_CREATE_DIALOG\" });\n }\n }}\n >\n {createdApiKey ? (\n <SaveApiKeyContent apiKey={createdApiKey.value} />\n ) : (\n <CreateApiKeyForm\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${createDialogOpen}`}\n />\n )}\n </Dialog.Root>\n );\n}\n\nfunction CreateApiKeyForm() {\n const { dispatch } = useApiKeysContext();\n const translate = useTranslation();\n const [errors, setErrors] = React.useState<{\n name: boolean;\n }>({ name: false });\n\n const validate = (formData: FormData) => {\n const name = formData.get(\"name\")?.toString() ?? \"\";\n const errors = { name: !name.trim().length };\n setErrors(errors);\n const isValid = Object.values(errors).every((error) => error === false);\n return isValid;\n };\n\n const {\n mutate: createOrganizationApiKey,\n error,\n isPending,\n isSuccess,\n } = useCreateApiKey();\n const permissions = useListOrganizationApiKeyPermissions({ limit: 100 });\n\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"eUFRNS\"\n description=\"Dialog title for creating a new API key\"\n />\n </Dialog.Title>\n <Form.Root\n onSubmit={(e) => {\n if (isPending) return;\n e.preventDefault();\n const data = new FormData(e.currentTarget);\n const isValid = validate(data);\n if (!isValid) {\n return;\n }\n\n createOrganizationApiKey(\n {\n data: {\n name: data.get(\"name\")?.toString() ?? \"\",\n permissions: data.getAll(\"permission\").map(String),\n expiresAt:\n getApiKeyExpiresAt(\n (data.get(\"expiration\")?.toString() ??\n \"never\") as ApiKeyExpirationOption,\n ) ?? null,\n },\n },\n {\n onSuccess: (data) => {\n dispatch({ type: \"RESET_PAGINATION\" });\n dispatch({ type: \"SET_CREATED_API_KEY\", apiKey: data });\n },\n },\n );\n }}\n >\n <Flex direction=\"column\" align=\"stretch\" gap=\"4\">\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 creating the API key.\"\n id=\"0LyBVd\"\n description=\"Error message when API key creation fails\"\n />\n </Callout.Text>\n </Callout.Root>\n )}\n <Form.Field name=\"name\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"2\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Name\"\n id=\"v0VmRy\"\n description=\"Label for API key name input field\"\n />\n </Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"off\"\n placeholder={translate({\n defaultMessage: \"A descriptive name for the API key\",\n id: \"moyvr4\",\n description: \"Placeholder for API key name input\",\n })}\n />\n </Form.Control>\n {errors.name && (\n <Form.Message asChild>\n <Text size=\"2\" color=\"red\">\n <Translation\n defaultMessage=\"The name is required\"\n id=\"oF9d2V\"\n description=\"Validation error when API key name is empty\"\n />\n </Text>\n </Form.Message>\n )}\n </Flex>\n </Form.Field>\n <ApiKeyExpirationSelectField />\n {permissions.isError ? (\n <Callout.Root color=\"amber\" role=\"status\">\n <Callout.Icon>\n <ExclamationTriangleIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"Permissions are unavailable right now. You can still create an API key without selecting permissions.\"\n id=\"Pw7VUu\"\n description=\"Warning message when API key permissions fail to load\"\n />\n </Callout.Text>\n </Callout.Root>\n ) : null}\n {permissions.isSuccess && permissions.data.data.length > 0 && (\n <PermissionsField permissions={permissions.data.data} />\n )}\n </Flex>\n\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={isPending || isSuccess}>\n <Translation\n defaultMessage=\"Cancel\"\n id=\"AyVAAW\"\n description=\"Button to cancel API key creation\"\n />\n </Button>\n </Dialog.Close>\n <Button type=\"submit\" loading={isPending || isSuccess}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"d4BNWL\"\n description=\"Button to submit and create the API key\"\n />\n </Button>\n </Flex>\n </Form.Root>\n </Dialog.Content>\n );\n}\n\nfunction SaveApiKeyContent({ apiKey }: { apiKey: string }) {\n return (\n <Dialog.Content maxWidth=\"529px\">\n <Dialog.Title size=\"4\" weight={\"bold\"}>\n <Translation\n defaultMessage=\"Save your key\"\n id=\"wFFCij\"\n description=\"Dialog title prompting user to save their API key\"\n />\n </Dialog.Title>\n <Dialog.Description>\n <Translation\n defaultMessage=\"Please save this API key in a secure location. If you lose it, you'll need to generate a new one.\"\n id=\"sy+2x7\"\n description=\"Warning message about saving the API key\"\n />\n </Dialog.Description>\n <Callout.Root mt=\"5\" mb=\"4\">\n <Callout.Icon>\n <InfoCircledIcon />\n </Callout.Icon>\n <Callout.Text>\n <Translation\n defaultMessage=\"You won't be able to access the key again. Please copy it now.\"\n id=\"EFAK/K\"\n description=\"Callout warning that the key won't be accessible again\"\n />\n </Callout.Text>\n </Callout.Root>\n <TextField value={apiKey} readOnly>\n <TextFieldSlot side=\"right\">\n <CopyIconButton value={apiKey} />\n </TextFieldSlot>\n </TextField>\n <Flex align=\"center\" gap=\"3\" justify=\"end\" mt=\"5\">\n <Dialog.Close>\n <CopyButton value={apiKey}>\n <Translation\n defaultMessage=\"Copy and close\"\n id=\"ViYtvQ\"\n description=\"Button to copy API key and close dialog\"\n />\n </CopyButton>\n </Dialog.Close>\n </Flex>\n </Dialog.Content>\n );\n}\n\nfunction Permission({\n checked,\n permission,\n onChange,\n}: {\n checked: boolean;\n permission: ListOrganizationApiKeyPermission;\n onChange: (isChecked: boolean) => void;\n}) {\n return (\n <label\n htmlFor={permission.slug}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n padding: \"var(--space-2) var(--space-4)\",\n gap: \"var(--space-3)\",\n borderBottom: \"1px solid var(--gray-6)\",\n cursor: \"pointer\",\n }}\n >\n <Checkbox\n checked={checked}\n id={permission.slug}\n name=\"permission\"\n value={permission.slug}\n onCheckedChange={(e) => onChange(e === \"indeterminate\" ? false : e)}\n />\n <Flex direction=\"column\">\n <Text size=\"2\" weight=\"bold\">\n {permission.name}\n </Text>\n <Text size=\"2\" color=\"gray\">\n {permission.description}\n </Text>\n </Flex>\n </label>\n );\n}\n\nfunction PermissionsField({\n permissions = [],\n}: {\n permissions: ListOrganizationApiKeyPermission[];\n}) {\n const [selectedPermissions, setSelectedPermissions] = React.useState<\n ListOrganizationApiKeyPermission[]\n >([]);\n const [filter, setFilter] = React.useState(\"\");\n const fieldRef = React.useRef<HTMLDivElement | null>(null);\n const translate = useTranslation();\n const filteredPermissions = React.useMemo(() => {\n return permissions.filter((p) => {\n return (\n !filter.trim().length ||\n p.description?.toLowerCase().match(filter.toLowerCase()) ||\n p.name.toLowerCase().match(filter.toLowerCase()) ||\n p.slug.toLowerCase().match(filter.toLowerCase())\n );\n });\n }, [permissions, filter]);\n\n React.useEffect(() => {\n const onResize = () => {\n if (fieldRef.current && filteredPermissions.length !== 0) {\n fieldRef.current.style.minHeight = \"unset\";\n }\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, [filteredPermissions.length]);\n\n return (\n <Form.Field name=\"permissions\" asChild>\n <Flex direction=\"column\" align=\"stretch\" gap=\"1\">\n <Form.Label asChild>\n <Label>\n <Translation\n defaultMessage=\"Permissions\"\n id=\"6YN1wO\"\n description=\"Label for API key permissions field\"\n />\n </Label>\n </Form.Label>\n <Text size=\"2\" mb=\"2\" color=\"gray\">\n <Translation\n defaultMessage=\"Only enable the minimum permissions required for your use case.\"\n id=\"q2VEtG\"\n description=\"Help text for API key permissions selection\"\n />\n </Text>\n <Flex\n ref={fieldRef}\n style={{\n borderRadius: \"var(--radius-3)\",\n borderColor: \"var(--gray-6)\",\n borderWidth: \"1px\",\n borderStyle: \"solid\",\n }}\n direction=\"column\"\n align=\"stretch\"\n >\n <TextField\n name=\"search\"\n value={filter}\n size=\"2\"\n onChange={(e) => {\n if (fieldRef.current) {\n fieldRef.current.style.minHeight =\n fieldRef.current.clientHeight + 2 + \"px\";\n }\n setFilter(e.target.value);\n }}\n style={{\n height: \"40px\",\n borderRadius: \"var(--radius-3) var(--radius-3) 0 0\",\n boxShadow: \"none\",\n }}\n placeholder={translate({\n defaultMessage: \"Search\",\n id: \"iyNcly\",\n description: \"Placeholder for permissions search input\",\n })}\n >\n <TextFieldSlot side=\"left\" px=\"3\">\n <MagnifyingGlassIcon aria-hidden=\"true\" height=\"16\" width=\"16\" />\n </TextFieldSlot>\n </TextField>\n {filteredPermissions.length > 0 ? (\n <>\n <ScrollArea\n scrollbars=\"vertical\"\n style={{\n flex: 1,\n maxHeight: \"calc(50vh - 150px)\",\n border: \"1px solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n {filteredPermissions.map((permission) => (\n <Permission\n checked={selectedPermissions.some(\n (sp) => sp.slug === permission.slug,\n )}\n key={permission.slug}\n permission={permission}\n onChange={(isChecked) =>\n setSelectedPermissions((prev) =>\n isChecked\n ? [...prev, permission]\n : prev.filter((sp) => sp.slug !== permission.slug),\n )\n }\n />\n ))}\n </ScrollArea>\n <Box\n px=\"4\"\n py=\"3\"\n mt={\"-1px\"}\n flexGrow=\"0\"\n style={{\n borderTop: \"0 solid var(--gray-6)\",\n borderWidth: \"1px 0 0\",\n }}\n >\n <SelectedPermissions\n total={permissions.length}\n selected={selectedPermissions.length}\n onToggle={() =>\n setSelectedPermissions((prev) =>\n prev.length === permissions.length ? [] : permissions,\n )\n }\n />\n </Box>\n </>\n ) : (\n <Flex\n gap=\"4\"\n pt=\"6\"\n pb=\"6\"\n style={{ borderTop: \"1px solid var(--gray-6)\" }}\n flexGrow=\"1\"\n justify=\"center\"\n align=\"center\"\n direction=\"column\"\n >\n <MagnifyingGlassIcon\n style={{\n color: \"var(--gray-9)\",\n width: \"var(--space-5)\",\n height: \"var(--space-5)\",\n }}\n />\n <Text size=\"2\" align=\"center\" mb=\"2\" wrap=\"balance\" weight=\"bold\">\n <Translation\n defaultMessage=\"No permissions match your search\"\n id=\"xjqT9f\"\n description=\"Empty state message when no permissions match search\"\n />\n </Text>\n <Button\n variant=\"secondary\"\n size=\"1\"\n onClick={() => setFilter(\"\")}\n >\n <Translation\n defaultMessage=\"Clear search\"\n id=\"YrMs63\"\n description=\"Button to clear permissions search\"\n />\n </Button>\n </Flex>\n )}\n </Flex>\n </Flex>\n </Form.Field>\n );\n}\n\nfunction SelectedPermissions({\n total,\n selected,\n onToggle,\n}: {\n total: number;\n selected: number;\n onToggle: () => void;\n}) {\n return (\n <Flex align=\"center\" gap=\"2\">\n <Text size=\"1\" style={{ lineHeight: 1, color: \"var(--gray-11)\" }}>\n {selected === 0 ? (\n <Translation\n defaultMessage=\"No permissions selected\"\n id=\"FqU9hv\"\n description=\"Message when no permissions are selected\"\n />\n ) : selected === 1 ? (\n <Translation\n defaultMessage=\"1 permission selected\"\n id=\"VouLgT\"\n description=\"Message showing count of selected permissions\"\n />\n ) : (\n <Translation\n defaultMessage=\"{count} permissions selected\"\n id=\"ZL90DI\"\n description=\"Message showing count of selected permissions\"\n values={{ count: selected }}\n />\n )}\n </Text>\n <Text\n size=\"1\"\n onClick={onToggle}\n style={{ cursor: \"pointer\", color: \"var(--accent-10)\" }}\n >\n {total === selected ? (\n <Translation\n defaultMessage=\"Deselect all\"\n id=\"63f7SY\"\n description=\"Button to deselect all permissions\"\n />\n ) : (\n <Translation\n defaultMessage=\"Select all\"\n id=\"onTqlA\"\n description=\"Button to select all permissions\"\n />\n )}\n </Text>\n </Flex>\n );\n}\n\nexport function CreateApiKeyButton() {\n const { dispatch } = useApiKeysContext();\n return (\n <Button onClick={() => dispatch({ type: \"OPEN_CREATE_DIALOG\" })}>\n <Translation\n defaultMessage=\"Create API key\"\n id=\"vq5724\"\n description=\"Button to open create API key dialog\"\n />\n </Button>\n );\n}\n"],"mappings":"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","names":["errors","error","data"]}
@@ -1,11 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { Flex, Callout } from "@radix-ui/themes";
3
3
  import { ApiKeyDetailsCard } from "./api-key-details-card.js";
4
- import {
5
- getListOrganizationApiKeysQueryKey
6
- } from "../../api/endpoint.js";
7
- import { useDeleteOrganizationApiKey } from "../../api/endpoint.js";
8
- import { useQueryClient } from "@tanstack/react-query";
4
+ import { useDeleteApiKey } from "../api/api-key.js";
9
5
  import { ExclamationTriangleIcon } from "@radix-ui/react-icons";
10
6
  import { AlertDialog, Button } from "../elements.js";
11
7
  import { Translation } from "../i18n/translation.js";
@@ -15,22 +11,16 @@ function RevokeApiKeyDialog({
15
11
  open,
16
12
  onOpenChange
17
13
  }) {
18
- const queryClient = useQueryClient();
19
14
  const { dispatch } = useApiKeysContext();
20
15
  const {
21
16
  mutate: deleteOrganizationApiKey,
22
17
  isPending,
23
18
  error,
24
19
  isSuccess
25
- } = useDeleteOrganizationApiKey({
26
- mutation: {
27
- onSuccess: () => {
28
- dispatch({ type: "RESET_PAGINATION" });
29
- queryClient.invalidateQueries({
30
- queryKey: getListOrganizationApiKeysQueryKey()
31
- });
32
- onOpenChange(false);
33
- }
20
+ } = useDeleteApiKey({
21
+ onSuccess: () => {
22
+ dispatch({ type: "RESET_PAGINATION" });
23
+ onOpenChange(false);
34
24
  }
35
25
  });
36
26
  return /* @__PURE__ */ jsx(AlertDialog.Root, { open, onOpenChange, children: /* @__PURE__ */ jsxs(AlertDialog.Content, { maxWidth: "529px", children: [