@burdenoff/fluidgrids-fe-sdk 2026.1029.7 → 2026.1029.8
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.
- package/dist/{ExecutionDetailPage-L7LZYFOT.js → ExecutionDetailPage-H6R3ZIXN.js} +10 -10
- package/dist/{ExecutionsListPage-7NMW6S5A.js → ExecutionsListPage-TLD2E442.js} +7 -7
- package/dist/{WorkflowBuilder-RXVUBDZJ.js → WorkflowBuilder-XVHY7XWJ.js} +10 -10
- package/dist/{WorkflowsList-5U74DYQ3.js → WorkflowsList-3GXXXURR.js} +7 -7
- package/dist/{chunk-FFOZ5VUJ.js → chunk-2NG5VZWI.js} +1 -1
- package/dist/{chunk-BZTVAUOQ.js → chunk-6CKDGT2N.js} +3 -3
- package/dist/{chunk-OJPJ2QXD.js → chunk-G3KZOX52.js} +2 -2
- package/dist/{chunk-YTUIGIVP.js → chunk-GQTEHWWY.js} +12 -8
- package/dist/{chunk-TYYSYSAL.js → chunk-H4AZBUWM.js} +1 -1
- package/dist/{chunk-AXMEATLG.js → chunk-HWEKWYXQ.js} +2 -2
- package/dist/{chunk-RZR3BDDZ.js → chunk-LJGC7RAL.js} +162 -99
- package/dist/{chunk-K4BF7PAW.js → chunk-NAYPOEYM.js} +290 -27
- package/dist/{chunk-VIZ7W5WJ.js → chunk-NNPXN4DI.js} +5 -5
- package/dist/{chunk-4MHWFZJV.js → chunk-NUBPALBK.js} +1 -1
- package/dist/{chunk-US4LPOB3.js → chunk-R7VHURPQ.js} +1 -1
- package/dist/{chunk-DEGCZCHP.js → chunk-S4JYBJ4X.js} +2 -2
- package/dist/{chunk-IDGDMJMJ.js → chunk-T22LICGX.js} +3 -3
- package/dist/{chunk-HAFUSBYP.js → chunk-TJ6RUV4R.js} +8 -8
- package/dist/{chunk-NL4JQFFA.js → chunk-UIDJT3YK.js} +1 -1
- package/dist/{chunk-7CTIVBBA.js → chunk-UWNCFMHV.js} +4 -4
- package/dist/{chunk-ZE5KS2YL.js → chunk-V5PA5KGV.js} +2 -2
- package/dist/{chunk-SZTKLZZR.js → chunk-VEZ7G2FE.js} +4 -4
- package/dist/{chunk-Z4YQTXCD.js → chunk-WEXO3KAY.js} +4 -4
- package/dist/{chunk-E7UAY3JJ.js → chunk-WTP343PG.js} +1 -1
- package/dist/{chunk-EGIEFGOV.js → chunk-X2J4ZXKD.js} +822 -62
- package/dist/{chunk-KANARCPR.js → chunk-XJBCRDWZ.js} +3 -3
- package/dist/{chunk-6SZXW2BF.js → chunk-XMKYZP6Q.js} +32 -15
- package/dist/{chunk-LAVHDFHI.js → chunk-Z6I6A47T.js} +1 -1
- package/dist/executions.js +11 -11
- package/dist/history.js +4 -4
- package/dist/index.d.ts +76 -3
- package/dist/index.js +34 -34
- package/dist/nodes.js +2 -2
- package/dist/observability.js +5 -5
- package/dist/settings.js +6 -6
- package/dist/templates.js +9 -9
- package/dist/{workflow-builder-CZFczcE7.d.ts → workflow-builder-BMGVSwpy.d.ts} +7 -0
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +11 -11
- package/dist/workflows-list.js +7 -7
- package/package.json +1 -1
|
@@ -2,11 +2,11 @@ import { cn as cn$1 } from './chunk-JL7CASN5.js';
|
|
|
2
2
|
import { getGlobalStoreClient, createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient } from './chunk-PXIFUMLA.js';
|
|
3
3
|
import { getFluidGridsConfig, validateTrustedOrigin, resetFluidGridsExecutionState, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-6AMNEX2Y.js';
|
|
4
4
|
import { GetMyNodeInstallationsDocument } from './chunk-JUUYPCFY.js';
|
|
5
|
-
import { fetchAllNodeEndpointConfigs, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowDefinitionDocument, WorkflowRunDocument } from './chunk-
|
|
5
|
+
import { fetchAllNodeEndpointConfigs, NodeManifestDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, ExecuteStepDocument, TriggerWorkflowDocument, RunFromNodeDocument, ExecutionDetailDocument, WorkflowDefinitionDocument, WorkflowRunDocument } from './chunk-GQTEHWWY.js';
|
|
6
6
|
import { useTr, ENGLISH_FALLBACK_TRANSLATOR, FluidGridsTranslationProvider } from './chunk-UULVIT25.js';
|
|
7
7
|
import { waitForFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-NTWG3CJX.js';
|
|
8
8
|
import * as React2 from 'react';
|
|
9
|
-
import { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, createContext, memo, useCallback,
|
|
9
|
+
import { forwardRef, useState, useImperativeHandle, useRef, useEffect, useMemo, createContext, memo, useCallback, useContext, useSyncExternalStore, cloneElement } from 'react';
|
|
10
10
|
import { useOptionalFeatureFlags } from '@burdenoff/fe-libs/shared/feature-flags';
|
|
11
11
|
import { CombinedGraphQLErrors, ServerError } from '@apollo/client/errors';
|
|
12
12
|
import { dispatchUpgradePrompt } from '@burdenoff/fe-libs/shared/components';
|
|
@@ -4556,6 +4556,11 @@ function useDeleteNode() {
|
|
|
4556
4556
|
[deleteElements, getEdges, getNode, deleteNodes]
|
|
4557
4557
|
);
|
|
4558
4558
|
}
|
|
4559
|
+
var BuilderReadOnlyContext = createContext(false);
|
|
4560
|
+
var BuilderReadOnlyProvider = BuilderReadOnlyContext.Provider;
|
|
4561
|
+
function useBuilderReadOnly() {
|
|
4562
|
+
return useContext(BuilderReadOnlyContext);
|
|
4563
|
+
}
|
|
4559
4564
|
|
|
4560
4565
|
// src/builder/contants/symbols.ts
|
|
4561
4566
|
var NODE_TYPE_DRAG_DATA_FORMAT = "application/flow-builder.node-type";
|
|
@@ -4605,6 +4610,7 @@ function StickyNoteNodeComponent({
|
|
|
4605
4610
|
const { setNodes, getNode } = useReactFlow();
|
|
4606
4611
|
const zustandSetNodes = useFlowStore((s) => s.actions.nodes.setNodes);
|
|
4607
4612
|
const deleteNode = useDeleteNode();
|
|
4613
|
+
const readOnly = useBuilderReadOnly();
|
|
4608
4614
|
const [editing, setEditing] = useState(false);
|
|
4609
4615
|
const [showPalette, setShowPalette] = useState(false);
|
|
4610
4616
|
const [draft, setDraft] = useState(String(data.content ?? ""));
|
|
@@ -4680,7 +4686,7 @@ function StickyNoteNodeComponent({
|
|
|
4680
4686
|
/* @__PURE__ */ jsx(
|
|
4681
4687
|
NodeResizer,
|
|
4682
4688
|
{
|
|
4683
|
-
isVisible: !!selected,
|
|
4689
|
+
isVisible: !!selected && !readOnly,
|
|
4684
4690
|
minWidth: STICKY_MIN_SIZE.width,
|
|
4685
4691
|
minHeight: STICKY_MIN_SIZE.height,
|
|
4686
4692
|
lineStyle: { border: "none", zIndex: 20 },
|
|
@@ -4698,7 +4704,9 @@ function StickyNoteNodeComponent({
|
|
|
4698
4704
|
{
|
|
4699
4705
|
className: cn(
|
|
4700
4706
|
"absolute right-1 z-30 flex items-center gap-0.5 rounded-lg border border-border bg-card p-0.5 shadow-md transition-all duration-150",
|
|
4701
|
-
selected || showPalette ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0 group-hover:pointer-events-auto group-hover:opacity-100"
|
|
4707
|
+
selected || showPalette ? "pointer-events-auto opacity-100" : "pointer-events-none opacity-0 group-hover:pointer-events-auto group-hover:opacity-100",
|
|
4708
|
+
// Nothing to change on a read-only canvas (BOFF-9725).
|
|
4709
|
+
readOnly && "hidden"
|
|
4702
4710
|
),
|
|
4703
4711
|
style: { top: -15 },
|
|
4704
4712
|
onDoubleClick: (e) => e.stopPropagation(),
|
|
@@ -4786,12 +4794,13 @@ function StickyNoteNodeComponent({
|
|
|
4786
4794
|
},
|
|
4787
4795
|
onDoubleClick: (e) => {
|
|
4788
4796
|
e.stopPropagation();
|
|
4789
|
-
startEditing();
|
|
4797
|
+
if (!readOnly) startEditing();
|
|
4790
4798
|
},
|
|
4791
4799
|
children: editing ? /* @__PURE__ */ jsx(
|
|
4792
4800
|
"textarea",
|
|
4793
4801
|
{
|
|
4794
4802
|
ref: textareaRef,
|
|
4803
|
+
readOnly,
|
|
4795
4804
|
value: draft,
|
|
4796
4805
|
onChange: (e) => setDraft(e.target.value),
|
|
4797
4806
|
onBlur: commitEdit,
|
|
@@ -6580,8 +6589,26 @@ var PERMANENT_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
|
6580
6589
|
"FAILED_PRECONDITION",
|
|
6581
6590
|
"CONFLICT"
|
|
6582
6591
|
]);
|
|
6592
|
+
function textOf(value) {
|
|
6593
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
6594
|
+
}
|
|
6595
|
+
function findSaveConflict(error) {
|
|
6596
|
+
const extensions = collectExtensions(error).find(
|
|
6597
|
+
(ext) => ext.code === "CONFLICT" && (ext.reason === "STALE_REVISION" || ext.reason === "EDIT_LEASE_HELD")
|
|
6598
|
+
);
|
|
6599
|
+
if (!extensions) return null;
|
|
6600
|
+
const revision = extensions.currentRevision;
|
|
6601
|
+
return {
|
|
6602
|
+
reason: extensions.reason,
|
|
6603
|
+
currentRevision: typeof revision === "number" && Number.isFinite(revision) ? revision : null,
|
|
6604
|
+
currentStatus: textOf(extensions.currentStatus),
|
|
6605
|
+
updatedById: textOf(extensions.updatedById),
|
|
6606
|
+
holderActorId: textOf(extensions.holderActorId)
|
|
6607
|
+
};
|
|
6608
|
+
}
|
|
6583
6609
|
function classifySaveFailure(error) {
|
|
6584
6610
|
if (findQuotaRefusal(error)) return "quota";
|
|
6611
|
+
if (findSaveConflict(error)) return "conflict";
|
|
6585
6612
|
if (errorCodesOf(error).some((code) => PERMANENT_ERROR_CODES.has(code))) {
|
|
6586
6613
|
return "permanent";
|
|
6587
6614
|
}
|
|
@@ -6691,6 +6718,196 @@ function editStateOf(baseline, current, now) {
|
|
|
6691
6718
|
return "dirty";
|
|
6692
6719
|
}
|
|
6693
6720
|
|
|
6721
|
+
// src/builder/lib/workflow-revisions.ts
|
|
6722
|
+
var known = /* @__PURE__ */ new Map();
|
|
6723
|
+
function rememberRevision(dbId, revision) {
|
|
6724
|
+
if (!dbId || typeof revision !== "number" || !Number.isFinite(revision)) {
|
|
6725
|
+
return;
|
|
6726
|
+
}
|
|
6727
|
+
const current = known.get(dbId);
|
|
6728
|
+
if (current === void 0 || revision > current) known.set(dbId, revision);
|
|
6729
|
+
}
|
|
6730
|
+
function rememberOwnStatusChange(dbId, revision) {
|
|
6731
|
+
if (!dbId || typeof revision !== "number") return;
|
|
6732
|
+
const current = known.get(dbId);
|
|
6733
|
+
if (current !== void 0 && revision === current + 1) {
|
|
6734
|
+
known.set(dbId, revision);
|
|
6735
|
+
}
|
|
6736
|
+
}
|
|
6737
|
+
function revisionOf(dbId) {
|
|
6738
|
+
return dbId ? known.get(dbId) : void 0;
|
|
6739
|
+
}
|
|
6740
|
+
|
|
6741
|
+
// src/builder/lib/edit-session.ts
|
|
6742
|
+
var SESSION_ID_PATTERN = /^[A-Za-z0-9_-]{8,64}$/;
|
|
6743
|
+
function randomSessionId() {
|
|
6744
|
+
const cryptoApi = globalThis.crypto;
|
|
6745
|
+
if (cryptoApi?.randomUUID) return cryptoApi.randomUUID();
|
|
6746
|
+
const bytes = new Uint8Array(16);
|
|
6747
|
+
cryptoApi?.getRandomValues?.(bytes);
|
|
6748
|
+
if (bytes.every((byte) => byte === 0)) {
|
|
6749
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
6750
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
6751
|
+
}
|
|
6752
|
+
}
|
|
6753
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join(
|
|
6754
|
+
""
|
|
6755
|
+
);
|
|
6756
|
+
}
|
|
6757
|
+
var EDIT_SESSION_ID = randomSessionId();
|
|
6758
|
+
var storageKey = (workflowKey) => `fluidgrids.builder.editSession.${workflowKey}`;
|
|
6759
|
+
function rememberSessionForReload(storage, workflowKey, sessionId) {
|
|
6760
|
+
try {
|
|
6761
|
+
storage?.setItem(storageKey(workflowKey), sessionId);
|
|
6762
|
+
} catch {
|
|
6763
|
+
}
|
|
6764
|
+
}
|
|
6765
|
+
function sessionBeforeReload(storage, workflowKey, currentSessionId = EDIT_SESSION_ID) {
|
|
6766
|
+
try {
|
|
6767
|
+
const stored = storage?.getItem(storageKey(workflowKey)) ?? null;
|
|
6768
|
+
if (!stored || stored === currentSessionId) return null;
|
|
6769
|
+
return SESSION_ID_PATTERN.test(stored) ? stored : null;
|
|
6770
|
+
} catch {
|
|
6771
|
+
return null;
|
|
6772
|
+
}
|
|
6773
|
+
}
|
|
6774
|
+
function forgetSessionForReload(storage, workflowKey) {
|
|
6775
|
+
try {
|
|
6776
|
+
storage?.removeItem(storageKey(workflowKey));
|
|
6777
|
+
} catch {
|
|
6778
|
+
}
|
|
6779
|
+
}
|
|
6780
|
+
|
|
6781
|
+
// src/builder/lib/edit-lease.ts
|
|
6782
|
+
var LEASE_RENEW_MS = 2e4;
|
|
6783
|
+
var LEASE_VIEW_POLL_MS = 1e4;
|
|
6784
|
+
var LEASE_IDLE_RELEASE_MS = 15 * 6e4;
|
|
6785
|
+
function isLocked(phase) {
|
|
6786
|
+
return phase === "viewing" || phase === "lost" || phase === "idle" || phase === "reloading";
|
|
6787
|
+
}
|
|
6788
|
+
function phaseAfterAcquire(previous, answer) {
|
|
6789
|
+
if (!answer.available) {
|
|
6790
|
+
return isLocked(previous) || previous === "holding" ? previous : "unavailable";
|
|
6791
|
+
}
|
|
6792
|
+
if (answer.heldBySelf) return "holding";
|
|
6793
|
+
if (answer.held) return previous === "holding" ? "lost" : "viewing";
|
|
6794
|
+
return previous;
|
|
6795
|
+
}
|
|
6796
|
+
function phaseAfterTakeOver(answer) {
|
|
6797
|
+
if (!answer.available) return "unavailable";
|
|
6798
|
+
return answer.heldBySelf ? "reloading" : "viewing";
|
|
6799
|
+
}
|
|
6800
|
+
function releasesOnClose(phase) {
|
|
6801
|
+
return phase === "starting" || phase === "holding" || phase === "unavailable";
|
|
6802
|
+
}
|
|
6803
|
+
var LEASE_CALL_MAX_WAIT_MS = 15e3;
|
|
6804
|
+
function leaseCallQueue(maxWaitMs = LEASE_CALL_MAX_WAIT_MS) {
|
|
6805
|
+
const tails = /* @__PURE__ */ new Map();
|
|
6806
|
+
return {
|
|
6807
|
+
run(workflowKey, call) {
|
|
6808
|
+
const previous = tails.get(workflowKey) ?? Promise.resolve();
|
|
6809
|
+
const result = previous.then(call);
|
|
6810
|
+
const tail = previous.then(
|
|
6811
|
+
() => new Promise((resolve) => {
|
|
6812
|
+
const timer = setTimeout(resolve, maxWaitMs);
|
|
6813
|
+
const done = () => {
|
|
6814
|
+
clearTimeout(timer);
|
|
6815
|
+
resolve();
|
|
6816
|
+
};
|
|
6817
|
+
result.then(done, done);
|
|
6818
|
+
})
|
|
6819
|
+
);
|
|
6820
|
+
tails.set(workflowKey, tail);
|
|
6821
|
+
void tail.then(() => {
|
|
6822
|
+
if (tails.get(workflowKey) === tail) tails.delete(workflowKey);
|
|
6823
|
+
});
|
|
6824
|
+
return result;
|
|
6825
|
+
}
|
|
6826
|
+
};
|
|
6827
|
+
}
|
|
6828
|
+
function shouldReleaseForIdle(phase, lastInputAt, now) {
|
|
6829
|
+
return phase === "holding" && now - lastInputAt >= LEASE_IDLE_RELEASE_MS;
|
|
6830
|
+
}
|
|
6831
|
+
function tickAction(phase, state, now) {
|
|
6832
|
+
if (phase === "holding" || phase === "unavailable") {
|
|
6833
|
+
return now - state.lastRenewAt >= LEASE_RENEW_MS ? "renew" : "none";
|
|
6834
|
+
}
|
|
6835
|
+
if (phase === "viewing" || phase === "lost" || phase === "idle") {
|
|
6836
|
+
return state.visible && now - state.lastPeekAt >= LEASE_VIEW_POLL_MS ? "peek" : "none";
|
|
6837
|
+
}
|
|
6838
|
+
return "none";
|
|
6839
|
+
}
|
|
6840
|
+
function bannerOf(state) {
|
|
6841
|
+
switch (state.phase) {
|
|
6842
|
+
case "viewing":
|
|
6843
|
+
return state.held ? {
|
|
6844
|
+
kind: "editing",
|
|
6845
|
+
actorId: state.holderActorId,
|
|
6846
|
+
self: state.heldByCaller
|
|
6847
|
+
} : { kind: "free" };
|
|
6848
|
+
case "lost":
|
|
6849
|
+
return {
|
|
6850
|
+
kind: "taken",
|
|
6851
|
+
actorId: state.takenBy,
|
|
6852
|
+
self: state.takenByCaller
|
|
6853
|
+
};
|
|
6854
|
+
case "idle":
|
|
6855
|
+
return { kind: "idle" };
|
|
6856
|
+
case "reloading":
|
|
6857
|
+
return { kind: "reloading" };
|
|
6858
|
+
default:
|
|
6859
|
+
return null;
|
|
6860
|
+
}
|
|
6861
|
+
}
|
|
6862
|
+
var IDLE = {
|
|
6863
|
+
workflowKey: null,
|
|
6864
|
+
phase: "inactive",
|
|
6865
|
+
held: false,
|
|
6866
|
+
holderActorId: null,
|
|
6867
|
+
heldByCaller: false,
|
|
6868
|
+
takenBy: null,
|
|
6869
|
+
takenByCaller: false
|
|
6870
|
+
};
|
|
6871
|
+
function commitFocusedEdit() {
|
|
6872
|
+
if (typeof document === "undefined") return;
|
|
6873
|
+
const focused = document.activeElement;
|
|
6874
|
+
if (!focused || typeof focused.blur !== "function") return;
|
|
6875
|
+
const editable = focused.isContentEditable || typeof focused.matches === "function" && focused.matches("input, textarea, select");
|
|
6876
|
+
if (editable) focused.blur();
|
|
6877
|
+
}
|
|
6878
|
+
var useEditLeaseStore = create()((set, get) => ({
|
|
6879
|
+
...IDLE,
|
|
6880
|
+
actions: {
|
|
6881
|
+
begin: (workflowKey) => set(
|
|
6882
|
+
(state) => (
|
|
6883
|
+
// A reload of the same workflow keeps "reloading" (and its lock)
|
|
6884
|
+
// until the lease is confirmed again.
|
|
6885
|
+
state.workflowKey === workflowKey && state.phase === "reloading" ? state : { ...IDLE, workflowKey, phase: "starting" }
|
|
6886
|
+
)
|
|
6887
|
+
),
|
|
6888
|
+
record: (phase, answer) => {
|
|
6889
|
+
if (isLocked(phase) && !isLocked(get().phase)) commitFocusedEdit();
|
|
6890
|
+
set(() => {
|
|
6891
|
+
if (!answer || !answer.available) return { phase };
|
|
6892
|
+
const holderActorId = answer.held ? answer.holderActorId ?? null : null;
|
|
6893
|
+
const heldByCaller = answer.held && !!answer.heldByCaller;
|
|
6894
|
+
const taken = phase !== "lost" ? { takenBy: null, takenByCaller: false } : answer.held ? { takenBy: holderActorId, takenByCaller: heldByCaller } : {};
|
|
6895
|
+
return {
|
|
6896
|
+
phase,
|
|
6897
|
+
held: answer.held,
|
|
6898
|
+
holderActorId,
|
|
6899
|
+
heldByCaller,
|
|
6900
|
+
...taken
|
|
6901
|
+
};
|
|
6902
|
+
});
|
|
6903
|
+
},
|
|
6904
|
+
reset: () => set({ ...IDLE })
|
|
6905
|
+
}
|
|
6906
|
+
}));
|
|
6907
|
+
function useEditLeaseLocked() {
|
|
6908
|
+
return useEditLeaseStore((s) => isLocked(s.phase));
|
|
6909
|
+
}
|
|
6910
|
+
|
|
6694
6911
|
// src/builder/lib/workflow-save-snapshot.ts
|
|
6695
6912
|
function snapshotForSave(workflow, generation, route = {}) {
|
|
6696
6913
|
const copy = {
|
|
@@ -6728,7 +6945,8 @@ var PRISTINE = {
|
|
|
6728
6945
|
baseline: null,
|
|
6729
6946
|
quotaExhausted: false,
|
|
6730
6947
|
leaveRequest: null,
|
|
6731
|
-
autosavePaused: false
|
|
6948
|
+
autosavePaused: false,
|
|
6949
|
+
conflictOpen: false
|
|
6732
6950
|
};
|
|
6733
6951
|
var useSaveStatusStore = create()((set) => ({
|
|
6734
6952
|
...PRISTINE,
|
|
@@ -6745,10 +6963,15 @@ var useSaveStatusStore = create()((set) => ({
|
|
|
6745
6963
|
failure: null,
|
|
6746
6964
|
incomplete: false,
|
|
6747
6965
|
autosavePaused: false,
|
|
6966
|
+
conflictOpen: false,
|
|
6748
6967
|
lastSavedAt: at
|
|
6749
6968
|
} : { saving: false }
|
|
6750
6969
|
),
|
|
6751
|
-
saveFailed: (failure) => set({
|
|
6970
|
+
saveFailed: (failure) => set({
|
|
6971
|
+
saving: false,
|
|
6972
|
+
failure,
|
|
6973
|
+
conflictOpen: failure.conflict?.reason === "STALE_REVISION"
|
|
6974
|
+
}),
|
|
6752
6975
|
clearFailure: () => set({ failure: null }),
|
|
6753
6976
|
setQuotaExhausted: (quotaExhausted) => set({ quotaExhausted }),
|
|
6754
6977
|
setAutosaveEnabled: (autosaveEnabled) => {
|
|
@@ -6757,6 +6980,7 @@ var useSaveStatusStore = create()((set) => ({
|
|
|
6757
6980
|
},
|
|
6758
6981
|
requestLeave: (leaveRequest) => set({ leaveRequest }),
|
|
6759
6982
|
setAutosavePaused: (autosavePaused) => set({ autosavePaused }),
|
|
6983
|
+
setConflictOpen: (conflictOpen) => set({ conflictOpen }),
|
|
6760
6984
|
reset: () => set({ ...PRISTINE })
|
|
6761
6985
|
}
|
|
6762
6986
|
}));
|
|
@@ -6875,13 +7099,15 @@ function useSaveWorkflow() {
|
|
|
6875
7099
|
const { bus, workspaceId } = useFluidGridsAnalytics();
|
|
6876
7100
|
const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);
|
|
6877
7101
|
const performSave = useCallback(
|
|
6878
|
-
async (snapshot, silent) => {
|
|
7102
|
+
async (snapshot, silent, asNewVersion) => {
|
|
6879
7103
|
const stillOpen = () => useFlowStore.getState().loadGeneration === snapshot.generation;
|
|
6880
7104
|
try {
|
|
6881
7105
|
const { workflow } = snapshot;
|
|
6882
7106
|
const mintedKey = snapshot.key ? null : v4();
|
|
6883
7107
|
const workflowKey = snapshot.key || mintedKey || "";
|
|
6884
|
-
const
|
|
7108
|
+
const forkRequested = asNewVersion && !!workflow.dbId;
|
|
7109
|
+
const isDraft = !forkRequested && (!workflow.status || workflow.status === "DRAFT");
|
|
7110
|
+
const expectedRevision = revisionOf(workflow.dbId);
|
|
6885
7111
|
const client = getFluidGridsClient();
|
|
6886
7112
|
const { preparedWorkflow, owned } = builderDefinition(
|
|
6887
7113
|
snapshot,
|
|
@@ -6907,7 +7133,11 @@ function useSaveWorkflow() {
|
|
|
6907
7133
|
description: workflow.name || "Workflow update",
|
|
6908
7134
|
// null (not undefined) so an emptied alias field actually
|
|
6909
7135
|
// CLEARS the alias — undefined is dropped by the resolver.
|
|
6910
|
-
alias: workflow.alias?.trim() ? workflow.alias.trim() : null
|
|
7136
|
+
alias: workflow.alias?.trim() ? workflow.alias.trim() : null,
|
|
7137
|
+
// Refused instead of overwriting a change made elsewhere,
|
|
7138
|
+
// or a save from a page that no longer holds the edit lease.
|
|
7139
|
+
...expectedRevision !== void 0 ? { expectedRevision } : {},
|
|
7140
|
+
editSessionId: EDIT_SESSION_ID
|
|
6911
7141
|
}
|
|
6912
7142
|
}
|
|
6913
7143
|
})
|
|
@@ -6917,6 +7147,7 @@ function useSaveWorkflow() {
|
|
|
6917
7147
|
}
|
|
6918
7148
|
savedVersion = data.updateWorkflowDefinition.version;
|
|
6919
7149
|
savedDbId = data.updateWorkflowDefinition.id;
|
|
7150
|
+
rememberRevision(savedDbId, data.updateWorkflowDefinition.revision);
|
|
6920
7151
|
operation = "updated";
|
|
6921
7152
|
if (!silent) {
|
|
6922
7153
|
toast.success("Workflow saved", {
|
|
@@ -6944,6 +7175,7 @@ function useSaveWorkflow() {
|
|
|
6944
7175
|
}
|
|
6945
7176
|
savedVersion = data.createWorkflowDefinition.version;
|
|
6946
7177
|
savedDbId = data.createWorkflowDefinition.id;
|
|
7178
|
+
rememberRevision(savedDbId, data.createWorkflowDefinition.revision);
|
|
6947
7179
|
operation = "created";
|
|
6948
7180
|
emitWorkflowCreated(bus, {
|
|
6949
7181
|
workspaceId,
|
|
@@ -6984,7 +7216,15 @@ function useSaveWorkflow() {
|
|
|
6984
7216
|
// pointer — the backend clears it from siblings). Included
|
|
6985
7217
|
// only when set so saves without an alias don't depend on the
|
|
6986
7218
|
// new schema field being deployed.
|
|
6987
|
-
...workflow.alias?.trim() ? { alias: workflow.alias.trim() } : {}
|
|
7219
|
+
...workflow.alias?.trim() ? { alias: workflow.alias.trim() } : {},
|
|
7220
|
+
// A save of an ACTIVE or ARCHIVED version claims it, so two
|
|
7221
|
+
// pages that loaded it never create rival drafts. Keeping
|
|
7222
|
+
// the canvas as a new version on purpose skips the claim.
|
|
7223
|
+
...forkRequested ? {} : {
|
|
7224
|
+
baseVersion: workflow.version,
|
|
7225
|
+
...expectedRevision !== void 0 ? { expectedRevision } : {},
|
|
7226
|
+
editSessionId: EDIT_SESSION_ID
|
|
7227
|
+
}
|
|
6988
7228
|
}
|
|
6989
7229
|
}
|
|
6990
7230
|
})
|
|
@@ -6997,6 +7237,7 @@ function useSaveWorkflow() {
|
|
|
6997
7237
|
const newWorkflow = data.createWorkflowVersion.workflow;
|
|
6998
7238
|
savedVersion = newWorkflow?.version ?? workflow.version;
|
|
6999
7239
|
savedDbId = newWorkflow?.id ?? workflow.dbId;
|
|
7240
|
+
rememberRevision(newWorkflow?.id, newWorkflow?.revision);
|
|
7000
7241
|
operation = "versioned";
|
|
7001
7242
|
if (stillOpen()) {
|
|
7002
7243
|
setWorkflow({
|
|
@@ -7042,15 +7283,30 @@ function useSaveWorkflow() {
|
|
|
7042
7283
|
console.error("Error saving workflow:", message);
|
|
7043
7284
|
const cause = error instanceof Error ? error.cause : void 0;
|
|
7044
7285
|
const quotaExhausted2 = isQuotaExhaustedFailure(cause) || isQuotaExhaustedFailure(error);
|
|
7045
|
-
|
|
7286
|
+
const conflict = findSaveConflict(error);
|
|
7287
|
+
if (!quotaExhausted2 && !conflict && !silent) {
|
|
7046
7288
|
toast.error("Failed to save workflow", {
|
|
7047
7289
|
description: message
|
|
7048
7290
|
});
|
|
7049
7291
|
}
|
|
7292
|
+
if (conflict?.reason === "EDIT_LEASE_HELD" && stillOpen()) {
|
|
7293
|
+
const lease = useEditLeaseStore.getState();
|
|
7294
|
+
const answer = {
|
|
7295
|
+
available: true,
|
|
7296
|
+
held: true,
|
|
7297
|
+
heldBySelf: false,
|
|
7298
|
+
holderActorId: conflict.holderActorId
|
|
7299
|
+
};
|
|
7300
|
+
lease.actions.record(phaseAfterAcquire(lease.phase, answer), answer);
|
|
7301
|
+
}
|
|
7050
7302
|
return {
|
|
7051
7303
|
saved: false,
|
|
7052
7304
|
quotaExhausted: quotaExhausted2,
|
|
7053
|
-
failure: {
|
|
7305
|
+
failure: {
|
|
7306
|
+
message,
|
|
7307
|
+
kind: classifySaveFailure(error),
|
|
7308
|
+
...conflict ? { conflict } : {}
|
|
7309
|
+
}
|
|
7054
7310
|
};
|
|
7055
7311
|
}
|
|
7056
7312
|
},
|
|
@@ -7066,7 +7322,11 @@ function useSaveWorkflow() {
|
|
|
7066
7322
|
statusActions.beginSave();
|
|
7067
7323
|
statusActions.setQuotaExhausted(false);
|
|
7068
7324
|
}
|
|
7069
|
-
const outcome = await performSave(
|
|
7325
|
+
const outcome = await performSave(
|
|
7326
|
+
snapshot,
|
|
7327
|
+
options.silent ?? false,
|
|
7328
|
+
options.asNewVersion ?? false
|
|
7329
|
+
);
|
|
7070
7330
|
recordSaveOutcome(outcome, {
|
|
7071
7331
|
open: isOpen(),
|
|
7072
7332
|
baseline: {
|
|
@@ -7840,6 +8100,7 @@ function AdapterPort({
|
|
|
7840
8100
|
const onConnect = useFlowStore((s) => s.actions.edges.onConnect);
|
|
7841
8101
|
const [pickerOpen, setPickerOpen] = useState(false);
|
|
7842
8102
|
const candidates = useCompatibleSubNodes(adapter);
|
|
8103
|
+
const readOnly = useBuilderReadOnly();
|
|
7843
8104
|
const connectionCount = edges.filter(
|
|
7844
8105
|
(e) => e.source === nodeId && e.sourceHandle === adapter.name
|
|
7845
8106
|
).length;
|
|
@@ -7893,7 +8154,7 @@ function AdapterPort({
|
|
|
7893
8154
|
adapter?.required && /* @__PURE__ */ jsx("span", { className: "text-[var(--color-status-error-text)] absolute -right-2 top-[1px]", children: "*" })
|
|
7894
8155
|
] }) }),
|
|
7895
8156
|
/* @__PURE__ */ jsxs("div", { className: "mt-16 flex flex-col items-center gap-1.5", children: [
|
|
7896
|
-
!isAtMaxConnections && /* @__PURE__ */ jsx(
|
|
8157
|
+
!isAtMaxConnections && !readOnly && /* @__PURE__ */ jsx(
|
|
7897
8158
|
"button",
|
|
7898
8159
|
{
|
|
7899
8160
|
type: "button",
|
|
@@ -8024,6 +8285,7 @@ function SubNodeComponent({
|
|
|
8024
8285
|
}) {
|
|
8025
8286
|
const meta = useMemo(() => getNodeDetail(nodeType), [nodeType]);
|
|
8026
8287
|
const deleteNode = useDeleteNode();
|
|
8288
|
+
const readOnly = useBuilderReadOnly();
|
|
8027
8289
|
const [showNodePropertiesOf] = useFlowStore(
|
|
8028
8290
|
useShallow((s) => [s.actions.sidebar.showNodePropertiesOf])
|
|
8029
8291
|
);
|
|
@@ -8069,7 +8331,7 @@ function SubNodeComponent({
|
|
|
8069
8331
|
}
|
|
8070
8332
|
),
|
|
8071
8333
|
/* @__PURE__ */ jsx("span", { className: "mt-1.5 text-xs text-[var(--color-text-secondary)] font-medium text-center max-w-24 leading-tight", children: data?.label || data?.args?.state?.operation || meta.title }),
|
|
8072
|
-
/* @__PURE__ */ jsx(
|
|
8334
|
+
!readOnly && /* @__PURE__ */ jsx(
|
|
8073
8335
|
"button",
|
|
8074
8336
|
{
|
|
8075
8337
|
onClick: () => deleteNode(id),
|
|
@@ -8141,8 +8403,9 @@ var getNodeMetadata = (value) => {
|
|
|
8141
8403
|
s.actions.nodes.endRename
|
|
8142
8404
|
])
|
|
8143
8405
|
);
|
|
8406
|
+
const readOnly = useBuilderReadOnly();
|
|
8144
8407
|
useEffect(() => {
|
|
8145
|
-
if (nodeType !== "integration/channel") return;
|
|
8408
|
+
if (readOnly || nodeType !== "integration/channel") return;
|
|
8146
8409
|
const nodeData = data;
|
|
8147
8410
|
const explicitRole = nodeData?.args?.state?.role;
|
|
8148
8411
|
const hasIncomingEdge = edges.some((e) => e.target === id);
|
|
@@ -8169,7 +8432,7 @@ var getNodeMetadata = (value) => {
|
|
|
8169
8432
|
zustandSetNodes(updated);
|
|
8170
8433
|
return updated;
|
|
8171
8434
|
});
|
|
8172
|
-
}, [nodeType, id, edges, data, setNodes, zustandSetNodes]);
|
|
8435
|
+
}, [readOnly, nodeType, id, edges, data, setNodes, zustandSetNodes]);
|
|
8173
8436
|
const { executeStep } = useNodeExecution();
|
|
8174
8437
|
const deleteNode = useDeleteNode();
|
|
8175
8438
|
const handleDeleteNode = () => {
|
|
@@ -8327,12 +8590,12 @@ var getNodeMetadata = (value) => {
|
|
|
8327
8590
|
onDoubleClick: handleOpenNdv,
|
|
8328
8591
|
onSettings: handleOpenNdv,
|
|
8329
8592
|
onExecute: handleExecuteStep,
|
|
8330
|
-
onDelete: handleDeleteNode,
|
|
8593
|
+
onDelete: readOnly ? void 0 : handleDeleteNode,
|
|
8331
8594
|
infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
|
|
8332
8595
|
disabled: isDisabled,
|
|
8333
|
-
onToggleDisabled: handleToggleDisabled,
|
|
8334
|
-
isRenaming: isRenamingThisNode,
|
|
8335
|
-
onStartRename: handleStartRename,
|
|
8596
|
+
onToggleDisabled: readOnly ? void 0 : handleToggleDisabled,
|
|
8597
|
+
isRenaming: isRenamingThisNode && !readOnly,
|
|
8598
|
+
onStartRename: readOnly ? void 0 : handleStartRename,
|
|
8336
8599
|
onCommitRename: handleCommitRename,
|
|
8337
8600
|
onCancelRename: handleCancelRename
|
|
8338
8601
|
}
|
|
@@ -8361,10 +8624,10 @@ var getNodeMetadata = (value) => {
|
|
|
8361
8624
|
isExecuting: isThisNodeExecuting,
|
|
8362
8625
|
onSettings: handleOpenNdv,
|
|
8363
8626
|
onExecute: handleExecuteStep,
|
|
8364
|
-
onDelete: handleDeleteNode,
|
|
8627
|
+
onDelete: readOnly ? void 0 : handleDeleteNode,
|
|
8365
8628
|
infoButton: /* @__PURE__ */ jsx(NodeInfoButtonWithModal, { metadata: nodeInfoMetadata }),
|
|
8366
8629
|
disabled: isDisabled,
|
|
8367
|
-
onToggleDisabled: handleToggleDisabled,
|
|
8630
|
+
onToggleDisabled: readOnly ? void 0 : handleToggleDisabled,
|
|
8368
8631
|
children: [
|
|
8369
8632
|
/* @__PURE__ */ jsx(
|
|
8370
8633
|
NodeCardHeader,
|
|
@@ -8374,8 +8637,8 @@ var getNodeMetadata = (value) => {
|
|
|
8374
8637
|
accentKey: value?.type || meta.title,
|
|
8375
8638
|
missingCredentials,
|
|
8376
8639
|
label: nodeLabel,
|
|
8377
|
-
isRenaming: isRenamingThisNode,
|
|
8378
|
-
onStartRename: handleStartRename,
|
|
8640
|
+
isRenaming: isRenamingThisNode && !readOnly,
|
|
8641
|
+
onStartRename: readOnly ? void 0 : handleStartRename,
|
|
8379
8642
|
onCommitRename: handleCommitRename,
|
|
8380
8643
|
onCancelRename: handleCancelRename
|
|
8381
8644
|
}
|
|
@@ -9585,4 +9848,4 @@ function useNodeExecution() {
|
|
|
9585
9848
|
};
|
|
9586
9849
|
}
|
|
9587
9850
|
|
|
9588
|
-
export { ALLOW_ALL_PERMISSIONS, AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, CODE_WORKFLOW_NODE_TYPE, ConnectionFormDialog, ConnectionSelector, DURABLE_FUNCTION_NODE_TYPES, ExpressionEditor, FLUIDGRIDS_FLAGS, FLUIDGRIDS_FLAG_DEFAULTS, FLUIDGRIDS_PERMISSIONS, FluidGridsContext, FluidGridsPermissionsProvider, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, RUNS_QUOTA_NAME, STICKY_NOTE_TYPE, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WORKFLOWS_QUOTA_NAME, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, canAutosave, canRenderOperationPanel, canSignalRun, changedSourceFiles, childRunIdOf, classifyCreateRefusal, clearCodeWorkflowDefinitionCache, codeBuildIdOf, components_default, createConfiguredNode, createThenOpen, declaredOutputFields, declaredSignals, defaultSourcePath, describeOperationError, diagnosticsByPath, editStateOf, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, evaluatePermissionCheck, fieldsFromIO, fieldsFromValue, filterPaletteNodes, findQuotaRefusal, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, interfaceFields, interfaceHandlers, isDurableFunctionNodeType, isEditableSourcePath, isForbiddenError, isImageIcon, isNodeConfigsInitialized, isNodeTrigger, isNodeTypeHiddenFromPalette, isParamVisible, isQuotaExhaustedFailure, isTriggerOperation, leaveNeedsConfirmation, listCustomBlocks, liveInternalOperations, loadDefinitionJson, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, parseRawSignalPayload, pathToExpression, payloadFromCardValues, projectLanguage, readCodeWorkflowState, readDisplayOptions, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolveUiSpec, runPreparationOf, runSignalTargets, runTriggerFromMode, saveIndicatorOf, savesInPlace, signalPayloadCard, snapshotForSave, sourceLanguageOf, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, toCodeMirrorDiagnostics, useAgentDefinitionList, useAgentDefinitions, useCodeWorkflowInterface, useConnection, useConnections, useConnectionsByProvider, useCreateConnection, useDurableFunctionNodesEnabled, useDurableParityEnabled, useFlowStore, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsFlag, useFluidGridsPermission, useInitiateOAuth, useInsertNode, useIsValidConnection, useNodeExecution, useNodeRegistryRevision, useProviders, useSaveStatusStore, useSaveWorkflow, workflowFingerprint };
|
|
9851
|
+
export { ALLOW_ALL_PERMISSIONS, AUTOSAVE_DEBOUNCE_MS, AUTOSAVE_RETRY_DELAYS_MS, AVAILABLE_NODES, BILLING_PLANS_PATH, BuilderReadOnlyProvider, CODE_WORKFLOW_NODE_TYPE, ConnectionFormDialog, ConnectionSelector, DURABLE_FUNCTION_NODE_TYPES, EDIT_SESSION_ID, ExpressionEditor, FLUIDGRIDS_FLAGS, FLUIDGRIDS_FLAG_DEFAULTS, FLUIDGRIDS_PERMISSIONS, FluidGridsContext, FluidGridsPermissionsProvider, FluidGridsProvider, NODES, NODES_METADATA, NODE_CONFIGS, NODE_OPERATION_DRAG_DATA_FORMAT, NODE_TYPES, NODE_TYPE_DRAG_DATA_FORMAT, NodePropertyPanel, NodeTypeIcon, RUNS_QUOTA_NAME, STICKY_NOTE_TYPE, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, WORKFLOWS_QUOTA_NAME, bannerOf, blankWorkflowCreateInput, buildOperationSeed, buildStickyNode, canAutosave, canRenderOperationPanel, canSignalRun, changedSourceFiles, childRunIdOf, classifyCreateRefusal, clearCodeWorkflowDefinitionCache, codeBuildIdOf, components_default, createConfiguredNode, createThenOpen, declaredOutputFields, declaredSignals, defaultSourcePath, describeOperationError, diagnosticsByPath, editStateOf, emitNodeInstalled, emitRunFailed, emitRunLimitHit, emitRunStarted, emitTemplateUsed, emitUpgradeClicked, emitWorkflowCreated, emitWorkflowLimitHit, emitWorkflowPublished, ensureNodeConfigsLoaded, evaluatePermissionCheck, fieldsFromIO, fieldsFromValue, filterPaletteNodes, findQuotaRefusal, findSaveConflict, forgetSessionForReload, formatParameterValue, getNodeDetail, getNodeMetadata, inAppLeaveTarget, interfaceFields, interfaceHandlers, isDurableFunctionNodeType, isEditableSourcePath, isForbiddenError, isImageIcon, isLocked, isNodeConfigsInitialized, isNodeTrigger, isNodeTypeHiddenFromPalette, isParamVisible, isQuotaExhaustedFailure, isTriggerOperation, leaseCallQueue, leaveNeedsConfirmation, listCustomBlocks, liveInternalOperations, loadDefinitionJson, mergeStickyNotes, nodeAccent, nodesOf, onNodeTypesUpdate, openRunQuotaUpgradePrompt, parseParameterValue, parseRawSignalPayload, pathToExpression, payloadFromCardValues, phaseAfterAcquire, phaseAfterTakeOver, projectLanguage, readCodeWorkflowState, readDisplayOptions, refetchStoreNodes, registerCustomBlock, registerWorkflowNodeTypes, releasesOnClose, rememberOwnStatusChange, rememberRevision, rememberSessionForReload, resolveInputHandles, resolveNodeOperation, resolveOperationName, resolveOutputHandles, resolveUiSpec, runPreparationOf, runSignalTargets, runTriggerFromMode, saveIndicatorOf, savesInPlace, sessionBeforeReload, shouldReleaseForIdle, signalPayloadCard, snapshotForSave, sourceLanguageOf, stripSubmitActions, structuredParameterType, subscribeWorkflowSaved, synchronizeOperationUpdate, throwIfResultError, tickAction, toCodeMirrorDiagnostics, useAgentDefinitionList, useAgentDefinitions, useBuilderReadOnly, useCodeWorkflowInterface, useConnection, useConnections, useConnectionsByProvider, useCreateConnection, useDurableFunctionNodesEnabled, useDurableParityEnabled, useEditLeaseLocked, useEditLeaseStore, useFlowStore, useFluidGridsAnalytics, useFluidGridsContext, useFluidGridsFlag, useFluidGridsPermission, useInitiateOAuth, useInsertNode, useIsValidConnection, useNodeExecution, useNodeRegistryRevision, useProviders, useSaveStatusStore, useSaveWorkflow, workflowFingerprint };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-
|
|
2
|
-
import { useExecutions } from './chunk-
|
|
3
|
-
import { useExportWorkflowAs, downloadWorkflowExport, importAcceptAttribute, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-
|
|
1
|
+
import { CreateWorkflowRefusalDialog, firstWorkflowProgress, GUIDED_TOUR_STATE, builderPathFor } from './chunk-2NG5VZWI.js';
|
|
2
|
+
import { useExecutions } from './chunk-HWEKWYXQ.js';
|
|
3
|
+
import { useExportWorkflowAs, downloadWorkflowExport, importAcceptAttribute, QuotaExhaustedDialog, importFileKind, parseWorkflowImport, CODE_EXPORT_FORMATS, ImportSourceError, assertImportByteSize, MAX_IMPORT_ARCHIVE_BYTES, readProjectArchive, checkTypeScriptImport, MAX_IMPORT_SOURCE_BYTES, typeScriptModuleFile, typeScriptImportSource, workflowNameFromFile, primaryImportModule } from './chunk-S4JYBJ4X.js';
|
|
4
4
|
import { workflowsListControls } from './chunk-D3UWK7GY.js';
|
|
5
|
-
import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-
|
|
5
|
+
import { useCreateWorkflow, useWorkflowDefinitions, useLazyWorkflowDefinition, useImportWorkflow, useDuplicateWorkflow, useDeleteWorkflow } from './chunk-G3KZOX52.js';
|
|
6
6
|
import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
|
|
7
7
|
import { FluidGridsDocsLink } from './chunk-4VJ3MDOV.js';
|
|
8
|
-
import { createThenOpen, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, useFluidGridsFlag, FLUIDGRIDS_FLAGS, SdkPermissionButton, BILLING_PLANS_PATH, describeOperationError, useFlowStore, SdkPermissionGate, isQuotaExhaustedFailure } from './chunk-
|
|
8
|
+
import { createThenOpen, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, useFluidGridsFlag, FLUIDGRIDS_FLAGS, SdkPermissionButton, BILLING_PLANS_PATH, describeOperationError, useFlowStore, SdkPermissionGate, isQuotaExhaustedFailure } from './chunk-NAYPOEYM.js';
|
|
9
9
|
import { useTr } from './chunk-UULVIT25.js';
|
|
10
10
|
import { useState, useRef, useCallback, useMemo } from 'react';
|
|
11
11
|
import { useNavigate } from 'react-router';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useAgentDefinitions, useAgentDefinitionList, useConnections, describeOperationError } from './chunk-
|
|
1
|
+
import { useAgentDefinitions, useAgentDefinitionList, useConnections, describeOperationError } from './chunk-NAYPOEYM.js';
|
|
2
2
|
import { useTr } from './chunk-UULVIT25.js';
|
|
3
3
|
import { useState, useCallback, useEffect } from 'react';
|
|
4
4
|
import { Icon } from '@iconify/react';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LOG_STREAM_DESTINATIONS, CREATE_LOG_STREAM_DESTINATION, UPDATE_LOG_STREAM_DESTINATION, DELETE_LOG_STREAM_DESTINATION, TEST_LOG_STREAM_DESTINATION, REPLAY_WORKFLOW_RUN, RETRY_WORKFLOW_RUNS, OBSERVABILITY_DASHBOARD_SUMMARY, OBSERVABILITY_FAILED_RUNS, OBSERVABILITY_DATA_SINKS, OBSERVABILITY_DATA_SINK_DATA } from './chunk-5ERAJC2I.js';
|
|
2
|
-
import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-
|
|
2
|
+
import { throwIfResultError, describeOperationError, useFluidGridsAnalytics, emitRunStarted, openRunQuotaUpgradePrompt, useFluidGridsFlag, FLUIDGRIDS_FLAGS } from './chunk-NAYPOEYM.js';
|
|
3
3
|
import { useTr } from './chunk-UULVIT25.js';
|
|
4
4
|
import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
|
|
5
5
|
import { useCallback, useState, useMemo, useEffect } from 'react';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-
|
|
2
|
-
import { ExportWorkflowCodeDocument } from './chunk-
|
|
1
|
+
import { describeOperationError, useFluidGridsAnalytics, emitWorkflowLimitHit, emitUpgradeClicked, WORKFLOWS_QUOTA_NAME, throwIfResultError } from './chunk-NAYPOEYM.js';
|
|
2
|
+
import { ExportWorkflowCodeDocument } from './chunk-GQTEHWWY.js';
|
|
3
3
|
import { useTr } from './chunk-UULVIT25.js';
|
|
4
4
|
import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
|
|
5
5
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-
|
|
1
|
+
import { useEntityTags, useTagEntity, useUntagEntity } from './chunk-Z6I6A47T.js';
|
|
2
2
|
import { notifyFluidGridsAiCreditsUpdated } from './chunk-Y53CVZVV.js';
|
|
3
|
-
import { throwIfResultError, describeOperationError, signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-
|
|
3
|
+
import { throwIfResultError, describeOperationError, signalPayloadCard, components_default, payloadFromCardValues, parseRawSignalPayload } from './chunk-NAYPOEYM.js';
|
|
4
4
|
import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
|
|
5
|
-
import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-
|
|
5
|
+
import { TerminateWorkflowRunDocument, WorkflowRunHistoryDocument, RunEventAppendedDocument, WorkflowProposalDocument, ProposeRunFixDocument, ProposeWorkflowChangeDocument, ApplyWorkflowProposalDocument, RejectWorkflowProposalDocument, CancelWorkflowProposalDocument, DurableRunFieldsDocument, WorkflowRunDeterminismStatusDocument, WorkflowRunStackTraceDocument, SignalWorkflowRunDocument } from './chunk-GQTEHWWY.js';
|
|
6
6
|
import { useTr } from './chunk-UULVIT25.js';
|
|
7
7
|
import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
|
|
8
8
|
import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { useDurableParityRunFields, buildNodeDisplayMap, useRunMetadata, useRunPending, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-
|
|
2
|
-
import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-
|
|
3
|
-
import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-
|
|
4
|
-
import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-
|
|
5
|
-
import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, EntityTagPicker, RunHistoryView, SignalRunDialog, terminateDurableRun, useWorkflowProposal, WorkflowProposalCard } from './chunk-
|
|
1
|
+
import { useDurableParityRunFields, buildNodeDisplayMap, useRunMetadata, useRunPending, ExecutionStatusBadge, formatRunVersion, NodeTimeline, RunLogViewer, setRunVersioningOverride } from './chunk-UWNCFMHV.js';
|
|
2
|
+
import { useExecution, useExecutionActions, useAutoRefresh, runChainLinks, shortRunId, callbackTone, parseMetadataDefinition, overrideRequestOf } from './chunk-HWEKWYXQ.js';
|
|
3
|
+
import { fetchRunFailureClusters, OPEN_STATUSES, dismissRunFailureCluster, BUCKET_LABELS } from './chunk-V5PA5KGV.js';
|
|
4
|
+
import { useRunPolicyDecisions, RunPolicyDecisions } from './chunk-UIDJT3YK.js';
|
|
5
|
+
import { useDurableRunFields, useRunHistory, useDeterminismStatus, useRunStackTrace, EntityTagPicker, RunHistoryView, SignalRunDialog, terminateDurableRun, useWorkflowProposal, WorkflowProposalCard } from './chunk-T22LICGX.js';
|
|
6
6
|
import { AiCreditBalanceSlot } from './chunk-Y53CVZVV.js';
|
|
7
|
-
import { useWorkflowVersions } from './chunk-
|
|
8
|
-
import { throwIfResultError, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, describeOperationError } from './chunk-
|
|
7
|
+
import { useWorkflowVersions } from './chunk-G3KZOX52.js';
|
|
8
|
+
import { throwIfResultError, useFluidGridsPermission, FLUIDGRIDS_PERMISSIONS, useDurableFunctionNodesEnabled, useDurableParityEnabled, runSignalTargets, canSignalRun, describeOperationError } from './chunk-NAYPOEYM.js';
|
|
9
9
|
import { getFluidGridsConfig } from './chunk-6AMNEX2Y.js';
|
|
10
|
-
import { RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument } from './chunk-
|
|
10
|
+
import { RunLogsDocument, RunLogAppendedDocument, ExplainRunDocument } from './chunk-GQTEHWWY.js';
|
|
11
11
|
import { useTr } from './chunk-UULVIT25.js';
|
|
12
12
|
import { getFluidGridsClient, getFluidGridsClientSafe } from './chunk-NTWG3CJX.js';
|
|
13
13
|
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { throwIfResultError, describeOperationError } from './chunk-
|
|
1
|
+
import { throwIfResultError, describeOperationError } from './chunk-NAYPOEYM.js';
|
|
2
2
|
import { useTr } from './chunk-UULVIT25.js';
|
|
3
3
|
import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
|
|
4
4
|
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-
|
|
2
|
-
import { useAvailableTags } from './chunk-
|
|
1
|
+
import { validateDateRange, statusCountFilter, STATUS_COUNT_GROUP_BY, statusCountsOf } from './chunk-HWEKWYXQ.js';
|
|
2
|
+
import { useAvailableTags } from './chunk-Z6I6A47T.js';
|
|
3
3
|
import { executionsControls } from './chunk-D3UWK7GY.js';
|
|
4
4
|
import { useFluidGridsPageControls } from './chunk-PJAWNFJV.js';
|
|
5
|
-
import { useDurableParityEnabled, throwIfResultError, describeOperationError } from './chunk-
|
|
5
|
+
import { useDurableParityEnabled, throwIfResultError, describeOperationError } from './chunk-NAYPOEYM.js';
|
|
6
6
|
import { useExecutionsStore } from './chunk-6AMNEX2Y.js';
|
|
7
|
-
import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-
|
|
7
|
+
import { SetWorkflowRunVersioningOverrideDocument, WorkflowRunsCountDocument, DurableParityRunFieldsDocument, WorkflowRunPendingDocument, WorkflowRunMetadataDocument } from './chunk-GQTEHWWY.js';
|
|
8
8
|
import { useTr } from './chunk-UULVIT25.js';
|
|
9
9
|
import { getFluidGridsClient } from './chunk-NTWG3CJX.js';
|
|
10
10
|
import { Icon } from '@iconify/react';
|