@burdenoff/fluidgrids-fe-sdk 2026.1104.3 → 2026.1105.1

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 (63) hide show
  1. package/README.md +38 -0
  2. package/dist/ExecutionDetailPage-YBAMVPMB.js +26 -0
  3. package/dist/{WorkflowsList-YFD2RKKQ.js → ExecutionsListPage-NQIQXMTY.js} +10 -9
  4. package/dist/{WorkflowBuilder-4I44FWII.js → WorkflowBuilder-CRR5WP4V.js} +15 -14
  5. package/dist/{ExecutionsListPage-EZ65FXER.js → WorkflowsList-EV725VG5.js} +10 -9
  6. package/dist/{agentTools-SZZN6TP3.js → agentTools-PN4W7QZH.js} +7 -6
  7. package/dist/{chunk-4YCMMBSK.js → chunk-2QOAJF7V.js} +2 -2
  8. package/dist/{chunk-NTWG3CJX.js → chunk-3IXU7WUC.js} +32 -21
  9. package/dist/{chunk-KHXRYQYP.js → chunk-4QB6S7YW.js} +3 -2
  10. package/dist/{chunk-NJRCAE6K.js → chunk-6EZJ5J3B.js} +5 -5
  11. package/dist/{chunk-BIB7IH26.js → chunk-6P7DOBVN.js} +4 -4
  12. package/dist/{chunk-5D4XS3WJ.js → chunk-AG3VC7Y2.js} +17 -3
  13. package/dist/{chunk-NGXJHYV5.js → chunk-AMXJLVZN.js} +2 -2
  14. package/dist/{chunk-PXIFUMLA.js → chunk-AU7LACOY.js} +16 -11
  15. package/dist/{chunk-NIY6R42C.js → chunk-AZKVI4YN.js} +5 -4
  16. package/dist/{chunk-Q72EOY4T.js → chunk-BHAKNT5M.js} +9 -3
  17. package/dist/{chunk-AAIZ6S6E.js → chunk-C26QAWCT.js} +69 -87
  18. package/dist/{chunk-SS7Y66P5.js → chunk-CGR3AEZU.js} +2 -2
  19. package/dist/{chunk-NYBL5WHP.js → chunk-D7G5VWSH.js} +3 -3
  20. package/dist/{chunk-XCSCD3IU.js → chunk-DANOMJ5I.js} +7 -6
  21. package/dist/{chunk-F7LQL43U.js → chunk-EC2AN74G.js} +1 -1
  22. package/dist/{chunk-MF7JLSJX.js → chunk-FCT6POFX.js} +11 -2
  23. package/dist/{chunk-YYVRBROH.js → chunk-FJSXXO5W.js} +1 -1
  24. package/dist/{chunk-5UHAB75U.js → chunk-GVIYGJQG.js} +1 -1
  25. package/dist/{chunk-TBHAZK52.js → chunk-HLAUK5GM.js} +1 -1
  26. package/dist/{chunk-AFX3EKFN.js → chunk-HOTVUVZG.js} +15 -3
  27. package/dist/{chunk-DFIX6YWP.js → chunk-I3QPAEL6.js} +39 -20
  28. package/dist/{chunk-IK7IGG6T.js → chunk-JC4D7RQ6.js} +8 -7
  29. package/dist/{chunk-GEY7RXRZ.js → chunk-JDQYGH4Q.js} +4 -4
  30. package/dist/{chunk-4EUEKSEQ.js → chunk-L2N6DDOI.js} +2 -2
  31. package/dist/{chunk-WTV6SQYK.js → chunk-L44BRLW5.js} +12 -11
  32. package/dist/{chunk-OMB3WMDQ.js → chunk-MQN6YDX4.js} +10 -9
  33. package/dist/{chunk-XNU2PLJ2.js → chunk-MSQAULLG.js} +6 -5
  34. package/dist/{chunk-ZDCJPQ5M.js → chunk-MZFJL4X3.js} +1 -1
  35. package/dist/{chunk-X6PIU7FE.js → chunk-O2EB7UT2.js} +3 -2
  36. package/dist/{chunk-ON7LK6QH.js → chunk-R3Z7W4EX.js} +5 -4
  37. package/dist/chunk-UEG2WC3G.js +502 -0
  38. package/dist/chunk-US5QSLPV.js +316 -0
  39. package/dist/{chunk-VDJFTZ2H.js → chunk-VFVN7D3A.js} +2 -1
  40. package/dist/{chunk-D4WA2M2N.js → chunk-XLI75E3D.js} +3 -2
  41. package/dist/client-YVZMLEQX.js +3 -0
  42. package/dist/config-66FUPSG5.js +1 -0
  43. package/dist/executions.js +15 -14
  44. package/dist/global-client-N5EIFW6T.js +3 -0
  45. package/dist/history.js +8 -7
  46. package/dist/index.d.ts +96 -133
  47. package/dist/index.js +91 -72
  48. package/dist/{node-detail-view-GAGSLHAO.js → node-detail-view-3VG7XFIZ.js} +11 -10
  49. package/dist/nodes.js +4 -2
  50. package/dist/observability.js +8 -7
  51. package/dist/{quick-config-panel-44RBX6YR.js → quick-config-panel-GB7SDWHD.js} +8 -7
  52. package/dist/settings.js +9 -8
  53. package/dist/templates.js +14 -13
  54. package/dist/{workflow-builder-BMGVSwpy.d.ts → workflow-builder-7vv9dCdp.d.ts} +413 -2
  55. package/dist/workflow-builder.d.ts +2 -1
  56. package/dist/workflow-builder.js +16 -15
  57. package/dist/workflows-list.js +10 -9
  58. package/package.json +1 -1
  59. package/dist/ExecutionDetailPage-ND2VMU45.js +0 -25
  60. package/dist/chunk-6AMNEX2Y.js +0 -214
  61. package/dist/client-EYQDMR4O.js +0 -1
  62. package/dist/config-3DBXLCK3.js +0 -1
  63. package/dist/global-client-O2HCG5CJ.js +0 -1
package/README.md CHANGED
@@ -237,6 +237,44 @@ The SDK uses Tailwind CSS for styling. Make sure you have Tailwind configured in
237
237
  import '@burdenoff/fluidgrids-fe-sdk/styles.css';
238
238
  ```
239
239
 
240
+ ## Embedding: theme, token refresh and events (BOFF-9961)
241
+
242
+ `FluidGridsProvider`, `FluidGridsRoot` and `WorkflowBuilder` take three
243
+ embedding props (also settable with `setFluidGridsConfig`):
244
+
245
+ ```tsx
246
+ <FluidGridsProvider
247
+ workspaceId={workspaceId}
248
+ apiGatewayUrl={workspaceGraphqlUrl}
249
+ authToken={token}
250
+ theme={{ mode: 'light', colors: { primary: '#2563eb' }, radius: { base: '10px' } }}
251
+ auth={{ onTokenExpired: () => session.refresh() }}
252
+ onEvent={(name, payload) => {
253
+ if (name === 'run:completed') console.log(payload.runId, payload.status);
254
+ }}
255
+ >
256
+ {children}
257
+ </FluidGridsProvider>
258
+ ```
259
+
260
+ - **`theme`** — `"light"`, `"dark"` or `{ mode?, colors?, radius?, font? }`.
261
+ Each token maps to fe-libs semantic CSS variables (`FLUIDGRIDS_THEME_TOKEN_MAP`);
262
+ values are validated (`themeToCssVariables`) and applied document-wide as
263
+ inline properties on `<html>`, restored on unmount (`applyFluidGridsTheme`,
264
+ `useFluidGridsTheme`). The public embed viewer also reads `accent`, `radius`
265
+ and `font` query parameters next to `theme`.
266
+ - **`auth.onTokenExpired`** — called once per expired-session failure (401,
267
+ `UNAUTHENTICATED`, expired/revoked credential); concurrent failures share one
268
+ call; the request is retried once with the new token; on rejection the SDK
269
+ emits `auth:failed` and surfaces the original error. Host-injected Apollo
270
+ clients add `createFluidGridsTokenRefreshLink()` before their auth link.
271
+ - **`onEvent`** — typed `FluidGridsEventMap`: `workflow:saved`,
272
+ `workflow:activated`, `run:started`, `run:completed`, `node:selected`,
273
+ `error`, `auth:failed`. Contract version `FLUIDGRIDS_EVENTS_VERSION` (semver:
274
+ additive = minor, payload break = major).
275
+
276
+ Full guide: [docs.fluidgrids.ai/developers/embedding](https://docs.fluidgrids.ai/developers/embedding).
277
+
240
278
  ## Branding
241
279
 
242
280
  Every workflow canvas the SDK renders — `WorkflowBuilder`, `WorkflowBuilderCore`,
@@ -0,0 +1,26 @@
1
+ export { ExecutionDetailPage } from './chunk-L44BRLW5.js';
2
+ import './chunk-XLI75E3D.js';
3
+ import './chunk-MSQAULLG.js';
4
+ import './chunk-AG3VC7Y2.js';
5
+ import './chunk-CGR3AEZU.js';
6
+ import './chunk-AMXJLVZN.js';
7
+ import './chunk-5ERAJC2I.js';
8
+ import './chunk-6P7DOBVN.js';
9
+ import './chunk-JDLQ6QIB.js';
10
+ import './chunk-EC2AN74G.js';
11
+ import './chunk-Y53CVZVV.js';
12
+ import './chunk-FNZZ5JJL.js';
13
+ import './chunk-HOTVUVZG.js';
14
+ import './chunk-PJAWNFJV.js';
15
+ import './chunk-H4ERTSMX.js';
16
+ import './chunk-C26QAWCT.js';
17
+ import './chunk-5375NUIO.js';
18
+ import './chunk-JL7CASN5.js';
19
+ import './chunk-OCJTTHTS.js';
20
+ import './chunk-AU7LACOY.js';
21
+ import './chunk-G77IGC3Y.js';
22
+ import './chunk-AVHBWJRY.js';
23
+ import './chunk-UULVIT25.js';
24
+ import './chunk-3IXU7WUC.js';
25
+ import './chunk-US5QSLPV.js';
26
+ import './chunk-UEG2WC3G.js';
@@ -1,20 +1,21 @@
1
- export { WorkflowsList } from './chunk-XCSCD3IU.js';
2
- import './chunk-TBHAZK52.js';
3
- import './chunk-5D4XS3WJ.js';
1
+ export { ExecutionsListPage } from './chunk-6EZJ5J3B.js';
2
+ import './chunk-MSQAULLG.js';
3
+ import './chunk-AG3VC7Y2.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-X6PIU7FE.js';
5
+ import './chunk-EC2AN74G.js';
6
6
  import './chunk-FNZZ5JJL.js';
7
- import './chunk-AFX3EKFN.js';
7
+ import './chunk-HOTVUVZG.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-H4ERTSMX.js';
10
10
  import './chunk-4VJ3MDOV.js';
11
- import './chunk-AAIZ6S6E.js';
11
+ import './chunk-C26QAWCT.js';
12
12
  import './chunk-5375NUIO.js';
13
13
  import './chunk-JL7CASN5.js';
14
14
  import './chunk-OCJTTHTS.js';
15
- import './chunk-PXIFUMLA.js';
16
- import './chunk-6AMNEX2Y.js';
15
+ import './chunk-AU7LACOY.js';
17
16
  import './chunk-G77IGC3Y.js';
18
17
  import './chunk-AVHBWJRY.js';
19
18
  import './chunk-UULVIT25.js';
20
- import './chunk-NTWG3CJX.js';
19
+ import './chunk-3IXU7WUC.js';
20
+ import './chunk-US5QSLPV.js';
21
+ import './chunk-UEG2WC3G.js';
@@ -1,31 +1,32 @@
1
- export { WorkflowBuilder } from './chunk-OMB3WMDQ.js';
2
- import './chunk-TBHAZK52.js';
1
+ export { WorkflowBuilder } from './chunk-MQN6YDX4.js';
2
+ import './chunk-HLAUK5GM.js';
3
3
  import './chunk-PIKYQE7P.js';
4
- import './chunk-DFIX6YWP.js';
4
+ import './chunk-I3QPAEL6.js';
5
5
  import './chunk-GEMNVFPK.js';
6
6
  import './chunk-B6CCE2RW.js';
7
7
  import './chunk-IEVSFCFS.js';
8
8
  import './chunk-YXMFRQYV.js';
9
9
  import './chunk-BQXVT32O.js';
10
- import './chunk-YYVRBROH.js';
11
- import './chunk-5UHAB75U.js';
12
- import './chunk-X6PIU7FE.js';
13
- import './chunk-BIB7IH26.js';
10
+ import './chunk-FJSXXO5W.js';
11
+ import './chunk-GVIYGJQG.js';
12
+ import './chunk-O2EB7UT2.js';
13
+ import './chunk-6P7DOBVN.js';
14
14
  import './chunk-JDLQ6QIB.js';
15
- import './chunk-F7LQL43U.js';
15
+ import './chunk-EC2AN74G.js';
16
16
  import './chunk-Y53CVZVV.js';
17
- import './chunk-KHXRYQYP.js';
18
- import './chunk-AFX3EKFN.js';
17
+ import './chunk-4QB6S7YW.js';
18
+ import './chunk-HOTVUVZG.js';
19
19
  import './chunk-GLYINMOR.js';
20
20
  import './chunk-H4ERTSMX.js';
21
21
  import './chunk-4VJ3MDOV.js';
22
- import './chunk-AAIZ6S6E.js';
22
+ import './chunk-C26QAWCT.js';
23
23
  import './chunk-5375NUIO.js';
24
24
  import './chunk-JL7CASN5.js';
25
25
  import './chunk-OCJTTHTS.js';
26
- import './chunk-PXIFUMLA.js';
27
- import './chunk-6AMNEX2Y.js';
26
+ import './chunk-AU7LACOY.js';
28
27
  import './chunk-G77IGC3Y.js';
29
28
  import './chunk-AVHBWJRY.js';
30
29
  import './chunk-UULVIT25.js';
31
- import './chunk-NTWG3CJX.js';
30
+ import './chunk-3IXU7WUC.js';
31
+ import './chunk-US5QSLPV.js';
32
+ import './chunk-UEG2WC3G.js';
@@ -1,20 +1,21 @@
1
- export { ExecutionsListPage } from './chunk-NJRCAE6K.js';
2
- import './chunk-XNU2PLJ2.js';
3
- import './chunk-5D4XS3WJ.js';
1
+ export { WorkflowsList } from './chunk-DANOMJ5I.js';
2
+ import './chunk-HLAUK5GM.js';
3
+ import './chunk-AG3VC7Y2.js';
4
4
  import './chunk-5ERAJC2I.js';
5
- import './chunk-F7LQL43U.js';
5
+ import './chunk-O2EB7UT2.js';
6
6
  import './chunk-FNZZ5JJL.js';
7
- import './chunk-AFX3EKFN.js';
7
+ import './chunk-HOTVUVZG.js';
8
8
  import './chunk-PJAWNFJV.js';
9
9
  import './chunk-H4ERTSMX.js';
10
10
  import './chunk-4VJ3MDOV.js';
11
- import './chunk-AAIZ6S6E.js';
11
+ import './chunk-C26QAWCT.js';
12
12
  import './chunk-5375NUIO.js';
13
13
  import './chunk-JL7CASN5.js';
14
14
  import './chunk-OCJTTHTS.js';
15
- import './chunk-PXIFUMLA.js';
16
- import './chunk-6AMNEX2Y.js';
15
+ import './chunk-AU7LACOY.js';
17
16
  import './chunk-G77IGC3Y.js';
18
17
  import './chunk-AVHBWJRY.js';
19
18
  import './chunk-UULVIT25.js';
20
- import './chunk-NTWG3CJX.js';
19
+ import './chunk-3IXU7WUC.js';
20
+ import './chunk-US5QSLPV.js';
21
+ import './chunk-UEG2WC3G.js';
@@ -1,15 +1,16 @@
1
- import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-4YCMMBSK.js';
2
- import { computeAttachPosition } from './chunk-5UHAB75U.js';
3
- import { NODE_CONFIGS, createConfiguredNode, resolveOutputHandles, resolveInputHandles, isNodeConfigsInitialized, useFlowStore, useSaveStatusStore, autosaveAllowedFor, isFlowComplete, isNodeTypeHiddenFromPalette } from './chunk-AAIZ6S6E.js';
1
+ import { nodeTitle, selectedOperationOf, paramsFromOperation, fixedParameterState } from './chunk-2QOAJF7V.js';
2
+ import { computeAttachPosition } from './chunk-GVIYGJQG.js';
3
+ import { NODE_CONFIGS, createConfiguredNode, resolveOutputHandles, resolveInputHandles, isNodeConfigsInitialized, useFlowStore, useSaveStatusStore, autosaveAllowedFor, isFlowComplete, isNodeTypeHiddenFromPalette } from './chunk-C26QAWCT.js';
4
4
  import './chunk-5375NUIO.js';
5
5
  import './chunk-JL7CASN5.js';
6
6
  import './chunk-OCJTTHTS.js';
7
- import './chunk-PXIFUMLA.js';
8
- import './chunk-6AMNEX2Y.js';
7
+ import './chunk-AU7LACOY.js';
9
8
  import './chunk-G77IGC3Y.js';
10
9
  import './chunk-AVHBWJRY.js';
11
10
  import './chunk-UULVIT25.js';
12
- import './chunk-NTWG3CJX.js';
11
+ import './chunk-3IXU7WUC.js';
12
+ import './chunk-US5QSLPV.js';
13
+ import './chunk-UEG2WC3G.js';
13
14
  import { defineAgentTool, AgentToolError } from '@burdenoff/fe-libs/shared/agent-tools';
14
15
  import { z } from 'zod';
15
16
 
@@ -1,8 +1,8 @@
1
- import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-AAIZ6S6E.js';
1
+ import { structuredParameterType, parseParameterValue, liveInternalOperations, resolveNodeOperation, readDisplayOptions, getNodeDetail, useFlowStore, useNodeRegistryRevision, fieldsFromIO, pathToExpression, NODE_CONFIGS, resolveUiSpec, fieldsFromValue, declaredOutputFields, subscribeWorkflowSaved } from './chunk-C26QAWCT.js';
2
2
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
3
3
  import { EventRegistrationsDocument } from './chunk-AVHBWJRY.js';
4
4
  import { useTr } from './chunk-UULVIT25.js';
5
- import { getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
5
+ import { getFluidGridsClientSafe } from './chunk-3IXU7WUC.js';
6
6
  import { useMemo, useState, useEffect, useRef, useCallback } from 'react';
7
7
  import { Icon } from '@iconify/react';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,3 +1,4 @@
1
+ import { createLiveTokenReader, createFluidGridsTokenRefreshLink } from './chunk-US5QSLPV.js';
1
2
  import { createHttpLink, split, ApolloClient, InMemoryCache } from '@apollo/client/core';
2
3
  import { setContext } from '@apollo/client/link/context';
3
4
  import { getMainDefinition } from '@apollo/client/utilities';
@@ -8,33 +9,43 @@ var clientInstance = null;
8
9
  function createFluidGridsClient(config) {
9
10
  const graphqlUrl = getGraphQLUrl(config.apiGatewayUrl);
10
11
  const wsUrl = graphqlUrl.replace(/^http/, "ws");
12
+ const readTokens = createLiveTokenReader({
13
+ authToken: config.authToken,
14
+ workspaceToken: config.workspaceToken
15
+ });
11
16
  const httpLink = createHttpLink({
12
17
  uri: graphqlUrl
13
18
  });
14
- const authLink = setContext((_, { headers }) => ({
15
- headers: {
16
- ...headers,
17
- ...config.authToken && { authorization: `Bearer ${config.authToken}` },
18
- ...config.workspaceToken && {
19
- "x-workspace-authorization": `Bearer ${config.workspaceToken}`
20
- },
21
- "x-workspace-id": config.workspaceId,
22
- ...config.tenantId && { "x-tenant-id": config.tenantId },
23
- ...config.productId && { "x-product-id": config.productId }
24
- }
25
- }));
26
- const wsLink = new GraphQLWsLink(
27
- createClient({
28
- url: wsUrl,
29
- connectionParams: () => ({
30
- authorization: config.authToken ? `Bearer ${config.authToken}` : "",
31
- ...config.workspaceToken && {
32
- "x-workspace-authorization": `Bearer ${config.workspaceToken}`
19
+ const authLink = setContext((_, { headers }) => {
20
+ const { authToken, workspaceToken } = readTokens();
21
+ return {
22
+ headers: {
23
+ ...headers,
24
+ ...authToken && { authorization: `Bearer ${authToken}` },
25
+ ...workspaceToken && {
26
+ "x-workspace-authorization": `Bearer ${workspaceToken}`
33
27
  },
34
28
  "x-workspace-id": config.workspaceId,
35
29
  ...config.tenantId && { "x-tenant-id": config.tenantId },
36
30
  ...config.productId && { "x-product-id": config.productId }
37
- })
31
+ }
32
+ };
33
+ });
34
+ const wsLink = new GraphQLWsLink(
35
+ createClient({
36
+ url: wsUrl,
37
+ connectionParams: () => {
38
+ const { authToken, workspaceToken } = readTokens();
39
+ return {
40
+ authorization: authToken ? `Bearer ${authToken}` : "",
41
+ ...workspaceToken && {
42
+ "x-workspace-authorization": `Bearer ${workspaceToken}`
43
+ },
44
+ "x-workspace-id": config.workspaceId,
45
+ ...config.tenantId && { "x-tenant-id": config.tenantId },
46
+ ...config.productId && { "x-product-id": config.productId }
47
+ };
48
+ }
38
49
  })
39
50
  );
40
51
  const splitLink = split(
@@ -43,7 +54,7 @@ function createFluidGridsClient(config) {
43
54
  return definition.kind === "OperationDefinition" && definition.operation === "subscription";
44
55
  },
45
56
  wsLink,
46
- authLink.concat(httpLink)
57
+ createFluidGridsTokenRefreshLink().concat(authLink).concat(httpLink)
47
58
  );
48
59
  return new ApolloClient({
49
60
  link: splitLink,
@@ -1,7 +1,8 @@
1
- import { mergeStickyNotes, describeOperationError, throwIfResultError } from './chunk-AAIZ6S6E.js';
1
+ import { mergeStickyNotes } from './chunk-C26QAWCT.js';
2
2
  import { WorkflowDefinitionDocument, WorkflowVersionDiffDocument } from './chunk-AVHBWJRY.js';
3
3
  import { useTr } from './chunk-UULVIT25.js';
4
- import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
4
+ import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
5
+ import { describeOperationError, throwIfResultError } from './chunk-US5QSLPV.js';
5
6
  import { memo, useState, useEffect, useMemo, useRef, useCallback } from 'react';
6
7
  import { ArrowLeftRight, Eye, RotateCcw, Loader2 } from 'lucide-react';
7
8
  import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Button, Badge, AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction, Tabs, TabsList, TabsTrigger, TabsContent } from '@burdenoff/fe-libs/ui';
@@ -1,10 +1,10 @@
1
- import { useRunStatusCounts, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination, runStatusLabels } from './chunk-XNU2PLJ2.js';
2
- import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, WORKFLOW_ID_MAX_LENGTH } from './chunk-5D4XS3WJ.js';
3
- import { useWorkflowDefinitions } from './chunk-AFX3EKFN.js';
1
+ import { useRunStatusCounts, ExecutionStats, ExecutionFilters, ExecutionTable, ExecutionCards, ExecutionTimeline, Pagination, runStatusLabels } from './chunk-MSQAULLG.js';
2
+ import { useExecutionsWithStore, useExecutionStats, useExecutionActions, useAutoRefresh, WORKFLOW_ID_MAX_LENGTH } from './chunk-AG3VC7Y2.js';
3
+ import { useWorkflowDefinitions } from './chunk-HOTVUVZG.js';
4
4
  import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
5
- import { useDurableParityEnabled } from './chunk-AAIZ6S6E.js';
6
- import { useExecutionsStore } from './chunk-6AMNEX2Y.js';
5
+ import { useDurableParityEnabled } from './chunk-C26QAWCT.js';
7
6
  import { useTr } from './chunk-UULVIT25.js';
7
+ import { useExecutionsStore } from './chunk-UEG2WC3G.js';
8
8
  import { useRef, useCallback, useMemo, useState, useEffect } from 'react';
9
9
  import { useNavigate, useSearchParams } from 'react-router';
10
10
  import { Icon } from '@iconify/react';
@@ -1,12 +1,12 @@
1
1
  import { operatorSpec, normaliseAssertRules, describeAssertRuleProblem } from './chunk-JDLQ6QIB.js';
2
- import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-F7LQL43U.js';
2
+ import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-EC2AN74G.js';
3
3
  import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
4
4
  import { ErrorType } from './chunk-H4ERTSMX.js';
5
- import { throwIfResultError, isForbiddenError } from './chunk-AAIZ6S6E.js';
6
- import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
7
5
  import { WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, WorkflowTestCasesDocument, WorkflowTestRunsDocument, WorkflowTestRunDocument, CreateWorkflowTestCaseDocument, UpdateWorkflowTestCaseDocument, DeleteWorkflowTestCaseDocument, RunWorkflowTestsDocument, CreateWorkflowTestCaseFromRunDocument } from './chunk-AVHBWJRY.js';
8
6
  import { useTr } from './chunk-UULVIT25.js';
9
- import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
7
+ import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
8
+ import { throwIfResultError, isForbiddenError } from './chunk-US5QSLPV.js';
9
+ import { getFluidGridsConfig } from './chunk-UEG2WC3G.js';
10
10
  import { useState, useRef, useEffect, useCallback } from 'react';
11
11
  import { TagBadge, TagsWidget } from '@burdenoff/fe-libs/tag';
12
12
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,9 +1,10 @@
1
1
  import { REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS } from './chunk-5ERAJC2I.js';
2
- import { useFluidGridsAnalytics, throwIfResultError, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-AAIZ6S6E.js';
3
- import { useExecutionsStore } from './chunk-6AMNEX2Y.js';
2
+ import { useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt } from './chunk-C26QAWCT.js';
4
3
  import { ExecutionsListDocument, ExecutionDetailDocument, ExecutionStatsDocument, PauseExecutionDocument, ResumeExecutionDocument, CancelExecutionDocument, RetryNodeDocument, TriggerWorkflowDocument, TerminateExecutionDocument } from './chunk-AVHBWJRY.js';
5
4
  import { useTr } from './chunk-UULVIT25.js';
6
- import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
5
+ import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
6
+ import { throwIfResultError, emitFluidGridsEvent, emitOperationErrorEvent } from './chunk-US5QSLPV.js';
7
+ import { useExecutionsStore } from './chunk-UEG2WC3G.js';
7
8
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
8
9
 
9
10
  // src/modules/executions/utils/date-range.ts
@@ -385,10 +386,15 @@ function useExecutionActions() {
385
386
  executionId: run.runId,
386
387
  trigger: "manual"
387
388
  });
389
+ emitFluidGridsEvent("run:started", {
390
+ runId: run.runId,
391
+ workflowKey: run.workflowKey
392
+ });
388
393
  return { ok: true, run };
389
394
  } catch (err) {
390
395
  const error2 = err;
391
396
  setError(error2);
397
+ emitOperationErrorEvent("run:start", err);
392
398
  openRunQuotaUpgradePrompt(err, tr, {
393
399
  bus,
394
400
  workspaceId,
@@ -420,6 +426,10 @@ function useExecutionActions() {
420
426
  executionId: replayed.runId,
421
427
  trigger: "manual"
422
428
  });
429
+ emitFluidGridsEvent("run:started", {
430
+ runId: replayed.runId,
431
+ workflowKey: replayed.workflowKey
432
+ });
423
433
  }
424
434
  return replayed;
425
435
  } catch (err) {
@@ -455,6 +465,10 @@ function useExecutionActions() {
455
465
  executionId: run.runId,
456
466
  trigger: "manual"
457
467
  });
468
+ emitFluidGridsEvent("run:started", {
469
+ runId: run.runId,
470
+ workflowKey: run.workflowKey
471
+ });
458
472
  }
459
473
  return retried;
460
474
  } catch (err) {
@@ -1,6 +1,6 @@
1
- import { throwIfResultError, describeOperationError } from './chunk-AAIZ6S6E.js';
2
1
  import { useTr } from './chunk-UULVIT25.js';
3
- import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
2
+ import { getFluidGridsClient } from './chunk-3IXU7WUC.js';
3
+ import { throwIfResultError, describeOperationError } from './chunk-US5QSLPV.js';
4
4
  import { useState, useCallback, useEffect, useMemo } from 'react';
5
5
  import { gql } from '@apollo/client';
6
6
  import { Button } from '@burdenoff/fe-libs/button';
@@ -1,3 +1,4 @@
1
+ import { createLiveTokenReader, createFluidGridsTokenRefreshLink } from './chunk-US5QSLPV.js';
1
2
  import { createHttpLink, ApolloClient, InMemoryCache } from '@apollo/client/core';
2
3
  import { setContext } from '@apollo/client/link/context';
3
4
 
@@ -15,19 +16,23 @@ function createGlobalStoreClient(config) {
15
16
  const httpLink = createHttpLink({
16
17
  uri: config.globalApiUrl
17
18
  });
18
- const authLink = setContext((_, { headers }) => ({
19
- headers: {
20
- ...headers,
21
- ...config.authToken && { authorization: `Bearer ${config.authToken}` },
22
- "x-workspace-id": config.workspaceId,
23
- ...config.tenantId && { "x-tenant-id": config.tenantId },
24
- ...config.organizationId && {
25
- "x-organization-id": config.organizationId
19
+ const readTokens = createLiveTokenReader({ authToken: config.authToken });
20
+ const authLink = setContext((_, { headers }) => {
21
+ const { authToken } = readTokens();
22
+ return {
23
+ headers: {
24
+ ...headers,
25
+ ...authToken && { authorization: `Bearer ${authToken}` },
26
+ "x-workspace-id": config.workspaceId,
27
+ ...config.tenantId && { "x-tenant-id": config.tenantId },
28
+ ...config.organizationId && {
29
+ "x-organization-id": config.organizationId
30
+ }
26
31
  }
27
- }
28
- }));
32
+ };
33
+ });
29
34
  return new ApolloClient({
30
- link: authLink.concat(httpLink),
35
+ link: createFluidGridsTokenRefreshLink().concat(authLink).concat(httpLink),
31
36
  cache: new InMemoryCache(),
32
37
  defaultOptions: {
33
38
  watchQuery: {
@@ -1,13 +1,14 @@
1
1
  import { CodeEditorField, normalizeCodeLanguage } from './chunk-AASHQI77.js';
2
- import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-4YCMMBSK.js';
2
+ import { asRecord, ConditionTreeBuilder, SwitchRulesEditor, casesFromRules, isStringOptionList, optionText, coerceNumber, paramsFromOperation, resolveLoadOptionsSpec, optionListValues, parseMappingValue, optionListText } from './chunk-2QOAJF7V.js';
3
3
  import { Popover, PopoverTrigger, PopoverContent } from './chunk-GTEBQQ7J.js';
4
- import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-VDJFTZ2H.js';
4
+ import { isAgentNodeType, AgentDefinitionSelectField } from './chunk-VFVN7D3A.js';
5
5
  import { readAssertRulesSetting, rowsFromRules, normaliseAssertRules, ruleFromRow, describeAssertRuleProblem, operatorSpec, ASSERT_OPERATORS, emptyAssertRuleRow } from './chunk-JDLQ6QIB.js';
6
- import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, throwIfResultError, openRunQuotaUpgradePrompt, describeOperationError } from './chunk-AAIZ6S6E.js';
6
+ import { useFlowStore, isParamVisible, ConnectionSelector, structuredParameterType, useRunGuard, FluidGridsContext, ExpressionEditor, formatParameterValue, parseParameterValue, useFluidGridsAnalytics, openRunQuotaUpgradePrompt } from './chunk-C26QAWCT.js';
7
7
  import { useBuilderReadOnly } from './chunk-OCJTTHTS.js';
8
8
  import { useRunFromNodeEligibilityQuery, PreviewScheduleDocument, WebhookTestListenerDocument, StopWebhookTestListenerDocument, ListenForWebhookTestEventDocument } from './chunk-AVHBWJRY.js';
9
9
  import { useTr } from './chunk-UULVIT25.js';
10
- import { getFluidGridsClientSafe, getFluidGridsClient } from './chunk-NTWG3CJX.js';
10
+ import { getFluidGridsClientSafe, getFluidGridsClient } from './chunk-3IXU7WUC.js';
11
+ import { throwIfResultError, describeOperationError } from './chunk-US5QSLPV.js';
11
12
  import { useId, useState, useMemo, useRef, useEffect, useContext, useCallback } from 'react';
12
13
  import { Icon } from '@iconify/react';
13
14
  import { cn } from '@burdenoff/fe-libs/utils';
@@ -1,8 +1,8 @@
1
- import { Card, FluidGridsMark } from './chunk-DFIX6YWP.js';
1
+ import { Card, FluidGridsMark } from './chunk-I3QPAEL6.js';
2
2
  import { Input } from './chunk-IEVSFCFS.js';
3
3
  import { Button } from './chunk-BQXVT32O.js';
4
- import { useWorkflowDefinition } from './chunk-AFX3EKFN.js';
5
- import { FluidGridsProvider, useFlowStore } from './chunk-AAIZ6S6E.js';
4
+ import { useWorkflowDefinition } from './chunk-HOTVUVZG.js';
5
+ import { FluidGridsProvider, useFlowStore } from './chunk-C26QAWCT.js';
6
6
  import { cn } from './chunk-JL7CASN5.js';
7
7
  import { useTr } from './chunk-UULVIT25.js';
8
8
  import { useState, useRef, useEffect, useCallback } from 'react';
@@ -494,6 +494,9 @@ function WorkflowBuilder({
494
494
  organizationId,
495
495
  workspaceClient,
496
496
  globalClient,
497
+ theme,
498
+ auth,
499
+ onEvent,
497
500
  ...coreProps
498
501
  }) {
499
502
  const workflow = initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);
@@ -511,6 +514,9 @@ function WorkflowBuilder({
511
514
  organizationId,
512
515
  workspaceClient,
513
516
  globalClient,
517
+ theme,
518
+ auth,
519
+ onEvent,
514
520
  children: /* @__PURE__ */ jsx(WorkflowBuilderCore, { workflow, ...coreProps })
515
521
  }
516
522
  );