@burdenoff/fluidgrids-fe-sdk 2026.701.4 → 2026.701.6

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.
@@ -303,5 +303,5 @@ function TemplateInputField({
303
303
  }
304
304
 
305
305
  export { TemplateConfigurationModal };
306
- //# sourceMappingURL=TemplateConfigurationModal-VU3Q4RFX.js.map
307
- //# sourceMappingURL=TemplateConfigurationModal-VU3Q4RFX.js.map
306
+ //# sourceMappingURL=TemplateConfigurationModal-ZMCT3ZCH.js.map
307
+ //# sourceMappingURL=TemplateConfigurationModal-ZMCT3ZCH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/builder/components/flow-builder/components/templates/TemplateConfigurationModal.tsx"],"names":[],"mappings":"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","file":"TemplateConfigurationModal-ZMCT3ZCH.js","sourcesContent":["import { useState, useMemo } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from \"../../../../../ui/dialog\";\nimport { Input } from \"../../../../../ui/input\";\nimport { Button } from \"../../../../../ui/button\";\nimport { Badge } from \"../../../../../ui/badge\";\nimport { Label } from \"../../../../../ui/label\";\nimport type { StoreProduct } from \"../../../../../generated/global-types\";\nimport type {\n WorkflowTemplateContent,\n TemplateNodeCheckResult,\n TemplateRequiredInput,\n} from \"../../../../../types/workflow-template-content\";\nimport {\n Loader2,\n CheckCircle2,\n Download,\n ShoppingCart,\n KeyRound,\n Sparkles,\n AlertTriangle,\n ExternalLink,\n} from \"lucide-react\";\n\nexport interface TemplateConfigurationModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n template: StoreProduct | null;\n content: WorkflowTemplateContent | null;\n nodeCheckResult: TemplateNodeCheckResult | null;\n onConfirm: (config: {\n name: string;\n templateInputs: Record<string, string | number>;\n }) => void;\n importing?: boolean;\n installProgress?: {\n current: number;\n total: number;\n nodeName: string;\n } | null;\n}\n\nexport function TemplateConfigurationModal({\n open,\n onOpenChange,\n template,\n content,\n nodeCheckResult,\n onConfirm,\n importing = false,\n installProgress,\n}: TemplateConfigurationModalProps) {\n const [workflowName, setWorkflowName] = useState(\n content?.defaultWorkflowName || template?.name || \"\",\n );\n const [inputValues, setInputValues] = useState<Record<string, string>>({});\n\n useMemo(() => {\n if (template) {\n setWorkflowName(content?.defaultWorkflowName || template.name || \"\");\n const defaults: Record<string, string> = {};\n if (content?.requiredInputs) {\n for (const input of content.requiredInputs) {\n if (input.defaultValue) {\n defaults[input.name] = input.defaultValue;\n }\n }\n }\n setInputValues(defaults);\n }\n }, [template?.id]);\n\n const requiredInputs = content?.requiredInputs || [];\n const hasRequiredInputs = requiredInputs.length > 0;\n const hasMissingFreeNodes = (nodeCheckResult?.missing.length ?? 0) > 0;\n const hasRequiredCredentials =\n (content?.requiredCredentialTypes?.length ?? 0) > 0;\n const hasPaidBlockers = (nodeCheckResult?.missingPaid.length ?? 0) > 0;\n\n const isValid = useMemo(() => {\n if (!workflowName.trim()) return false;\n for (const input of requiredInputs) {\n if (input.required && !inputValues[input.name]?.trim()) {\n return false;\n }\n }\n return true;\n }, [workflowName, inputValues, requiredInputs]);\n\n const handleInputChange = (name: string, value: string) => {\n setInputValues((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleConfirm = () => {\n onConfirm({\n name: workflowName.trim(),\n templateInputs: inputValues,\n });\n };\n\n if (!template || !content) return null;\n\n const isInstalling = importing && !!installProgress;\n const isCreating = importing && !installProgress;\n\n const buttonLabel = hasPaidBlockers\n ? \"Purchase Required Nodes First\"\n : isInstalling\n ? `Installing nodes (${installProgress.current}/${installProgress.total})...`\n : isCreating\n ? \"Creating workflow...\"\n : hasMissingFreeNodes\n ? \"Install & Open in Builder\"\n : \"Import & Open in Builder\";\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n size=\"lg\"\n className=\"!flex !flex-col !max-h-[85vh] overflow-hidden p-0 gap-0\"\n >\n <DialogHeader className=\"px-6 pt-6 pb-4 border-b shrink-0\">\n <div className=\"flex items-center gap-2\">\n <Sparkles className=\"size-5 text-primary\" />\n <DialogTitle className=\"text-xl\">\n Import \"{template.name}\"\n </DialogTitle>\n </div>\n <DialogDescription>\n Configure and import this workflow template into your workspace\n </DialogDescription>\n </DialogHeader>\n\n <div className=\"flex-1 overflow-y-auto px-6 py-5 space-y-6\">\n {/* Workflow Name */}\n <div className=\"space-y-2\">\n <Label htmlFor=\"workflow-name\" className=\"text-sm font-medium\">\n Workflow Name\n </Label>\n <Input\n id=\"workflow-name\"\n value={workflowName}\n onChange={(e) => setWorkflowName(e.target.value)}\n placeholder=\"Enter workflow name\"\n />\n </div>\n\n {/* Required Configuration Inputs */}\n {hasRequiredInputs && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <KeyRound className=\"size-4\" />\n Required Configuration\n </h4>\n <div className=\"space-y-3\">\n {requiredInputs.map((input) => (\n <TemplateInputField\n key={input.name}\n input={input}\n value={inputValues[input.name] || \"\"}\n onChange={(value) => handleInputChange(input.name, value)}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Node Dependencies */}\n {nodeCheckResult && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <Download className=\"size-4\" />\n Node Dependencies\n </h4>\n <div className=\"space-y-2\">\n {nodeCheckResult.installed.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <CheckCircle2 className=\"size-4 text-green-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge variant=\"secondary\" className=\"text-xs ml-auto\">\n Installed\n </Badge>\n </div>\n ))}\n\n {nodeCheckResult.missing.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <Download className=\"size-4 text-blue-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge\n variant=\"outline\"\n className=\"text-xs ml-auto border-blue-500/30 text-blue-500\"\n >\n Will install\n </Badge>\n </div>\n ))}\n\n {nodeCheckResult.missingPaid.map((node) => (\n <div\n key={node.nodeType}\n className=\"flex items-center gap-2 text-sm\"\n >\n <ShoppingCart className=\"size-4 text-amber-500 shrink-0\" />\n <span>\n {node.displayName || node.nodeType} v{node.nodeVersion}\n </span>\n <Badge\n variant=\"outline\"\n className=\"text-xs ml-auto border-amber-500/30 text-amber-500\"\n >\n Purchase required\n </Badge>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Required Credentials */}\n {hasRequiredCredentials && (\n <div className=\"space-y-3\">\n <h4 className=\"text-sm font-semibold text-foreground flex items-center gap-2\">\n <KeyRound className=\"size-4\" />\n Credentials Needed\n </h4>\n <p className=\"text-xs text-muted-foreground\">\n You'll need to configure these credentials after importing:\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {content.requiredCredentialTypes?.map((cred) => (\n <Badge key={cred} variant=\"outline\" className=\"text-xs\">\n <KeyRound className=\"size-3 mr-1\" />\n {cred}\n </Badge>\n ))}\n </div>\n </div>\n )}\n\n {/* Info Banner */}\n <div className=\"rounded-lg bg-muted/50 p-3 text-sm text-muted-foreground\">\n <p>\n The workflow will be created as a <strong>DRAFT</strong>. You can\n review and edit it in the builder before activating.\n </p>\n </div>\n\n {/* Paid Node Blocker Warning */}\n {hasPaidBlockers && (\n <div className=\"rounded-lg bg-amber-500/10 border border-amber-500/30 p-3 text-sm text-amber-700 dark:text-amber-400 flex items-start gap-2\">\n <AlertTriangle className=\"size-4 mt-0.5 shrink-0\" />\n <div>\n <p className=\"font-medium\">\n Purchase required before importing\n </p>\n <p className=\"mt-1 text-xs\">\n The nodes marked \"Purchase required\" must be purchased from\n the store before this template can be imported.\n </p>\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"mt-1 h-auto p-0 text-xs text-amber-700 dark:text-amber-400 underline\"\n onClick={() => window.open(\"/store\", \"_blank\")}\n >\n <ExternalLink className=\"size-3 mr-1\" />\n Go to Store\n </Button>\n </div>\n </div>\n )}\n </div>\n\n <DialogFooter className=\"px-6 py-4 border-t shrink-0 flex-col gap-2\">\n {/* Install progress bar */}\n {installProgress && (\n <div className=\"w-full space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1.5\">\n <Loader2 className=\"size-3 animate-spin\" />\n Installing: {installProgress.nodeName}\n </span>\n <span>\n {installProgress.current} / {installProgress.total}\n </span>\n </div>\n <div className=\"h-1.5 w-full rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary transition-all duration-300\"\n style={{\n width: `${(installProgress.current / installProgress.total) * 100}%`,\n }}\n />\n </div>\n </div>\n )}\n\n <div className=\"flex w-full justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n disabled={importing}\n >\n Cancel\n </Button>\n <Button\n onClick={handleConfirm}\n disabled={!isValid || importing || hasPaidBlockers}\n >\n {importing ? (\n <>\n <Loader2 className=\"size-4 mr-2 animate-spin\" />\n {buttonLabel}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4 mr-2\" />\n {buttonLabel}\n </>\n )}\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ============================================================================\n// Sub-component: Template Input Field\n// ============================================================================\n\nfunction TemplateInputField({\n input,\n value,\n onChange,\n}: {\n input: TemplateRequiredInput;\n value: string;\n onChange: (value: string) => void;\n}) {\n return (\n <div className=\"space-y-1.5\">\n <Label htmlFor={`template-input-${input.name}`} className=\"text-sm\">\n {input.label}\n {input.required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n {input.type === \"select\" && input.options ? (\n <select\n id={`template-input-${input.name}`}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n >\n <option value=\"\">Select...</option>\n {input.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={`template-input-${input.name}`}\n type={\n input.type === \"secret\"\n ? \"password\"\n : input.type === \"number\"\n ? \"number\"\n : \"text\"\n }\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={input.placeholder}\n />\n )}\n {input.helpText && (\n <p className=\"text-xs text-muted-foreground\">{input.helpText}</p>\n )}\n </div>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { WorkflowBuilder } from './chunk-QBI22GDG.js';
1
+ export { WorkflowBuilder } from './chunk-CEK43QSX.js';
2
2
  import './chunk-7VEOUEIN.js';
3
3
  import './chunk-BQXHJIER.js';
4
4
  import './chunk-KU64CCSV.js';
@@ -9,5 +9,5 @@ import './chunk-WWU2O2SR.js';
9
9
  import './chunk-LUGJJ7LL.js';
10
10
  import './chunk-XQP33UJR.js';
11
11
  import './chunk-Z54K22LP.js';
12
- //# sourceMappingURL=WorkflowBuilder-KV6VFVII.js.map
13
- //# sourceMappingURL=WorkflowBuilder-KV6VFVII.js.map
12
+ //# sourceMappingURL=WorkflowBuilder-NEXLEPY4.js.map
13
+ //# sourceMappingURL=WorkflowBuilder-NEXLEPY4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-KV6VFVII.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"WorkflowBuilder-NEXLEPY4.js"}
@@ -1,11 +1,11 @@
1
1
  import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, DialogFooter, Input as Input$1 } from './chunk-7VEOUEIN.js';
2
- import { createGlobalStoreClient, getGlobalStoreClient } from './chunk-BQXHJIER.js';
2
+ import { getGlobalStoreClient, createGlobalStoreClient } from './chunk-BQXHJIER.js';
3
3
  import { useFlowStore } from './chunk-KU64CCSV.js';
4
4
  import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeactivateWorkflow } from './chunk-4FFPGQD3.js';
5
5
  import { NodeEndpointConfigsDocument, NodeManifestDocument, TriggerWorkflowDocument, WorkflowRunDocument, NodeSchemaIntrospectionDocument, UpdateWorkflowDefinitionDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-FGYVIXQ7.js';
6
6
  import { waitForFluidGridsClient, getFluidGridsClient, createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient } from './chunk-5BDQNSP3.js';
7
7
  import { config, getFluidGridsConfig, validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig } from './chunk-WWU2O2SR.js';
8
- import { BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, GetMyNodeInstallationsDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-LUGJJ7LL.js';
8
+ import { GetMyNodeInstallationsDocument, BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-LUGJJ7LL.js';
9
9
  import { deepClone, applyTemplateInputs } from './chunk-XQP33UJR.js';
10
10
  import { cn as cn$1, Badge as Badge$1, Button as Button$1 } from './chunk-Z54K22LP.js';
11
11
  import { ThemeProvider as ThemeProvider$1 } from '@burdenoff/fe-libs/shared/providers/shell';
@@ -28,7 +28,7 @@ import { toast } from 'sonner';
28
28
  import { InfoCircledIcon } from '@radix-ui/react-icons';
29
29
  import { isEmpty } from 'radash';
30
30
  import { ApolloProvider, useQuery, useMutation } from '@apollo/client/react';
31
- import JSZip from 'jszip';
31
+ import 'jszip';
32
32
  import { gql as gql$1 } from '@apollo/client/core';
33
33
  import { Sparkles, Star, Download, Eye, History, Loader2, RotateCcw, Maximize2, LayoutGrid, Plus, Trash2, GitBranch, AlertCircle, Search, RefreshCw, CheckCircle2, Package, Info, Copy, BadgeCheck, DollarSign, PlusCircle, ChevronDown, Type, Code, Hash, List, Braces, Workflow, ChevronRight, Layers, X, AlertTriangle } from 'lucide-react';
34
34
  import { animate, easeOut } from 'popmotion';
@@ -8789,13 +8789,77 @@ async function fetchNodeManifest(nodeType, nodeVersion) {
8789
8789
  return null;
8790
8790
  }
8791
8791
  }
8792
+ function pushStoreNodeConfig(manifest, publishType = "STORE") {
8793
+ if (NODE_CONFIGS.some((c) => c.type === manifest.nodeType)) return;
8794
+ const manifestOps = manifest.operations;
8795
+ const operations = Array.isArray(manifestOps) ? manifestOps : manifestOps?.operations ?? manifestOps;
8796
+ NODE_CONFIGS.push({
8797
+ type: manifest.nodeType,
8798
+ detail: {
8799
+ icon: manifest.icon || "mynaui:keyboard-solid",
8800
+ title: manifest.name,
8801
+ description: manifest.description,
8802
+ gradientColor: "yellow"
8803
+ },
8804
+ defaultData: {
8805
+ operation_name: "",
8806
+ operation_type: "",
8807
+ nodeData: manifest,
8808
+ version: manifest.version,
8809
+ args: {
8810
+ context: {
8811
+ node: {
8812
+ id: manifest.nodeType,
8813
+ kind: manifest.kind,
8814
+ type: manifest.nodeType
8815
+ }
8816
+ },
8817
+ state: {},
8818
+ credentials: []
8819
+ }
8820
+ },
8821
+ operations,
8822
+ publishType
8823
+ });
8824
+ }
8825
+ async function loadInstalledStoreNodes() {
8826
+ const globalClient = getGlobalStoreClient();
8827
+ if (!globalClient) return;
8828
+ const { workspaceId } = getFluidGridsConfig();
8829
+ if (!workspaceId) return;
8830
+ try {
8831
+ const { data } = await globalClient.query({
8832
+ query: GetMyNodeInstallationsDocument,
8833
+ variables: { workspaceId, limit: 200, offset: 0 },
8834
+ fetchPolicy: "network-only"
8835
+ });
8836
+ const installations = data?.myStoreAppInstallations?.items ?? [];
8837
+ let loaded = 0;
8838
+ for (const installation of installations) {
8839
+ if (installation.status !== "ACTIVE") continue;
8840
+ const manifest = installation.manifest;
8841
+ if (!manifest?.nodeType) continue;
8842
+ pushStoreNodeConfig(manifest, "STORE");
8843
+ loaded++;
8844
+ }
8845
+ if (loaded > 0) {
8846
+ console.log(
8847
+ `[Workflows] Loaded ${loaded} installed store node(s) from workspace installations.`
8848
+ );
8849
+ }
8850
+ } catch (error) {
8851
+ const message = error instanceof Error ? error.message : "Unknown error";
8852
+ console.warn("[Workflows] Could not load installed store nodes:", message);
8853
+ }
8854
+ }
8792
8855
  async function initializeNodeConfigs() {
8793
8856
  try {
8794
8857
  const client = await waitForFluidGridsClient(15e3, 150);
8795
8858
  if (!client) {
8796
8859
  console.warn(
8797
- "[Workflows] Apollo client not available after timeout \u2014 node configs will use built-in nodes only."
8860
+ "[Workflows] Apollo client not available after timeout \u2014 loading store nodes only."
8798
8861
  );
8862
+ await loadInstalledStoreNodes();
8799
8863
  return;
8800
8864
  }
8801
8865
  const { data } = await client.query({
@@ -8808,6 +8872,7 @@ async function initializeNodeConfigs() {
8808
8872
  const nodes = data?.nodeEndpointConfigs?.configs ?? [];
8809
8873
  if (!Array.isArray(nodes) || nodes.length === 0) {
8810
8874
  console.warn("No nodes found or received data is not an array.");
8875
+ await loadInstalledStoreNodes();
8811
8876
  return;
8812
8877
  }
8813
8878
  const manifestPromises = nodes.map(async (node) => {
@@ -8867,6 +8932,7 @@ async function initializeNodeConfigs() {
8867
8932
  // Preserve publishType from GraphQL query
8868
8933
  });
8869
8934
  });
8935
+ await loadInstalledStoreNodes();
8870
8936
  } catch (error) {
8871
8937
  const message = error instanceof Error ? error.message : "Unknown error";
8872
8938
  console.error("Failed to fetch nodes or manifests:", message);
@@ -10358,136 +10424,6 @@ function useInstalledNodes() {
10358
10424
  refetch
10359
10425
  };
10360
10426
  }
10361
- function useNodePackageLoader() {
10362
- const downloadZip = useCallback(
10363
- async (zipUrl) => {
10364
- try {
10365
- const response = await fetch(zipUrl);
10366
- if (!response.ok) {
10367
- throw new Error(`Failed to download ZIP: ${response.statusText}`);
10368
- }
10369
- return await response.arrayBuffer();
10370
- } catch (error) {
10371
- console.error("[useNodePackageLoader] Download failed:", error);
10372
- throw new Error(`Download failed: ${error.message}`);
10373
- }
10374
- },
10375
- []
10376
- );
10377
- const extractManifest = useCallback(
10378
- async (zipData) => {
10379
- try {
10380
- const zip = await JSZip.loadAsync(zipData);
10381
- const manifestPaths = [
10382
- "manifest.json",
10383
- "package/manifest.json",
10384
- "node/manifest.json"
10385
- ];
10386
- let manifestFile = null;
10387
- for (const path of manifestPaths) {
10388
- manifestFile = zip.file(path);
10389
- if (manifestFile) break;
10390
- }
10391
- if (!manifestFile) {
10392
- throw new Error("manifest.json not found in ZIP package");
10393
- }
10394
- const manifestText = await manifestFile.async("text");
10395
- const manifest = JSON.parse(manifestText);
10396
- if (!manifest.nodeType || !manifest.name || !manifest.version) {
10397
- throw new Error(
10398
- "Invalid manifest: missing required fields (nodeType, name, version)"
10399
- );
10400
- }
10401
- return manifest;
10402
- } catch (error) {
10403
- console.error(
10404
- "[useNodePackageLoader] Manifest extraction failed:",
10405
- error
10406
- );
10407
- throw new Error(`Manifest extraction failed: ${error.message}`);
10408
- }
10409
- },
10410
- []
10411
- );
10412
- const registerNode = useCallback((manifest) => {
10413
- try {
10414
- const existingNode = NODE_CONFIGS.find(
10415
- (config2) => config2.type === manifest.nodeType
10416
- );
10417
- if (existingNode) {
10418
- console.warn(
10419
- `[useNodePackageLoader] Node ${manifest.nodeType} already registered, skipping`
10420
- );
10421
- return;
10422
- }
10423
- const manifestOps = manifest.operations;
10424
- const operations = Array.isArray(manifestOps) ? manifestOps : manifestOps?.operations ?? manifestOps;
10425
- NODE_CONFIGS.push({
10426
- type: manifest.nodeType,
10427
- detail: {
10428
- icon: manifest.icon || "mynaui:keyboard-solid",
10429
- title: manifest.name,
10430
- description: manifest.description,
10431
- gradientColor: "yellow"
10432
- // Default gradient for store nodes
10433
- },
10434
- defaultData: {
10435
- operation_name: "",
10436
- operation_type: "",
10437
- nodeData: manifest,
10438
- version: manifest.version,
10439
- args: {
10440
- context: {
10441
- node: {
10442
- id: manifest.nodeType,
10443
- kind: manifest.kind,
10444
- type: manifest.nodeType
10445
- }
10446
- },
10447
- state: {},
10448
- credentials: []
10449
- }
10450
- },
10451
- operations
10452
- });
10453
- console.log(
10454
- `[useNodePackageLoader] Successfully registered node: ${manifest.nodeType}`
10455
- );
10456
- } catch (error) {
10457
- console.error("[useNodePackageLoader] Node registration failed:", error);
10458
- throw new Error(`Node registration failed: ${error.message}`);
10459
- }
10460
- }, []);
10461
- const loadNodePackage = useCallback(
10462
- async (zipUrl) => {
10463
- try {
10464
- console.log(
10465
- `[useNodePackageLoader] Loading node package from: ${zipUrl}`
10466
- );
10467
- const zipData = await downloadZip(zipUrl);
10468
- const manifest = await extractManifest(zipData);
10469
- registerNode(manifest);
10470
- return {
10471
- success: true,
10472
- manifest
10473
- };
10474
- } catch (error) {
10475
- console.error("[useNodePackageLoader] Load package failed:", error);
10476
- return {
10477
- success: false,
10478
- error: error.message || "Failed to load node package"
10479
- };
10480
- }
10481
- },
10482
- [downloadZip, extractManifest, registerNode]
10483
- );
10484
- return {
10485
- loadNodePackage,
10486
- downloadZip,
10487
- extractManifest,
10488
- registerNode
10489
- };
10490
- }
10491
10427
  function useRefreshAvailableNodes() {
10492
10428
  const refreshAvailableNodes = useCallback(async () => {
10493
10429
  try {
@@ -10521,7 +10457,6 @@ function useInstallNode() {
10521
10457
  const workspaceId = context?.workspaceId ?? getFluidGridsConfig().workspaceId;
10522
10458
  const tenantId = context?.tenantId ?? getFluidGridsConfig().tenantId;
10523
10459
  const { refetch: refetchInstalled } = useInstalledNodes();
10524
- const { loadNodePackage } = useNodePackageLoader();
10525
10460
  const { refreshAvailableNodes } = useRefreshAvailableNodes();
10526
10461
  const [installing, setInstalling] = useState(null);
10527
10462
  const [installMutation] = useMutation(InstallWorkflowNodeDocument, {
@@ -10581,29 +10516,10 @@ function useInstallNode() {
10581
10516
  "[useInstallNode] Free node installation successful. Node registration handled by backend."
10582
10517
  );
10583
10518
  }
10584
- if (node.zipFileUrl) {
10519
+ const refreshResult = await refreshAvailableNodes();
10520
+ if (refreshResult.success) {
10585
10521
  console.log(
10586
- `[useInstallNode] Loading node package from: ${node.zipFileUrl}`
10587
- );
10588
- const packageResult = await loadNodePackage(node.zipFileUrl);
10589
- if (!packageResult.success) {
10590
- console.warn(
10591
- `[useInstallNode] Package loading failed: ${packageResult.error}. Node installed in database but not loaded in builder.`
10592
- );
10593
- } else {
10594
- console.log(
10595
- `[useInstallNode] Successfully loaded node package: ${packageResult.manifest?.nodeType}`
10596
- );
10597
- const refreshResult = await refreshAvailableNodes();
10598
- if (refreshResult.success) {
10599
- console.log(
10600
- `[useInstallNode] Available nodes refreshed. Total: ${refreshResult.totalNodes}`
10601
- );
10602
- }
10603
- }
10604
- } else {
10605
- console.warn(
10606
- `[useInstallNode] Node ${node.id} has no zipFileUrl. Installed in database but cannot be loaded in builder.`
10522
+ `[useInstallNode] Available nodes refreshed. Total: ${refreshResult.totalNodes}`
10607
10523
  );
10608
10524
  }
10609
10525
  await refetchInstalled();
@@ -10628,7 +10544,6 @@ function useInstallNode() {
10628
10544
  workspaceId,
10629
10545
  tenantId,
10630
10546
  refetchInstalled,
10631
- loadNodePackage,
10632
10547
  refreshAvailableNodes
10633
10548
  ]
10634
10549
  );
@@ -10638,22 +10553,37 @@ function useInstallNode() {
10638
10553
  };
10639
10554
  }
10640
10555
  function useUpdateNode() {
10556
+ const globalClient = useGlobalStoreClient();
10557
+ const context = useContext(FluidGridsContext);
10558
+ const workspaceId = context?.workspaceId ?? getFluidGridsConfig().workspaceId;
10559
+ const tenantId = context?.tenantId ?? getFluidGridsConfig().tenantId;
10560
+ const { refetch: refetchInstalled } = useInstalledNodes();
10561
+ const { refreshAvailableNodes } = useRefreshAvailableNodes();
10641
10562
  const [updating, setUpdating] = useState(null);
10563
+ const [installMutation] = useMutation(InstallWorkflowNodeDocument, {
10564
+ client: globalClient
10565
+ });
10642
10566
  const updateNode = useCallback(
10643
- async (node, installationId) => {
10567
+ async (node, _installationId) => {
10644
10568
  try {
10645
10569
  setUpdating(node.id);
10646
- console.log("[useUpdateNode] Update requested:", {
10647
- nodeId: node.id,
10648
- nodeName: node.name,
10649
- installationId,
10650
- newVersion: node.manifestVersion
10570
+ const result = await installMutation({
10571
+ variables: {
10572
+ input: {
10573
+ productId: node.id,
10574
+ workspaceId,
10575
+ organizationId: tenantId,
10576
+ version: node.manifestVersion,
10577
+ manifest: node.manifest
10578
+ }
10579
+ }
10651
10580
  });
10652
- await new Promise((resolve) => setTimeout(resolve, 1e3));
10653
- return {
10654
- success: true,
10655
- message: `Updated ${node.name} successfully`
10656
- };
10581
+ if (result.error || !result.data?.recordAppInstallation) {
10582
+ throw new Error(result.error?.message || "Update failed");
10583
+ }
10584
+ await refreshAvailableNodes();
10585
+ await refetchInstalled();
10586
+ return { success: true };
10657
10587
  } catch (error) {
10658
10588
  console.error("[useUpdateNode] Update failed:", error);
10659
10589
  return {
@@ -10664,7 +10594,13 @@ function useUpdateNode() {
10664
10594
  setUpdating(null);
10665
10595
  }
10666
10596
  },
10667
- []
10597
+ [
10598
+ installMutation,
10599
+ workspaceId,
10600
+ tenantId,
10601
+ refetchInstalled,
10602
+ refreshAvailableNodes
10603
+ ]
10668
10604
  );
10669
10605
  return {
10670
10606
  updateNode,
@@ -12505,7 +12441,7 @@ function TemplatesModal({
12505
12441
  ) });
12506
12442
  }
12507
12443
  var LazyTemplateConfigurationModal = lazy(
12508
- () => import('./TemplateConfigurationModal-VU3Q4RFX.js').then((m) => ({
12444
+ () => import('./TemplateConfigurationModal-ZMCT3ZCH.js').then((m) => ({
12509
12445
  default: m.TemplateConfigurationModal
12510
12446
  }))
12511
12447
  );
@@ -12589,7 +12525,9 @@ function DesktopSidebarFragment({
12589
12525
  setInstallProgress(null);
12590
12526
  }
12591
12527
  toast.loading("Creating workflow...", { id: "template-import" });
12592
- const rawDef = JSON.parse(JSON.stringify(content.definitionJson));
12528
+ const rawDef = JSON.parse(
12529
+ JSON.stringify(content.definitionJson)
12530
+ );
12593
12531
  const nestedDef = rawDef?.data?.workflowDefinition?.definitionJson;
12594
12532
  let definitionJson = nestedDef && typeof nestedDef === "object" ? nestedDef : rawDef;
12595
12533
  if (overrides?.templateInputs) {
@@ -12670,7 +12608,9 @@ function DesktopSidebarFragment({
12670
12608
  });
12671
12609
  }
12672
12610
  } catch {
12673
- console.warn("[performImport] Failed to record template installation");
12611
+ console.warn(
12612
+ "[performImport] Failed to record template installation"
12613
+ );
12674
12614
  }
12675
12615
  toast.success("Workflow created from template!", {
12676
12616
  description: `"${importResult.workflow.name}" is ready to edit`
@@ -12791,7 +12731,12 @@ function DesktopSidebarFragment({
12791
12731
  async (config2) => {
12792
12732
  if (!configTemplate || !configContent) return;
12793
12733
  if (configNodeCheck && !configNodeCheck.canImport) return;
12794
- await performImport(configTemplate, configContent, config2, configNodeCheck);
12734
+ await performImport(
12735
+ configTemplate,
12736
+ configContent,
12737
+ config2,
12738
+ configNodeCheck
12739
+ );
12795
12740
  setConfigModalOpen(false);
12796
12741
  },
12797
12742
  [configTemplate, configContent, configNodeCheck, performImport]
@@ -22070,5 +22015,5 @@ function WorkflowBuilder() {
22070
22015
  }
22071
22016
 
22072
22017
  export { Card2 as Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConfigSchemaForm, ConnectionFormDialog, ConnectionSelector, FluidGridsProvider, ProviderPicker, TemplateCard, WorkflowBuilder, getProviderForm, listCustomBlocks, registerCustomBlock, resolveUiSpec, stripSubmitActions, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useFluidGridsContext, useImportWorkflowTemplate, useInitiateOAuth, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useWorkflowTemplates };
22073
- //# sourceMappingURL=chunk-QBI22GDG.js.map
22074
- //# sourceMappingURL=chunk-QBI22GDG.js.map
22018
+ //# sourceMappingURL=chunk-CEK43QSX.js.map
22019
+ //# sourceMappingURL=chunk-CEK43QSX.js.map