@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
@@ -9,9 +9,10 @@ import {
9
9
  } from "./lib/admin-portal-sso-connection.js";
10
10
  import { ApiProvider, useApiReady } from "./api/api-provider.js";
11
11
  import {
12
- useListSsoConnections,
13
- useGenerateAdminPortalLink
14
- } from "./api/endpoint.js";
12
+ clientGraphqlQueryKey,
13
+ useClientGraphqlMutation,
14
+ useClientGraphqlQuery
15
+ } from "./api/client-graphql/hooks.js";
15
16
  import { useWorkOsApiUrl } from "./lib/widgets-context.js";
16
17
  import { ErrorBoundary } from "./lib/error-boundary.js";
17
18
  import {
@@ -47,23 +48,22 @@ const AdminPortalSsoConnectionImpl = (props) => {
47
48
  if (isApiReady && currentDate === null) {
48
49
  setCurrentDate(/* @__PURE__ */ new Date());
49
50
  }
50
- const { mutate: generateAdminPortalLink, isPending } = useGenerateAdminPortalLink({
51
- mutation: {
52
- onSuccess: (data) => {
53
- openAdminPortalViaForm(data.link, {
54
- target: "_blank",
55
- rel: "noopener noreferrer"
56
- });
57
- }
51
+ const { mutate: generateAdminPortalLink, isPending } = useClientGraphqlMutation({
52
+ mutationFn: (sdk, intent) => sdk.CreateAdminPortalLink({ intent }),
53
+ onSuccess: (data) => {
54
+ openAdminPortalViaForm(data.createAdminPortalLink.link, {
55
+ target: "_blank",
56
+ rel: "noopener noreferrer"
57
+ });
58
58
  }
59
59
  });
60
- const query = useListSsoConnections();
60
+ const query = useClientGraphqlQuery({
61
+ queryKey: clientGraphqlQueryKey("ListSsoConnections"),
62
+ queryFn: (sdk) => sdk.ListSsoConnections(),
63
+ select: (data) => data.ssoConnections
64
+ });
61
65
  const initConfig = () => {
62
- generateAdminPortalLink({
63
- params: {
64
- intent: "sso"
65
- }
66
- });
66
+ generateAdminPortalLink("Sso");
67
67
  };
68
68
  if (query.isLoading) {
69
69
  return /* @__PURE__ */ jsx(AdminPortalSsoConnectionLoading, { ...props });
@@ -105,7 +105,7 @@ const AdminPortalSsoConnectionImpl = (props) => {
105
105
  connectionStatus: "NotConfigured"
106
106
  };
107
107
  }
108
- const identityProvider = getIdentityProvider(connection);
108
+ const identityProvider = getIdentityProvider(connection.type);
109
109
  switch (connectionStatus) {
110
110
  case "Active":
111
111
  return {
@@ -192,74 +192,102 @@ function getConnectionState(connection, currentDate) {
192
192
  return unreachable(connection.state);
193
193
  }
194
194
  }
195
- function getIdentityProvider(connection) {
196
- switch (connection.type) {
197
- case "AdfsSaml":
198
- case "EntraIdOidc":
195
+ function getIdentityProvider(type) {
196
+ switch (type) {
197
+ case "ADFSSAML":
198
+ case "EntraIdOIDC":
199
+ case "MicrosoftOAuth":
199
200
  return "microsoft";
200
201
  case "Auth0Migration":
201
- case "Auth0Saml":
202
+ case "Auth0SAML":
202
203
  return "auth0";
203
- case "AzureSaml":
204
+ case "AzureSAML":
204
205
  return "azure";
205
- case "CasSaml":
206
+ case "CasSAML":
206
207
  return "cas";
207
- case "ClassLinkSaml":
208
+ case "ClassLinkSAML":
208
209
  return "classlink";
209
- case "CloudflareSaml":
210
+ case "CloudflareSAML":
210
211
  return "cloudflare";
211
- case "CyberArkSaml":
212
+ case "CyberArkSAML":
212
213
  return "cyberark";
213
- case "DuoSaml":
214
+ case "DuoSAML":
214
215
  return "duo";
215
- case "GenericSaml":
216
+ case "GenericSAML":
216
217
  return "generic-saml";
217
- case "GoogleSaml":
218
- case "GoogleOidc":
218
+ case "GoogleSAML":
219
+ case "GoogleOIDC":
220
+ case "GoogleOAuth":
219
221
  return "google";
220
- case "JumpCloudSaml":
222
+ case "JumpCloudSAML":
221
223
  return "jumpcloud";
222
- case "KeycloakSaml":
224
+ case "KeycloakSAML":
223
225
  return "keycloak";
224
- case "LastPassSaml":
226
+ case "LastPassSAML":
225
227
  return "lastpass";
226
- case "MiniOrangeSaml":
228
+ case "MiniOrangeSAML":
227
229
  return "miniorange";
228
- case "NetIqSaml":
230
+ case "NetIqSAML":
229
231
  return "net-iq";
230
- case "OktaOidc":
231
- case "OktaSaml":
232
+ case "OktaOIDC":
233
+ case "OktaSAML":
232
234
  return "okta";
233
- case "OneLoginSaml":
235
+ case "OneLoginSAML":
234
236
  return "onelogin";
235
- case "OracleSaml":
237
+ case "OracleSAML":
236
238
  return "oracle";
237
- case "PingFederateSaml":
238
- case "PingOneSaml":
239
+ case "PingFederateSAML":
240
+ case "PingOneSAML":
239
241
  return "ping-identity";
240
- case "RipplingSaml":
242
+ case "RipplingSAML":
241
243
  return "rippling";
242
- case "SalesforceSaml":
244
+ case "SalesforceSAML":
245
+ case "SalesforceOAuth":
243
246
  return "salesforce";
244
- case "ShibbolethGenericSaml":
245
- case "ShibbolethSaml":
247
+ case "ShibbolethGenericSAML":
248
+ case "ShibbolethSAML":
246
249
  return "shibboleth";
247
- case "SimpleSamlPhpSaml":
250
+ case "SimpleSamlPhpSAML":
248
251
  return "simple-saml-php";
249
252
  case "TestIdp":
250
253
  return "test-idp";
251
- case "VmWareSaml":
254
+ case "VMwareSAML":
252
255
  return "vmware";
253
256
  case "AdpOidc":
254
257
  return "adp";
255
- case "GenericOidc":
258
+ case "GenericOIDC":
256
259
  return "generic-oidc";
257
260
  case "LoginGovOidc":
258
261
  return "login-gov";
259
- case "CleverOidc":
262
+ case "CleverOIDC":
260
263
  return "clever";
264
+ case "AppleOAuth":
265
+ return "apple";
266
+ case "BitbucketOAuth":
267
+ return "bitbucket";
268
+ case "DiscordOAuth":
269
+ return "discord";
270
+ case "GithubOAuth":
271
+ return "github";
272
+ case "GitLabOAuth":
273
+ return "gitlab";
274
+ case "IntuitOAuth":
275
+ return "intuit";
276
+ case "LinkedInOAuth":
277
+ return "linkedin";
278
+ case "SlackOAuth":
279
+ return "slack";
280
+ case "VercelOAuth":
281
+ case "VercelMarketplaceOAuth":
282
+ return "vercel";
283
+ case "XeroOAuth":
284
+ return "xero";
285
+ case "GrokOAuth":
286
+ case "XOAuth":
287
+ case "MagicLink":
288
+ return "workos";
261
289
  default:
262
- return unreachable(connection);
290
+ return unreachable(type);
263
291
  }
264
292
  }
265
293
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n type SsoConnection,\n useListSsoConnections,\n useGenerateAdminPortalLink,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport {\n openAdminPortalViaForm,\n unreachable,\n WidgetRootDomProps,\n} from \"./lib/utils.js\";\nimport { IdentityProvider } from \"./lib/identity-providers.js\";\n\ninterface AdminPortalSsoConnectionProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps> = ({\n authToken,\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-sso-connection\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalSsoConnectionImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalSsoConnectionImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const [currentDate, setCurrentDate] = React.useState<Date | null>(() =>\n isApiReady ? new Date() : null,\n );\n if (isApiReady && currentDate === null) {\n setCurrentDate(new Date());\n }\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n openAdminPortalViaForm(data.link, {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n });\n },\n },\n });\n\n const query = useListSsoConnections();\n\n const initConfig = () => {\n generateAdminPortalLink({\n params: {\n intent: \"sso\",\n },\n });\n };\n\n if (query.isLoading) {\n return <AdminPortalSsoConnectionLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalSsoConnectionError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const connection = query.data[0];\n if (!connection) {\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n currentDate={currentDate}\n lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isPending}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (!connection || connectionStatus === \"NotConfigured\") {\n return {\n connectionStatus: \"NotConfigured\",\n } satisfies AdminPortalSsoConnectionStatusProps;\n }\n\n const identityProvider = getIdentityProvider(connection);\n switch (connectionStatus) {\n case \"Active\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Inactive\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Expired\":\n case \"Expiring\":\n return {\n connectionStatus,\n expiryDate: connectionState.expiryDate,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n default:\n return unreachable(connectionState);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n currentDate={currentDate}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isPending}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n};\n\ntype ConnectionState =\n | { status: \"NotConfigured\" }\n | { status: \"Active\" }\n | { status: \"Inactive\" }\n | {\n status: \"Expiring\";\n daysUntilExpiry: number | null;\n expiryDate: Date | null;\n }\n | { status: \"Expired\"; expiryDate: Date | null };\n\nfunction getConnectionState(\n connection: SsoConnection,\n currentDate: Date | null,\n): ConnectionState {\n switch (connection.state) {\n case \"Active\":\n case \"Validating\":\n case \"Deleting\": {\n const activeStatus = { status: \"Active\" } satisfies ConnectionState;\n if (connection.providerTag !== \"Saml\") {\n return activeStatus;\n }\n\n if (connection.latestExpiredCertificate) {\n return {\n status: \"Expired\",\n expiryDate: connection.latestExpiredCertificate.notAfter\n ? new Date(connection.latestExpiredCertificate.notAfter)\n : null,\n };\n }\n\n const expiryTime = connection.latestExpiringCertificate?.notAfter;\n if (currentDate == null || expiryTime == null) {\n return activeStatus;\n }\n\n const expiryDate = new Date(expiryTime);\n const daysUntilExpiry = (() => {\n const diff = expiryDate.getTime() - currentDate.getTime();\n if (diff < 0) {\n return -1;\n }\n\n return diff / (1000 * 60 * 60 * 24);\n })();\n\n if (daysUntilExpiry !== -1 && daysUntilExpiry <= 30) {\n return { status: \"Expiring\", daysUntilExpiry, expiryDate };\n }\n\n return activeStatus;\n }\n case \"Inactive\": {\n return { status: \"Inactive\" };\n }\n default:\n return unreachable(connection.state);\n }\n}\n\nfunction getIdentityProvider(connection: SsoConnection): IdentityProvider {\n switch (connection.type) {\n case \"AdfsSaml\":\n case \"EntraIdOidc\":\n return \"microsoft\";\n case \"Auth0Migration\":\n case \"Auth0Saml\":\n return \"auth0\";\n case \"AzureSaml\":\n return \"azure\";\n case \"CasSaml\":\n return \"cas\";\n case \"ClassLinkSaml\":\n return \"classlink\";\n case \"CloudflareSaml\":\n return \"cloudflare\";\n case \"CyberArkSaml\":\n return \"cyberark\";\n case \"DuoSaml\":\n return \"duo\";\n case \"GenericSaml\":\n return \"generic-saml\";\n case \"GoogleSaml\":\n case \"GoogleOidc\":\n return \"google\";\n case \"JumpCloudSaml\":\n return \"jumpcloud\";\n case \"KeycloakSaml\":\n return \"keycloak\";\n case \"LastPassSaml\":\n return \"lastpass\";\n case \"MiniOrangeSaml\":\n return \"miniorange\";\n case \"NetIqSaml\":\n return \"net-iq\";\n case \"OktaOidc\":\n case \"OktaSaml\":\n return \"okta\";\n case \"OneLoginSaml\":\n return \"onelogin\";\n case \"OracleSaml\":\n return \"oracle\";\n case \"PingFederateSaml\":\n case \"PingOneSaml\":\n return \"ping-identity\";\n case \"RipplingSaml\":\n return \"rippling\";\n case \"SalesforceSaml\":\n return \"salesforce\";\n case \"ShibbolethGenericSaml\":\n case \"ShibbolethSaml\":\n return \"shibboleth\";\n case \"SimpleSamlPhpSaml\":\n return \"simple-saml-php\";\n case \"TestIdp\":\n return \"test-idp\";\n case \"VmWareSaml\":\n return \"vmware\";\n case \"AdpOidc\":\n return \"adp\";\n case \"GenericOidc\":\n return \"generic-oidc\";\n case \"LoginGovOidc\":\n return \"login-gov\";\n case \"CleverOidc\":\n return \"clever\";\n default:\n return unreachable(connection);\n }\n}\n\nexport type {\n AdminPortalSsoConnectionProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionErrorProps,\n};\nexport {\n AdminPortalSsoConnection,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnectionError,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport type {\n AdminPortalLinkIntent,\n ConnectionFieldsFragment,\n ConnectionType,\n} from \"./api/client-graphql/generated.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport {\n openAdminPortalViaForm,\n unreachable,\n WidgetRootDomProps,\n} from \"./lib/utils.js\";\nimport { IdentityProvider } from \"./lib/identity-providers.js\";\n\ninterface AdminPortalSsoConnectionProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps> = ({\n authToken,\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-sso-connection\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalSsoConnectionImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalSsoConnectionImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const [currentDate, setCurrentDate] = React.useState<Date | null>(() =>\n isApiReady ? new Date() : null,\n );\n if (isApiReady && currentDate === null) {\n setCurrentDate(new Date());\n }\n\n const { mutate: generateAdminPortalLink, isPending } =\n useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n openAdminPortalViaForm(data.createAdminPortalLink.link, {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n });\n },\n });\n\n const query = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListSsoConnections\"),\n queryFn: (sdk) => sdk.ListSsoConnections(),\n select: (data) => data.ssoConnections,\n });\n\n const initConfig = () => {\n generateAdminPortalLink(\"Sso\");\n };\n\n if (query.isLoading) {\n return <AdminPortalSsoConnectionLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalSsoConnectionError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const connection = query.data[0];\n if (!connection) {\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n currentDate={currentDate}\n lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isPending}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (!connection || connectionStatus === \"NotConfigured\") {\n return {\n connectionStatus: \"NotConfigured\",\n } satisfies AdminPortalSsoConnectionStatusProps;\n }\n\n const identityProvider = getIdentityProvider(connection.type);\n switch (connectionStatus) {\n case \"Active\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Inactive\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Expired\":\n case \"Expiring\":\n return {\n connectionStatus,\n expiryDate: connectionState.expiryDate,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n default:\n return unreachable(connectionState);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n currentDate={currentDate}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isPending}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n};\n\ntype ConnectionState =\n | { status: \"NotConfigured\" }\n | { status: \"Active\" }\n | { status: \"Inactive\" }\n | {\n status: \"Expiring\";\n daysUntilExpiry: number | null;\n expiryDate: Date | null;\n }\n | { status: \"Expired\"; expiryDate: Date | null };\n\nfunction getConnectionState(\n connection: ConnectionFieldsFragment,\n currentDate: Date | null,\n): ConnectionState {\n switch (connection.state) {\n case \"Active\":\n case \"Validating\":\n case \"Deleting\": {\n const activeStatus = { status: \"Active\" } satisfies ConnectionState;\n if (connection.providerTag !== \"Saml\") {\n return activeStatus;\n }\n\n if (connection.latestExpiredCertificate) {\n return {\n status: \"Expired\",\n expiryDate: connection.latestExpiredCertificate.notAfter\n ? new Date(connection.latestExpiredCertificate.notAfter)\n : null,\n };\n }\n\n const expiryTime = connection.latestExpiringCertificate?.notAfter;\n if (currentDate == null || expiryTime == null) {\n return activeStatus;\n }\n\n const expiryDate = new Date(expiryTime);\n const daysUntilExpiry = (() => {\n const diff = expiryDate.getTime() - currentDate.getTime();\n if (diff < 0) {\n return -1;\n }\n\n return diff / (1000 * 60 * 60 * 24);\n })();\n\n if (daysUntilExpiry !== -1 && daysUntilExpiry <= 30) {\n return { status: \"Expiring\", daysUntilExpiry, expiryDate };\n }\n\n return activeStatus;\n }\n case \"Inactive\": {\n return { status: \"Inactive\" };\n }\n default:\n return unreachable(connection.state);\n }\n}\n\nfunction getIdentityProvider(type: ConnectionType): IdentityProvider {\n switch (type) {\n case \"ADFSSAML\":\n case \"EntraIdOIDC\":\n case \"MicrosoftOAuth\":\n return \"microsoft\";\n case \"Auth0Migration\":\n case \"Auth0SAML\":\n return \"auth0\";\n case \"AzureSAML\":\n return \"azure\";\n case \"CasSAML\":\n return \"cas\";\n case \"ClassLinkSAML\":\n return \"classlink\";\n case \"CloudflareSAML\":\n return \"cloudflare\";\n case \"CyberArkSAML\":\n return \"cyberark\";\n case \"DuoSAML\":\n return \"duo\";\n case \"GenericSAML\":\n return \"generic-saml\";\n case \"GoogleSAML\":\n case \"GoogleOIDC\":\n case \"GoogleOAuth\":\n return \"google\";\n case \"JumpCloudSAML\":\n return \"jumpcloud\";\n case \"KeycloakSAML\":\n return \"keycloak\";\n case \"LastPassSAML\":\n return \"lastpass\";\n case \"MiniOrangeSAML\":\n return \"miniorange\";\n case \"NetIqSAML\":\n return \"net-iq\";\n case \"OktaOIDC\":\n case \"OktaSAML\":\n return \"okta\";\n case \"OneLoginSAML\":\n return \"onelogin\";\n case \"OracleSAML\":\n return \"oracle\";\n case \"PingFederateSAML\":\n case \"PingOneSAML\":\n return \"ping-identity\";\n case \"RipplingSAML\":\n return \"rippling\";\n case \"SalesforceSAML\":\n case \"SalesforceOAuth\":\n return \"salesforce\";\n case \"ShibbolethGenericSAML\":\n case \"ShibbolethSAML\":\n return \"shibboleth\";\n case \"SimpleSamlPhpSAML\":\n return \"simple-saml-php\";\n case \"TestIdp\":\n return \"test-idp\";\n case \"VMwareSAML\":\n return \"vmware\";\n case \"AdpOidc\":\n return \"adp\";\n case \"GenericOIDC\":\n return \"generic-oidc\";\n case \"LoginGovOidc\":\n return \"login-gov\";\n case \"CleverOIDC\":\n return \"clever\";\n case \"AppleOAuth\":\n return \"apple\";\n case \"BitbucketOAuth\":\n return \"bitbucket\";\n case \"DiscordOAuth\":\n return \"discord\";\n case \"GithubOAuth\":\n return \"github\";\n case \"GitLabOAuth\":\n return \"gitlab\";\n case \"IntuitOAuth\":\n return \"intuit\";\n case \"LinkedInOAuth\":\n return \"linkedin\";\n case \"SlackOAuth\":\n return \"slack\";\n case \"VercelOAuth\":\n case \"VercelMarketplaceOAuth\":\n return \"vercel\";\n case \"XeroOAuth\":\n return \"xero\";\n case \"GrokOAuth\":\n case \"XOAuth\":\n case \"MagicLink\":\n return \"workos\";\n default:\n return unreachable(type);\n }\n}\n\nexport type {\n AdminPortalSsoConnectionProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionErrorProps,\n};\nexport {\n AdminPortalSsoConnection,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnectionError,\n};\n"],"mappings":"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","names":[]}
@@ -13,6 +13,7 @@ import {
13
13
  } from "../../lib/errors.js";
14
14
  import { getSdk } from "./generated.js";
15
15
  import { CLIENT_API_GRAPHQL_PATH } from "./constants.js";
16
+ const GUARD_DENIAL_MESSAGE = "Forbidden resource";
16
17
  function isAuthError(error) {
17
18
  const status = error.response.status;
18
19
  if (status === 401 || status === 403) {
@@ -20,7 +21,7 @@ function isAuthError(error) {
20
21
  }
21
22
  return (error.response.errors ?? []).some((graphQlError) => {
22
23
  const code = graphQlError.extensions?.code;
23
- return code === "UNAUTHENTICATED" || code === "FORBIDDEN";
24
+ return code === "UNAUTHENTICATED" || code === "FORBIDDEN" || graphQlError.message === GUARD_DENIAL_MESSAGE;
24
25
  });
25
26
  }
26
27
  function normalizeErrorStatus(status) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/client-graphql/client.ts"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport { ClientError, GraphQLClient } from \"graphql-request\";\nimport * as React from \"react\";\nimport {\n AuthTokenQueryData,\n authTokenQueryKey,\n useApi,\n WidgetType,\n} from \"../api-provider.js\";\nimport { WIDGETS_API_VERSION } from \"../constants.js\";\nimport { ApiError, FetchError } from \"../errors.js\";\nimport {\n ExpiredTokenError,\n IncorrectPermissionsError,\n} from \"../../lib/errors.js\";\nimport { getSdk, Sdk, SdkFunctionWrapper } from \"./generated.js\";\nimport { CLIENT_API_GRAPHQL_PATH } from \"./constants.js\";\n\ntype QueryType = \"query\" | \"mutation\";\n\n/**\n * A GraphQL request failed because the request was unauthenticated or the token\n * no longer carries the required permissions.\n *\n * The Client API's auth guard fails closed by returning `false`, which NestJS\n * turns into a `ForbiddenException`. Because the GraphQL layer runs with\n * `autoTransformHttpErrors: false`, that surfaces as an HTTP 200 whose\n * `errors[].extensions.code` is `\"FORBIDDEN\"` — not as a 401/403 status. So the\n * `code` check below is load-bearing; the HTTP-status check is only a safety net\n * for transport-level rejections (proxies, gateways) that never reach GraphQL.\n * `\"UNAUTHENTICATED\"` is included defensively in case the backend adds it later.\n */\nfunction isAuthError(error: ClientError): boolean {\n const status = error.response.status;\n if (status === 401 || status === 403) {\n return true;\n }\n\n return (error.response.errors ?? []).some((graphQlError) => {\n const code = graphQlError.extensions?.code;\n return code === \"UNAUTHENTICATED\" || code === \"FORBIDDEN\";\n });\n}\n\n/**\n * The Client API returns GraphQL-level errors (validation, not-found, etc.) as\n * an HTTP 200 with an `errors` array. Surfacing that raw `200` on an `ApiError`\n * is misleading for downstream consumers and telemetry, so normalize any\n * non-error HTTP status to a 500.\n */\nfunction normalizeErrorStatus(status: number): number {\n return status >= 400 ? status : 500;\n}\n\n/**\n * Translate a graphql-request failure into the same error classes the REST\n * Widgets client throws, so presentational components and error boundaries can\n * handle both transports uniformly.\n */\nfunction toWidgetError(\n error: unknown,\n queryType: QueryType,\n isExpiredToken: boolean,\n): Error {\n if (error instanceof ClientError) {\n if (isAuthError(error)) {\n const context = { status: error.response.status, queryType } as const;\n return isExpiredToken\n ? new ExpiredTokenError({ context })\n : new IncorrectPermissionsError({ context });\n }\n\n const firstError = error.response.errors?.[0];\n return new ApiError({\n message: firstError?.message ?? error.message,\n status: normalizeErrorStatus(error.response.status),\n queryType,\n context: { errors: error.response.errors },\n });\n }\n\n return new FetchError({\n message: error instanceof Error ? error.message : \"GraphQL request failed\",\n queryType,\n context: { error },\n });\n}\n\n/**\n * Returns a typed SDK for the WorkOS Client GraphQL API, wired up to the same\n * `ApiProvider` auth plumbing the REST Widgets client uses:\n *\n * - Sends the current bearer token plus the widget-type / version headers.\n * - On an auth failure, re-mints the token via the shared `authToken` query and\n * retries the operation once (mirrors the REST client's 403 retry).\n * - Maps GraphQL/network failures onto the widget error classes.\n *\n * Elevated-access tokens are intentionally not attached here; the Client API\n * takes them as mutation input fields, so call sites read them from\n * `useElevatedAccessToken` and pass them through the relevant inputs.\n */\nexport function useClientGraphql(): Sdk {\n const { authToken, baseUrl, widgetType } = useApi();\n const queryClient = useQueryClient();\n\n return React.useMemo(() => {\n const endpoint = new URL(baseUrl);\n endpoint.pathname = CLIENT_API_GRAPHQL_PATH;\n const client = new GraphQLClient(endpoint.toString());\n\n const buildHeaders = (\n token: string | undefined,\n ): Record<string, string> => {\n const headers: Record<string, string> = {\n \"WorkOS-Widgets-Version\": WIDGETS_API_VERSION,\n \"WorkOS-Widgets-Type\": widgetType,\n };\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n return headers;\n };\n\n const refetchToken = async (\n currentWidgetType: WidgetType,\n ): Promise<string | undefined> => {\n const tokenQueryKey = authTokenQueryKey(currentWidgetType);\n await queryClient.refetchQueries({ queryKey: tokenQueryKey });\n const refreshed =\n queryClient.getQueryData<AuthTokenQueryData>(tokenQueryKey);\n return refreshed?.authToken;\n };\n\n const isTokenExpired = (): boolean => {\n const refreshed = queryClient.getQueryData<AuthTokenQueryData>(\n authTokenQueryKey(widgetType),\n );\n const exp = refreshed?.exp;\n return exp !== undefined && exp * 1000 <= Date.now();\n };\n\n const wrapper: SdkFunctionWrapper = async (\n action,\n _operationName,\n operationType,\n ) => {\n const queryType: QueryType =\n operationType === \"mutation\" ? \"mutation\" : \"query\";\n\n try {\n return await action(buildHeaders(authToken));\n } catch (error) {\n if (error instanceof ClientError && isAuthError(error)) {\n let freshToken: string | undefined;\n try {\n freshToken = await refetchToken(widgetType);\n } catch (refetchError) {\n throw new ExpiredTokenError({\n context: { queryType, refetchError },\n });\n }\n\n if (freshToken && freshToken !== authToken) {\n try {\n return await action(buildHeaders(freshToken));\n } catch (retryError) {\n throw toWidgetError(retryError, queryType, isTokenExpired());\n }\n }\n }\n\n throw toWidgetError(error, queryType, isTokenExpired());\n }\n };\n\n return getSdk(client, wrapper);\n }, [authToken, baseUrl, widgetType, queryClient]);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/api/client-graphql/client.ts"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport { ClientError, GraphQLClient } from \"graphql-request\";\nimport * as React from \"react\";\nimport {\n AuthTokenQueryData,\n authTokenQueryKey,\n useApi,\n WidgetType,\n} from \"../api-provider.js\";\nimport { WIDGETS_API_VERSION } from \"../constants.js\";\nimport { ApiError, FetchError } from \"../errors.js\";\nimport {\n ExpiredTokenError,\n IncorrectPermissionsError,\n} from \"../../lib/errors.js\";\nimport { getSdk, Sdk, SdkFunctionWrapper } from \"./generated.js\";\nimport { CLIENT_API_GRAPHQL_PATH } from \"./constants.js\";\n\ntype QueryType = \"query\" | \"mutation\";\n\n/**\n * Message NestJS attaches to a bare `ForbiddenException`, which is what the\n * Client API's auth guard produces when it rejects a token (expired, revoked,\n * or otherwise invalid). The GraphQL layer reports it as an HTTP 200 whose\n * error carries `extensions.code: \"INTERNAL_SERVER_ERROR\"`, so the message is\n * the only signal that distinguishes it from a genuine server fault.\n */\nconst GUARD_DENIAL_MESSAGE = \"Forbidden resource\";\n\n/**\n * A GraphQL request failed because the request was unauthenticated or the token\n * no longer carries the required permissions.\n *\n * Permission denials surface as an HTTP 200 whose `errors[].extensions.code`\n * is `\"FORBIDDEN\"`; token rejections from the auth guard surface as described\n * on `GUARD_DENIAL_MESSAGE`. The HTTP-status check is only a safety net for\n * transport-level rejections (proxies, gateways) that never reach GraphQL.\n * `\"UNAUTHENTICATED\"` is included for when the backend reports it directly.\n */\nfunction isAuthError(error: ClientError): boolean {\n const status = error.response.status;\n if (status === 401 || status === 403) {\n return true;\n }\n\n return (error.response.errors ?? []).some((graphQlError) => {\n const code = graphQlError.extensions?.code;\n return (\n code === \"UNAUTHENTICATED\" ||\n code === \"FORBIDDEN\" ||\n graphQlError.message === GUARD_DENIAL_MESSAGE\n );\n });\n}\n\n/**\n * The Client API returns GraphQL-level errors (validation, not-found, etc.) as\n * an HTTP 200 with an `errors` array. Surfacing that raw `200` on an `ApiError`\n * is misleading for downstream consumers and telemetry, so normalize any\n * non-error HTTP status to a 500.\n */\nfunction normalizeErrorStatus(status: number): number {\n return status >= 400 ? status : 500;\n}\n\n/**\n * Translate a graphql-request failure into the same error classes the REST\n * Widgets client throws, so presentational components and error boundaries can\n * handle both transports uniformly.\n */\nfunction toWidgetError(\n error: unknown,\n queryType: QueryType,\n isExpiredToken: boolean,\n): Error {\n if (error instanceof ClientError) {\n if (isAuthError(error)) {\n const context = { status: error.response.status, queryType } as const;\n return isExpiredToken\n ? new ExpiredTokenError({ context })\n : new IncorrectPermissionsError({ context });\n }\n\n const firstError = error.response.errors?.[0];\n return new ApiError({\n message: firstError?.message ?? error.message,\n status: normalizeErrorStatus(error.response.status),\n queryType,\n context: { errors: error.response.errors },\n });\n }\n\n return new FetchError({\n message: error instanceof Error ? error.message : \"GraphQL request failed\",\n queryType,\n context: { error },\n });\n}\n\n/**\n * Returns a typed SDK for the WorkOS Client GraphQL API, wired up to the same\n * `ApiProvider` auth plumbing the REST Widgets client uses:\n *\n * - Sends the current bearer token plus the widget-type / version headers.\n * - On an auth failure, re-mints the token via the shared `authToken` query and\n * retries the operation once (mirrors the REST client's 403 retry).\n * - Maps GraphQL/network failures onto the widget error classes.\n *\n * Elevated-access tokens are intentionally not attached here; the Client API\n * takes them as mutation input fields, so call sites read them from\n * `useElevatedAccessToken` and pass them through the relevant inputs.\n */\nexport function useClientGraphql(): Sdk {\n const { authToken, baseUrl, widgetType } = useApi();\n const queryClient = useQueryClient();\n\n return React.useMemo(() => {\n const endpoint = new URL(baseUrl);\n endpoint.pathname = CLIENT_API_GRAPHQL_PATH;\n const client = new GraphQLClient(endpoint.toString());\n\n const buildHeaders = (\n token: string | undefined,\n ): Record<string, string> => {\n const headers: Record<string, string> = {\n \"WorkOS-Widgets-Version\": WIDGETS_API_VERSION,\n \"WorkOS-Widgets-Type\": widgetType,\n };\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n return headers;\n };\n\n const refetchToken = async (\n currentWidgetType: WidgetType,\n ): Promise<string | undefined> => {\n const tokenQueryKey = authTokenQueryKey(currentWidgetType);\n await queryClient.refetchQueries({ queryKey: tokenQueryKey });\n const refreshed =\n queryClient.getQueryData<AuthTokenQueryData>(tokenQueryKey);\n return refreshed?.authToken;\n };\n\n const isTokenExpired = (): boolean => {\n const refreshed = queryClient.getQueryData<AuthTokenQueryData>(\n authTokenQueryKey(widgetType),\n );\n const exp = refreshed?.exp;\n return exp !== undefined && exp * 1000 <= Date.now();\n };\n\n const wrapper: SdkFunctionWrapper = async (\n action,\n _operationName,\n operationType,\n ) => {\n const queryType: QueryType =\n operationType === \"mutation\" ? \"mutation\" : \"query\";\n\n try {\n return await action(buildHeaders(authToken));\n } catch (error) {\n if (error instanceof ClientError && isAuthError(error)) {\n let freshToken: string | undefined;\n try {\n freshToken = await refetchToken(widgetType);\n } catch (refetchError) {\n throw new ExpiredTokenError({\n context: { queryType, refetchError },\n });\n }\n\n if (freshToken && freshToken !== authToken) {\n try {\n return await action(buildHeaders(freshToken));\n } catch (retryError) {\n throw toWidgetError(retryError, queryType, isTokenExpired());\n }\n }\n }\n\n throw toWidgetError(error, queryType, isTokenExpired());\n }\n };\n\n return getSdk(client, wrapper);\n }, [authToken, baseUrl, widgetType, queryClient]);\n}\n"],"mappings":"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","names":[]}