@workos-inc/widgets 1.5.0 → 1.6.0

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 (224) hide show
  1. package/CHANGELOG.md +30 -8
  2. package/dist/cjs/admin-portal-domain-verification.client.cjs +34 -20
  3. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-domain-verification.client.d.cts +3 -2
  5. package/dist/cjs/{admin-portal-sso-connection-client.cjs → admin-portal-sso-connection.client.cjs} +61 -35
  6. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -0
  7. package/dist/cjs/admin-portal-sso-connection.client.d.cts +16 -0
  8. package/dist/cjs/api/api-provider.cjs +27 -19
  9. package/dist/cjs/api/api-provider.cjs.map +1 -1
  10. package/dist/cjs/api/api-provider.d.cts +5 -4
  11. package/dist/cjs/api/endpoint.cjs +62 -2
  12. package/dist/cjs/api/endpoint.cjs.map +1 -1
  13. package/dist/cjs/api/endpoint.d.cts +62 -1
  14. package/dist/cjs/api/utils.cjs +10 -0
  15. package/dist/cjs/api/utils.cjs.map +1 -1
  16. package/dist/cjs/api/utils.d.cts +7 -2
  17. package/dist/cjs/api/widgets-api-client.cjs +11 -5
  18. package/dist/cjs/api/widgets-api-client.cjs.map +1 -1
  19. package/dist/cjs/{api-keys-client.cjs → api-keys.client.cjs} +45 -33
  20. package/dist/cjs/api-keys.client.cjs.map +1 -0
  21. package/dist/cjs/api-keys.client.d.cts +15 -0
  22. package/dist/cjs/index.cjs +9 -2
  23. package/dist/cjs/index.cjs.map +1 -1
  24. package/dist/cjs/index.d.cts +6 -2
  25. package/dist/cjs/lib/add-mfa-dialog.cjs +1 -1
  26. package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
  27. package/dist/cjs/lib/admin-portal-domain-verification.cjs +18 -12
  28. package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
  29. package/dist/cjs/lib/admin-portal-domain-verification.d.cts +10 -6
  30. package/dist/cjs/lib/admin-portal-sso-connection.cjs +84 -106
  31. package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
  32. package/dist/cjs/lib/admin-portal-sso-connection.d.cts +13 -6
  33. package/dist/cjs/lib/api-keys/api-keys.cjs +70 -66
  34. package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
  35. package/dist/cjs/lib/api-keys/api-keys.d.cts +16 -8
  36. package/dist/cjs/lib/card-list.cjs.map +1 -0
  37. package/dist/cjs/lib/constants.cjs +5 -2
  38. package/dist/cjs/lib/constants.cjs.map +1 -1
  39. package/dist/cjs/lib/constants.d.cts +2 -1
  40. package/dist/cjs/lib/elevated-access.cjs.map +1 -1
  41. package/dist/cjs/lib/empty-state.cjs +24 -8
  42. package/dist/cjs/lib/empty-state.cjs.map +1 -1
  43. package/dist/cjs/lib/empty-state.d.cts +6 -2
  44. package/dist/cjs/lib/errors.cjs +1 -1
  45. package/dist/cjs/lib/errors.cjs.map +1 -1
  46. package/dist/cjs/lib/generic-error.cjs +56 -58
  47. package/dist/cjs/lib/generic-error.cjs.map +1 -1
  48. package/dist/cjs/lib/generic-error.d.cts +10 -3
  49. package/dist/cjs/lib/identity-providers.cjs +2 -1
  50. package/dist/cjs/lib/identity-providers.cjs.map +1 -1
  51. package/dist/cjs/lib/identity-providers.d.cts +2 -2
  52. package/dist/cjs/lib/oauth-icons.cjs +12 -7
  53. package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
  54. package/dist/cjs/lib/oauth-icons.d.cts +7 -3
  55. package/dist/cjs/lib/organization-switcher.cjs +62 -9
  56. package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
  57. package/dist/cjs/lib/organization-switcher.d.cts +12 -9
  58. package/dist/cjs/lib/otp-input.cjs +1 -1
  59. package/dist/cjs/lib/otp-input.cjs.map +1 -1
  60. package/dist/cjs/lib/pipes.cjs +343 -0
  61. package/dist/cjs/lib/pipes.cjs.map +1 -0
  62. package/dist/cjs/lib/pipes.d.cts +19 -0
  63. package/dist/cjs/lib/provider-icon.cjs +0 -6
  64. package/dist/cjs/lib/provider-icon.cjs.map +1 -1
  65. package/dist/cjs/lib/provider-icon.d.cts +4 -1
  66. package/dist/cjs/lib/save-button.cjs.map +1 -1
  67. package/dist/cjs/lib/use-permissions.cjs +7 -14
  68. package/dist/cjs/lib/use-permissions.cjs.map +1 -1
  69. package/dist/cjs/lib/use-permissions.d.cts +1 -1
  70. package/dist/cjs/lib/user-profile.cjs +77 -83
  71. package/dist/cjs/lib/user-profile.cjs.map +1 -1
  72. package/dist/cjs/lib/user-profile.d.cts +11 -7
  73. package/dist/cjs/lib/user-security.cjs +31 -25
  74. package/dist/cjs/lib/user-security.cjs.map +1 -1
  75. package/dist/cjs/lib/user-security.d.cts +10 -7
  76. package/dist/cjs/lib/user-sessions.cjs +20 -10
  77. package/dist/cjs/lib/user-sessions.cjs.map +1 -1
  78. package/dist/cjs/lib/user-sessions.d.cts +10 -6
  79. package/dist/cjs/lib/users-management.cjs +224 -216
  80. package/dist/cjs/lib/users-management.cjs.map +1 -1
  81. package/dist/cjs/lib/users-management.d.cts +10 -7
  82. package/dist/cjs/lib/utils.cjs +43 -0
  83. package/dist/cjs/lib/utils.cjs.map +1 -1
  84. package/dist/cjs/lib/utils.d.cts +29 -2
  85. package/dist/cjs/organization-switcher.client.cjs +47 -20
  86. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  87. package/dist/cjs/organization-switcher.client.d.cts +2 -1
  88. package/dist/cjs/pipes.client.cjs +64 -0
  89. package/dist/cjs/pipes.client.cjs.map +1 -0
  90. package/dist/cjs/pipes.client.d.cts +15 -0
  91. package/dist/cjs/user-profile.client.cjs +29 -16
  92. package/dist/cjs/user-profile.client.cjs.map +1 -1
  93. package/dist/cjs/user-profile.client.d.cts +4 -3
  94. package/dist/cjs/user-security.client.cjs +32 -14
  95. package/dist/cjs/user-security.client.cjs.map +1 -1
  96. package/dist/cjs/user-security.client.d.cts +3 -2
  97. package/dist/cjs/user-sessions.client.cjs +42 -28
  98. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  99. package/dist/cjs/user-sessions.client.d.cts +4 -2
  100. package/dist/cjs/users-management.client.cjs +38 -27
  101. package/dist/cjs/users-management.client.cjs.map +1 -1
  102. package/dist/cjs/users-management.client.d.cts +3 -2
  103. package/dist/cjs/workos-widgets.client.cjs +7 -12
  104. package/dist/cjs/workos-widgets.client.cjs.map +1 -1
  105. package/dist/css/lib/provider-icon.css +16 -11
  106. package/dist/esm/admin-portal-domain-verification.client.d.ts +3 -2
  107. package/dist/esm/admin-portal-domain-verification.client.js +34 -21
  108. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  109. package/dist/esm/admin-portal-sso-connection.client.d.ts +16 -0
  110. package/dist/esm/{admin-portal-sso-connection-client.js → admin-portal-sso-connection.client.js} +61 -36
  111. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -0
  112. package/dist/esm/api/api-provider.d.ts +5 -4
  113. package/dist/esm/api/api-provider.js +26 -19
  114. package/dist/esm/api/api-provider.js.map +1 -1
  115. package/dist/esm/api/endpoint.d.ts +62 -1
  116. package/dist/esm/api/endpoint.js +56 -2
  117. package/dist/esm/api/endpoint.js.map +1 -1
  118. package/dist/esm/api/utils.d.ts +7 -2
  119. package/dist/esm/api/utils.js +9 -0
  120. package/dist/esm/api/utils.js.map +1 -1
  121. package/dist/esm/api/widgets-api-client.js +11 -5
  122. package/dist/esm/api/widgets-api-client.js.map +1 -1
  123. package/dist/esm/api-keys.client.d.ts +15 -0
  124. package/dist/esm/api-keys.client.js +75 -0
  125. package/dist/esm/api-keys.client.js.map +1 -0
  126. package/dist/esm/index.d.ts +6 -2
  127. package/dist/esm/index.js +9 -2
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/lib/add-mfa-dialog.js +1 -1
  130. package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
  131. package/dist/esm/lib/admin-portal-domain-verification.d.ts +10 -6
  132. package/dist/esm/lib/admin-portal-domain-verification.js +18 -12
  133. package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
  134. package/dist/esm/lib/admin-portal-sso-connection.d.ts +13 -6
  135. package/dist/esm/lib/admin-portal-sso-connection.js +88 -107
  136. package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
  137. package/dist/esm/lib/api-keys/api-keys.d.ts +16 -8
  138. package/dist/esm/lib/api-keys/api-keys.js +69 -54
  139. package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
  140. package/dist/esm/lib/card-list.js.map +1 -0
  141. package/dist/esm/lib/constants.d.ts +2 -1
  142. package/dist/esm/lib/constants.js +3 -1
  143. package/dist/esm/lib/constants.js.map +1 -1
  144. package/dist/esm/lib/elevated-access.js.map +1 -1
  145. package/dist/esm/lib/empty-state.d.ts +6 -2
  146. package/dist/esm/lib/empty-state.js +24 -8
  147. package/dist/esm/lib/empty-state.js.map +1 -1
  148. package/dist/esm/lib/errors.js +1 -1
  149. package/dist/esm/lib/errors.js.map +1 -1
  150. package/dist/esm/lib/generic-error.d.ts +10 -3
  151. package/dist/esm/lib/generic-error.js +56 -60
  152. package/dist/esm/lib/generic-error.js.map +1 -1
  153. package/dist/esm/lib/identity-providers.d.ts +2 -2
  154. package/dist/esm/lib/identity-providers.js +2 -1
  155. package/dist/esm/lib/identity-providers.js.map +1 -1
  156. package/dist/esm/lib/oauth-icons.d.ts +7 -3
  157. package/dist/esm/lib/oauth-icons.js +11 -6
  158. package/dist/esm/lib/oauth-icons.js.map +1 -1
  159. package/dist/esm/lib/organization-switcher.d.ts +12 -9
  160. package/dist/esm/lib/organization-switcher.js +54 -9
  161. package/dist/esm/lib/organization-switcher.js.map +1 -1
  162. package/dist/esm/lib/otp-input.js +1 -1
  163. package/dist/esm/lib/otp-input.js.map +1 -1
  164. package/dist/esm/lib/pipes.d.ts +19 -0
  165. package/dist/esm/lib/pipes.js +334 -0
  166. package/dist/esm/lib/pipes.js.map +1 -0
  167. package/dist/esm/lib/provider-icon.d.ts +4 -1
  168. package/dist/esm/lib/provider-icon.js +0 -8
  169. package/dist/esm/lib/provider-icon.js.map +1 -1
  170. package/dist/esm/lib/save-button.js.map +1 -1
  171. package/dist/esm/lib/use-permissions.d.ts +1 -1
  172. package/dist/esm/lib/use-permissions.js +8 -15
  173. package/dist/esm/lib/use-permissions.js.map +1 -1
  174. package/dist/esm/lib/user-profile.d.ts +11 -7
  175. package/dist/esm/lib/user-profile.js +82 -75
  176. package/dist/esm/lib/user-profile.js.map +1 -1
  177. package/dist/esm/lib/user-security.d.ts +10 -7
  178. package/dist/esm/lib/user-security.js +35 -26
  179. package/dist/esm/lib/user-security.js.map +1 -1
  180. package/dist/esm/lib/user-sessions.d.ts +10 -6
  181. package/dist/esm/lib/user-sessions.js +21 -10
  182. package/dist/esm/lib/user-sessions.js.map +1 -1
  183. package/dist/esm/lib/users-management.d.ts +10 -7
  184. package/dist/esm/lib/users-management.js +230 -217
  185. package/dist/esm/lib/users-management.js.map +1 -1
  186. package/dist/esm/lib/utils.d.ts +29 -2
  187. package/dist/esm/lib/utils.js +46 -1
  188. package/dist/esm/lib/utils.js.map +1 -1
  189. package/dist/esm/organization-switcher.client.d.ts +2 -1
  190. package/dist/esm/organization-switcher.client.js +47 -21
  191. package/dist/esm/organization-switcher.client.js.map +1 -1
  192. package/dist/esm/pipes.client.d.ts +15 -0
  193. package/dist/esm/pipes.client.js +42 -0
  194. package/dist/esm/pipes.client.js.map +1 -0
  195. package/dist/esm/user-profile.client.d.ts +4 -3
  196. package/dist/esm/user-profile.client.js +29 -17
  197. package/dist/esm/user-profile.client.js.map +1 -1
  198. package/dist/esm/user-security.client.d.ts +3 -2
  199. package/dist/esm/user-security.client.js +32 -15
  200. package/dist/esm/user-security.client.js.map +1 -1
  201. package/dist/esm/user-sessions.client.d.ts +4 -2
  202. package/dist/esm/user-sessions.client.js +43 -30
  203. package/dist/esm/user-sessions.client.js.map +1 -1
  204. package/dist/esm/users-management.client.d.ts +3 -2
  205. package/dist/esm/users-management.client.js +38 -28
  206. package/dist/esm/users-management.client.js.map +1 -1
  207. package/dist/esm/workos-widgets.client.js +7 -12
  208. package/dist/esm/workos-widgets.client.js.map +1 -1
  209. package/package.json +20 -10
  210. package/dist/cjs/admin-portal-sso-connection-client.cjs.map +0 -1
  211. package/dist/cjs/admin-portal-sso-connection-client.d.cts +0 -12
  212. package/dist/cjs/api-keys-client.cjs.map +0 -1
  213. package/dist/cjs/api-keys-client.d.cts +0 -10
  214. package/dist/cjs/card-list.cjs.map +0 -1
  215. package/dist/esm/admin-portal-sso-connection-client.d.ts +0 -12
  216. package/dist/esm/admin-portal-sso-connection-client.js.map +0 -1
  217. package/dist/esm/api-keys-client.d.ts +0 -10
  218. package/dist/esm/api-keys-client.js +0 -65
  219. package/dist/esm/api-keys-client.js.map +0 -1
  220. package/dist/esm/card-list.js.map +0 -1
  221. /package/dist/cjs/{card-list.cjs → lib/card-list.cjs} +0 -0
  222. /package/dist/cjs/{card-list.d.cts → lib/card-list.d.cts} +0 -0
  223. /package/dist/esm/{card-list.d.ts → lib/card-list.d.ts} +0 -0
  224. /package/dist/esm/{card-list.js → lib/card-list.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,9 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.0
4
+
5
+ - Add new `Pipes` Widget. See the [Pipes documentation](https://workos.com/docs/authkit/pipes) for more information.
6
+ - Unify DOM attributes for all Widgets' root elements for easier styling and debugging.
7
+ - `.woswidgets-widget`: Applies to the root element of any Widget
8
+ - `[data-woswidgets-widget-id="<WIDGET_ID>"]`: The ID of the Widget. The Widget ID is the kebab-cased version of the Widget's component name (e.g. `AdminPortalDomainVerification` > `admin-portal-domain-verification`)
9
+ - `[data-woswidgets-widget-state="<'resolved' | 'loading' | 'error'>"]`: The current state of the Widget's data loading
10
+ - Fix caching bug with Widgets that share access tokens
11
+ - Expose `ApiKeys` and `AdminPortalSsoConnection` Widgets as subpath exports
12
+ - Remove unnecessary CSS style overrides for the `AdminPortalSsoConnection` Widget
13
+
14
+ ## 1.5.1
15
+
16
+ - Throw an `IncorrectPermissionsError` when a fetch returns a 403, consolidate error messages
17
+ - Add `data-woswidgets-widget-id` to `AdminPortalDomainVerification` empty state
18
+ - Resolve access token during requests to fix caching issues
19
+
20
+ ## 1.5.0
21
+
22
+ - Release `ApiKeys` Widget
23
+ - Add missing identity provider icons
24
+
3
25
  ## 1.4.0
4
26
 
5
- - Add support for publishing multiple roles in the User Management widget
6
- - Export prop types and loading components for all widgets
27
+ - Add support for publishing multiple roles in the `UsersManagement` Widget
28
+ - Export prop types and loading components for all Widgets
7
29
 
8
30
  ## 1.3.1
9
31
 
@@ -11,10 +33,10 @@
11
33
 
12
34
  ## 1.3.0
13
35
 
14
- - Create new domain verification widget
36
+ - Create new `AdminPortalDomainVerification` Widget
15
37
  - Handle user location showing as undefined
16
- - Add SSO Widget
17
- - Handle incorrect widget permissions
38
+ - Add `AdminPortalSsoConnection` Widget
39
+ - Handle incorrect Widget permissions
18
40
 
19
41
  ## 1.2.1
20
42
 
@@ -22,7 +44,7 @@
22
44
 
23
45
  ## 1.2.0
24
46
 
25
- - Added `truncateBehavior` prop to the `OrganizationSwitcher` widget to control how long organization names get truncated when there is limited space
47
+ - Added `truncateBehavior` prop to the `OrganizationSwitcher` Widget to control how long organization names get truncated when there is limited space
26
48
  - Added `queryClient` prop to the root `WorkOsWidgets` component to allow users to provide their own Query Client
27
49
 
28
50
  ## 1.1.5
@@ -31,10 +53,10 @@ Internal changes to the publishing workflow. No user-facing changes included in
31
53
 
32
54
  ## 1.1.4
33
55
 
34
- - Add widget type header to API requests
56
+ - Add Widget type header to API requests
35
57
  - Pin third-party actions to currently used SHA
36
58
 
37
59
  ## 1.1.2
38
60
 
39
61
  - Fix broken imports
40
- - Fix skeleton layout in User Profile Widget
62
+ - Fix skeleton layout in `UserProfile` Widget
@@ -20,31 +20,37 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  var admin_portal_domain_verification_client_exports = {};
21
21
  __export(admin_portal_domain_verification_client_exports, {
22
22
  AdminPortalDomainVerification: () => AdminPortalDomainVerification,
23
+ AdminPortalDomainVerificationError: () => import_admin_portal_domain_verification.AdminPortalDomainVerificationError,
23
24
  AdminPortalDomainVerificationLoading: () => import_admin_portal_domain_verification.AdminPortalDomainVerificationLoading
24
25
  });
25
26
  module.exports = __toCommonJS(admin_portal_domain_verification_client_exports);
26
27
  var import_jsx_runtime = require("react/jsx-runtime");
27
28
  var import_admin_portal_domain_verification = require("./lib/admin-portal-domain-verification.js");
28
- var import_use_is_hydrated = require("./lib/use-is-hydrated.js");
29
29
  var import_api_provider = require("./api/api-provider.js");
30
30
  var import_endpoint = require("./api/endpoint.js");
31
31
  var import_widgets_context = require("./lib/widgets-context.js");
32
32
  var import_error_boundary = require("./lib/error-boundary.js");
33
33
  var import_react_query = require("@tanstack/react-query");
34
- const AdminPortalDomainVerification = ({ authToken }) => {
34
+ const AdminPortalDomainVerification = ({ authToken, ...domProps }) => {
35
35
  const baseUrl = (0, import_widgets_context.useWorkOsApiUrl)();
36
36
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
37
- import_api_provider.ApiProvider,
37
+ import_error_boundary.ErrorBoundary,
38
38
  {
39
- widgetType: "admin-portal-domain-verification",
40
- authToken,
41
- baseUrl,
42
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdminPortalDomainVerificationContent, {})
39
+ fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationError, { error, ...domProps }),
40
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
41
+ import_api_provider.ApiProvider,
42
+ {
43
+ widgetType: "admin-portal-domain-verification",
44
+ authToken,
45
+ baseUrl,
46
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdminPortalDomainVerificationImpl, { ...domProps })
47
+ }
48
+ )
43
49
  }
44
50
  );
45
51
  };
46
- const AdminPortalDomainVerificationContent = () => {
47
- const isHydrated = (0, import_use_is_hydrated.useIsHydrated)();
52
+ const AdminPortalDomainVerificationImpl = (props) => {
53
+ const isApiReady = (0, import_api_provider.useApiReady)();
48
54
  const queryClient = (0, import_react_query.useQueryClient)();
49
55
  const {
50
56
  data: organizationDomains,
@@ -89,27 +95,35 @@ const AdminPortalDomainVerificationContent = () => {
89
95
  const handleReverifyDomain = (domainId) => {
90
96
  reverifyDomain({ domainId });
91
97
  };
92
- if (!isHydrated || isLoading) {
93
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationLoading, {});
98
+ if (!isApiReady || isLoading) {
99
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationLoading, { ...props });
94
100
  }
95
101
  if (error) {
96
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationError, { error });
102
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationError, { error, ...props });
97
103
  }
98
104
  const domains = organizationDomains?.data || [];
99
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_error_boundary.ErrorBoundary, { FallbackComponent: import_admin_portal_domain_verification.AdminPortalDomainVerificationError, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
100
- import_admin_portal_domain_verification.AdminPortalDomainVerification,
105
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
106
+ import_error_boundary.ErrorBoundary,
101
107
  {
102
- organizationDomains: domains,
103
- onAddDomain: handleAddDomain,
104
- onDeleteDomain: handleDeleteDomain,
105
- onReverifyDomain: handleReverifyDomain,
106
- isPending
108
+ fallbackRender: ({ error: error2 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_domain_verification.AdminPortalDomainVerificationError, { error: error2, ...props }),
109
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
110
+ import_admin_portal_domain_verification.AdminPortalDomainVerification,
111
+ {
112
+ organizationDomains: domains,
113
+ onAddDomain: handleAddDomain,
114
+ onDeleteDomain: handleDeleteDomain,
115
+ onReverifyDomain: handleReverifyDomain,
116
+ isPending,
117
+ ...props
118
+ }
119
+ )
107
120
  }
108
- ) });
121
+ );
109
122
  };
110
123
  // Annotate the CommonJS export names for ESM import in node:
111
124
  0 && (module.exports = {
112
125
  AdminPortalDomainVerification,
126
+ AdminPortalDomainVerificationError,
113
127
  AdminPortalDomainVerificationLoading
114
128
  });
115
129
  //# sourceMappingURL=admin-portal-domain-verification.client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport { useIsHydrated } from \"./lib/use-is-hydrated.js\";\nimport { ApiProvider, AuthToken } from \"./api/api-provider.js\";\nimport {\n useGenerateAdminPortalLink,\n useListOrganizationDomains,\n getListOrganizationDomainsQueryKey,\n useDeleteOrganizationDomain,\n useReverifyOrganizationDomain,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\n\nexport interface AdminPortalDomainVerificationProps {\n authToken: AuthToken;\n}\n\nexport const AdminPortalDomainVerification: React.FC<\n AdminPortalDomainVerificationProps\n> = ({ authToken }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ApiProvider\n widgetType=\"admin-portal-domain-verification\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalDomainVerificationContent />\n </ApiProvider>\n );\n};\n\nexport { AdminPortalDomainVerificationLoading };\n\nconst AdminPortalDomainVerificationContent = () => {\n const isHydrated = useIsHydrated();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useListOrganizationDomains();\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const { mutate: deleteDomain } = useDeleteOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const { mutate: reverifyDomain } = useReverifyOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink({\n params: {\n intent: \"domain_verification\",\n },\n });\n };\n\n const handleDeleteDomain = (domainId: string) => {\n deleteDomain({ domainId });\n };\n\n const handleReverifyDomain = (domainId: string) => {\n reverifyDomain({ domainId });\n };\n\n if (!isHydrated || isLoading) {\n return <AdminPortalDomainVerificationLoading />;\n }\n\n if (error) {\n return <AdminPortalDomainVerificationError error={error} />;\n }\n\n const domains = organizationDomains?.data || [];\n\n return (\n <ErrorBoundary FallbackComponent={AdminPortalDomainVerificationError}>\n <AdminPortalDomainVerificationPresentational\n organizationDomains={domains}\n onAddDomain={handleAddDomain}\n onDeleteDomain={handleDeleteDomain}\n onReverifyDomain={handleReverifyDomain}\n isPending={isPending}\n />\n </ErrorBoundary>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCM;AAjCN,8CAIO;AACP,6BAA8B;AAC9B,0BAAuC;AACvC,sBAMO;AACP,6BAAgC;AAChC,4BAA8B;AAC9B,yBAA+B;AAMxB,MAAM,gCAET,CAAC,EAAE,UAAU,MAAM;AACrB,QAAM,cAAU,wCAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX;AAAA,MACA;AAAA,MAEA,sDAAC,wCAAqC;AAAA;AAAA,EACxC;AAEJ;AAIA,MAAM,uCAAuC,MAAM;AACjD,QAAM,iBAAa,sCAAc;AACjC,QAAM,kBAAc,mCAAe;AACnC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,QAAI,4CAA2B;AAE/B,QAAM,EAAE,QAAQ,yBAAyB,UAAU,QACjD,4CAA2B;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,CAAC,SAAS;AACnB,eAAO,KAAK,KAAK,MAAM,UAAU,qBAAqB;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,EAAE,QAAQ,aAAa,QAAI,6CAA4B;AAAA,IAC3D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,oDAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,eAAe,QAAI,+CAA8B;AAAA,IAC/D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,oDAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,4BAAwB;AAAA,MACtB,QAAQ;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,iBAAa,EAAE,SAAS,CAAC;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,aAAqB;AACjD,mBAAe,EAAE,SAAS,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc,WAAW;AAC5B,WAAO,4CAAC,gFAAqC;AAAA,EAC/C;AAEA,MAAI,OAAO;AACT,WAAO,4CAAC,8EAAmC,OAAc;AAAA,EAC3D;AAEA,QAAM,UAAU,qBAAqB,QAAQ,CAAC;AAE9C,SACE,4CAAC,uCAAc,mBAAmB,4EAChC;AAAA,IAAC,wCAAAA;AAAA,IAAA;AAAA,MACC,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB;AAAA;AAAA,EACF,GACF;AAEJ;","names":["AdminPortalDomainVerificationPresentational"]}
1
+ {"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport type {\n AdminPortalDomainVerificationErrorProps,\n AdminPortalDomainVerificationLoadingProps,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n useGenerateAdminPortalLink,\n useListOrganizationDomains,\n getListOrganizationDomainsQueryKey,\n useDeleteOrganizationDomain,\n useReverifyOrganizationDomain,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface AdminPortalDomainVerificationProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalDomainVerification: React.FC<\n AdminPortalDomainVerificationProps\n> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-domain-verification\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalDomainVerificationImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalDomainVerificationImpl = (\n props: Omit<AdminPortalDomainVerificationProps, \"authToken\">,\n) => {\n const isApiReady = useApiReady();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useListOrganizationDomains();\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const { mutate: deleteDomain } = useDeleteOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const { mutate: reverifyDomain } = useReverifyOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink({\n params: {\n intent: \"domain_verification\",\n },\n });\n };\n\n const handleDeleteDomain = (domainId: string) => {\n deleteDomain({ domainId });\n };\n\n const handleReverifyDomain = (domainId: string) => {\n reverifyDomain({ domainId });\n };\n\n if (!isApiReady || isLoading) {\n return <AdminPortalDomainVerificationLoading {...props} />;\n }\n\n if (error) {\n return <AdminPortalDomainVerificationError error={error} {...props} />;\n }\n\n const domains = organizationDomains?.data || [];\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...props} />\n )}\n >\n <AdminPortalDomainVerificationPresentational\n organizationDomains={domains}\n onAddDomain={handleAddDomain}\n onDeleteDomain={handleDeleteDomain}\n onReverifyDomain={handleReverifyDomain}\n isPending={isPending}\n {...props}\n />\n </ErrorBoundary>\n );\n};\n\nexport type {\n AdminPortalDomainVerificationProps,\n AdminPortalDomainVerificationLoadingProps,\n AdminPortalDomainVerificationErrorProps,\n};\nexport {\n AdminPortalDomainVerification,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerificationError,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCQ;AAlCR,8CAIO;AAKP,0BAAoD;AACpD,sBAMO;AACP,6BAAgC;AAChC,4BAA8B;AAC9B,yBAA+B;AAO/B,MAAM,gCAEF,CAAC,EAAE,WAAW,GAAG,SAAS,MAAM;AAClC,QAAM,cAAU,wCAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,4CAAC,8EAAmC,OAAe,GAAG,UAAU;AAAA,MAGlE;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA,sDAAC,qCAAmC,GAAG,UAAU;AAAA;AAAA,MACnD;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,oCAAoC,CACxC,UACG;AACH,QAAM,iBAAa,iCAAY;AAC/B,QAAM,kBAAc,mCAAe;AACnC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,QAAI,4CAA2B;AAE/B,QAAM,EAAE,QAAQ,yBAAyB,UAAU,QACjD,4CAA2B;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,CAAC,SAAS;AACnB,eAAO,KAAK,KAAK,MAAM,UAAU,qBAAqB;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,EAAE,QAAQ,aAAa,QAAI,6CAA4B;AAAA,IAC3D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,oDAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,eAAe,QAAI,+CAA8B;AAAA,IAC/D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,cAAU,oDAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,4BAAwB;AAAA,MACtB,QAAQ;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,iBAAa,EAAE,SAAS,CAAC;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,aAAqB;AACjD,mBAAe,EAAE,SAAS,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc,WAAW;AAC5B,WAAO,4CAAC,gFAAsC,GAAG,OAAO;AAAA,EAC1D;AAEA,MAAI,OAAO;AACT,WAAO,4CAAC,8EAAmC,OAAe,GAAG,OAAO;AAAA,EACtE;AAEA,QAAM,UAAU,qBAAqB,QAAQ,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,OAAAA,OAAM,MACvB,4CAAC,8EAAmC,OAAOA,QAAQ,GAAG,OAAO;AAAA,MAG/D;AAAA,QAAC,wCAAAC;AAAA,QAAA;AAAA,UACC,qBAAqB;AAAA,UACrB,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,UAClB;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;","names":["error","AdminPortalDomainVerificationPresentational"]}
@@ -1,12 +1,13 @@
1
1
  import * as React from 'react';
2
- export { AdminPortalDomainVerificationLoading } from './lib/admin-portal-domain-verification.cjs';
2
+ export { AdminPortalDomainVerificationError, AdminPortalDomainVerificationErrorProps, AdminPortalDomainVerificationLoading, AdminPortalDomainVerificationLoadingProps } from './lib/admin-portal-domain-verification.cjs';
3
3
  import { AuthToken } from './api/api-provider.cjs';
4
+ import { WidgetRootDomProps } from './lib/utils.cjs';
4
5
  import 'react/jsx-runtime';
5
6
  import './api/endpoint.cjs';
6
7
  import '@tanstack/react-query';
7
8
  import './api/widgets-api-client.cjs';
8
9
 
9
- interface AdminPortalDomainVerificationProps {
10
+ interface AdminPortalDomainVerificationProps extends WidgetRootDomProps {
10
11
  authToken: AuthToken;
11
12
  }
12
13
  declare const AdminPortalDomainVerification: React.FC<AdminPortalDomainVerificationProps>;
@@ -30,36 +30,45 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  var admin_portal_sso_connection_client_exports = {};
31
31
  __export(admin_portal_sso_connection_client_exports, {
32
32
  AdminPortalSsoConnection: () => AdminPortalSsoConnection,
33
+ AdminPortalSsoConnectionError: () => import_admin_portal_sso_connection.AdminPortalSsoConnectionError,
33
34
  AdminPortalSsoConnectionLoading: () => import_admin_portal_sso_connection.AdminPortalSsoConnectionLoading
34
35
  });
35
36
  module.exports = __toCommonJS(admin_portal_sso_connection_client_exports);
36
37
  var import_jsx_runtime = require("react/jsx-runtime");
37
38
  var React = __toESM(require("react"), 1);
38
39
  var import_admin_portal_sso_connection = require("./lib/admin-portal-sso-connection.js");
39
- var import_use_is_hydrated = require("./lib/use-is-hydrated.js");
40
40
  var import_api_provider = require("./api/api-provider.js");
41
41
  var import_endpoint = require("./api/endpoint.js");
42
42
  var import_widgets_context = require("./lib/widgets-context.js");
43
43
  var import_error_boundary = require("./lib/error-boundary.js");
44
44
  var import_utils = require("./lib/utils.js");
45
- const AdminPortalSsoConnection = ({ authToken }) => {
45
+ const AdminPortalSsoConnection = ({
46
+ authToken,
47
+ ...domProps
48
+ }) => {
46
49
  const baseUrl = (0, import_widgets_context.useWorkOsApiUrl)();
47
50
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
48
- import_api_provider.ApiProvider,
51
+ import_error_boundary.ErrorBoundary,
49
52
  {
50
- widgetType: "admin-portal-sso-connection",
51
- authToken,
52
- baseUrl,
53
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SingleSignOnContent, {})
53
+ fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionError, { error, ...domProps }),
54
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
55
+ import_api_provider.ApiProvider,
56
+ {
57
+ widgetType: "admin-portal-sso-connection",
58
+ authToken,
59
+ baseUrl,
60
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdminPortalSsoConnectionImpl, { ...domProps })
61
+ }
62
+ )
54
63
  }
55
64
  );
56
65
  };
57
- const SingleSignOnContent = () => {
58
- const isHydrated = (0, import_use_is_hydrated.useIsHydrated)();
66
+ const AdminPortalSsoConnectionImpl = (props) => {
67
+ const isApiReady = (0, import_api_provider.useApiReady)();
59
68
  const [currentDate, setCurrentDate] = React.useState(
60
- () => isHydrated ? /* @__PURE__ */ new Date() : null
69
+ () => isApiReady ? /* @__PURE__ */ new Date() : null
61
70
  );
62
- if (isHydrated && currentDate === null) {
71
+ if (isApiReady && currentDate === null) {
63
72
  setCurrentDate(/* @__PURE__ */ new Date());
64
73
  }
65
74
  const { mutate: generateAdminPortalLink, ...mutation } = (0, import_endpoint.useGenerateAdminPortalLink)({
@@ -79,33 +88,40 @@ const SingleSignOnContent = () => {
79
88
  });
80
89
  };
81
90
  if (query.isLoading) {
82
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionLoading, {});
91
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionLoading, { ...props });
83
92
  }
84
93
  if (query.isError) {
85
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionError, { error: query.error });
94
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionError, { error: query.error, ...props });
86
95
  }
87
96
  if (query.data) {
88
97
  const connection = query.data[0];
89
98
  if (!connection) {
90
99
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
91
- import_admin_portal_sso_connection.AdminPortalSsoConnection,
100
+ import_error_boundary.ErrorBoundary,
92
101
  {
93
- connectionStatus: "NotConfigured",
94
- currentDate,
95
- lastSession: null,
96
- adminPortalOpenButton: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
97
- import_admin_portal_sso_connection.AdminPortalOpenButton,
102
+ fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionError, { error, ...props }),
103
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
104
+ import_admin_portal_sso_connection.AdminPortalSsoConnection,
98
105
  {
99
- isPending: mutation.isPending,
100
- href: adminPortalLink,
101
- initConfig
106
+ ...props,
107
+ connectionStatus: "NotConfigured",
108
+ currentDate,
109
+ lastSession: null,
110
+ adminPortalOpenButton: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
111
+ import_admin_portal_sso_connection.AdminPortalOpenButton,
112
+ {
113
+ isPending: mutation.isPending,
114
+ href: adminPortalLink,
115
+ initConfig
116
+ }
117
+ )
102
118
  }
103
119
  )
104
120
  }
105
121
  );
106
122
  }
107
123
  const connectionState = getConnectionState(connection, currentDate);
108
- const props = (() => {
124
+ const statusProps = (() => {
109
125
  const connectionStatus = connectionState.status;
110
126
  if (!connection || connectionStatus === "NotConfigured") {
111
127
  return {
@@ -136,22 +152,29 @@ const SingleSignOnContent = () => {
136
152
  }
137
153
  })();
138
154
  const lastSession = connection.lastSession ? new Date(connection.lastSession.createdAt) : null;
139
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_error_boundary.ErrorBoundary, { FallbackComponent: import_admin_portal_sso_connection.AdminPortalSsoConnectionError, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
140
- import_admin_portal_sso_connection.AdminPortalSsoConnection,
155
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
156
+ import_error_boundary.ErrorBoundary,
141
157
  {
142
- ...props,
143
- currentDate,
144
- lastSession,
145
- adminPortalOpenButton: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
146
- import_admin_portal_sso_connection.AdminPortalOpenButton,
158
+ fallbackRender: ({ error }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_admin_portal_sso_connection.AdminPortalSsoConnectionError, { error, ...props }),
159
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
160
+ import_admin_portal_sso_connection.AdminPortalSsoConnection,
147
161
  {
148
- isPending: mutation.isPending,
149
- href: adminPortalLink,
150
- initConfig
162
+ ...props,
163
+ ...statusProps,
164
+ currentDate,
165
+ lastSession,
166
+ adminPortalOpenButton: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
167
+ import_admin_portal_sso_connection.AdminPortalOpenButton,
168
+ {
169
+ isPending: mutation.isPending,
170
+ href: adminPortalLink,
171
+ initConfig
172
+ }
173
+ )
151
174
  }
152
175
  )
153
176
  }
154
- ) });
177
+ );
155
178
  }
156
179
  };
157
180
  function getConnectionState(connection, currentDate) {
@@ -257,6 +280,8 @@ function getIdentityProvider(connection) {
257
280
  return "generic-oidc";
258
281
  case "LoginGovOidc":
259
282
  return "login-gov";
283
+ case "CleverOidc":
284
+ return "clever";
260
285
  default:
261
286
  return (0, import_utils.unreachable)(connection);
262
287
  }
@@ -264,6 +289,7 @@ function getIdentityProvider(connection) {
264
289
  // Annotate the CommonJS export names for ESM import in node:
265
290
  0 && (module.exports = {
266
291
  AdminPortalSsoConnection,
292
+ AdminPortalSsoConnectionError,
267
293
  AdminPortalSsoConnectionLoading
268
294
  });
269
- //# sourceMappingURL=admin-portal-sso-connection-client.cjs.map
295
+ //# sourceMappingURL=admin-portal-sso-connection.client.cjs.map
@@ -0,0 +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 useGenerateAdminPortalLink,\n useListSsoConnections,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { unreachable, WidgetRootDomProps } 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, ...mutation } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const adminPortalLink = mutation.data?.link ?? null;\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={mutation.isPending}\n href={adminPortalLink}\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={mutation.isPending}\n href={adminPortalLink}\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);\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":["AdminPortalSsoConnectionPresentational"]}
@@ -0,0 +1,16 @@
1
+ import * as React from 'react';
2
+ export { AdminPortalSsoConnectionError, AdminPortalSsoConnectionErrorProps, AdminPortalSsoConnectionLoading, AdminPortalSsoConnectionLoadingProps } from './lib/admin-portal-sso-connection.cjs';
3
+ import { AuthToken } from './api/api-provider.cjs';
4
+ import { WidgetRootDomProps } from './lib/utils.cjs';
5
+ import 'react/jsx-runtime';
6
+ import './lib/identity-providers.cjs';
7
+ import './api/endpoint.cjs';
8
+ import '@tanstack/react-query';
9
+ import './api/widgets-api-client.cjs';
10
+
11
+ interface AdminPortalSsoConnectionProps extends WidgetRootDomProps {
12
+ authToken: AuthToken;
13
+ }
14
+ declare const AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps>;
15
+
16
+ export { AdminPortalSsoConnection, type AdminPortalSsoConnectionProps };
@@ -30,11 +30,15 @@ var api_provider_exports = {};
30
30
  __export(api_provider_exports, {
31
31
  ApiProvider: () => ApiProvider,
32
32
  useApi: () => useApi,
33
+ useApiReady: () => useApiReady,
33
34
  useElevatedAccessToken: () => useElevatedAccessToken
34
35
  });
35
36
  module.exports = __toCommonJS(api_provider_exports);
36
37
  var import_jsx_runtime = require("react/jsx-runtime");
38
+ var import_react_query = require("@tanstack/react-query");
37
39
  var React = __toESM(require("react"), 1);
40
+ var import_use_is_hydrated = require("../lib/use-is-hydrated.js");
41
+ var import_utils = require("./utils.js");
38
42
  const ApiContext = React.createContext(void 0);
39
43
  const ApiProvider = ({
40
44
  authToken,
@@ -42,7 +46,20 @@ const ApiProvider = ({
42
46
  children,
43
47
  widgetType
44
48
  }) => {
45
- const authTokenPromiseOrString = typeof authToken === "string" ? authToken : authToken();
49
+ const authTokenQuery = (0, import_react_query.useQuery)({
50
+ initialData: typeof authToken === "string" ? {
51
+ authToken,
52
+ permissions: (0, import_utils.getClaims)(authToken).permissions
53
+ } : void 0,
54
+ queryFn: async () => {
55
+ const resolvedToken = typeof authToken === "string" ? authToken : await authToken();
56
+ return {
57
+ authToken: resolvedToken,
58
+ permissions: (0, import_utils.getClaims)(resolvedToken).permissions
59
+ };
60
+ },
61
+ queryKey: ["authToken", widgetType]
62
+ });
46
63
  const [elevatedAccess, setElevatedAccess] = React.useState();
47
64
  const elevatedAccessTimeout = React.useRef(void 0);
48
65
  React.useEffect(() => {
@@ -66,15 +83,15 @@ const ApiProvider = ({
66
83
  }, [elevatedAccess]);
67
84
  const value = React.useMemo(
68
85
  () => ({
69
- authToken: authTokenPromiseOrString,
70
- authTokenQueryKey: getAuthTokenQueryKey(authTokenPromiseOrString),
86
+ authToken: authTokenQuery.data?.authToken,
87
+ permissions: authTokenQuery.data?.permissions,
71
88
  baseUrl,
72
89
  elevatedAccess,
73
90
  setElevatedAccess,
74
91
  widgetType
75
92
  }),
76
93
  [
77
- authTokenPromiseOrString,
94
+ authTokenQuery.data,
78
95
  baseUrl,
79
96
  elevatedAccess,
80
97
  setElevatedAccess,
@@ -94,25 +111,16 @@ const useElevatedAccessToken = () => {
94
111
  const { elevatedAccess, setElevatedAccess } = useApi();
95
112
  return { elevatedAccess, setElevatedAccess };
96
113
  };
97
- const PromiseKey = /* @__PURE__ */ new WeakMap();
98
- function getAuthTokenQueryKey(authTokenPromiseOrString) {
99
- if (typeof authTokenPromiseOrString === "string") {
100
- return authTokenPromiseOrString;
101
- }
102
- const authTokenPromise = authTokenPromiseOrString;
103
- const promiseKey = PromiseKey.get(authTokenPromise);
104
- if (!promiseKey) {
105
- const newPromiseKey = `${Math.random()}`;
106
- PromiseKey.set(authTokenPromise, newPromiseKey);
107
- return newPromiseKey;
108
- } else {
109
- return promiseKey;
110
- }
111
- }
114
+ const useApiReady = () => {
115
+ const { authToken } = useApi();
116
+ const isHydrated = (0, import_use_is_hydrated.useIsHydrated)();
117
+ return isHydrated && authToken !== void 0;
118
+ };
112
119
  // Annotate the CommonJS export names for ESM import in node:
113
120
  0 && (module.exports = {
114
121
  ApiProvider,
115
122
  useApi,
123
+ useApiReady,
116
124
  useElevatedAccessToken
117
125
  });
118
126
  //# sourceMappingURL=api-provider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken: Promise<string> | string;\n authTokenQueryKey: string;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\nconst ApiContext = React.createContext<ApiConfig | undefined>(undefined);\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nexport const ApiProvider = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}: ApiProviderProps) => {\n const authTokenPromiseOrString =\n typeof authToken === \"string\" ? authToken : authToken();\n const [elevatedAccess, setElevatedAccess] = React.useState<ElevatedAccess>();\n const elevatedAccessTimeout = React.useRef<number | undefined>(undefined);\n\n // This effect manages the expiration of elevated access tokens\n // When an elevated access token is present, it checks every 30 seconds if the token has expired\n // If the token has expired (current time > expiration time), it clears the elevated access\n React.useEffect(() => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n\n if (elevatedAccess) {\n elevatedAccessTimeout.current = window.setInterval(() => {\n const now = new Date();\n const expiresAtDate = new Date(elevatedAccess.expiresAt);\n\n // Reset the elevated access if it has expired\n if (now > expiresAtDate) {\n setElevatedAccess(undefined);\n }\n }, 30_000); // every 30 seconds\n }\n\n return () => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n };\n }, [elevatedAccess]);\n\n const value = React.useMemo(\n () => ({\n authToken: authTokenPromiseOrString,\n authTokenQueryKey: getAuthTokenQueryKey(authTokenPromiseOrString),\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n }),\n [\n authTokenPromiseOrString,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n ],\n );\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n};\n\nexport const useApi = () => {\n const context = React.useContext(ApiContext);\n\n if (context === undefined) {\n throw new Error(\"useApi must be used within an ApiProvider\");\n }\n\n return context;\n};\n\nexport const useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\n// Map promises to a UUID that they can be identified by\nconst PromiseKey = new WeakMap<Promise<string>, string>();\n/*\n *\n * @param getAccessToken - Async function that returns a promise that resolves to a string\n * @returns a resolved string or null from the access token promise\n */\nfunction getAuthTokenQueryKey(\n authTokenPromiseOrString: Promise<string> | string,\n): string {\n // Need to go by equality of the promise to avoid scenarios where\n // 1. The promise is the same, but the function changes\n // 2. The function is the same, but the promise is different ⚠️\n //\n // This does have the unfortunate side effect where if the function result\n // isn't memoized somehow, then it will invalidate the query on every render.\n // This doesn't occur with the current use case of getAccessToken from\n // useAuth, but could in a custom implementation.\n //\n // Other things I explored:\n // 1. Removing promise api, and force user to resolve the promise\n // themselves. The user can already do this with the string API, so\n // it's not necessary, and they could run into issues 1, or 2 if\n // implemented wrong.\n // 2. Memoizing the function - this results in issue 2, where the function\n // is static, but the promise changes. I believe this actually is the\n // case with useAuth since it only sets the client once on initialization,\n // and binds the function to the client after that promise resolves.\n\n if (typeof authTokenPromiseOrString === \"string\") {\n return authTokenPromiseOrString;\n }\n\n const authTokenPromise = authTokenPromiseOrString;\n\n // Cannot memoize on the function because it could remain the same while\n // returning a different promise (and useAuth behaves this way).\n\n const promiseKey = PromiseKey.get(authTokenPromise);\n\n // Side effect, but we we're using a weak map, so it should be pretty safe\n if (!promiseKey) {\n const newPromiseKey = `${Math.random()}`;\n PromiseKey.set(authTokenPromise, newPromiseKey);\n return newPromiseKey;\n } else {\n return promiseKey;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6FS;AA7FT,YAAuB;AA4BvB,MAAM,aAAa,MAAM,cAAqC,MAAS;AAShE,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,2BACJ,OAAO,cAAc,WAAW,YAAY,UAAU;AACxD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAyB;AAC3E,QAAM,wBAAwB,MAAM,OAA2B,MAAS;AAKxE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,SAAS;AACjC,aAAO,cAAc,sBAAsB,OAAO;AAAA,IACpD;AAEA,QAAI,gBAAgB;AAClB,4BAAsB,UAAU,OAAO,YAAY,MAAM;AACvD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAGvD,YAAI,MAAM,eAAe;AACvB,4BAAkB,MAAS;AAAA,QAC7B;AAAA,MACF,GAAG,GAAM;AAAA,IACX;AAEA,WAAO,MAAM;AACX,UAAI,sBAAsB,SAAS;AACjC,eAAO,cAAc,sBAAsB,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,WAAW;AAAA,MACX,mBAAmB,qBAAqB,wBAAwB;AAAA,MAChE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,4CAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,MAAM,SAAS,MAAM;AAC1B,QAAM,UAAU,MAAM,WAAW,UAAU;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,MAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,gBAAgB,kBAAkB,IAAI,OAAO;AAErD,SAAO,EAAE,gBAAgB,kBAAkB;AAC7C;AAGA,MAAM,aAAa,oBAAI,QAAiC;AAMxD,SAAS,qBACP,0BACQ;AAoBR,MAAI,OAAO,6BAA6B,UAAU;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmB;AAKzB,QAAM,aAAa,WAAW,IAAI,gBAAgB;AAGlD,MAAI,CAAC,YAAY;AACf,UAAM,gBAAgB,GAAG,KAAK,OAAO,CAAC;AACtC,eAAW,IAAI,kBAAkB,aAAa;AAC9C,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { useIsHydrated } from \"../lib/use-is-hydrated.js\";\nimport { getClaims } from \"./utils.js\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\"\n | \"pipes\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken: string | undefined;\n permissions: string[] | undefined;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\nconst ApiContext = React.createContext<ApiConfig | undefined>(undefined);\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nexport const ApiProvider = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}: ApiProviderProps) => {\n const authTokenQuery = useQuery({\n initialData:\n typeof authToken === \"string\"\n ? {\n authToken,\n permissions: getClaims(authToken).permissions,\n }\n : undefined,\n queryFn: async () => {\n const resolvedToken =\n typeof authToken === \"string\" ? authToken : await authToken();\n\n return {\n authToken: resolvedToken,\n permissions: getClaims(resolvedToken).permissions,\n };\n },\n queryKey: [\"authToken\", widgetType],\n });\n\n const [elevatedAccess, setElevatedAccess] = React.useState<ElevatedAccess>();\n const elevatedAccessTimeout = React.useRef<number | undefined>(undefined);\n\n // This effect manages the expiration of elevated access tokens\n // When an elevated access token is present, it checks every 30 seconds if the token has expired\n // If the token has expired (current time > expiration time), it clears the elevated access\n React.useEffect(() => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n\n if (elevatedAccess) {\n elevatedAccessTimeout.current = window.setInterval(() => {\n const now = new Date();\n const expiresAtDate = new Date(elevatedAccess.expiresAt);\n\n // Reset the elevated access if it has expired\n if (now > expiresAtDate) {\n setElevatedAccess(undefined);\n }\n }, 30_000); // every 30 seconds\n }\n\n return () => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n };\n }, [elevatedAccess]);\n\n const value = React.useMemo(\n () => ({\n authToken: authTokenQuery.data?.authToken,\n permissions: authTokenQuery.data?.permissions,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n }),\n [\n authTokenQuery.data,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n ],\n );\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n};\n\nexport const useApi = () => {\n const context = React.useContext(ApiContext);\n\n if (context === undefined) {\n throw new Error(\"useApi must be used within an ApiProvider\");\n }\n\n return context;\n};\n\nexport const useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\nexport const useApiReady = () => {\n const { authToken } = useApi();\n const isHydrated = useIsHydrated();\n\n return isHydrated && authToken !== undefined;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmHS;AAnHT,yBAAyB;AACzB,YAAuB;AACvB,6BAA8B;AAC9B,mBAA0B;AA6B1B,MAAM,aAAa,MAAM,cAAqC,MAAS;AAShE,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,qBAAiB,6BAAS;AAAA,IAC9B,aACE,OAAO,cAAc,WACjB;AAAA,MACE;AAAA,MACA,iBAAa,wBAAU,SAAS,EAAE;AAAA,IACpC,IACA;AAAA,IACN,SAAS,YAAY;AACnB,YAAM,gBACJ,OAAO,cAAc,WAAW,YAAY,MAAM,UAAU;AAE9D,aAAO;AAAA,QACL,WAAW;AAAA,QACX,iBAAa,wBAAU,aAAa,EAAE;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU,CAAC,aAAa,UAAU;AAAA,EACpC,CAAC;AAED,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAyB;AAC3E,QAAM,wBAAwB,MAAM,OAA2B,MAAS;AAKxE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,SAAS;AACjC,aAAO,cAAc,sBAAsB,OAAO;AAAA,IACpD;AAEA,QAAI,gBAAgB;AAClB,4BAAsB,UAAU,OAAO,YAAY,MAAM;AACvD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAGvD,YAAI,MAAM,eAAe;AACvB,4BAAkB,MAAS;AAAA,QAC7B;AAAA,MACF,GAAG,GAAM;AAAA,IACX;AAEA,WAAO,MAAM;AACX,UAAI,sBAAsB,SAAS;AACjC,eAAO,cAAc,sBAAsB,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,WAAW,eAAe,MAAM;AAAA,MAChC,aAAa,eAAe,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,4CAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,MAAM,SAAS,MAAM;AAC1B,QAAM,UAAU,MAAM,WAAW,UAAU;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,MAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,gBAAgB,kBAAkB,IAAI,OAAO;AAErD,SAAO,EAAE,gBAAgB,kBAAkB;AAC7C;AAEO,MAAM,cAAc,MAAM;AAC/B,QAAM,EAAE,UAAU,IAAI,OAAO;AAC7B,QAAM,iBAAa,sCAAc;AAEjC,SAAO,cAAc,cAAc;AACrC;","names":[]}
@@ -1,15 +1,15 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
 
4
- type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys";
4
+ type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys" | "pipes";
5
5
  type AuthToken = string | (() => Promise<string>);
6
6
  interface ElevatedAccess {
7
7
  token: string;
8
8
  expiresAt: string;
9
9
  }
10
10
  interface ApiConfig {
11
- authToken: Promise<string> | string;
12
- authTokenQueryKey: string;
11
+ authToken: string | undefined;
12
+ permissions: string[] | undefined;
13
13
  baseUrl: string;
14
14
  widgetType: WidgetType;
15
15
  elevatedAccess?: ElevatedAccess;
@@ -27,5 +27,6 @@ declare const useElevatedAccessToken: () => {
27
27
  elevatedAccess: ElevatedAccess | undefined;
28
28
  setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;
29
29
  };
30
+ declare const useApiReady: () => boolean;
30
31
 
31
- export { ApiProvider, type AuthToken, type WidgetType, useApi, useElevatedAccessToken };
32
+ export { ApiProvider, type AuthToken, type WidgetType, useApi, useApiReady, useElevatedAccessToken };