@workos-inc/widgets 1.20.2-next.1792708307096 → 1.20.2

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 (123) hide show
  1. package/CHANGELOG.md +4 -12
  2. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +2 -1
  3. package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
  4. package/dist/cjs/admin-portal-domain-verification.client.cjs +3 -2
  5. package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
  6. package/dist/cjs/admin-portal-sso-connection.client.cjs +2 -1
  7. package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
  8. package/dist/cjs/api/api-provider.cjs +23 -1
  9. package/dist/cjs/api/api-provider.cjs.map +1 -1
  10. package/dist/cjs/api/api-provider.d.cts.map +1 -1
  11. package/dist/cjs/api/claims.cjs.map +1 -1
  12. package/dist/cjs/api/claims.d.cts +2 -1
  13. package/dist/cjs/api/claims.d.cts.map +1 -1
  14. package/dist/cjs/api/client-graphql/hooks.cjs +3 -20
  15. package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -1
  16. package/dist/cjs/api/client-graphql/hooks.d.cts +3 -12
  17. package/dist/cjs/api/client-graphql/hooks.d.cts.map +1 -1
  18. package/dist/cjs/api/client-graphql/query-keys.cjs +25 -0
  19. package/dist/cjs/api/client-graphql/query-keys.cjs.map +1 -0
  20. package/dist/cjs/api/client-graphql/query-keys.d.cts +16 -0
  21. package/dist/cjs/api/client-graphql/query-keys.d.cts.map +1 -0
  22. package/dist/cjs/components/copy-text.cjs +1 -1
  23. package/dist/cjs/components/copy-text.cjs.map +1 -1
  24. package/dist/cjs/components/otp-input.cjs +1 -0
  25. package/dist/cjs/components/otp-input.cjs.map +1 -1
  26. package/dist/cjs/directory-sync.client.cjs +2 -1
  27. package/dist/cjs/directory-sync.client.cjs.map +1 -1
  28. package/dist/cjs/lib/api/api-key.cjs +4 -3
  29. package/dist/cjs/lib/api/api-key.cjs.map +1 -1
  30. package/dist/cjs/lib/api/me.cjs +2 -1
  31. package/dist/cjs/lib/api/me.cjs.map +1 -1
  32. package/dist/cjs/lib/api/pipes.cjs +7 -6
  33. package/dist/cjs/lib/api/pipes.cjs.map +1 -1
  34. package/dist/cjs/lib/api/user-api-key.cjs +3 -2
  35. package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
  36. package/dist/cjs/lib/use-widgets-invalidator.cjs +3 -2
  37. package/dist/cjs/lib/use-widgets-invalidator.cjs.map +1 -1
  38. package/dist/cjs/organization-switcher.client.cjs +2 -1
  39. package/dist/cjs/organization-switcher.client.cjs.map +1 -1
  40. package/dist/cjs/pipes-admin.client.cjs +2 -1
  41. package/dist/cjs/pipes-admin.client.cjs.map +1 -1
  42. package/dist/cjs/pipes.client.cjs +2 -1
  43. package/dist/cjs/pipes.client.cjs.map +1 -1
  44. package/dist/cjs/user-security.client.cjs +2 -1
  45. package/dist/cjs/user-security.client.cjs.map +1 -1
  46. package/dist/cjs/user-sessions.client.cjs +2 -1
  47. package/dist/cjs/user-sessions.client.cjs.map +1 -1
  48. package/dist/cjs/widgets/organization-switcher/organization-switcher.cjs +9 -4
  49. package/dist/cjs/widgets/organization-switcher/organization-switcher.cjs.map +1 -1
  50. package/dist/cjs/widgets/organization-switcher/organization-switcher.d.cts.map +1 -1
  51. package/dist/cjs/widgets/pipes/pipes.cjs +3 -2
  52. package/dist/cjs/widgets/pipes/pipes.cjs.map +1 -1
  53. package/dist/cjs/widgets/user-sessions/logout-all-sessions-dialog.cjs +2 -1
  54. package/dist/cjs/widgets/user-sessions/logout-all-sessions-dialog.cjs.map +1 -1
  55. package/dist/cjs/widgets/user-sessions/logout-dialog.cjs +2 -1
  56. package/dist/cjs/widgets/user-sessions/logout-dialog.cjs.map +1 -1
  57. package/dist/cjs/widgets/users-management/users-management-utils.cjs +4 -3
  58. package/dist/cjs/widgets/users-management/users-management-utils.cjs.map +1 -1
  59. package/dist/esm/admin-portal-audit-log-streaming.client.js +2 -1
  60. package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
  61. package/dist/esm/admin-portal-domain-verification.client.js +2 -1
  62. package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
  63. package/dist/esm/admin-portal-sso-connection.client.js +2 -1
  64. package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
  65. package/dist/esm/api/api-provider.d.ts.map +1 -1
  66. package/dist/esm/api/api-provider.js +23 -1
  67. package/dist/esm/api/api-provider.js.map +1 -1
  68. package/dist/esm/api/claims.d.ts +2 -1
  69. package/dist/esm/api/claims.d.ts.map +1 -1
  70. package/dist/esm/api/claims.js.map +1 -1
  71. package/dist/esm/api/client-graphql/hooks.d.ts +3 -12
  72. package/dist/esm/api/client-graphql/hooks.d.ts.map +1 -1
  73. package/dist/esm/api/client-graphql/hooks.js +1 -18
  74. package/dist/esm/api/client-graphql/hooks.js.map +1 -1
  75. package/dist/esm/api/client-graphql/query-keys.d.ts +16 -0
  76. package/dist/esm/api/client-graphql/query-keys.d.ts.map +1 -0
  77. package/dist/esm/api/client-graphql/query-keys.js +23 -0
  78. package/dist/esm/api/client-graphql/query-keys.js.map +1 -0
  79. package/dist/esm/components/copy-text.js +1 -1
  80. package/dist/esm/components/copy-text.js.map +1 -1
  81. package/dist/esm/components/otp-input.js +1 -0
  82. package/dist/esm/components/otp-input.js.map +1 -1
  83. package/dist/esm/directory-sync.client.js +2 -1
  84. package/dist/esm/directory-sync.client.js.map +1 -1
  85. package/dist/esm/lib/api/api-key.js +2 -1
  86. package/dist/esm/lib/api/api-key.js.map +1 -1
  87. package/dist/esm/lib/api/me.js +2 -1
  88. package/dist/esm/lib/api/me.js.map +1 -1
  89. package/dist/esm/lib/api/pipes.js +2 -1
  90. package/dist/esm/lib/api/pipes.js.map +1 -1
  91. package/dist/esm/lib/api/user-api-key.js +2 -1
  92. package/dist/esm/lib/api/user-api-key.js.map +1 -1
  93. package/dist/esm/lib/use-widgets-invalidator.js +2 -1
  94. package/dist/esm/lib/use-widgets-invalidator.js.map +1 -1
  95. package/dist/esm/organization-switcher.client.js +2 -1
  96. package/dist/esm/organization-switcher.client.js.map +1 -1
  97. package/dist/esm/pipes-admin.client.js +2 -1
  98. package/dist/esm/pipes-admin.client.js.map +1 -1
  99. package/dist/esm/pipes.client.js +2 -1
  100. package/dist/esm/pipes.client.js.map +1 -1
  101. package/dist/esm/user-security.client.js +2 -1
  102. package/dist/esm/user-security.client.js.map +1 -1
  103. package/dist/esm/user-sessions.client.js +2 -1
  104. package/dist/esm/user-sessions.client.js.map +1 -1
  105. package/dist/esm/widgets/organization-switcher/organization-switcher.d.ts.map +1 -1
  106. package/dist/esm/widgets/organization-switcher/organization-switcher.js +9 -4
  107. package/dist/esm/widgets/organization-switcher/organization-switcher.js.map +1 -1
  108. package/dist/esm/widgets/pipes/pipes.js +2 -1
  109. package/dist/esm/widgets/pipes/pipes.js.map +1 -1
  110. package/dist/esm/widgets/user-sessions/logout-all-sessions-dialog.js +2 -1
  111. package/dist/esm/widgets/user-sessions/logout-all-sessions-dialog.js.map +1 -1
  112. package/dist/esm/widgets/user-sessions/logout-dialog.js +2 -1
  113. package/dist/esm/widgets/user-sessions/logout-dialog.js.map +1 -1
  114. package/dist/esm/widgets/users-management/users-management-utils.js +2 -1
  115. package/dist/esm/widgets/users-management/users-management-utils.js.map +1 -1
  116. package/package.json +1 -1
  117. package/src/api/api-provider.tsx +39 -1
  118. package/src/api/claims.ts +2 -1
  119. package/src/api/client-graphql/hooks.ts +8 -27
  120. package/src/api/client-graphql/query-keys.ts +29 -0
  121. package/src/components/copy-text.tsx +1 -1
  122. package/src/components/otp-input.tsx +2 -0
  123. package/src/widgets/organization-switcher/organization-switcher.tsx +16 -6
package/CHANGELOG.md CHANGED
@@ -1,24 +1,16 @@
1
1
  # Changelog
2
2
 
3
- ## 1.20.2-next.1792708307096
3
+ ## 1.20.2
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - Correctly handle invalid date strings from the server.
8
-
9
- - Preserve MFA enrollment progress when elevated access token expires mid-flow
10
-
11
- - Show translatable error message in Organization Switcher if there are no organizations to available.
12
-
8
+ - Preserve MFA enrollment progress when elevated access token expires mid-flow.
9
+ - Show a translatable "No organizations found" message in Organization Switcher when the user belongs to no organizations.
13
10
  - Updated Widget translation file references.
14
-
15
11
  - Honor `patternFlags` when validating configuration fields in `PipesAdmin`, so uppercase Snowflake account identifiers are accepted.
16
-
17
12
  - Fixed edge-case bugs with React's concurrent rendering
18
-
19
- - Memoize i18n translate function
20
-
21
- - Update internal GraphQL API calls
13
+ - Refresh widgets when a string `authToken` changes to a different session, user or organization so that switching organizations no longer leaves stale data.
22
14
 
23
15
  ## 1.20.1
24
16
 
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
4
4
  const require_lib_widgets_context = require("./lib/widgets-context.cjs");
5
+ const require_api_client_graphql_query_keys = require("./api/client-graphql/query-keys.cjs");
5
6
  const require_api_api_provider = require("./api/api-provider.cjs");
6
7
  const require_api_client_graphql_hooks = require("./api/client-graphql/hooks.cjs");
7
8
  const require_components_error_boundary = require("./components/error-boundary.cjs");
@@ -34,7 +35,7 @@ const AdminPortalAuditLogStreamingImpl = (props) => {
34
35
  });
35
36
  const adminPortalLink = mutation.data?.createAdminPortalLink.link ?? null;
36
37
  const query = require_api_client_graphql_hooks.useClientGraphqlQuery({
37
- queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("AuditLogStream"),
38
+ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("AuditLogStream"),
38
39
  queryFn: (sdk) => sdk.AuditLogStream()
39
40
  });
40
41
  const initConfig = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"admin-portal-audit-log-streaming.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalAuditLogStreamingError","ApiProvider","useClientGraphqlMutation","useClientGraphqlQuery","clientGraphqlQueryKey","AdminPortalAuditLogStreamingLoading","AdminPortalAuditLogStreamingPresentational","AdminPortalAuditLogStreamingButton"],"sources":["../../src/admin-portal-audit-log-streaming.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider } from \"./api/api-provider.js\";\nimport type { AdminPortalLinkIntent } from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalAuditLogStreamingButton,\n AdminPortalAuditLogStreamingError,\n AdminPortalAuditLogStreamingLoading,\n AdminPortalAuditLogStreaming as AdminPortalAuditLogStreamingPresentational,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nimport type { AdminPortalAuditLogStreamingStatusProps } from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\n\ninterface AdminPortalAuditLogStreamingProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalAuditLogStreaming: React.FC<\n AdminPortalAuditLogStreamingProps\n> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalAuditLogStreamingError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-audit-log-streaming\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalAuditLogStreamingImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\ninterface AdminPortalAuditLogStreamingImplProps extends WidgetRootDomProps {}\n\nconst AdminPortalAuditLogStreamingImpl: React.FC<\n AdminPortalAuditLogStreamingImplProps\n> = (props) => {\n const { mutate: generateAdminPortalLink, ...mutation } =\n useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n window.open(\n data.createAdminPortalLink.link,\n \"_blank\",\n \"noopener,noreferrer\",\n );\n },\n });\n\n const adminPortalLink = mutation.data?.createAdminPortalLink.link ?? null;\n\n const query = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"AuditLogStream\"),\n queryFn: (sdk) => sdk.AuditLogStream(),\n });\n\n const initConfig = () => {\n generateAdminPortalLink(\"LogStreams\");\n };\n\n if (query.isLoading) {\n return <AdminPortalAuditLogStreamingLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalAuditLogStreamingError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const configuredStream = query.data.auditLogStream;\n\n if (!configuredStream) {\n return (\n <AdminPortalAuditLogStreamingPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n adminPortalOpenButton={\n <AdminPortalAuditLogStreamingButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n );\n }\n\n const statusProps: AdminPortalAuditLogStreamingStatusProps = (() => {\n switch (configuredStream.state) {\n case \"Inactive\":\n return {\n connectionStatus: \"Inactive\",\n destinationType: configuredStream.type,\n };\n case \"Active\":\n return {\n connectionStatus: \"Active\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n case \"Error\":\n return {\n connectionStatus: \"Error\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n case \"Invalid\":\n return {\n connectionStatus: \"Error\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n default:\n // Fallback\n return {\n connectionStatus: \"Inactive\",\n destinationType: configuredStream.type,\n };\n }\n })();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalAuditLogStreamingError error={error} {...props} />\n )}\n >\n <AdminPortalAuditLogStreamingPresentational\n {...props}\n {...statusProps}\n adminPortalOpenButton={\n <AdminPortalAuditLogStreamingButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n return <AdminPortalAuditLogStreamingLoading {...props} />;\n};\nexport {\n AdminPortalAuditLogStreamingLoading,\n AdminPortalAuditLogStreamingError,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nexport {\n AdminPortalAuditLogStreaming as AdminPortalAuditLogStreamingPresentational,\n AdminPortalAuditLogStreamingButton,\n type AdminPortalAuditLogStreamingStatusProps,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nexport type { AdminPortalAuditLogStreamingProps };\nexport { AdminPortalAuditLogStreaming };\n"],"mappings":"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"}
1
+ {"version":3,"file":"admin-portal-audit-log-streaming.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalAuditLogStreamingError","ApiProvider","useClientGraphqlMutation","useClientGraphqlQuery","clientGraphqlQueryKey","AdminPortalAuditLogStreamingLoading","AdminPortalAuditLogStreamingPresentational","AdminPortalAuditLogStreamingButton"],"sources":["../../src/admin-portal-audit-log-streaming.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider } from \"./api/api-provider.js\";\nimport type { AdminPortalLinkIntent } from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalAuditLogStreamingButton,\n AdminPortalAuditLogStreamingError,\n AdminPortalAuditLogStreamingLoading,\n AdminPortalAuditLogStreaming as AdminPortalAuditLogStreamingPresentational,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nimport type { AdminPortalAuditLogStreamingStatusProps } from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\n\ninterface AdminPortalAuditLogStreamingProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalAuditLogStreaming: React.FC<\n AdminPortalAuditLogStreamingProps\n> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalAuditLogStreamingError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-audit-log-streaming\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalAuditLogStreamingImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\ninterface AdminPortalAuditLogStreamingImplProps extends WidgetRootDomProps {}\n\nconst AdminPortalAuditLogStreamingImpl: React.FC<\n AdminPortalAuditLogStreamingImplProps\n> = (props) => {\n const { mutate: generateAdminPortalLink, ...mutation } =\n useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n window.open(\n data.createAdminPortalLink.link,\n \"_blank\",\n \"noopener,noreferrer\",\n );\n },\n });\n\n const adminPortalLink = mutation.data?.createAdminPortalLink.link ?? null;\n\n const query = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"AuditLogStream\"),\n queryFn: (sdk) => sdk.AuditLogStream(),\n });\n\n const initConfig = () => {\n generateAdminPortalLink(\"LogStreams\");\n };\n\n if (query.isLoading) {\n return <AdminPortalAuditLogStreamingLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalAuditLogStreamingError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const configuredStream = query.data.auditLogStream;\n\n if (!configuredStream) {\n return (\n <AdminPortalAuditLogStreamingPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n adminPortalOpenButton={\n <AdminPortalAuditLogStreamingButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n );\n }\n\n const statusProps: AdminPortalAuditLogStreamingStatusProps = (() => {\n switch (configuredStream.state) {\n case \"Inactive\":\n return {\n connectionStatus: \"Inactive\",\n destinationType: configuredStream.type,\n };\n case \"Active\":\n return {\n connectionStatus: \"Active\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n case \"Error\":\n return {\n connectionStatus: \"Error\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n case \"Invalid\":\n return {\n connectionStatus: \"Error\",\n destinationType: configuredStream.type,\n lastSyncedEventId: configuredStream.lastSyncedEventId,\n };\n default:\n // Fallback\n return {\n connectionStatus: \"Inactive\",\n destinationType: configuredStream.type,\n };\n }\n })();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalAuditLogStreamingError error={error} {...props} />\n )}\n >\n <AdminPortalAuditLogStreamingPresentational\n {...props}\n {...statusProps}\n adminPortalOpenButton={\n <AdminPortalAuditLogStreamingButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n return <AdminPortalAuditLogStreamingLoading {...props} />;\n};\nexport {\n AdminPortalAuditLogStreamingLoading,\n AdminPortalAuditLogStreamingError,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nexport {\n AdminPortalAuditLogStreaming as AdminPortalAuditLogStreamingPresentational,\n AdminPortalAuditLogStreamingButton,\n type AdminPortalAuditLogStreamingStatusProps,\n} from \"./widgets/admin-portal-audit-log-streaming/admin-portal-audit-log-streaming.js\";\nexport type { AdminPortalAuditLogStreamingProps };\nexport { AdminPortalAuditLogStreaming };\n"],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
4
4
  const require_lib_widgets_context = require("./lib/widgets-context.cjs");
5
+ const require_api_client_graphql_query_keys = require("./api/client-graphql/query-keys.cjs");
5
6
  const require_api_api_provider = require("./api/api-provider.cjs");
6
7
  const require_api_client_graphql_hooks = require("./api/client-graphql/hooks.cjs");
7
8
  const require_components_error_boundary = require("./components/error-boundary.cjs");
@@ -46,11 +47,11 @@ const AdminPortalDomainVerificationImpl = (props) => {
46
47
  const isApiReady = require_api_api_provider.useApiReady();
47
48
  const queryClient = (0, _tanstack_react_query.useQueryClient)();
48
49
  const { data: organizationDomains, isLoading, error } = require_api_client_graphql_hooks.useClientGraphqlQuery({
49
- queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("ListOrganizationDomains"),
50
+ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("ListOrganizationDomains"),
50
51
  queryFn: listAllOrganizationDomains
51
52
  });
52
53
  const invalidateDomains = () => {
53
- queryClient.invalidateQueries({ queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("ListOrganizationDomains") });
54
+ queryClient.invalidateQueries({ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("ListOrganizationDomains") });
54
55
  };
55
56
  const { mutate: generateAdminPortalLink, isPending } = require_api_client_graphql_hooks.useClientGraphqlMutation({
56
57
  mutationFn: (sdk, intent) => sdk.CreateAdminPortalLink({ intent }),
@@ -1 +1 @@
1
- {"version":3,"file":"admin-portal-domain-verification.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalDomainVerificationError","ApiProvider","useApiReady","useQueryClient","useClientGraphqlQuery","clientGraphqlQueryKey","useClientGraphqlMutation","AdminPortalDomainVerificationLoading","AdminPortalDomainVerificationPresentational"],"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider, useApiReady } from \"./api/api-provider.js\";\nimport type {\n AdminPortalLinkIntent,\n OrganizationDomainFieldsFragment,\n Sdk,\n} from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport { openUrlViaForm } from \"./lib/utils.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./widgets/admin-portal-domain-verification/admin-portal-domain-verification.js\";\nimport type {\n AdminPortalDomainVerificationErrorProps,\n AdminPortalDomainVerificationLoadingProps,\n} from \"./widgets/admin-portal-domain-verification/admin-portal-domain-verification.js\";\n\nconst DOMAINS_PAGE_SIZE = 100;\n\nasync function listAllOrganizationDomains(\n sdk: Sdk,\n): Promise<OrganizationDomainFieldsFragment[]> {\n const domains: OrganizationDomainFieldsFragment[] = [];\n let after: string | null = null;\n do {\n const { organizationDomains } = await sdk.ListOrganizationDomains({\n after,\n limit: DOMAINS_PAGE_SIZE,\n order: \"Asc\",\n });\n domains.push(...organizationDomains.data);\n after = organizationDomains.listMetadata.after ?? null;\n } while (after !== null);\n return domains;\n}\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\ninterface AdminPortalDomainVerificationImplProps extends Omit<\n AdminPortalDomainVerificationProps,\n \"authToken\"\n> {}\n\nconst AdminPortalDomainVerificationImpl: React.FC<\n AdminPortalDomainVerificationImplProps\n> = (props) => {\n const isApiReady = useApiReady();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationDomains\"),\n queryFn: listAllOrganizationDomains,\n });\n\n const invalidateDomains = () => {\n queryClient.invalidateQueries({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationDomains\"),\n });\n };\n\n const { mutate: generateAdminPortalLink, isPending } =\n useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n openUrlViaForm(data.createAdminPortalLink.link, {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n });\n },\n });\n\n const { mutate: deleteDomain } = useClientGraphqlMutation({\n mutationFn: (sdk, id: string) => sdk.DeleteOrganizationDomain({ id }),\n onSuccess: invalidateDomains,\n });\n\n const { mutate: reverifyDomain } = useClientGraphqlMutation({\n mutationFn: (sdk, id: string) => sdk.ReverifyOrganizationDomain({ id }),\n onSuccess: invalidateDomains,\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink(\"DomainVerification\");\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 || [];\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":";;;;;;;;;;;;;;AA8BA,MAAM,oBAAoB;AAE1B,eAAe,2BACb,KAC6C;CAC7C,MAAM,UAA8C,CAAC;CACrD,IAAI,QAAuB;CAC3B,GAAG;EACD,MAAM,EAAE,wBAAwB,MAAM,IAAI,wBAAwB;GAChE;GACA,OAAO;GACP,OAAO;EACT,CAAC;EACD,QAAQ,KAAK,GAAG,oBAAoB,IAAI;EACxC,QAAQ,oBAAoB,aAAa,SAAS;CACpD,SAAS,UAAU;CACnB,OAAO;AACT;AAMA,MAAM,iCAED,EAAE,WAAW,GAAG,eAAe;CAClC,MAAM,UAAUA,4BAAAA,gBAAgB;CAEhC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kCAAAA,eAAD;EACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,oCAAD;GAA2C;GAAO,GAAI;EAAW,CAAA;EAGnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,aAAD;GACE,YAAW;GACA;GACF;GAET,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,mCAAD,EAAmC,GAAI,SAAW,CAAA;EACvC,CAAA;CACA,CAAA;AAEnB;AAOA,MAAM,qCAED,UAAU;CACb,MAAM,aAAaC,yBAAAA,YAAY;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CACnC,MAAM,EACJ,MAAM,qBACN,WACA,UACEC,iCAAAA,sBAAsB;EACxB,UAAUC,iCAAAA,sBAAsB,yBAAyB;EACzD,SAAS;CACX,CAAC;CAED,MAAM,0BAA0B;EAC9B,YAAY,kBAAkB,EAC5B,UAAUA,iCAAAA,sBAAsB,yBAAyB,EAC3D,CAAC;CACH;CAEA,MAAM,EAAE,QAAQ,yBAAyB,cACvCC,iCAAAA,yBAAyB;EACvB,aAAa,KAAK,WAChB,IAAI,sBAAsB,EAAE,OAAO,CAAC;EACtC,YAAY,SAAS;GACnB,kBAAA,eAAe,KAAK,sBAAsB,MAAM;IAC9C,QAAQ;IACR,KAAK;GACP,CAAC;EACH;CACF,CAAC;CAEH,MAAM,EAAE,QAAQ,iBAAiBA,iCAAAA,yBAAyB;EACxD,aAAa,KAAK,OAAe,IAAI,yBAAyB,EAAE,GAAG,CAAC;EACpE,WAAW;CACb,CAAC;CAED,MAAM,EAAE,QAAQ,mBAAmBA,iCAAAA,yBAAyB;EAC1D,aAAa,KAAK,OAAe,IAAI,2BAA2B,EAAE,GAAG,CAAC;EACtE,WAAW;CACb,CAAC;CAED,MAAM,wBAAwB;EAC5B,wBAAwB,oBAAoB;CAC9C;CAEA,MAAM,sBAAsB,aAAqB;EAC/C,aAAa,QAAQ;CACvB;CAEA,MAAM,wBAAwB,aAAqB;EACjD,eAAe,QAAQ;CACzB;CAEA,IAAI,CAAC,cAAc,WACjB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,sCAAD,EAAsC,GAAI,MAAQ,CAAA;CAG3D,IAAI,OACF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACP,kFAAAA,oCAAD;EAA2C;EAAO,GAAI;CAAQ,CAAA;CAGvE,MAAM,UAAU,uBAAuB,CAAC;CAExC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kCAAAA,eAAD;EACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,oCAAD;GAA2C;GAAO,GAAI;EAAQ,CAAA;EAGhE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACQ,kFAAAA,+BAAD;GACE,qBAAqB;GACrB,aAAa;GACb,gBAAgB;GAChB,kBAAkB;GACP;GACX,GAAI;EACL,CAAA;CACY,CAAA;AAEnB"}
1
+ {"version":3,"file":"admin-portal-domain-verification.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalDomainVerificationError","ApiProvider","useApiReady","useQueryClient","useClientGraphqlQuery","clientGraphqlQueryKey","useClientGraphqlMutation","AdminPortalDomainVerificationLoading","AdminPortalDomainVerificationPresentational"],"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider, useApiReady } from \"./api/api-provider.js\";\nimport type {\n AdminPortalLinkIntent,\n OrganizationDomainFieldsFragment,\n Sdk,\n} from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport { openUrlViaForm } from \"./lib/utils.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./widgets/admin-portal-domain-verification/admin-portal-domain-verification.js\";\nimport type {\n AdminPortalDomainVerificationErrorProps,\n AdminPortalDomainVerificationLoadingProps,\n} from \"./widgets/admin-portal-domain-verification/admin-portal-domain-verification.js\";\n\nconst DOMAINS_PAGE_SIZE = 100;\n\nasync function listAllOrganizationDomains(\n sdk: Sdk,\n): Promise<OrganizationDomainFieldsFragment[]> {\n const domains: OrganizationDomainFieldsFragment[] = [];\n let after: string | null = null;\n do {\n const { organizationDomains } = await sdk.ListOrganizationDomains({\n after,\n limit: DOMAINS_PAGE_SIZE,\n order: \"Asc\",\n });\n domains.push(...organizationDomains.data);\n after = organizationDomains.listMetadata.after ?? null;\n } while (after !== null);\n return domains;\n}\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\ninterface AdminPortalDomainVerificationImplProps extends Omit<\n AdminPortalDomainVerificationProps,\n \"authToken\"\n> {}\n\nconst AdminPortalDomainVerificationImpl: React.FC<\n AdminPortalDomainVerificationImplProps\n> = (props) => {\n const isApiReady = useApiReady();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationDomains\"),\n queryFn: listAllOrganizationDomains,\n });\n\n const invalidateDomains = () => {\n queryClient.invalidateQueries({\n queryKey: clientGraphqlQueryKey(\"ListOrganizationDomains\"),\n });\n };\n\n const { mutate: generateAdminPortalLink, isPending } =\n useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n openUrlViaForm(data.createAdminPortalLink.link, {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n });\n },\n });\n\n const { mutate: deleteDomain } = useClientGraphqlMutation({\n mutationFn: (sdk, id: string) => sdk.DeleteOrganizationDomain({ id }),\n onSuccess: invalidateDomains,\n });\n\n const { mutate: reverifyDomain } = useClientGraphqlMutation({\n mutationFn: (sdk, id: string) => sdk.ReverifyOrganizationDomain({ id }),\n onSuccess: invalidateDomains,\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink(\"DomainVerification\");\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 || [];\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":";;;;;;;;;;;;;;;AA8BA,MAAM,oBAAoB;AAE1B,eAAe,2BACb,KAC6C;CAC7C,MAAM,UAA8C,CAAC;CACrD,IAAI,QAAuB;CAC3B,GAAG;EACD,MAAM,EAAE,wBAAwB,MAAM,IAAI,wBAAwB;GAChE;GACA,OAAO;GACP,OAAO;EACT,CAAC;EACD,QAAQ,KAAK,GAAG,oBAAoB,IAAI;EACxC,QAAQ,oBAAoB,aAAa,SAAS;CACpD,SAAS,UAAU;CACnB,OAAO;AACT;AAMA,MAAM,iCAED,EAAE,WAAW,GAAG,eAAe;CAClC,MAAM,UAAUA,4BAAAA,gBAAgB;CAEhC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kCAAAA,eAAD;EACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,oCAAD;GAA2C;GAAO,GAAI;EAAW,CAAA;EAGnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,aAAD;GACE,YAAW;GACA;GACF;GAET,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,mCAAD,EAAmC,GAAI,SAAW,CAAA;EACvC,CAAA;CACA,CAAA;AAEnB;AAOA,MAAM,qCAED,UAAU;CACb,MAAM,aAAaC,yBAAAA,YAAY;CAC/B,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CACnC,MAAM,EACJ,MAAM,qBACN,WACA,UACEC,iCAAAA,sBAAsB;EACxB,UAAUC,sCAAAA,sBAAsB,yBAAyB;EACzD,SAAS;CACX,CAAC;CAED,MAAM,0BAA0B;EAC9B,YAAY,kBAAkB,EAC5B,UAAUA,sCAAAA,sBAAsB,yBAAyB,EAC3D,CAAC;CACH;CAEA,MAAM,EAAE,QAAQ,yBAAyB,cACvCC,iCAAAA,yBAAyB;EACvB,aAAa,KAAK,WAChB,IAAI,sBAAsB,EAAE,OAAO,CAAC;EACtC,YAAY,SAAS;GACnB,kBAAA,eAAe,KAAK,sBAAsB,MAAM;IAC9C,QAAQ;IACR,KAAK;GACP,CAAC;EACH;CACF,CAAC;CAEH,MAAM,EAAE,QAAQ,iBAAiBA,iCAAAA,yBAAyB;EACxD,aAAa,KAAK,OAAe,IAAI,yBAAyB,EAAE,GAAG,CAAC;EACpE,WAAW;CACb,CAAC;CAED,MAAM,EAAE,QAAQ,mBAAmBA,iCAAAA,yBAAyB;EAC1D,aAAa,KAAK,OAAe,IAAI,2BAA2B,EAAE,GAAG,CAAC;EACtE,WAAW;CACb,CAAC;CAED,MAAM,wBAAwB;EAC5B,wBAAwB,oBAAoB;CAC9C;CAEA,MAAM,sBAAsB,aAAqB;EAC/C,aAAa,QAAQ;CACvB;CAEA,MAAM,wBAAwB,aAAqB;EACjD,eAAe,QAAQ;CACzB;CAEA,IAAI,CAAC,cAAc,WACjB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,sCAAD,EAAsC,GAAI,MAAQ,CAAA;CAG3D,IAAI,OACF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACP,kFAAAA,oCAAD;EAA2C;EAAO,GAAI;CAAQ,CAAA;CAGvE,MAAM,UAAU,uBAAuB,CAAC;CAExC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kCAAAA,eAAD;EACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,kFAAAA,oCAAD;GAA2C;GAAO,GAAI;EAAQ,CAAA;EAGhE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACQ,kFAAAA,+BAAD;GACE,qBAAqB;GACrB,aAAa;GACb,gBAAgB;GAChB,kBAAkB;GACP;GACX,GAAI;EACL,CAAA;CACY,CAAA;AAEnB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
4
4
  const require_lib_widgets_context = require("./lib/widgets-context.cjs");
5
+ const require_api_client_graphql_query_keys = require("./api/client-graphql/query-keys.cjs");
5
6
  const require_api_api_provider = require("./api/api-provider.cjs");
6
7
  const require_api_client_graphql_hooks = require("./api/client-graphql/hooks.cjs");
7
8
  const require_components_error_boundary = require("./components/error-boundary.cjs");
@@ -38,7 +39,7 @@ const AdminPortalSsoConnectionImpl = (props) => {
38
39
  }
39
40
  });
40
41
  const query = require_api_client_graphql_hooks.useClientGraphqlQuery({
41
- queryKey: require_api_client_graphql_hooks.clientGraphqlQueryKey("ListSsoConnections"),
42
+ queryKey: require_api_client_graphql_query_keys.clientGraphqlQueryKey("ListSsoConnections"),
42
43
  queryFn: (sdk) => sdk.ListSsoConnections(),
43
44
  select: (data) => data.ssoConnections
44
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"admin-portal-sso-connection.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalSsoConnectionError","ApiProvider","useClientGraphqlMutation","useClientGraphqlQuery","clientGraphqlQueryKey","AdminPortalSsoConnectionLoading","AdminPortalSsoConnectionPresentational","AdminPortalOpenButton","useNow"],"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider } from \"./api/api-provider.js\";\nimport type {\n AdminPortalLinkIntent,\n ConnectionFieldsFragment,\n ConnectionType,\n} from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport type { IdentityProvider } from \"./lib/identity-providers.js\";\nimport { useNow } from \"./lib/use-now.js\";\nimport { openUrlViaForm } from \"./lib/utils.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./widgets/admin-portal-sso-connection/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./widgets/admin-portal-sso-connection/admin-portal-sso-connection.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\ninterface AdminPortalSsoConnectionImplProps extends WidgetRootDomProps {}\n\nconst AdminPortalSsoConnectionImpl: React.FC<\n AdminPortalSsoConnectionImplProps\n> = (props) => {\n const {\n mutate: generateAdminPortalLink,\n isPending: isGeneratingAdminPortalLink,\n } = useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n openUrlViaForm(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 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 initConfig = () => generateAdminPortalLink(\"Sso\");\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 lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionReady\n {...props}\n connection={connection}\n isGeneratingAdminPortalLink={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n </ErrorBoundary>\n );\n }\n};\n\ninterface AdminPortalSsoConnectionReadyProps extends WidgetRootDomProps {\n connection: ConnectionFieldsFragment;\n isGeneratingAdminPortalLink: boolean;\n initConfig: () => void;\n}\n\nconst AdminPortalSsoConnectionReady: React.FC<\n AdminPortalSsoConnectionReadyProps\n> = ({ connection, isGeneratingAdminPortalLink, initConfig, ...props }) => {\n const currentDate = useNow();\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (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 connectionState satisfies never;\n throw new TypeError(`Unreachable code: ${connectionState}`);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n }\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 millisecondsUntilExpiry =\n expiryDate.getTime() - currentDate.getTime();\n\n // This certificate is the longest-lived one the server still treats as\n // unexpired. Once `notAfter` passes, the cached query has not yet moved\n // it to `latestExpiredCertificate`, so derive Expired locally.\n if (millisecondsUntilExpiry < 0) {\n return { status: \"Expired\", expiryDate };\n }\n\n const daysUntilExpiry = millisecondsUntilExpiry / (1000 * 60 * 60 * 24);\n if (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 connection.state satisfies never;\n throw new TypeError(`Unreachable code: ${connection.state}`);\n }\n}\n\nfunction getIdentityProvider(connectionType: ConnectionType): IdentityProvider {\n switch (connectionType) {\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 connectionType satisfies never;\n throw new TypeError(`Unreachable code: ${connectionType}`);\n }\n}\n\nexport type {\n AdminPortalSsoConnectionProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionErrorProps,\n};\nexport {\n AdminPortalSsoConnection,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnectionError,\n};\n"],"mappings":";;;;;;;;;;;;;;AAqCA,MAAM,4BAAqE,EACzE,WACA,GAAG,eACC;CACJ,MAAM,UAAUA,4BAAAA,gBAAgB;CAChC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kCAAAA,eAAD;EACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,+BAAD;GAAsC;GAAO,GAAI;EAAW,CAAA;EAG9D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,aAAD;GACE,YAAW;GACA;GACF;GAET,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,8BAAD,EAA8B,GAAI,SAAW,CAAA;EAClC,CAAA;CACA,CAAA;AAEnB;AAIA,MAAM,gCAED,UAAU;CACb,MAAM,EACJ,QAAQ,yBACR,WAAW,gCACTC,iCAAAA,yBAAyB;EAC3B,aAAa,KAAK,WAChB,IAAI,sBAAsB,EAAE,OAAO,CAAC;EACtC,YAAY,SAAS;GACnB,kBAAA,eAAe,KAAK,sBAAsB,MAAM;IAC9C,QAAQ;IACR,KAAK;GACP,CAAC;EACH;CACF,CAAC;CAED,MAAM,QAAQC,iCAAAA,sBAAsB;EAClC,UAAUC,iCAAAA,sBAAsB,oBAAoB;EACpD,UAAU,QAAQ,IAAI,mBAAmB;EACzC,SAAS,SAAS,KAAK;CACzB,CAAC;CAED,IAAI,MAAM,WACR,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,iCAAD,EAAiC,GAAI,MAAQ,CAAA;CAGtD,IAAI,MAAM,SACR,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACL,wEAAAA,+BAAD;EAA+B,OAAO,MAAM;EAAO,GAAI;CAAQ,CAAA;CAGxE,IAAI,MAAM,MAAM;EACd,MAAM,mBAAmB,wBAAwB,KAAK;EACtD,MAAM,aAAa,MAAM,KAAK;EAC9B,IAAI,CAAC,YACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kCAAAA,eAAD;GACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,+BAAD;IAAsC;IAAO,GAAI;GAAQ,CAAA;GAG3D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACM,wEAAAA,0BAAD;IACE,GAAI;IACJ,kBAAiB;IACjB,aAAa;IACb,uBACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,uBAAD;KACE,WAAW;KACC;IACb,CAAA;GAEJ,CAAA;EACY,CAAA;EAInB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACR,kCAAAA,eAAD;GACE,iBAAiB,EAAE,YACjB,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,+BAAD;IAAsC;IAAO,GAAI;GAAQ,CAAA;GAG3D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,+BAAD;IACE,GAAI;IACQ;IACiB;IACjB;GACb,CAAA;EACY,CAAA;CAEnB;AACF;AAQA,MAAM,iCAED,EAAE,YAAY,6BAA6B,YAAY,GAAG,YAAY;CAEzE,MAAM,kBAAkB,mBAAmB,YADvBQ,oBAAAA,OACmC,CAAW;CAClE,MAAM,qBAA0D;EAC9D,MAAM,mBAAmB,gBAAgB;EACzC,IAAI,qBAAqB,iBACvB,OAAO,EACL,kBAAkB,gBACpB;EAGF,MAAM,mBAAmB,oBAAoB,WAAW,IAAI;EAC5D,QAAQ,kBAAR;GACE,KAAK,UACH,OAAO;IACL;IACA;GACF;GACF,KAAK,YACH,OAAO;IACL;IACA;GACF;GACF,KAAK;GACL,KAAK,YACH,OAAO;IACL;IACA,YAAY,gBAAgB;IAC5B;GACF;GACF,SAEE,MAAM,IAAI,UAAU,qBAAqB,iBAAiB;EAC9D;CACF,EAAA,CAAG;CAEH,MAAM,cAAc,WAAW,cAC3B,IAAI,KAAK,WAAW,YAAY,SAAS,IACzC;CAEJ,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,wEAAAA,0BAAD;EACE,GAAI;EACJ,GAAI;EACS;EACb,uBACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,wEAAAA,uBAAD;GACE,WAAW;GACC;EACb,CAAA;CAEJ,CAAA;AAEL;AAaA,SAAS,mBACP,YACA,aACiB;CACjB,QAAQ,WAAW,OAAnB;EACE,KAAK;EACL,KAAK;EACL,KAAK,YAAY;GACf,MAAM,eAAe,EAAE,QAAQ,SAAS;GACxC,IAAI,WAAW,gBAAgB,QAC7B,OAAO;GAGT,IAAI,WAAW,0BACb,OAAO;IACL,QAAQ;IACR,YAAY,WAAW,yBAAyB,WAC5C,IAAI,KAAK,WAAW,yBAAyB,QAAQ,IACrD;GACN;GAGF,MAAM,aAAa,WAAW,2BAA2B;GACzD,IAAI,eAAe,QAAQ,cAAc,MACvC,OAAO;GAGT,MAAM,aAAa,IAAI,KAAK,UAAU;GACtC,MAAM,0BACJ,WAAW,QAAQ,IAAI,YAAY,QAAQ;GAK7C,IAAI,0BAA0B,GAC5B,OAAO;IAAE,QAAQ;IAAW;GAAW;GAGzC,MAAM,kBAAkB,0BAA2B;GACnD,IAAI,mBAAmB,IACrB,OAAO;IAAE,QAAQ;IAAY;IAAiB;GAAW;GAG3D,OAAO;EACT;EACA,KAAK,YACH,OAAO,EAAE,QAAQ,WAAW;EAE9B;GACE,WAAW;GACX,MAAM,IAAI,UAAU,qBAAqB,WAAW,OAAO;CAC/D;AACF;AAEA,SAAS,oBAAoB,gBAAkD;CAC7E,QAAQ,gBAAR;EACE,KAAK;EACL,KAAK;EACL,KAAK,kBACH,OAAO;EACT,KAAK;EACL,KAAK,aACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,iBACH,OAAO;EACT,KAAK,kBACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,eACH,OAAO;EACT,KAAK,iBACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,kBACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK,YACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK;EACL,KAAK,eACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK;EACL,KAAK,mBACH,OAAO;EACT,KAAK;EACL,KAAK,kBACH,OAAO;EACT,KAAK,qBACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,WACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK,kBACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,iBACH,OAAO;EACT,KAAK,cACH,OAAO;EACT,KAAK;EACL,KAAK,0BACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,aACH,OAAO;EACT,SAEE,MAAM,IAAI,UAAU,qBAAqB,gBAAgB;CAC7D;AACF"}
1
+ {"version":3,"file":"admin-portal-sso-connection.client.cjs","names":["useWorkOsApiUrl","ErrorBoundary","AdminPortalSsoConnectionError","ApiProvider","useClientGraphqlMutation","useClientGraphqlQuery","clientGraphqlQueryKey","AdminPortalSsoConnectionLoading","AdminPortalSsoConnectionPresentational","AdminPortalOpenButton","useNow"],"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { AuthToken } from \"./api/api-provider.js\";\nimport { ApiProvider } from \"./api/api-provider.js\";\nimport type {\n AdminPortalLinkIntent,\n ConnectionFieldsFragment,\n ConnectionType,\n} from \"./api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlMutation,\n useClientGraphqlQuery,\n} from \"./api/client-graphql/hooks.js\";\nimport { ErrorBoundary } from \"./components/error-boundary.js\";\nimport type { IdentityProvider } from \"./lib/identity-providers.js\";\nimport { useNow } from \"./lib/use-now.js\";\nimport { openUrlViaForm } from \"./lib/utils.js\";\nimport type { WidgetRootDomProps } from \"./lib/widget-types.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./widgets/admin-portal-sso-connection/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./widgets/admin-portal-sso-connection/admin-portal-sso-connection.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\ninterface AdminPortalSsoConnectionImplProps extends WidgetRootDomProps {}\n\nconst AdminPortalSsoConnectionImpl: React.FC<\n AdminPortalSsoConnectionImplProps\n> = (props) => {\n const {\n mutate: generateAdminPortalLink,\n isPending: isGeneratingAdminPortalLink,\n } = useClientGraphqlMutation({\n mutationFn: (sdk, intent: AdminPortalLinkIntent) =>\n sdk.CreateAdminPortalLink({ intent }),\n onSuccess: (data) => {\n openUrlViaForm(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 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 initConfig = () => generateAdminPortalLink(\"Sso\");\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 lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionReady\n {...props}\n connection={connection}\n isGeneratingAdminPortalLink={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n </ErrorBoundary>\n );\n }\n};\n\ninterface AdminPortalSsoConnectionReadyProps extends WidgetRootDomProps {\n connection: ConnectionFieldsFragment;\n isGeneratingAdminPortalLink: boolean;\n initConfig: () => void;\n}\n\nconst AdminPortalSsoConnectionReady: React.FC<\n AdminPortalSsoConnectionReadyProps\n> = ({ connection, isGeneratingAdminPortalLink, initConfig, ...props }) => {\n const currentDate = useNow();\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (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 connectionState satisfies never;\n throw new TypeError(`Unreachable code: ${connectionState}`);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={isGeneratingAdminPortalLink}\n initConfig={initConfig}\n />\n }\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 millisecondsUntilExpiry =\n expiryDate.getTime() - currentDate.getTime();\n\n // This certificate is the longest-lived one the server still treats as\n // unexpired. Once `notAfter` passes, the cached query has not yet moved\n // it to `latestExpiredCertificate`, so derive Expired locally.\n if (millisecondsUntilExpiry < 0) {\n return { status: \"Expired\", expiryDate };\n }\n\n const daysUntilExpiry = millisecondsUntilExpiry / (1000 * 60 * 60 * 24);\n if (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 connection.state satisfies never;\n throw new TypeError(`Unreachable code: ${connection.state}`);\n }\n}\n\nfunction getIdentityProvider(connectionType: ConnectionType): IdentityProvider {\n switch (connectionType) {\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 connectionType satisfies never;\n throw new TypeError(`Unreachable code: ${connectionType}`);\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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"}
@@ -2,6 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
3
3
  const require_lib_use_is_hydrated = require("../lib/use-is-hydrated.cjs");
4
4
  const require_api_claims = require("./claims.cjs");
5
+ const require_api_client_graphql_query_keys = require("./client-graphql/query-keys.cjs");
5
6
  let _tanstack_react_query = require("@tanstack/react-query");
6
7
  let react = require("react");
7
8
  react = require_runtime.__toESM(react, 1);
@@ -14,6 +15,7 @@ const ApiContext = react.createContext(void 0);
14
15
  ApiContext.displayName = "ApiContext";
15
16
  const ApiProvider = ({ authToken, baseUrl, children, widgetType }) => {
16
17
  const queryClient = (0, _tanstack_react_query.useQueryClient)();
18
+ const queryKey = authTokenQueryKey(widgetType);
17
19
  const authTokenQuery = (0, _tanstack_react_query.useQuery)({
18
20
  initialData: () => {
19
21
  if (typeof authToken !== "string") return;
@@ -33,8 +35,25 @@ const ApiProvider = ({ authToken, baseUrl, children, widgetType }) => {
33
35
  exp: claims.exp
34
36
  };
35
37
  },
36
- queryKey: authTokenQueryKey(widgetType)
38
+ queryKey
37
39
  });
40
+ react.useEffect(() => {
41
+ if (typeof authToken !== "string") return;
42
+ const cached = queryClient.getQueryData(queryKey);
43
+ if (cached?.authToken === authToken) return;
44
+ queryClient.cancelQueries({ queryKey });
45
+ const claims = require_api_claims.getClaims(authToken);
46
+ queryClient.setQueryData(queryKey, {
47
+ authToken,
48
+ permissions: claims.permissions,
49
+ exp: claims.exp
50
+ });
51
+ if (cached && !isSameSubject(require_api_claims.getClaims(cached.authToken), claims)) queryClient.invalidateQueries({ predicate: (query) => require_api_client_graphql_query_keys.isClientGraphqlQueryKey(query.queryKey) });
52
+ }, [
53
+ authToken,
54
+ queryClient,
55
+ queryKey
56
+ ]);
38
57
  const exp = authTokenQuery.data?.exp;
39
58
  react.useEffect(() => {
40
59
  if (!exp) return;
@@ -83,6 +102,9 @@ const ApiProvider = ({ authToken, baseUrl, children, widgetType }) => {
83
102
  children
84
103
  });
85
104
  };
105
+ function isSameSubject(a, b) {
106
+ return a.sid === b.sid && a.sub === b.sub && a.org_id === b.org_id;
107
+ }
86
108
  const useApi = () => {
87
109
  const context = react.useContext(ApiContext);
88
110
  if (context === void 0) throw new Error("useApi must be used within an ApiProvider");
@@ -1 +1 @@
1
- {"version":3,"file":"api-provider.cjs","names":["React","useQueryClient","useQuery","getClaims","useIsHydrated"],"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { useIsHydrated } from \"../lib/use-is-hydrated.js\";\nimport { getClaims } from \"./claims.js\";\n\ntype WidgetType =\n | \"admin-portal-audit-log-streaming\"\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"user-api-keys\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\"\n | \"pipes\"\n | \"pipes-admin\"\n | \"directory-sync\";\n\ntype AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiContextValue {\n authToken: string | undefined;\n permissions: string[] | undefined;\n exp: number | undefined;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\ninterface AuthTokenQueryData {\n authToken: string;\n permissions: string[] | undefined;\n exp: number | undefined;\n}\n\nconst authTokenQueryKey = (widgetType: WidgetType) =>\n [\"authToken\", widgetType] as const;\n\n// Refetch this many ms before the JWT expires so data queries always see a\n// fresh token.\nconst TOKEN_REFRESH_BUFFER_MS = 30_000;\n\n// Cap setTimeout delays at ~24 days to stay well below the 32-bit signed int\n// limit (~24.8 days), which some runtimes silently coerce to 1ms.\nconst MAX_TIMEOUT_MS = 2_147_483_000;\n\nconst ApiContext = React.createContext<ApiContextValue | undefined>(undefined);\nApiContext.displayName = \"ApiContext\";\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nconst ApiProvider: React.FC<ApiProviderProps> = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}) => {\n const queryClient = useQueryClient();\n const authTokenQuery = useQuery<AuthTokenQueryData>({\n initialData: () => {\n if (typeof authToken !== \"string\") {\n return undefined;\n }\n\n const claims = getClaims(authToken);\n return {\n authToken,\n permissions: claims.permissions,\n exp: claims.exp,\n };\n },\n queryFn: async () => {\n const resolvedToken =\n typeof authToken === \"string\" ? authToken : await authToken();\n const claims = getClaims(resolvedToken);\n\n return {\n authToken: resolvedToken,\n permissions: claims.permissions,\n exp: claims.exp,\n };\n },\n queryKey: authTokenQueryKey(widgetType),\n });\n\n // Keep the token \"fresh\" until ~30s before it expires, so window-focus\n // re-fetches re-mint before data queries use a stale Bearer.\n //\n // TODO(v2): prefer the function-form `staleTime` on `useQuery` above once we\n // can bump the `@tanstack/react-query` peer dep to ^5.44.0 (the version that\n // introduced it). That lets react-query own the freshness window and avoids\n // the extra timer + window-focus nonsense this effect introduces.\n const exp = authTokenQuery.data?.exp;\n React.useEffect(() => {\n if (!exp) {\n return;\n }\n\n const delay = Math.min(\n MAX_TIMEOUT_MS,\n exp * 1000 - Date.now() - TOKEN_REFRESH_BUFFER_MS,\n );\n if (delay <= 0) {\n void queryClient.refetchQueries({\n queryKey: authTokenQueryKey(widgetType),\n });\n return;\n }\n const timeout = window.setTimeout(() => {\n void queryClient.refetchQueries({\n queryKey: authTokenQueryKey(widgetType),\n });\n }, delay);\n return () => window.clearTimeout(timeout);\n }, [exp, queryClient, widgetType]);\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 exp: authTokenQuery.data?.exp,\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\nconst 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\nconst useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\nconst useApiReady = () => {\n const { authToken } = useApi();\n const isHydrated = useIsHydrated();\n\n return isHydrated && authToken !== undefined;\n};\nexport type { WidgetType, AuthToken, AuthTokenQueryData };\nexport {\n authTokenQueryKey,\n ApiProvider,\n useApi,\n useElevatedAccessToken,\n useApiReady,\n};\n"],"mappings":";;;;;;;;;AA2CA,MAAM,qBAAqB,eACzB,CAAC,aAAa,UAAU;AAI1B,MAAM,0BAA0B;AAIhC,MAAM,iBAAiB;AAEvB,MAAM,aAAaA,MAAM,cAA2C,MAAS;AAC7E,WAAW,cAAc;AASzB,MAAM,eAA2C,EAC/C,WACA,SACA,UACA,iBACI;CACJ,MAAM,eAAA,GAAcC,sBAAAA,eAAAA,CAAe;CACnC,MAAM,kBAAA,GAAiBC,sBAAAA,SAAAA,CAA6B;EAClD,mBAAmB;GACjB,IAAI,OAAO,cAAc,UACvB;GAGF,MAAM,SAASC,mBAAAA,UAAU,SAAS;GAClC,OAAO;IACL;IACA,aAAa,OAAO;IACpB,KAAK,OAAO;GACd;EACF;EACA,SAAS,YAAY;GACnB,MAAM,gBACJ,OAAO,cAAc,WAAW,YAAY,MAAM,UAAU;GAC9D,MAAM,SAASA,mBAAAA,UAAU,aAAa;GAEtC,OAAO;IACL,WAAW;IACX,aAAa,OAAO;IACpB,KAAK,OAAO;GACd;EACF;EACA,UAAU,kBAAkB,UAAU;CACxC,CAAC;CASD,MAAM,MAAM,eAAe,MAAM;CACjC,MAAM,gBAAgB;EACpB,IAAI,CAAC,KACH;EAGF,MAAM,QAAQ,KAAK,IACjB,gBACA,MAAM,MAAO,KAAK,IAAI,IAAI,uBAC5B;EACA,IAAI,SAAS,GAAG;GACd,AAAK,YAAY,eAAe,EAC9B,UAAU,kBAAkB,UAAU,EACxC,CAAC;GACD;EACF;EACA,MAAM,UAAU,OAAO,iBAAiB;GACtC,AAAK,YAAY,eAAe,EAC9B,UAAU,kBAAkB,UAAU,EACxC,CAAC;EACH,GAAG,KAAK;EACR,aAAa,OAAO,aAAa,OAAO;CAC1C,GAAG;EAAC;EAAK;EAAa;CAAU,CAAC;CAEjC,MAAM,CAAC,gBAAgB,qBAAqBH,MAAM,SAAyB;CAC3E,MAAM,wBAAwBA,MAAM,OAA2B,MAAS;CAKxE,MAAM,gBAAgB;EACpB,IAAI,sBAAsB,SACxB,OAAO,cAAc,sBAAsB,OAAO;EAGpD,IAAI,gBACF,sBAAsB,UAAU,OAAO,kBAAkB;GAKvD,oBAAI,IAJY,KAIZ,IAAM,IAHgB,KAAK,eAAe,SAGpC,GACR,kBAAkB,MAAS;EAE/B,GAAG,GAAM;EAGX,aAAa;GACX,IAAI,sBAAsB,SACxB,OAAO,cAAc,sBAAsB,OAAO;EAEtD;CACF,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,QAAQA,MAAM,eACX;EACL,WAAW,eAAe,MAAM;EAChC,aAAa,eAAe,MAAM;EAClC,KAAK,eAAe,MAAM;EAC1B;EACA;EACA;EACA;CACF,IACA;EACE,eAAe;EACf;EACA;EACA;EACA;CACF,CACF;CAEA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAW,UAAZ;EAA4B;EAAQ;CAA8B,CAAA;AAC3E;AAEA,MAAM,eAAe;CACnB,MAAM,UAAUA,MAAM,WAAW,UAAU;CAE3C,IAAI,YAAY,QACd,MAAM,IAAI,MAAM,2CAA2C;CAG7D,OAAO;AACT;AAEA,MAAM,+BAA+B;CACnC,MAAM,EAAE,gBAAgB,sBAAsB,OAAO;CAErD,OAAO;EAAE;EAAgB;CAAkB;AAC7C;AAEA,MAAM,oBAAoB;CACxB,MAAM,EAAE,cAAc,OAAO;CAG7B,OAFmBI,4BAAAA,cAEZ,KAAc,cAAc;AACrC"}
1
+ {"version":3,"file":"api-provider.cjs","names":["React","useQueryClient","useQuery","getClaims","isClientGraphqlQueryKey","useIsHydrated"],"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import { useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { useIsHydrated } from \"../lib/use-is-hydrated.js\";\nimport { getClaims } from \"./claims.js\";\nimport type { Claims } from \"./claims.js\";\nimport { isClientGraphqlQueryKey } from \"./client-graphql/query-keys.js\";\n\ntype WidgetType =\n | \"admin-portal-audit-log-streaming\"\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"user-api-keys\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\"\n | \"pipes\"\n | \"pipes-admin\"\n | \"directory-sync\";\n\ntype AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiContextValue {\n authToken: string | undefined;\n permissions: string[] | undefined;\n exp: number | undefined;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\ninterface AuthTokenQueryData {\n authToken: string;\n permissions: string[] | undefined;\n exp: number | undefined;\n}\n\nconst authTokenQueryKey = (widgetType: WidgetType) =>\n [\"authToken\", widgetType] as const;\n\n// Refetch this many ms before the JWT expires so data queries always see a\n// fresh token.\nconst TOKEN_REFRESH_BUFFER_MS = 30_000;\n\n// Cap setTimeout delays at ~24 days to stay well below the 32-bit signed int\n// limit (~24.8 days), which some runtimes silently coerce to 1ms.\nconst MAX_TIMEOUT_MS = 2_147_483_000;\n\nconst ApiContext = React.createContext<ApiContextValue | undefined>(undefined);\nApiContext.displayName = \"ApiContext\";\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nconst ApiProvider: React.FC<ApiProviderProps> = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}) => {\n const queryClient = useQueryClient();\n const queryKey = authTokenQueryKey(widgetType);\n const authTokenQuery = useQuery<AuthTokenQueryData>({\n initialData: () => {\n if (typeof authToken !== \"string\") {\n return undefined;\n }\n\n const claims = getClaims(authToken);\n return {\n authToken,\n permissions: claims.permissions,\n exp: claims.exp,\n };\n },\n queryFn: async () => {\n const resolvedToken =\n typeof authToken === \"string\" ? authToken : await authToken();\n const claims = getClaims(resolvedToken);\n\n return {\n authToken: resolvedToken,\n permissions: claims.permissions,\n exp: claims.exp,\n };\n },\n queryKey,\n });\n\n // `initialData` only seeds the cache on first mount, so a new string token\n // has to be written to the cache explicitly. A token for a different session,\n // user or organization (e.g. after switching organizations) also invalidates\n // data fetched with the previous token.\n React.useEffect(() => {\n if (typeof authToken !== \"string\") {\n return;\n }\n\n const cached = queryClient.getQueryData<AuthTokenQueryData>(queryKey);\n if (cached?.authToken === authToken) {\n return;\n }\n\n // Keep an in-flight fetch holding the previous token from overwriting the\n // new one.\n void queryClient.cancelQueries({ queryKey });\n const claims = getClaims(authToken);\n queryClient.setQueryData<AuthTokenQueryData>(queryKey, {\n authToken,\n permissions: claims.permissions,\n exp: claims.exp,\n });\n\n if (cached && !isSameSubject(getClaims(cached.authToken), claims)) {\n void queryClient.invalidateQueries({\n predicate: (query) => isClientGraphqlQueryKey(query.queryKey),\n });\n }\n }, [authToken, queryClient, queryKey]);\n\n // Keep the token \"fresh\" until ~30s before it expires, so window-focus\n // re-fetches re-mint before data queries use a stale Bearer.\n //\n // TODO(v2): prefer the function-form `staleTime` on `useQuery` above once we\n // can bump the `@tanstack/react-query` peer dep to ^5.44.0 (the version that\n // introduced it). That lets react-query own the freshness window and avoids\n // the extra timer + window-focus nonsense this effect introduces.\n const exp = authTokenQuery.data?.exp;\n React.useEffect(() => {\n if (!exp) {\n return;\n }\n\n const delay = Math.min(\n MAX_TIMEOUT_MS,\n exp * 1000 - Date.now() - TOKEN_REFRESH_BUFFER_MS,\n );\n if (delay <= 0) {\n void queryClient.refetchQueries({\n queryKey: authTokenQueryKey(widgetType),\n });\n return;\n }\n const timeout = window.setTimeout(() => {\n void queryClient.refetchQueries({\n queryKey: authTokenQueryKey(widgetType),\n });\n }, delay);\n return () => window.clearTimeout(timeout);\n }, [exp, queryClient, widgetType]);\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 exp: authTokenQuery.data?.exp,\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\nfunction isSameSubject(a: Claims, b: Claims) {\n return a.sid === b.sid && a.sub === b.sub && a.org_id === b.org_id;\n}\n\nconst 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\nconst useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\nconst useApiReady = () => {\n const { authToken } = useApi();\n const isHydrated = useIsHydrated();\n\n return isHydrated && authToken !== undefined;\n};\nexport type { WidgetType, AuthToken, AuthTokenQueryData };\nexport {\n authTokenQueryKey,\n ApiProvider,\n useApi,\n useElevatedAccessToken,\n useApiReady,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-provider.d.cts","names":[],"sources":["../../../src/api/api-provider.tsx"],"mappings":";;KAKK;KAeA,4BAA4B;UAEvB;EACR;EACA;;UAGQ;EACR;EACA;EACA;EACA;EACA,YAAY;EACZ,iBAAiB;EACjB,oBAAoB,iBAAiB;;UAG7B;EACR;EACA;EACA;;cAGI,oBAAiB,YAAgB,sCACzB;UAaJ;EACR,WAAW;EACX;EACA,UAAU,MAAM;EAChB,YAAY;;cAGR,aAAa,MAAM,GAAG;cAqHtB,cAAM;cAUN;kBAAA;EA7JiC,oBAAA,iBAAA;;cAmKjC"}
1
+ {"version":3,"file":"api-provider.d.cts","names":[],"sources":["../../../src/api/api-provider.tsx"],"mappings":";;KAOK;KAeA,4BAA4B;UAEvB;EACR;EACA;;UAGQ;EACR;EACA;EACA;EACA;EACA,YAAY;EACZ,iBAAiB;EACjB,oBAAoB,iBAAiB;;UAG7B;EACR;EACA;EACA;;cAGI,oBAAiB,YAAgB,sCACzB;UAaJ;EACR,WAAW;EACX;EACA,UAAU,MAAM;EAChB,YAAY;;cAGR,aAAa,MAAM,GAAG;cAyJtB,cAAM;cAUN;kBAAA;EAjMiC,oBAAA,iBAAA;;cAuMjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"claims.cjs","names":[],"sources":["../../../src/api/claims.ts"],"sourcesContent":["interface Claims {\n sid?: string;\n sub?: string;\n sub_type?: string;\n sub_profile?: string;\n auth_time?: number;\n permissions?: string[];\n exp?: number;\n}\n\nexport function getAuthenticatedUserId(claims: Claims): string | undefined {\n const isUserSession =\n (claims.sub_profile === undefined || claims.sub_profile === \"user\") &&\n (claims.sub_type === \"authkit\" ||\n (claims.sub_type === undefined &&\n !!claims.sid &&\n typeof claims.auth_time === \"number\"));\n\n return isUserSession && claims.sub?.startsWith(\"user_\")\n ? claims.sub\n : undefined;\n}\n\nexport function getClaims(accessToken: string): Claims {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n}\n"],"mappings":";;AAUA,SAAgB,uBAAuB,QAAoC;CAQzE,QANG,OAAO,gBAAgB,UAAa,OAAO,gBAAgB,YAC3D,OAAO,aAAa,aAClB,OAAO,aAAa,UACnB,CAAC,CAAC,OAAO,OACT,OAAO,OAAO,cAAc,aAEV,OAAO,KAAK,WAAW,OAAO,IAClD,OAAO,MACP;AACN;AAEA,SAAgB,UAAU,aAA6B;CACrD,OAAO,KAAK,MAAM,KAAK,YAAY,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACnD"}
1
+ {"version":3,"file":"claims.cjs","names":[],"sources":["../../../src/api/claims.ts"],"sourcesContent":["export interface Claims {\n sid?: string;\n sub?: string;\n sub_type?: string;\n sub_profile?: string;\n org_id?: string;\n auth_time?: number;\n permissions?: string[];\n exp?: number;\n}\n\nexport function getAuthenticatedUserId(claims: Claims): string | undefined {\n const isUserSession =\n (claims.sub_profile === undefined || claims.sub_profile === \"user\") &&\n (claims.sub_type === \"authkit\" ||\n (claims.sub_type === undefined &&\n !!claims.sid &&\n typeof claims.auth_time === \"number\"));\n\n return isUserSession && claims.sub?.startsWith(\"user_\")\n ? claims.sub\n : undefined;\n}\n\nexport function getClaims(accessToken: string): Claims {\n return JSON.parse(atob(accessToken.split(\".\")[1]));\n}\n"],"mappings":";;AAWA,SAAgB,uBAAuB,QAAoC;CAQzE,QANG,OAAO,gBAAgB,UAAa,OAAO,gBAAgB,YAC3D,OAAO,aAAa,aAClB,OAAO,aAAa,UACnB,CAAC,CAAC,OAAO,OACT,OAAO,OAAO,cAAc,aAEV,OAAO,KAAK,WAAW,OAAO,IAClD,OAAO,MACP;AACN;AAEA,SAAgB,UAAU,aAA6B;CACrD,OAAO,KAAK,MAAM,KAAK,YAAY,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACnD"}
@@ -1,9 +1,10 @@
1
1
  //#region src/api/claims.d.ts
2
- interface Claims {
2
+ export interface Claims {
3
3
  sid?: string;
4
4
  sub?: string;
5
5
  sub_type?: string;
6
6
  sub_profile?: string;
7
+ org_id?: string;
7
8
  auth_time?: number;
8
9
  permissions?: string[];
9
10
  exp?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"claims.d.cts","names":[],"sources":["../../../src/api/claims.ts"],"mappings":";UAAU;EACR;EACA;EACA;EACA;EACA;EACA;EACA;;wBAGc,uBAAuB,QAAQ;wBAa/B,UAAU,sBAAsB"}
1
+ {"version":3,"file":"claims.d.cts","names":[],"sources":["../../../src/api/claims.ts"],"mappings":";iBAAiB;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;wBAGc,uBAAuB,QAAQ;wBAa/B,UAAU,sBAAsB"}
@@ -1,26 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_api_client_graphql_query_keys = require("./query-keys.cjs");
2
3
  const require_api_api_provider = require("../api-provider.cjs");
3
4
  const require_api_client_graphql_client = require("./client.cjs");
4
5
  let _tanstack_react_query = require("@tanstack/react-query");
5
6
  //#region src/api/client-graphql/hooks.ts
6
- const CLIENT_GRAPHQL_KEY_PREFIX = "client-graphql";
7
- function isClientGraphqlQueryKey(queryKey) {
8
- return queryKey[0] === CLIENT_GRAPHQL_KEY_PREFIX;
9
- }
10
- /**
11
- * React Query key for a Client GraphQL operation. Omit `variables` to address
12
- * every cached page/variant of an operation, e.g. when invalidating after a
13
- * mutation:
14
- *
15
- * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey("Sessions") });
16
- */
17
- function clientGraphqlQueryKey(operation, variables) {
18
- return variables === void 0 ? [CLIENT_GRAPHQL_KEY_PREFIX, operation] : [
19
- CLIENT_GRAPHQL_KEY_PREFIX,
20
- operation,
21
- variables
22
- ];
23
- }
24
7
  /**
25
8
  * Runs a Client GraphQL query through React Query. The query is held until
26
9
  * `ApiProvider` has resolved an auth token (`useApiReady`), mirroring the
@@ -56,8 +39,8 @@ function useClientGraphqlMutation({ mutationFn, ...options }) {
56
39
  });
57
40
  }
58
41
  //#endregion
59
- exports.clientGraphqlQueryKey = clientGraphqlQueryKey;
60
- exports.isClientGraphqlQueryKey = isClientGraphqlQueryKey;
42
+ exports.clientGraphqlQueryKey = require_api_client_graphql_query_keys.clientGraphqlQueryKey;
43
+ exports.isClientGraphqlQueryKey = require_api_client_graphql_query_keys.isClientGraphqlQueryKey;
61
44
  exports.useClientGraphqlMutation = useClientGraphqlMutation;
62
45
  exports.useClientGraphqlQuery = useClientGraphqlQuery;
63
46
 
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.cjs","names":["useClientGraphql","useApiReady","useQuery","useMutation"],"sources":["../../../../src/api/client-graphql/hooks.ts"],"sourcesContent":["import { useMutation, useQuery } from \"@tanstack/react-query\";\nimport type {\n QueryKey,\n UseMutationOptions,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport { useApiReady } from \"../api-provider.js\";\nimport { useClientGraphql } from \"./client.js\";\nimport type { Sdk } from \"./generated.js\";\n\nexport type ClientGraphqlOperation = keyof Sdk;\n\nexport type ClientGraphqlVariables<K extends ClientGraphqlOperation> =\n Parameters<Sdk[K]>[0];\n\nconst CLIENT_GRAPHQL_KEY_PREFIX = \"client-graphql\";\n\nexport function isClientGraphqlQueryKey(queryKey: QueryKey): boolean {\n return queryKey[0] === CLIENT_GRAPHQL_KEY_PREFIX;\n}\n\n/**\n * React Query key for a Client GraphQL operation. Omit `variables` to address\n * every cached page/variant of an operation, e.g. when invalidating after a\n * mutation:\n *\n * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey(\"Sessions\") });\n */\nexport function clientGraphqlQueryKey<K extends ClientGraphqlOperation>(\n operation: K,\n variables?: ClientGraphqlVariables<K>,\n): QueryKey {\n return variables === undefined\n ? [CLIENT_GRAPHQL_KEY_PREFIX, operation]\n : [CLIENT_GRAPHQL_KEY_PREFIX, operation, variables];\n}\n\ntype ClientGraphqlQueryOptions<TResult, TData> = Omit<\n UseQueryOptions<TResult, Error, TData>,\n \"queryFn\"\n> & {\n queryFn: (sdk: Sdk) => Promise<TResult>;\n};\n\n/**\n * Runs a Client GraphQL query through React Query. The query is held until\n * `ApiProvider` has resolved an auth token (`useApiReady`), mirroring the\n * generated REST hooks.\n *\n * useClientGraphqlQuery({\n * queryKey: clientGraphqlQueryKey(\"ListSsoConnections\"),\n * queryFn: (sdk) => sdk.ListSsoConnections(),\n * });\n */\nexport function useClientGraphqlQuery<TResult, TData = TResult>({\n queryFn,\n enabled = true,\n ...options\n}: ClientGraphqlQueryOptions<TResult, TData>) {\n const sdk = useClientGraphql();\n const isApiReady = useApiReady();\n\n return useQuery<TResult, Error, TData>({\n ...options,\n queryFn: () => queryFn(sdk),\n enabled: isApiReady && enabled,\n });\n}\n\ntype ClientGraphqlMutationOptions<TResult, TVariables, TContext> = Omit<\n UseMutationOptions<TResult, Error, TVariables, TContext>,\n \"mutationFn\"\n> & {\n mutationFn: (sdk: Sdk, variables: TVariables) => Promise<TResult>;\n};\n\n/**\n * Runs a Client GraphQL mutation through React Query. Invalidate the affected\n * queries in `onSuccess` using `clientGraphqlQueryKey`.\n *\n * useClientGraphqlMutation({\n * mutationFn: (sdk, input: RevokeSessionInput) => sdk.RevokeSession({ input }),\n * });\n */\nexport function useClientGraphqlMutation<\n TResult,\n TVariables = void,\n TContext = unknown,\n>({\n mutationFn,\n ...options\n}: ClientGraphqlMutationOptions<TResult, TVariables, TContext>) {\n const sdk = useClientGraphql();\n\n return useMutation<TResult, Error, TVariables, TContext>({\n ...options,\n mutationFn: (variables) => mutationFn(sdk, variables),\n });\n}\n"],"mappings":";;;;;AAeA,MAAM,4BAA4B;AAElC,SAAgB,wBAAwB,UAA6B;CACnE,OAAO,SAAS,OAAO;AACzB;;;;;;;;AASA,SAAgB,sBACd,WACA,WACU;CACV,OAAO,cAAc,SACjB,CAAC,2BAA2B,SAAS,IACrC;EAAC;EAA2B;EAAW;CAAS;AACtD;;;;;;;;;;;AAmBA,SAAgB,sBAAgD,EAC9D,SACA,UAAU,MACV,GAAG,WACyC;CAC5C,MAAM,MAAMA,kCAAAA,iBAAiB;CAC7B,MAAM,aAAaC,yBAAAA,YAAY;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAgC;EACrC,GAAG;EACH,eAAe,QAAQ,GAAG;EAC1B,SAAS,cAAc;CACzB,CAAC;AACH;;;;;;;;;AAiBA,SAAgB,yBAId,EACA,YACA,GAAG,WAC2D;CAC9D,MAAM,MAAMF,kCAAAA,iBAAiB;CAE7B,QAAA,GAAOG,sBAAAA,YAAAA,CAAkD;EACvD,GAAG;EACH,aAAa,cAAc,WAAW,KAAK,SAAS;CACtD,CAAC;AACH"}
1
+ {"version":3,"file":"hooks.cjs","names":["useClientGraphql","useApiReady","useQuery","useMutation"],"sources":["../../../../src/api/client-graphql/hooks.ts"],"sourcesContent":["import { useMutation, useQuery } from \"@tanstack/react-query\";\nimport type {\n UseMutationOptions,\n UseQueryOptions,\n} from \"@tanstack/react-query\";\nimport { useApiReady } from \"../api-provider.js\";\nimport { useClientGraphql } from \"./client.js\";\nimport type { Sdk } from \"./generated.js\";\n\nexport {\n clientGraphqlQueryKey,\n isClientGraphqlQueryKey,\n} from \"./query-keys.js\";\nexport type {\n ClientGraphqlOperation,\n ClientGraphqlVariables,\n} from \"./query-keys.js\";\n\ntype ClientGraphqlQueryOptions<TResult, TData> = Omit<\n UseQueryOptions<TResult, Error, TData>,\n \"queryFn\"\n> & {\n queryFn: (sdk: Sdk) => Promise<TResult>;\n};\n\n/**\n * Runs a Client GraphQL query through React Query. The query is held until\n * `ApiProvider` has resolved an auth token (`useApiReady`), mirroring the\n * generated REST hooks.\n *\n * useClientGraphqlQuery({\n * queryKey: clientGraphqlQueryKey(\"ListSsoConnections\"),\n * queryFn: (sdk) => sdk.ListSsoConnections(),\n * });\n */\nexport function useClientGraphqlQuery<TResult, TData = TResult>({\n queryFn,\n enabled = true,\n ...options\n}: ClientGraphqlQueryOptions<TResult, TData>) {\n const sdk = useClientGraphql();\n const isApiReady = useApiReady();\n\n return useQuery<TResult, Error, TData>({\n ...options,\n queryFn: () => queryFn(sdk),\n enabled: isApiReady && enabled,\n });\n}\n\ntype ClientGraphqlMutationOptions<TResult, TVariables, TContext> = Omit<\n UseMutationOptions<TResult, Error, TVariables, TContext>,\n \"mutationFn\"\n> & {\n mutationFn: (sdk: Sdk, variables: TVariables) => Promise<TResult>;\n};\n\n/**\n * Runs a Client GraphQL mutation through React Query. Invalidate the affected\n * queries in `onSuccess` using `clientGraphqlQueryKey`.\n *\n * useClientGraphqlMutation({\n * mutationFn: (sdk, input: RevokeSessionInput) => sdk.RevokeSession({ input }),\n * });\n */\nexport function useClientGraphqlMutation<\n TResult,\n TVariables = void,\n TContext = unknown,\n>({\n mutationFn,\n ...options\n}: ClientGraphqlMutationOptions<TResult, TVariables, TContext>) {\n const sdk = useClientGraphql();\n\n return useMutation<TResult, Error, TVariables, TContext>({\n ...options,\n mutationFn: (variables) => mutationFn(sdk, variables),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmCA,SAAgB,sBAAgD,EAC9D,SACA,UAAU,MACV,GAAG,WACyC;CAC5C,MAAM,MAAMA,kCAAAA,iBAAiB;CAC7B,MAAM,aAAaC,yBAAAA,YAAY;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAgC;EACrC,GAAG;EACH,eAAe,QAAQ,GAAG;EAC1B,SAAS,cAAc;CACzB,CAAC;AACH;;;;;;;;;AAiBA,SAAgB,yBAId,EACA,YACA,GAAG,WAC2D;CAC9D,MAAM,MAAMF,kCAAAA,iBAAiB;CAE7B,QAAA,GAAOG,sBAAAA,YAAAA,CAAkD;EACvD,GAAG;EACH,aAAa,cAAc,WAAW,KAAK,SAAS;CACtD,CAAC;AACH"}
@@ -1,17 +1,7 @@
1
1
  import { Sdk } from "./generated.cjs";
2
- import { QueryKey, UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
2
+ import { ClientGraphqlOperation, ClientGraphqlVariables, clientGraphqlQueryKey, isClientGraphqlQueryKey } from "./query-keys.cjs";
3
+ import { UseMutationOptions, UseQueryOptions } from "@tanstack/react-query";
3
4
  //#region src/api/client-graphql/hooks.d.ts
4
- export type ClientGraphqlOperation = keyof Sdk;
5
- export type ClientGraphqlVariables<K extends ClientGraphqlOperation> = Parameters<Sdk[K]>[0];
6
- export declare function isClientGraphqlQueryKey(queryKey: QueryKey): boolean;
7
- /**
8
- * React Query key for a Client GraphQL operation. Omit `variables` to address
9
- * every cached page/variant of an operation, e.g. when invalidating after a
10
- * mutation:
11
- *
12
- * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey("Sessions") });
13
- */
14
- export declare function clientGraphqlQueryKey<K extends ClientGraphqlOperation>(operation: K, variables?: ClientGraphqlVariables<K>): QueryKey;
15
5
  type ClientGraphqlQueryOptions<TResult, TData> = Omit<UseQueryOptions<TResult, Error, TData>, "queryFn"> & {
16
6
  queryFn: (sdk: Sdk) => Promise<TResult>;
17
7
  };
@@ -39,4 +29,5 @@ type ClientGraphqlMutationOptions<TResult, TVariables, TContext> = Omit<UseMutat
39
29
  */
40
30
  export declare function useClientGraphqlMutation<TResult, TVariables = void, TContext = unknown>({ mutationFn, ...options }: ClientGraphqlMutationOptions<TResult, TVariables, TContext>): import("@tanstack/react-query").UseMutationResult<TResult, Error, TVariables, TContext>;
41
31
  //#endregion
32
+ export { type ClientGraphqlOperation, type ClientGraphqlVariables, clientGraphqlQueryKey, isClientGraphqlQueryKey };
42
33
  //# sourceMappingURL=hooks.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.cts","names":[],"sources":["../../../../src/api/client-graphql/hooks.ts"],"mappings":";;;YAUY,+BAA+B;YAE/B,uBAAuB,UAAU,0BAC3C,WAAW,IAAI;wBAID,wBAAwB,UAAU;;;;;;;;wBAWlC,sBAAsB,UAAU,wBAC9C,WAAW,GACX,YAAY,uBAAuB,KAClC;KAME,0BAA0B,SAAS,SAAS,KAC/C,gBAAgB,SAAS,OAAO;EAGhC,UAAU,KAAK,QAAQ,QAAQ;;;;;;;;;;;;wBAajB,sBAAsB,SAAS,QAAQ,WACrD,SACA,YACG,WACF,0BAA0B,SAAS,yCAAM,eAAA,OAAA;KAWvC,6BAA6B,SAAS,YAAY,YAAY,KACjE,mBAAmB,SAAS,OAAO,YAAY;EAG/C,aAAa,KAAK,KAAK,WAAW,eAAe,QAAQ;;;;;;;;;;wBAW3C,yBACd,SACA,mBACA,sBAEA,eACG,WACF,6BAA6B,SAAS,YAAY,4CAAS,kBAAA,SAAA,OAAA,YAAA"}
1
+ {"version":3,"file":"hooks.d.cts","names":[],"sources":["../../../../src/api/client-graphql/hooks.ts"],"mappings":";;;;KAkBK,0BAA0B,SAAS,SAAS,KAC/C,gBAAgB,SAAS,OAAO;EAGhC,UAAU,KAAK,QAAQ,QAAQ;;;;;;;;;;;;wBAajB,sBAAsB,SAAS,QAAQ,WACrD,SACA,YACG,WACF,0BAA0B,SAAS,yCAAM,eAAA,OAAA;KAWvC,6BAA6B,SAAS,YAAY,YAAY,KACjE,mBAAmB,SAAS,OAAO,YAAY;EAG/C,aAAa,KAAK,KAAK,WAAW,eAAe,QAAQ;;;;;;;;;;wBAW3C,yBACd,SACA,mBACA,sBAEA,eACG,WACF,6BAA6B,SAAS,YAAY,4CAAS,kBAAA,SAAA,OAAA,YAAA"}
@@ -0,0 +1,25 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/api/client-graphql/query-keys.ts
3
+ const CLIENT_GRAPHQL_KEY_PREFIX = "client-graphql";
4
+ function isClientGraphqlQueryKey(queryKey) {
5
+ return queryKey[0] === CLIENT_GRAPHQL_KEY_PREFIX;
6
+ }
7
+ /**
8
+ * React Query key for a Client GraphQL operation. Omit `variables` to address
9
+ * every cached page/variant of an operation, e.g. when invalidating after a
10
+ * mutation:
11
+ *
12
+ * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey("Sessions") });
13
+ */
14
+ function clientGraphqlQueryKey(operation, variables) {
15
+ return variables === void 0 ? [CLIENT_GRAPHQL_KEY_PREFIX, operation] : [
16
+ CLIENT_GRAPHQL_KEY_PREFIX,
17
+ operation,
18
+ variables
19
+ ];
20
+ }
21
+ //#endregion
22
+ exports.clientGraphqlQueryKey = clientGraphqlQueryKey;
23
+ exports.isClientGraphqlQueryKey = isClientGraphqlQueryKey;
24
+
25
+ //# sourceMappingURL=query-keys.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keys.cjs","names":[],"sources":["../../../../src/api/client-graphql/query-keys.ts"],"sourcesContent":["import type { QueryKey } from \"@tanstack/react-query\";\nimport type { Sdk } from \"./generated.js\";\n\nexport type ClientGraphqlOperation = keyof Sdk;\n\nexport type ClientGraphqlVariables<K extends ClientGraphqlOperation> =\n Parameters<Sdk[K]>[0];\n\nconst CLIENT_GRAPHQL_KEY_PREFIX = \"client-graphql\";\n\nexport function isClientGraphqlQueryKey(queryKey: QueryKey): boolean {\n return queryKey[0] === CLIENT_GRAPHQL_KEY_PREFIX;\n}\n\n/**\n * React Query key for a Client GraphQL operation. Omit `variables` to address\n * every cached page/variant of an operation, e.g. when invalidating after a\n * mutation:\n *\n * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey(\"Sessions\") });\n */\nexport function clientGraphqlQueryKey<K extends ClientGraphqlOperation>(\n operation: K,\n variables?: ClientGraphqlVariables<K>,\n): QueryKey {\n return variables === undefined\n ? [CLIENT_GRAPHQL_KEY_PREFIX, operation]\n : [CLIENT_GRAPHQL_KEY_PREFIX, operation, variables];\n}\n"],"mappings":";;AAQA,MAAM,4BAA4B;AAElC,SAAgB,wBAAwB,UAA6B;CACnE,OAAO,SAAS,OAAO;AACzB;;;;;;;;AASA,SAAgB,sBACd,WACA,WACU;CACV,OAAO,cAAc,SACjB,CAAC,2BAA2B,SAAS,IACrC;EAAC;EAA2B;EAAW;CAAS;AACtD"}
@@ -0,0 +1,16 @@
1
+ import { Sdk } from "./generated.cjs";
2
+ import { QueryKey } from "@tanstack/react-query";
3
+ //#region src/api/client-graphql/query-keys.d.ts
4
+ export type ClientGraphqlOperation = keyof Sdk;
5
+ export type ClientGraphqlVariables<K extends ClientGraphqlOperation> = Parameters<Sdk[K]>[0];
6
+ export declare function isClientGraphqlQueryKey(queryKey: QueryKey): boolean;
7
+ /**
8
+ * React Query key for a Client GraphQL operation. Omit `variables` to address
9
+ * every cached page/variant of an operation, e.g. when invalidating after a
10
+ * mutation:
11
+ *
12
+ * queryClient.invalidateQueries({ queryKey: clientGraphqlQueryKey("Sessions") });
13
+ */
14
+ export declare function clientGraphqlQueryKey<K extends ClientGraphqlOperation>(operation: K, variables?: ClientGraphqlVariables<K>): QueryKey;
15
+ //#endregion
16
+ //# sourceMappingURL=query-keys.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-keys.d.cts","names":[],"sources":["../../../../src/api/client-graphql/query-keys.ts"],"mappings":";;;YAGY,+BAA+B;YAE/B,uBAAuB,UAAU,0BAC3C,WAAW,IAAI;wBAID,wBAAwB,UAAU;;;;;;;;wBAWlC,sBAAsB,UAAU,wBAC9C,WAAW,GACX,YAAY,uBAAuB,KAClC"}
@@ -49,7 +49,7 @@ const CopyText = ({ value, label }) => {
49
49
  title: copyLabel,
50
50
  variant: "ghost",
51
51
  size: "1",
52
- "aria-labelledby": copyLabel,
52
+ "aria-label": copyLabel,
53
53
  className: require_lib_widget_dom_props.namespaceClassName("copy-text__copy"),
54
54
  onClick: async (event) => {
55
55
  const button = event.currentTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"copy-text.cjs","names":["React","useTranslation","CheckIcon","CopyIcon","Flex","namespaceClassName","Text","IconButton"],"sources":["../../../src/components/copy-text.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport { Flex, Text } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { useTranslation } from \"../lib/i18n/use-translation.js\";\nimport { namespaceClassName } from \"../lib/widget-dom-props.js\";\nimport { IconButton } from \"./elements.js\";\n\ninterface CopyTextProps {\n value: string;\n /** Accessible label for the copy button. Defaults to a generic \"Copy\". */\n label?: string;\n}\n\n/**\n * Minimal reusable copy-on-hover text row, modeled on the dashboard's\n * `CopyText`: renders `value` on a single truncated line with a copy button\n * that reveals on hover or keyboard focus (see `copy-text.css`). The copy\n * button blurs itself shortly after a copy so it doesn't linger via\n * `:focus-within`.\n */\nconst CopyText: React.FC<CopyTextProps> = ({ value, label }) => {\n const [copied, setCopied] = React.useState(false);\n const stateTimeoutRef = React.useRef<number | undefined>(undefined);\n const blurTimeoutRef = React.useRef<number | undefined>(undefined);\n const translate = useTranslation();\n\n const copyLabel =\n label ??\n translate({\n defaultMessage: \"Copy to clipboard\",\n id: \"44uBwv\",\n description: \"Default accessible label for a copy-to-clipboard button\",\n });\n\n React.useEffect(() => {\n return () => {\n window.clearTimeout(stateTimeoutRef.current);\n window.clearTimeout(blurTimeoutRef.current);\n };\n }, []);\n\n const Icon = copied ? CheckIcon : CopyIcon;\n\n return (\n <Flex className={namespaceClassName(\"copy-text\")} gap=\"2\" align=\"center\">\n <Text\n size=\"2\"\n title={value}\n className={namespaceClassName(\"copy-text__value\")}\n >\n {value}\n </Text>\n <IconButton\n type=\"button\"\n title={copyLabel}\n variant=\"ghost\"\n size=\"1\"\n aria-labelledby={copyLabel}\n className={namespaceClassName(\"copy-text__copy\")}\n onClick={async (event) => {\n const button = event.currentTarget;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n stateTimeoutRef.current = window.setTimeout(\n () => setCopied(false),\n 2000,\n );\n } catch {\n // clipboard unavailable; ignore\n }\n // Blur after the confirmation so the button doesn't stay revealed\n // via :focus-within once the pointer leaves.\n blurTimeoutRef.current = window.setTimeout(() => {\n if (button.isConnected) {\n button.blur();\n }\n }, 1800);\n }}\n >\n <Icon aria-hidden />\n </IconButton>\n </Flex>\n );\n};\nexport type { CopyTextProps };\nexport { CopyText };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,YAAqC,EAAE,OAAO,YAAY;CAC9D,MAAM,CAAC,QAAQ,aAAaA,MAAM,SAAS,KAAK;CAChD,MAAM,kBAAkBA,MAAM,OAA2B,MAAS;CAClE,MAAM,iBAAiBA,MAAM,OAA2B,MAAS;CACjE,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,YACJ,SACA,UAAU;EACR,gBAAgB;EAChB,IAAI;EACJ,aAAa;CACf,CAAC;CAEH,MAAM,gBAAgB;EACpB,aAAa;GACX,OAAO,aAAa,gBAAgB,OAAO;GAC3C,OAAO,aAAa,eAAe,OAAO;EAC5C;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,OAAO,SAASC,sBAAAA,YAAYC,sBAAAA;CAElC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,iBAAAA,MAAD;EAAM,WAAWC,6BAAAA,mBAAmB,WAAW;EAAG,KAAI;EAAI,OAAM;EAAhE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD;GACE,MAAK;GACL,OAAO;GACP,WAAWD,6BAAAA,mBAAmB,kBAAkB;GAE/C,UAAA;EACG,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAACE,wCAAAA,YAAD;GACE,MAAK;GACL,OAAO;GACP,SAAQ;GACR,MAAK;GACL,mBAAiB;GACjB,WAAWF,6BAAAA,mBAAmB,iBAAiB;GAC/C,SAAS,OAAO,UAAU;IACxB,MAAM,SAAS,MAAM;IACrB,IAAI;KACF,MAAM,UAAU,UAAU,UAAU,KAAK;KACzC,UAAU,IAAI;KACd,gBAAgB,UAAU,OAAO,iBACzB,UAAU,KAAK,GACrB,GACF;IACF,QAAQ,CAER;IAGA,eAAe,UAAU,OAAO,iBAAiB;KAC/C,IAAI,OAAO,aACT,OAAO,KAAK;IAEhB,GAAG,IAAI;GACT;GAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAM,eAAA,KAAa,CAAA;EACT,CAAA,CACR;;AAEV"}
1
+ {"version":3,"file":"copy-text.cjs","names":["React","useTranslation","CheckIcon","CopyIcon","Flex","namespaceClassName","Text","IconButton"],"sources":["../../../src/components/copy-text.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@radix-ui/react-icons\";\nimport { Flex, Text } from \"@radix-ui/themes\";\nimport * as React from \"react\";\nimport { useTranslation } from \"../lib/i18n/use-translation.js\";\nimport { namespaceClassName } from \"../lib/widget-dom-props.js\";\nimport { IconButton } from \"./elements.js\";\n\ninterface CopyTextProps {\n value: string;\n /** Accessible label for the copy button. Defaults to a generic \"Copy\". */\n label?: string;\n}\n\n/**\n * Minimal reusable copy-on-hover text row, modeled on the dashboard's\n * `CopyText`: renders `value` on a single truncated line with a copy button\n * that reveals on hover or keyboard focus (see `copy-text.css`). The copy\n * button blurs itself shortly after a copy so it doesn't linger via\n * `:focus-within`.\n */\nconst CopyText: React.FC<CopyTextProps> = ({ value, label }) => {\n const [copied, setCopied] = React.useState(false);\n const stateTimeoutRef = React.useRef<number | undefined>(undefined);\n const blurTimeoutRef = React.useRef<number | undefined>(undefined);\n const translate = useTranslation();\n\n const copyLabel =\n label ??\n translate({\n defaultMessage: \"Copy to clipboard\",\n id: \"44uBwv\",\n description: \"Default accessible label for a copy-to-clipboard button\",\n });\n\n React.useEffect(() => {\n return () => {\n window.clearTimeout(stateTimeoutRef.current);\n window.clearTimeout(blurTimeoutRef.current);\n };\n }, []);\n\n const Icon = copied ? CheckIcon : CopyIcon;\n\n return (\n <Flex className={namespaceClassName(\"copy-text\")} gap=\"2\" align=\"center\">\n <Text\n size=\"2\"\n title={value}\n className={namespaceClassName(\"copy-text__value\")}\n >\n {value}\n </Text>\n <IconButton\n type=\"button\"\n title={copyLabel}\n variant=\"ghost\"\n size=\"1\"\n aria-label={copyLabel}\n className={namespaceClassName(\"copy-text__copy\")}\n onClick={async (event) => {\n const button = event.currentTarget;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n stateTimeoutRef.current = window.setTimeout(\n () => setCopied(false),\n 2000,\n );\n } catch {\n // clipboard unavailable; ignore\n }\n // Blur after the confirmation so the button doesn't stay revealed\n // via :focus-within once the pointer leaves.\n blurTimeoutRef.current = window.setTimeout(() => {\n if (button.isConnected) {\n button.blur();\n }\n }, 1800);\n }}\n >\n <Icon aria-hidden />\n </IconButton>\n </Flex>\n );\n};\nexport type { CopyTextProps };\nexport { CopyText };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,YAAqC,EAAE,OAAO,YAAY;CAC9D,MAAM,CAAC,QAAQ,aAAaA,MAAM,SAAS,KAAK;CAChD,MAAM,kBAAkBA,MAAM,OAA2B,MAAS;CAClE,MAAM,iBAAiBA,MAAM,OAA2B,MAAS;CACjE,MAAM,YAAYC,iCAAAA,eAAe;CAEjC,MAAM,YACJ,SACA,UAAU;EACR,gBAAgB;EAChB,IAAI;EACJ,aAAa;CACf,CAAC;CAEH,MAAM,gBAAgB;EACpB,aAAa;GACX,OAAO,aAAa,gBAAgB,OAAO;GAC3C,OAAO,aAAa,eAAe,OAAO;EAC5C;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,OAAO,SAASC,sBAAAA,YAAYC,sBAAAA;CAElC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,iBAAAA,MAAD;EAAM,WAAWC,6BAAAA,mBAAmB,WAAW;EAAG,KAAI;EAAI,OAAM;EAAhE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD;GACE,MAAK;GACL,OAAO;GACP,WAAWD,6BAAAA,mBAAmB,kBAAkB;GAE/C,UAAA;EACG,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAACE,wCAAAA,YAAD;GACE,MAAK;GACL,OAAO;GACP,SAAQ;GACR,MAAK;GACL,cAAY;GACZ,WAAWF,6BAAAA,mBAAmB,iBAAiB;GAC/C,SAAS,OAAO,UAAU;IACxB,MAAM,SAAS,MAAM;IACrB,IAAI;KACF,MAAM,UAAU,UAAU,UAAU,KAAK;KACzC,UAAU,IAAI;KACd,gBAAgB,UAAU,OAAO,iBACzB,UAAU,KAAK,GACrB,GACF;IACF,QAAQ,CAER;IAGA,eAAe,UAAU,OAAO,iBAAiB;KAC/C,IAAI,OAAO,aACT,OAAO,KAAK;IAEhB,GAAG,IAAI;GACT;GAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAM,eAAA,KAAa,CAAA;EACT,CAAA,CACR;;AAEV"}
@@ -142,6 +142,7 @@ const OtpInput = react.forwardRef(function OtpInput({ style, readOnly, autoCompl
142
142
  } else if (event.key === "Backspace" && char === "") focusSibling(event.currentTarget, { back: true });
143
143
  else if (event.key === "Enter" && char !== "") otpContext.onEnterPressed();
144
144
  },
145
+ "data-index": index,
145
146
  ...props
146
147
  })
147
148
  })