@burdenoff/fluidgrids-fe-sdk 2026.1111.20 → 2026.1111.22
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/README.md +13 -0
- package/dist/{AiStudioPage-CmjZwaoy.js → AiStudioPage-DIfF4LhQ.js} +5 -5
- package/dist/{DataSinkDashboardPage-auvILMSt.js → DataSinkDashboardPage-DDvNPS8Z.js} +1 -1
- package/dist/{DataTablesPage-BZy2z0LB.js → DataTablesPage-BpnF13UT.js} +9 -1
- package/dist/{ExecutionDetailPage-C0q5brcQ.js → ExecutionDetailPage-DYLWtHRG.js} +60 -13
- package/dist/{ExecutionsListPage-Dcc6wi-8.js → ExecutionsListPage-D63aCXJH.js} +4 -4
- package/dist/{FluidGridsProvider-CRGXDZX1.js → FluidGridsProvider-CWyQ8ziM.js} +364 -98
- package/dist/{HistoryPage-B5Np7Dd_.js → HistoryPage-CNXgUMb0.js} +1 -1
- package/dist/{InsightsPage-CQ8sB4d6.js → InsightsPage-Duo83yAM.js} +1 -1
- package/dist/{MissingNodesInstallModal-Dm1m3Ysp.js → MissingNodesInstallModal-Q3RYBvS8.js} +1 -1
- package/dist/{QuotaExhaustedDialog-DYCpMOyQ.js → QuotaExhaustedDialog-ChBoJnRo.js} +3 -2
- package/dist/{SettingsPage-BNJV7nwG.js → SettingsPage-DI_vIG7t.js} +2 -2
- package/dist/{TemplateCard-BuP6_QX8.js → TemplateCard-6W2q2wiK.js} +4 -3
- package/dist/{TemplateConfigurationModal--YswnkOD.js → TemplateConfigurationModal-qNQGP7cm.js} +1 -1
- package/dist/{TemplateDetailPanel-CtUjihCQ.js → TemplateDetailPanel-CQvYqhVO.js} +1 -1
- package/dist/{TemplatePreview-TH3zVEtT.js → TemplatePreview-t3251W_n.js} +4 -4
- package/dist/{TemplatesPage-BDiIswSv.js → TemplatesPage-Bvg6R2P9.js} +6 -5
- package/dist/{WorkflowBuilder-KypUzhmK.js → WorkflowBuilder-C-hgvww2.js} +3 -3
- package/dist/{WorkflowBuilder-DnTqzYD5.js → WorkflowBuilder-DdvSGsxr.js} +8 -8
- package/dist/{WorkflowSearchRedirect-DAA2K0Md.js → WorkflowSearchRedirect-33Vs4FKc.js} +1 -1
- package/dist/{WorkflowsList-BWdu8wj0.js → WorkflowsList-C3bHLpSv.js} +147 -22
- package/dist/agent-tools.js +1 -1
- package/dist/{agentTools-VQXDvw4O.js → agentTools-BjhxAdlt.js} +3 -4
- package/dist/askAboutBridge-BV8m95kk.js +65 -0
- package/dist/assistant.d.ts +30 -1
- package/dist/assistant.js +2 -1
- package/dist/{canvasNoteTools-CCQtxq7U.js → canvasNoteTools-CZEFFhRp.js} +2 -2
- package/dist/{code-editor-field-4j1LiULY.js → code-editor-field-CfP0QYUD.js} +1 -1
- package/dist/executions.js +2 -2
- package/dist/{flow-builder-KbM4vIW8.js → flow-builder-CE8cNXNi.js} +16 -73
- package/dist/fluidgridsEvents-Dm5CaHtr.js +162 -0
- package/dist/history.js +1 -1
- package/dist/{index-6JR2vD9J.d.ts → index-7eJQwsNS.d.ts} +3 -19
- package/dist/index.d.ts +2 -1
- package/dist/index.js +29 -27
- package/dist/{node-detail-view-CeOkSF2C.js → node-detail-view-BoR0vYZ3.js} +5 -5
- package/dist/{node-editor-tab-body-CN89wDV7.js → node-editor-tab-body-DxMbKspp.js} +2 -2
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -2
- package/dist/{popover-CxKbvYSJ.js → popover-B1aKz7DC.js} +1 -1
- package/dist/{quick-config-panel-wfP0s4QO.js → quick-config-panel-DXvLJdeW.js} +3 -3
- package/dist/quota-Cdt8yz7N.js +152 -0
- package/dist/quota.d.ts +3 -0
- package/dist/quota.js +4 -0
- package/dist/runsQuota-DsniKiSg.d.ts +20 -0
- package/dist/runsQuota-DvXR6mRN.js +100 -0
- package/dist/{schedule-panel-2HgyHvO8.js → schedule-panel-CY6S4JMd.js} +5 -5
- package/dist/settings.js +1 -1
- package/dist/{sidebar-node-editor-DLOVQATw.js → sidebar-node-editor-FU3fvOjh.js} +3 -3
- package/dist/templates.js +2 -2
- package/dist/{uiMarkTools-nlmzsHQM.js → uiMarkTools-DZ6akjQK.js} +1 -1
- package/dist/useActionParam-B0ebTZmg.js +83 -0
- package/dist/{useDurableParity-CJvnfF3T.js → useDurableParity-BApRraSO.js} +1 -1
- package/dist/{useExecutions-CyXkJtpk.js → useExecutions-C2a4EcvC.js} +2 -2
- package/dist/{useObservability-QZjFuXnI.js → useObservability-BmbeK5bG.js} +2 -2
- package/dist/{useRunHistory-D4gaa81A.js → useRunHistory-CqfDFRzr.js} +1 -1
- package/dist/{useWorkflowCodeExport-BNGq3BJ9.js → useWorkflowCodeExport-DebpM48M.js} +1 -1
- package/dist/{useWorkflows-XsfD7JA-.js → useWorkflows-D1-rYzGK.js} +2 -2
- package/dist/workflow-builder.js +4 -4
- package/dist/workflow-pages.d.ts +1 -1
- package/dist/workflow-pages.js +14 -14
- package/dist/workflows-list.d.ts +6 -0
- package/dist/workflows-list.js +3 -2
- package/package.json +5 -1
- package/dist/fluidgridsEvents-CNdcrUNN.js +0 -310
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { B as NODE_TYPE_DRAG_DATA_FORMAT, G as isTriggerOperation, H as useFlowStore, M as isImageIcon, T as resolveInputHandles, U as useIsValidConnection, V as STICKY_NOTE_TYPE, j as NodeTypeIcon, r as CODE_WORKFLOW_NODE_TYPE, z as NODE_OPERATION_DRAG_DATA_FORMAT } from "./node-operation-selection--oy-yEq_.js";
|
|
3
|
-
import { $t as
|
|
3
|
+
import { $t as canAutosave, Bn as useBuilderReadOnly, Bt as phaseAfterAcquire, Ct as watchLeavingLosesChanges, D as InstallWorkflowNodeDocument, E as InstallPurchasedNodeDocument, Et as useSaveWorkflow, F as getNodeMetadata, Fn as getNodeDetail, Ft as useEditLeaseStore, Gt as EDIT_SESSION_ID, H as MissingParametersDialog, Ht as releasesOnClose, In as buildStickyNode, It as bannerOf, Jt as sessionBeforeReload, Kt as forgetSessionForReload, Ln as loadMarkdown, Lt as isLocked, M as UninstallOrganizationPrivateNodeDocument, Mt as saveIndicatorOf, N as UninstallWorkflowNodeDocument, Nt as useSaveStatusStore, Pt as useEditLeaseLocked, Qt as AUTOSAVE_RETRY_DELAYS_MS, Rn as useMarkdownRenderer, Rt as leaseCallQueue, S as CreateStoreOrderDocument, St as touchesSavedFields, T as InstallOrganizationPrivateNodeDocument, Tt as useFlowValidator, U as useRunGuard, Ut as shouldReleaseForIdle, V as useInsertNode, Vt as phaseAfterTakeOver, W as workflowParameterIssues, Wt as tickAction, Xt as rememberRevision, Yt as rememberOwnStatusChange, Zt as AUTOSAVE_DEBOUNCE_MS, _t as departingSave, a as NODES_METADATA, an as workflowFingerprint, b as BrowseWorkflowNodesDocument, bt as leavingLosesChanges, f as isNodeConfigsInitialized, g as registerWorkflowNodeTypes, gt as autosaveAllowedFor, ht as useManualSave, i as AVAILABLE_NODES, in as saveFailureActionOf, jt as refusalOfQuota, k as OrganizationPrivateNodesDocument, l as ensureNodeConfigsLoaded, m as refetchStoreNodes, mt as useGuardedNavigate, nn as inAppLeaveTarget, o as NODE_CONFIGS, on as useNodeExecution, p as onNodeTypesUpdate, qt as rememberSessionForReload, rn as resettledBaseline, s as NODE_TYPES, t as FluidGridsContext, v as scheduleNodePaletteLoad, vn as useCanvasEdges, vt as editStateFor, w as GetNodeInstallableVersionsDocument, wt as isFlowComplete, xn as loadDefinitionJson, xt as savedEverythingBeforeLeaving, yn as useNodeRegistryRevision, yt as editingLeaseLocked, z as buildOperationSeed, zn as BuilderReadOnlyProvider, zt as leaseCallSequence } from "./FluidGridsProvider-CWyQ8ziM.js";
|
|
4
4
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
5
5
|
import { n as preloadableLazy } from "./preloadable-lazy-Pp47mqQ9.js";
|
|
6
6
|
import { a as DialogFooter$1, d as Input$1, i as DialogDescription$1, l as DialogTitle$1, o as DialogHeader$1, r as DialogContent$1, t as Dialog$1 } from "./dialog-Cjb4lB4D.js";
|
|
7
|
-
import { _ as storeNodeInstallVersion, a as useTemplateImportFlow, d as filterStoreNodesForPalette, f as getStoreNodeAvailability, g as storeNodeDisplayVersion, h as isStoreNodeUpdateAvailable, k as filterPaletteNodes, m as getStoreNodeType, p as getStoreNodeIcon, t as TemplateCard, u as useWorkflowTemplates, v as useInstalledNodes, y as useGlobalStoreClient } from "./TemplateCard-
|
|
7
|
+
import { _ as storeNodeInstallVersion, a as useTemplateImportFlow, d as filterStoreNodesForPalette, f as getStoreNodeAvailability, g as storeNodeDisplayVersion, h as isStoreNodeUpdateAvailable, k as filterPaletteNodes, m as getStoreNodeType, p as getStoreNodeIcon, t as TemplateCard, u as useWorkflowTemplates, v as useInstalledNodes, y as useGlobalStoreClient } from "./TemplateCard-6W2q2wiK.js";
|
|
8
8
|
import { _ as throwIfResultError, d as emitFluidGridsEvent, m as describeOperationError, n as getFluidGridsClient, s as waitForFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
9
9
|
import { c as useDurableParityEnabled, d as usePaletteGates, l as useFluidGridsFlag, m as useWorkflowTestsEnabled, s as useDurableFunctionNodesEnabled, t as FLUIDGRIDS_FLAGS } from "./feature-flags-DM5myWaD.js";
|
|
10
10
|
import { t as Button$2 } from "./button-DG7y_FVJ.js";
|
|
11
11
|
import { t as PublishCustomNodeAction } from "./PublishCustomNodeAction-5XXnSA3H.js";
|
|
12
|
-
import {
|
|
13
|
-
import { An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, Bn as TakeOverWorkflowEditLeaseDocument, Er as WorkflowDefinitionDocument, Fr as WorkflowGenerationTemplatesDocument, Gt as PushWorkflowToGitDocument, Ir as WorkflowGitCommitsDocument, Jt as RejectWorkflowPromotionDocument, Lr as WorkflowGitDiffDocument, Mr as WorkflowEnvironmentsDocument, Nt as NodeUsageStatusDocument, Rr as WorkflowGitPushesDocument, St as LinkWorkflowGitRepositoryDocument,
|
|
12
|
+
import { o as emitUpgradeClicked, t as emitNodeInstalled } from "./fluidgridsEvents-Dm5CaHtr.js";
|
|
13
|
+
import { An as SetWorkflowRolloutDocument, Ar as WorkflowEditLeaseDocument, Bn as TakeOverWorkflowEditLeaseDocument, Er as WorkflowDefinitionDocument, Fr as WorkflowGenerationTemplatesDocument, Gt as PushWorkflowToGitDocument, Ir as WorkflowGitCommitsDocument, Jt as RejectWorkflowPromotionDocument, Lr as WorkflowGitDiffDocument, Mr as WorkflowEnvironmentsDocument, Nt as NodeUsageStatusDocument, Rr as WorkflowGitPushesDocument, St as LinkWorkflowGitRepositoryDocument, Ur as WorkflowPromotionRequestsDocument, X as DeployWorkflowVersionToDevDocument, Xt as ReleaseWorkflowEditLeaseDocument, Yn as UnlinkWorkflowGitRepositoryDocument, Zt as RemoveNodeFromWorkflowsDocument, an as RestoreWorkflowFromGitDocument, b as CancelWorkflowPromotionDocument, bi as WorkflowVersionDrainageDocument, jt as NodeSchemaIntrospectionDocument, l as ApproveWorkflowPromotionDocument, q as DeleteWorkflowRolloutDocument, r as ActivateWorkflowVersionCheckedDocument, sr as UpdateWorkflowEnvironmentPolicyDocument, t as AcquireWorkflowEditLeaseDocument, tn as RequestWorkflowPromotionDocument, vr as WorkflowAuthoringDocument, xi as WorkflowVersioningDocument, zr as WorkflowGitRepositoryDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
14
14
|
import { n as useAgentMarksStore } from "./marksStore-DGCXjTmZ.js";
|
|
15
|
-
import { T as CreateWorkflowRefusalDialog, _ as lineOfNode, f as fileBaseName, g as isLossyFidelityItem, h as isLosslessReport, r as useWorkflowCodeExport, t as downloadWorkflowCodeExport, v as orderedExportFiles, x as sortFidelityItems } from "./useWorkflowCodeExport-
|
|
15
|
+
import { T as CreateWorkflowRefusalDialog, _ as lineOfNode, f as fileBaseName, g as isLossyFidelityItem, h as isLosslessReport, r as useWorkflowCodeExport, t as downloadWorkflowCodeExport, v as orderedExportFiles, x as sortFidelityItems } from "./useWorkflowCodeExport-DebpM48M.js";
|
|
16
|
+
import { r as RUNS_QUOTA_NAME, t as BILLING_PLANS_PATH } from "./quota-Cdt8yz7N.js";
|
|
16
17
|
import { t as EntityTagPicker } from "./EntityTagPicker-BqRNsLCQ.js";
|
|
17
18
|
import { t as FluidGridsDocsLink } from "./FluidGridsDocsLink-JxkBpOeb.js";
|
|
19
|
+
import { n as runsQuotaLevel, t as readRunsQuota } from "./runsQuota-DvXR6mRN.js";
|
|
18
20
|
import { a as SdkPermissionGate, i as SdkPermissionButton, s as useFluidGridsPermission, t as FLUIDGRIDS_PERMISSIONS } from "./constants-B2lhWNoN.js";
|
|
19
|
-
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-
|
|
21
|
+
import { a as useDeactivateWorkflow, d as useRestoreWorkflowVersion, o as useDeleteWorkflow, t as useActivateWorkflow, v as useWorkflowVersions } from "./useWorkflows-D1-rYzGK.js";
|
|
20
22
|
import { n as VersionLifecycleBar, r as countLifecycle, t as VersionDiffDialog } from "./VersionDiffDialog-DSN0mU0f.js";
|
|
21
23
|
import { CF as WorkflowExportFormat, Eo as CodeReplaceStatus, QF as WorkflowTestExpectedStatus, SF as WorkflowEnvironment, xu as DrainageStatus, yP as VersioningBehavior } from "./graphql-types-CDKVWH2R.js";
|
|
22
24
|
import { n as useConnections } from "./useConnections-Cs7LCWEM.js";
|
|
@@ -258,9 +260,9 @@ function IntroductionPropertyPanel() {
|
|
|
258
260
|
* waiting for its chunk and React's Suspense throttle (about 0.5 s on first
|
|
259
261
|
* open even with the chunk cached).
|
|
260
262
|
*/
|
|
261
|
-
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-
|
|
262
|
-
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-
|
|
263
|
-
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-
|
|
263
|
+
const NodeDetailViewOverlay = preloadableLazy(() => import("./node-detail-view-BoR0vYZ3.js").then((m) => m.NodeDetailView), "NodeDetailView");
|
|
264
|
+
const QuickConfigPanelOverlay = preloadableLazy(() => import("./quick-config-panel-DXvLJdeW.js").then((m) => m.QuickConfigPanel), "QuickConfigPanel");
|
|
265
|
+
const SidebarNodeEditorOverlay = preloadableLazy(() => import("./sidebar-node-editor-FU3fvOjh.js").then((m) => m.SidebarNodeEditor), "SidebarNodeEditor");
|
|
264
266
|
const WorkflowShareDialogOverlay = preloadableLazy(() => import("./WorkflowShareDialog-mbIwRQUY.js").then((n) => n.n).then((m) => m.WorkflowShareDialog), "WorkflowShareDialog");
|
|
265
267
|
const ConnectionFormDialogOverlay = preloadableLazy(() => import("./ConnectionFormDialog-Bg9_OdHX.js").then((n) => n.n).then((m) => m.ConnectionFormDialog), "ConnectionFormDialog");
|
|
266
268
|
/**
|
|
@@ -2622,7 +2624,7 @@ function TemplatesGrid({ templates, loading, hasMore, onLoadMore, onTemplateClic
|
|
|
2622
2624
|
}
|
|
2623
2625
|
|
|
2624
2626
|
// src/builder/components/flow-builder/components/templates/TemplatesModal.tsx
|
|
2625
|
-
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-
|
|
2627
|
+
const LazyTemplateDetailPanel = lazy(() => import("./TemplateDetailPanel-CQvYqhVO.js").then((m) => ({ default: m.TemplateDetailPanel })));
|
|
2626
2628
|
/**
|
|
2627
2629
|
* Modal for browsing and selecting workflow templates
|
|
2628
2630
|
* Features:
|
|
@@ -11798,65 +11800,6 @@ function BuilderSaveController({ readOnly, locked = false }) {
|
|
|
11798
11800
|
] });
|
|
11799
11801
|
}
|
|
11800
11802
|
|
|
11801
|
-
// src/billing/runsQuota.ts
|
|
11802
|
-
/** Mirrors wspace-activity-svc `MAX_ASSIGNMENTS_PER_QUOTA`. */
|
|
11803
|
-
const MAX_ASSIGNMENTS_PER_QUOTA = 100;
|
|
11804
|
-
/** Share of the allowance at which the meter warns and offers an upgrade. */
|
|
11805
|
-
const RUNS_QUOTA_WARNING_RATIO = .8;
|
|
11806
|
-
const createdAtMs = (row) => {
|
|
11807
|
-
const ms = Date.parse(row.createdAt);
|
|
11808
|
-
return Number.isNaN(ms) ? Number.POSITIVE_INFINITY : ms;
|
|
11809
|
-
};
|
|
11810
|
-
/**
|
|
11811
|
-
* Aggregates the workspace's active `fluidgrids.runs.monthly` assignments.
|
|
11812
|
-
* Null when there is none: the quota is not provisioned, nothing to meter.
|
|
11813
|
-
*/
|
|
11814
|
-
function summarizeRunsQuota(rows, quotaName = RUNS_QUOTA_NAME) {
|
|
11815
|
-
const assignments = rows.filter((row) => row.isActive && row.quotaName === quotaName).sort((a, b) => createdAtMs(a) - createdAtMs(b)).slice(0, 100);
|
|
11816
|
-
if (assignments.length === 0) return null;
|
|
11817
|
-
const used = assignments.reduce((sum, row) => sum + row.used, 0);
|
|
11818
|
-
if (assignments.some((row) => row.noLimit || row.limit == null)) return {
|
|
11819
|
-
used,
|
|
11820
|
-
limit: null,
|
|
11821
|
-
noLimit: true
|
|
11822
|
-
};
|
|
11823
|
-
return {
|
|
11824
|
-
used,
|
|
11825
|
-
limit: assignments.reduce((sum, row) => sum + (row.limit ?? 0), 0),
|
|
11826
|
-
noLimit: false
|
|
11827
|
-
};
|
|
11828
|
-
}
|
|
11829
|
-
/** Where the workspace stands against its allowance. */
|
|
11830
|
-
function runsQuotaLevel(quota) {
|
|
11831
|
-
if (quota.noLimit || quota.limit === null) return "ok";
|
|
11832
|
-
if (quota.limit <= 0 || quota.used >= quota.limit) return "exhausted";
|
|
11833
|
-
return quota.used / quota.limit >= .8 ? "warning" : "ok";
|
|
11834
|
-
}
|
|
11835
|
-
/**
|
|
11836
|
-
* One read of the workspace's run allowance.
|
|
11837
|
-
*
|
|
11838
|
-
* Null — the meter hides — when there is no workspace, when the read errors
|
|
11839
|
-
* (FORBIDDEN, a gateway 500, a network failure) or when the quota is not
|
|
11840
|
-
* provisioned. A failed read must never render a number: "0 used" would read
|
|
11841
|
-
* as "nothing spent" when the truth is "unknown".
|
|
11842
|
-
*/
|
|
11843
|
-
async function readRunsQuota(client, workspaceId) {
|
|
11844
|
-
if (!workspaceId) return null;
|
|
11845
|
-
try {
|
|
11846
|
-
const result = await client.query({
|
|
11847
|
-
query: WorkspaceRunsQuotaDocument,
|
|
11848
|
-
variables: { workspaceId },
|
|
11849
|
-
fetchPolicy: "network-only",
|
|
11850
|
-
errorPolicy: "all"
|
|
11851
|
-
});
|
|
11852
|
-
if (result.error) return null;
|
|
11853
|
-
const rows = result.data?.workspaceQuotaAssignments;
|
|
11854
|
-
return rows ? summarizeRunsQuota(rows) : null;
|
|
11855
|
-
} catch {
|
|
11856
|
-
return null;
|
|
11857
|
-
}
|
|
11858
|
-
}
|
|
11859
|
-
|
|
11860
11803
|
// src/billing/RunsUsageMeter.tsx
|
|
11861
11804
|
/**
|
|
11862
11805
|
* Compact run-allowance meter for the builder header: "Runs 812 / 1,000" with
|
|
@@ -16552,7 +16495,7 @@ function FidelityReportList({ fidelity, source, hasNode, onShowNode }) {
|
|
|
16552
16495
|
* Behind the `fluidgrids.code-first` flag (default off); with the flag off
|
|
16553
16496
|
* the panel renders nothing and the header is exactly as before.
|
|
16554
16497
|
*/
|
|
16555
|
-
const LazyCodeEditorField = lazy(() => import("./code-editor-field-
|
|
16498
|
+
const LazyCodeEditorField = lazy(() => import("./code-editor-field-CfP0QYUD.js").then((n) => n.n).then((m) => ({ default: m.CodeEditorField })));
|
|
16556
16499
|
/** Read-only lifted-code editor with a sized placeholder while its chunk loads. */
|
|
16557
16500
|
function CodeViewEditor({ content, path, label }) {
|
|
16558
16501
|
return /* @__PURE__ */ jsx(Suspense, {
|
|
@@ -17500,7 +17443,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
17500
17443
|
paletteGatesRef.current = paletteGates;
|
|
17501
17444
|
}, [paletteGates]);
|
|
17502
17445
|
useWarmBuilderOverlays();
|
|
17503
|
-
useLazyAgentTools(() => import("./agentTools-
|
|
17446
|
+
useLazyAgentTools(() => import("./agentTools-BjhxAdlt.js").then(({ createBuilderAgentTools }) => createBuilderAgentTools({ durableFunctionsEnabled: () => paletteGatesRef.current })), !editingBlocked, "Agent tools");
|
|
17504
17447
|
const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(useShallow((s) => {
|
|
17505
17448
|
return [
|
|
17506
17449
|
s.workflow.nodes,
|
|
@@ -17542,7 +17485,7 @@ const FlowBuilder = ({ readOnly = false }) => {
|
|
|
17542
17485
|
useEffect(() => {
|
|
17543
17486
|
fitViewRef.current = fitView;
|
|
17544
17487
|
}, [fitView]);
|
|
17545
|
-
useLazyAgentTools(() => import("./canvasNoteTools-
|
|
17488
|
+
useLazyAgentTools(() => import("./canvasNoteTools-CZEFFhRp.js").then(({ createCanvasNoteTools }) => createCanvasNoteTools({ focusNode: (nodeId) => fitViewRef.current({
|
|
17546
17489
|
nodes: [{ id: nodeId }],
|
|
17547
17490
|
duration: 400,
|
|
17548
17491
|
padding: .6,
|
|
@@ -17840,4 +17783,4 @@ const FlowBuilderPage = ({ workflow, readOnly = false }) => {
|
|
|
17840
17783
|
] });
|
|
17841
17784
|
};
|
|
17842
17785
|
|
|
17843
|
-
export {
|
|
17786
|
+
export { useNodeSelectedEvent as _, useAiWorkflowTemplates as a, RunsUsageMeter as c, releaseLeaseKeptForReload as d, useWorkflowReloadStore as f, computeAttachPosition as g, TableView as h, enrichDraftNodes as i, RunsUsageMeterView as l, JsonView as m, AI_DRAFT_MAX_PROMPT_LENGTH as n, BUILDER_FULLSCREEN_ATTRIBUTE as o, notesKeyOf as p, draftToCanvas as r, BUILDER_FULLSCREEN_EVENT as s, FlowBuilderPage as t, useRunsQuota as u, FluidGridsMark as v };
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { i as WORKFLOWS_QUOTA_NAME, r as RUNS_QUOTA_NAME } from "./quota-Cdt8yz7N.js";
|
|
3
|
+
|
|
4
|
+
// src/analytics/fluidgridsEvents.ts
|
|
5
|
+
/** `component` stamped on every event so devtools/OTel can tell the emitter. */
|
|
6
|
+
const FLUIDGRIDS_ANALYTICS_COMPONENT = "fluidgrids-fe-sdk";
|
|
7
|
+
/** Upper bound for a slug-like dimension; anything longer is not a slug. */
|
|
8
|
+
const MAX_DIMENSION_LENGTH = 64;
|
|
9
|
+
const SLUG_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_./:-]*$/;
|
|
10
|
+
/**
|
|
11
|
+
* Keep a dimension only when it is a short slug (`integration/slack`,
|
|
12
|
+
* `trigger_webhook`, `marketing`). Anything else — spaces, free text, a very
|
|
13
|
+
* long value — is dropped rather than risk sending user data.
|
|
14
|
+
*/
|
|
15
|
+
function toDimension(value) {
|
|
16
|
+
if (typeof value !== "string") return void 0;
|
|
17
|
+
const trimmed = value.trim();
|
|
18
|
+
if (!trimmed || trimmed.length > MAX_DIMENSION_LENGTH) return void 0;
|
|
19
|
+
return SLUG_PATTERN.test(trimmed) ? trimmed : void 0;
|
|
20
|
+
}
|
|
21
|
+
/** Non-empty string id, or undefined. */
|
|
22
|
+
function idOrUndefined(value) {
|
|
23
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
24
|
+
}
|
|
25
|
+
/** A finite, non-negative integer count, or undefined. */
|
|
26
|
+
function countOrUndefined(value) {
|
|
27
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.round(value) : void 0;
|
|
28
|
+
}
|
|
29
|
+
function emit(bus, name, payload) {
|
|
30
|
+
if (!bus) return;
|
|
31
|
+
const clean = Object.fromEntries(Object.entries(payload).filter(([, value]) => value !== void 0));
|
|
32
|
+
try {
|
|
33
|
+
bus.emit(name, clean, { component: FLUIDGRIDS_ANALYTICS_COMPONENT });
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.warn(`[fluidgrids analytics] failed to emit ${name}`, error);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function asRecord(value) {
|
|
39
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The executable node list of a workflow definition, wherever it sits: the
|
|
43
|
+
* flow store's `{ nodes }`, a saved `definitionJson` (`{ data: { nodes } }`) or
|
|
44
|
+
* a raw list.
|
|
45
|
+
*/
|
|
46
|
+
function nodesOf(definition) {
|
|
47
|
+
if (Array.isArray(definition)) return definition;
|
|
48
|
+
const record = asRecord(definition);
|
|
49
|
+
if (!record) return [];
|
|
50
|
+
if (Array.isArray(record.nodes)) return record.nodes;
|
|
51
|
+
const data = asRecord(record.data);
|
|
52
|
+
if (data && Array.isArray(data.nodes)) return data.nodes;
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
function isTriggerNode(node) {
|
|
56
|
+
if ((typeof node.type === "string" ? node.type.toLowerCase() : "").includes("trigger")) return true;
|
|
57
|
+
const data = asRecord(node.data);
|
|
58
|
+
return data?.isTrigger === true || data?.category === "trigger";
|
|
59
|
+
}
|
|
60
|
+
/** Node-type slug of the workflow's trigger node, when it has one. */
|
|
61
|
+
function triggerTypeOf(definition) {
|
|
62
|
+
const trigger = nodesOf(definition).find(isTriggerNode);
|
|
63
|
+
return trigger ? toDimension(trigger.type) : void 0;
|
|
64
|
+
}
|
|
65
|
+
/** Number of executable nodes on the canvas. */
|
|
66
|
+
function nodeCountOf(definition) {
|
|
67
|
+
const nodes = nodesOf(definition);
|
|
68
|
+
return nodes.length > 0 ? nodes.length : void 0;
|
|
69
|
+
}
|
|
70
|
+
/** `fluidgrids.workflow.created` — a new workflow exists in the workspace. */
|
|
71
|
+
function emitWorkflowCreated(bus, fact) {
|
|
72
|
+
emit(bus, "fluidgrids.workflow.created", {
|
|
73
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
74
|
+
workflowId: idOrUndefined(fact.workflowId),
|
|
75
|
+
source: fact.source,
|
|
76
|
+
triggerType: triggerTypeOf(fact.definition),
|
|
77
|
+
nodeCount: nodeCountOf(fact.definition)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/** `fluidgrids.workflow.published` — a version was activated. */
|
|
81
|
+
function emitWorkflowPublished(bus, fact) {
|
|
82
|
+
emit(bus, "fluidgrids.workflow.published", {
|
|
83
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
84
|
+
workflowId: idOrUndefined(fact.workflowId),
|
|
85
|
+
triggerType: triggerTypeOf(fact.definition),
|
|
86
|
+
nodeCount: nodeCountOf(fact.definition)
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/** `fluidgrids.workflow.run_started` — the backend accepted a run. */
|
|
90
|
+
function emitRunStarted(bus, fact) {
|
|
91
|
+
emit(bus, "fluidgrids.workflow.run_started", {
|
|
92
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
93
|
+
workflowId: idOrUndefined(fact.workflowId),
|
|
94
|
+
executionId: idOrUndefined(fact.executionId),
|
|
95
|
+
trigger: fact.trigger
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* `fluidgrids.workflow.run_failed` — a run this user started ended FAILED.
|
|
100
|
+
* `errorCode` is the run's machine error classification (`TIMEOUT`,
|
|
101
|
+
* `VALIDATION`, …), never its message.
|
|
102
|
+
*/
|
|
103
|
+
function emitRunFailed(bus, fact) {
|
|
104
|
+
emit(bus, "fluidgrids.workflow.run_failed", {
|
|
105
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
106
|
+
workflowId: idOrUndefined(fact.workflowId),
|
|
107
|
+
executionId: idOrUndefined(fact.executionId),
|
|
108
|
+
trigger: fact.trigger,
|
|
109
|
+
errorCode: toDimension(fact.errorCode),
|
|
110
|
+
durationMs: countOrUndefined(fact.durationMs)
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/** `fluidgrids.template.used` — a store template became a workflow. */
|
|
114
|
+
function emitTemplateUsed(bus, fact) {
|
|
115
|
+
emit(bus, "fluidgrids.template.used", {
|
|
116
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
117
|
+
templateId: idOrUndefined(fact.templateId),
|
|
118
|
+
category: toDimension(fact.category)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** `fluidgrids.node.installed` — a store node was installed. */
|
|
122
|
+
function emitNodeInstalled(bus, fact) {
|
|
123
|
+
emit(bus, "fluidgrids.node.installed", {
|
|
124
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
125
|
+
nodeType: toDimension(fact.nodeType),
|
|
126
|
+
source: fact.source
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** `fluidgrids.quota.workflow_limit_hit` — a create was refused at the limit. */
|
|
130
|
+
function emitWorkflowLimitHit(bus, fact) {
|
|
131
|
+
emit(bus, "fluidgrids.quota.workflow_limit_hit", {
|
|
132
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
133
|
+
quotaKey: WORKFLOWS_QUOTA_NAME,
|
|
134
|
+
surface: fact.surface
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/** `fluidgrids.quota.run_limit_hit` — a run was refused at the monthly limit. */
|
|
138
|
+
function emitRunLimitHit(bus, fact) {
|
|
139
|
+
emit(bus, "fluidgrids.quota.run_limit_hit", {
|
|
140
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
141
|
+
quotaKey: toDimension(fact.quotaKey) ?? "fluidgrids.runs.monthly",
|
|
142
|
+
surface: fact.surface
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/** `fluidgrids.billing.upgrade_clicked` — a FluidGrids upgrade CTA was clicked. */
|
|
146
|
+
function emitUpgradeClicked(bus, fact) {
|
|
147
|
+
emit(bus, "fluidgrids.billing.upgrade_clicked", {
|
|
148
|
+
workspaceId: idOrUndefined(fact.workspaceId),
|
|
149
|
+
surface: fact.surface,
|
|
150
|
+
quotaKey: toDimension(fact.quotaKey)
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Map a run's backend mode/trigger to the analytics trigger dimension. The
|
|
155
|
+
* builder's debug paths are always `TEST`; anything else a person started by
|
|
156
|
+
* hand is `manual`.
|
|
157
|
+
*/
|
|
158
|
+
function runTriggerFromMode(mode) {
|
|
159
|
+
return typeof mode === "string" && mode.toUpperCase() === "TEST" ? "test" : "manual";
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export { emitTemplateUsed as a, emitWorkflowLimitHit as c, runTriggerFromMode as d, emitRunStarted as i, emitWorkflowPublished as l, emitRunFailed as n, emitUpgradeClicked as o, emitRunLimitHit as r, emitWorkflowCreated as s, emitNodeInstalled as t, nodesOf as u };
|
package/dist/history.js
CHANGED