@burdenoff/fluidgrids-fe-sdk 2026.721.1 → 2026.723.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/ExecutionDetailPage-3E66352F.js +8 -0
  2. package/dist/{ExecutionDetailPage-6ASC7CJW.js.map → ExecutionDetailPage-3E66352F.js.map} +1 -1
  3. package/dist/ExecutionsListPage-N6ZTA42U.js +8 -0
  4. package/dist/{ExecutionsListPage-OWOKDVXQ.js.map → ExecutionsListPage-N6ZTA42U.js.map} +1 -1
  5. package/dist/{WorkflowBuilder-BUBJLTBN.js → WorkflowBuilder-TDCWGV55.js} +6 -6
  6. package/dist/{WorkflowBuilder-BUBJLTBN.js.map → WorkflowBuilder-TDCWGV55.js.map} +1 -1
  7. package/dist/WorkflowsList-IKUTWG7U.js +10 -0
  8. package/dist/{WorkflowsList-AY6ZANWN.js.map → WorkflowsList-IKUTWG7U.js.map} +1 -1
  9. package/dist/{blocks-S63X5XLG.js → blocks-NRIL7V7G.js} +4 -4
  10. package/dist/{blocks-S63X5XLG.js.map → blocks-NRIL7V7G.js.map} +1 -1
  11. package/dist/{chunk-ZPBFAT6K.js → chunk-2WURM2ZA.js} +3 -3
  12. package/dist/{chunk-ZPBFAT6K.js.map → chunk-2WURM2ZA.js.map} +1 -1
  13. package/dist/{chunk-OHIRHNRJ.js → chunk-47457KC3.js} +3 -3
  14. package/dist/{chunk-OHIRHNRJ.js.map → chunk-47457KC3.js.map} +1 -1
  15. package/dist/{chunk-4NTHFDKQ.js → chunk-H7WSQN2I.js} +29 -3
  16. package/dist/chunk-H7WSQN2I.js.map +1 -0
  17. package/dist/{chunk-52EJMXGS.js → chunk-IMRLGRX2.js} +3 -3
  18. package/dist/{chunk-52EJMXGS.js.map → chunk-IMRLGRX2.js.map} +1 -1
  19. package/dist/{chunk-X6I7YBLP.js → chunk-MMIHLPRC.js} +139 -18
  20. package/dist/chunk-MMIHLPRC.js.map +1 -0
  21. package/dist/{chunk-4IMAQMRN.js → chunk-TT2UP3ZC.js} +16 -5
  22. package/dist/chunk-TT2UP3ZC.js.map +1 -0
  23. package/dist/{chunk-EQVBECAC.js → chunk-YN6AXJJO.js} +3 -3
  24. package/dist/{chunk-EQVBECAC.js.map → chunk-YN6AXJJO.js.map} +1 -1
  25. package/dist/{chunk-DVSO5MTE.js → chunk-YQO6STP6.js} +4 -4
  26. package/dist/{chunk-DVSO5MTE.js.map → chunk-YQO6STP6.js.map} +1 -1
  27. package/dist/index.d.ts +62 -7
  28. package/dist/index.js +15 -15
  29. package/dist/index.js.map +1 -1
  30. package/package.json +1 -1
  31. package/dist/ExecutionDetailPage-6ASC7CJW.js +0 -8
  32. package/dist/ExecutionsListPage-OWOKDVXQ.js +0 -8
  33. package/dist/WorkflowsList-AY6ZANWN.js +0 -10
  34. package/dist/chunk-4IMAQMRN.js.map +0 -1
  35. package/dist/chunk-4NTHFDKQ.js.map +0 -1
  36. package/dist/chunk-X6I7YBLP.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { Dialog as Dialog$1, DialogContent as DialogContent$1, DialogHeader as DialogHeader$1, DialogTitle as DialogTitle$1, DialogDescription as DialogDescription$1, Input as Input$1, DialogFooter } from './chunk-MRVS73S2.js';
2
2
  import { Badge as Badge$1, Button } from './chunk-DBOMRIP5.js';
3
- import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useInsertNode, useSaveWorkflow, useNodeExecution, getNodeDetail, ConnectionSelector, NODES_METADATA, NODE_CONFIGS, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-4IMAQMRN.js';
3
+ import { refetchStoreNodes, registerWorkflowNodeTypes, ensureNodeConfigsLoaded, onNodeTypesUpdate, NODE_TYPES, getNodeMetadata, AVAILABLE_NODES, useInsertNode, useSaveWorkflow, useNodeExecution, getNodeDetail, ConnectionSelector, NODES_METADATA, NODE_CONFIGS, isNodeConfigsInitialized, NODES, NodePropertyPanel } from './chunk-TT2UP3ZC.js';
4
4
  import { createGlobalStoreClient, setGlobalStoreClient, resetGlobalStoreClient, getGlobalStoreClient } from './chunk-BQXHJIER.js';
5
5
  import { BrowseWorkflowTemplatesDocument, InstallWorkflowNodeDocument, InstallPurchasedNodeDocument, GetMyNodeInstallationsDocument, BrowseWorkflowNodesDocument, UninstallWorkflowNodeDocument, CreateStoreOrderDocument } from './chunk-PNOA7CQV.js';
6
- import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeactivateWorkflow } from './chunk-OHIRHNRJ.js';
6
+ import { useLazyWorkflowDefinition, useCreateWorkflow, useWorkflowVersions, useRestoreWorkflowVersion, useActivateWorkflow, useDeactivateWorkflow } from './chunk-47457KC3.js';
7
7
  import { useFlowStore } from './chunk-KU64CCSV.js';
8
8
  import { SdkPermissionButton, FLUIDGRIDS_PERMISSIONS } from './chunk-UIY2HBWA.js';
9
9
  import { cn } from './chunk-3ZYUGTIT.js';
10
- import { throwIfResultError, NodeSchemaIntrospectionDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-4NTHFDKQ.js';
11
- import { createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClient } from './chunk-5BDQNSP3.js';
10
+ import { throwIfResultError, NodeSchemaIntrospectionDocument, EventRegistrationsDocument, NodeUsageStatusDocument, RemoveNodeFromWorkflowsDocument } from './chunk-H7WSQN2I.js';
11
+ import { createFluidGridsClient, setFluidGridsClient, resetFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe } from './chunk-5BDQNSP3.js';
12
12
  import { validateTrustedOrigin, setFluidGridsConfig, resetFluidGridsConfig, getFluidGridsConfig } from './chunk-WWU2O2SR.js';
13
13
  import { deepClone, applyTemplateInputs } from './chunk-XQP33UJR.js';
14
14
  import { useNavigate, useParams } from 'react-router-dom';
@@ -2259,6 +2259,11 @@ gql$1`
2259
2259
  `;
2260
2260
 
2261
2261
  // src/builder/components/flow-builder/components/store/store-node-availability.ts
2262
+ function userSelectableOperationCount(nodeType) {
2263
+ if (!nodeType) return 0;
2264
+ const ops = NODE_CONFIGS.find((c) => c.type === nodeType)?.operations ?? [];
2265
+ return ops.filter((op) => !op.isAdapterOperation && !op.internal).length;
2266
+ }
2262
2267
  function getStoreNodeType(node, isInstalled) {
2263
2268
  const manifestNodeType = node.manifest?.nodeType;
2264
2269
  return manifestNodeType ?? (isInstalled ? `store/${node.slug}` : void 0);
@@ -2270,11 +2275,9 @@ function getStoreNodeAvailability(node, isInstalled) {
2270
2275
  (availableNode) => availableNode.type === nodeType && (availableNode.publishType === "BUILTIN" || availableNode.publishType === void 0)
2271
2276
  );
2272
2277
  const isPrebuilt = !isInstalled && (isInternalBuiltin || isRegistryBacked);
2273
- return {
2274
- nodeType,
2275
- isPrebuilt,
2276
- isDraggable: !!nodeType && (isInstalled || isPrebuilt)
2277
- };
2278
+ const available = !!nodeType && (isInstalled || isPrebuilt);
2279
+ const isDraggable = available && userSelectableOperationCount(nodeType) <= 1;
2280
+ return { nodeType, isPrebuilt, isDraggable };
2278
2281
  }
2279
2282
 
2280
2283
  // src/builder/contants/symbols.ts
@@ -2871,11 +2874,18 @@ var UninstallNodeDialog = ({
2871
2874
  function isTriggerOperation(op) {
2872
2875
  return op.role === "trigger" || !!op.delivery || op.type === "subscription";
2873
2876
  }
2877
+ function userSelectableOperations(ops) {
2878
+ return (ops ?? []).filter(
2879
+ (op) => !op.isAdapterOperation && !op.internal
2880
+ );
2881
+ }
2874
2882
  function StoreNodeOperations({ nodeType }) {
2875
2883
  const [, bump] = useState(0);
2876
2884
  useEffect(() => onNodeTypesUpdate(() => bump((n) => n + 1)), []);
2877
2885
  const config = nodeType ? NODE_CONFIGS.find((c) => c.type === nodeType) : void 0;
2878
- const operations = config?.operations ?? [];
2886
+ const operations = userSelectableOperations(
2887
+ config?.operations
2888
+ );
2879
2889
  const handleDragStart = useCallback(
2880
2890
  (e, opName) => {
2881
2891
  if (!nodeType) return;
@@ -4068,7 +4078,7 @@ function DesktopSidebarFragment({
4068
4078
  if (nodes) {
4069
4079
  const requiredNodeTypes = [];
4070
4080
  try {
4071
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-S63X5XLG.js');
4081
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-NRIL7V7G.js');
4072
4082
  await ensureNodeConfigsLoaded2().catch(() => {
4073
4083
  });
4074
4084
  const workflowNodeTypes = [
@@ -12423,6 +12433,100 @@ function SwitchRulesEditor({
12423
12433
  /* @__PURE__ */ jsx("p", { className: "text-[10px] leading-snug text-muted-foreground", children: "Rules are checked top-down; the first matching rule routes the item to its output. Each rule renders as an output handle on the node." })
12424
12434
  ] });
12425
12435
  }
12436
+ var SECTION_LABEL = "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground";
12437
+ function WebhookUrlField({ webhookUrl, loading }) {
12438
+ const [copied, setCopied] = useState(false);
12439
+ const handleCopy = async () => {
12440
+ if (!webhookUrl) return;
12441
+ try {
12442
+ await navigator.clipboard.writeText(webhookUrl);
12443
+ setCopied(true);
12444
+ setTimeout(() => setCopied(false), 1500);
12445
+ } catch {
12446
+ }
12447
+ };
12448
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-2", "data-testid": "ndv-webhook-url", children: [
12449
+ /* @__PURE__ */ jsx("div", { className: SECTION_LABEL, children: "Webhook URL" }),
12450
+ webhookUrl ? /* @__PURE__ */ jsxs(Fragment, { children: [
12451
+ /* @__PURE__ */ jsxs("div", { className: "flex items-stretch gap-2", children: [
12452
+ /* @__PURE__ */ jsx(
12453
+ "input",
12454
+ {
12455
+ readOnly: true,
12456
+ value: webhookUrl,
12457
+ onFocus: (e) => e.currentTarget.select(),
12458
+ className: "min-w-0 flex-1 rounded-md border border-border bg-muted/40 px-3 py-2 font-mono text-xs text-foreground outline-none focus:border-primary"
12459
+ }
12460
+ ),
12461
+ /* @__PURE__ */ jsxs(
12462
+ "button",
12463
+ {
12464
+ type: "button",
12465
+ onClick: handleCopy,
12466
+ className: cn$1(
12467
+ "inline-flex shrink-0 items-center gap-1.5 rounded-md border border-border px-3 py-2 text-xs font-medium transition-colors",
12468
+ copied ? "border-primary bg-primary/10 text-primary" : "bg-background text-foreground hover:bg-muted"
12469
+ ),
12470
+ "aria-label": "Copy webhook URL",
12471
+ children: [
12472
+ /* @__PURE__ */ jsx(
12473
+ Icon,
12474
+ {
12475
+ icon: copied ? "mdi:check" : "mdi:content-copy",
12476
+ className: "h-4 w-4"
12477
+ }
12478
+ ),
12479
+ copied ? "Copied" : "Copy"
12480
+ ]
12481
+ }
12482
+ )
12483
+ ] }),
12484
+ /* @__PURE__ */ jsx("p", { className: "text-[11px] text-muted-foreground", children: "Send HTTP requests to this URL to trigger the workflow." })
12485
+ ] }) : /* @__PURE__ */ jsx("div", { className: "rounded-md border border-dashed border-border bg-muted/40 px-3 py-2 text-xs text-muted-foreground", children: loading ? "Loading webhook URL\u2026" : "Save the workflow to generate its webhook URL." })
12486
+ ] });
12487
+ }
12488
+ function useWebhookRegistration(workflowKey, triggerNodeId, enabled = true) {
12489
+ const [registration, setRegistration] = useState(
12490
+ null
12491
+ );
12492
+ const [loading, setLoading] = useState(false);
12493
+ const [error, setError] = useState(null);
12494
+ const fetchData = useCallback(async () => {
12495
+ if (!enabled || !workflowKey || !triggerNodeId) {
12496
+ setRegistration(null);
12497
+ return;
12498
+ }
12499
+ const client = getFluidGridsClientSafe();
12500
+ if (!client) return;
12501
+ setLoading(true);
12502
+ setError(null);
12503
+ try {
12504
+ const result = await client.query({
12505
+ query: EventRegistrationsDocument,
12506
+ variables: { workflowKey },
12507
+ fetchPolicy: "network-only"
12508
+ });
12509
+ const match = result.data?.eventRegistrations?.find(
12510
+ (r) => r.triggerNodeId === triggerNodeId
12511
+ ) ?? null;
12512
+ setRegistration(match);
12513
+ } catch (err) {
12514
+ setError(err);
12515
+ } finally {
12516
+ setLoading(false);
12517
+ }
12518
+ }, [enabled, workflowKey, triggerNodeId]);
12519
+ useEffect(() => {
12520
+ fetchData();
12521
+ }, [fetchData]);
12522
+ return {
12523
+ registration,
12524
+ webhookUrl: registration?.webhookUrl ?? null,
12525
+ loading,
12526
+ error,
12527
+ refetch: fetchData
12528
+ };
12529
+ }
12426
12530
  function coerceNumber(type, raw) {
12427
12531
  if (raw.trim() === "") return void 0;
12428
12532
  const n = type === "integer" ? parseInt(raw, 10) : parseFloat(raw);
@@ -12467,7 +12571,7 @@ function nodeSubtitle(node) {
12467
12571
  const data = asRecord(node?.data);
12468
12572
  return typeof data?.operation_name === "string" ? data.operation_name : void 0;
12469
12573
  }
12470
- var SECTION_LABEL = "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground";
12574
+ var SECTION_LABEL2 = "text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground";
12471
12575
  function NodeDetailView() {
12472
12576
  const ndv = useFlowStore((s) => s.workflow.ndv);
12473
12577
  const nodes = useFlowStore((s) => s.workflow.nodes);
@@ -12552,6 +12656,16 @@ function NodeDetailView() {
12552
12656
  [currentOp]
12553
12657
  );
12554
12658
  const params = useMemo(() => paramsFromOperation(currentOp), [currentOp]);
12659
+ const isWebhookTrigger = useMemo(
12660
+ () => !!asRecord(currentOp?.output_fields)?.webhookUrl,
12661
+ [currentOp]
12662
+ );
12663
+ const workflowKey = useFlowStore((s) => s.workflow.workflowKey);
12664
+ const { webhookUrl, loading: webhookUrlLoading } = useWebhookRegistration(
12665
+ workflowKey || void 0,
12666
+ node?.id,
12667
+ isWebhookTrigger && open
12668
+ );
12555
12669
  const pickerFields = useMemo(() => flattenFields(inputFields), [inputFields]);
12556
12670
  const mapping = currentEdge?.mapping?.definition ?? {};
12557
12671
  const argsState = useMemo(() => {
@@ -12728,7 +12842,7 @@ function NodeDetailView() {
12728
12842
  className: "flex min-h-0 min-w-[180px] flex-col bg-card/40",
12729
12843
  children: [
12730
12844
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-4 py-2.5", children: [
12731
- /* @__PURE__ */ jsx("span", { className: SECTION_LABEL, children: "Input" }),
12845
+ /* @__PURE__ */ jsx("span", { className: SECTION_LABEL2, children: "Input" }),
12732
12846
  sourceIds.length > 0 && /* @__PURE__ */ jsx(
12733
12847
  "select",
12734
12848
  {
@@ -12787,8 +12901,15 @@ function NodeDetailView() {
12787
12901
  className: "min-h-0 flex-1 space-y-4 overflow-auto p-4",
12788
12902
  "data-testid": "ndv-params",
12789
12903
  children: [
12904
+ isWebhookTrigger && /* @__PURE__ */ jsx(
12905
+ WebhookUrlField,
12906
+ {
12907
+ webhookUrl,
12908
+ loading: webhookUrlLoading
12909
+ }
12910
+ ),
12790
12911
  connectionAdapters.length > 0 && /* @__PURE__ */ jsxs("div", { className: "space-y-2", "data-testid": "ndv-connections", children: [
12791
- /* @__PURE__ */ jsx("div", { className: SECTION_LABEL, children: "Connections" }),
12912
+ /* @__PURE__ */ jsx("div", { className: SECTION_LABEL2, children: "Connections" }),
12792
12913
  /* @__PURE__ */ jsx(
12793
12914
  ConnectionSelector,
12794
12915
  {
@@ -12955,7 +13076,7 @@ function NodeDetailView() {
12955
13076
  className: "flex min-h-0 min-w-[180px] flex-col bg-card/40",
12956
13077
  children: [
12957
13078
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-4 py-2.5", children: [
12958
- /* @__PURE__ */ jsx("span", { className: SECTION_LABEL, children: "Output" }),
13079
+ /* @__PURE__ */ jsx("span", { className: SECTION_LABEL2, children: "Output" }),
12959
13080
  outputFields.length > 0 && /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-1", children: [
12960
13081
  /* @__PURE__ */ jsx(
12961
13082
  ToggleChip,
@@ -13842,7 +13963,7 @@ function WorkflowItem({
13842
13963
  };
13843
13964
  const requiredNodeTypes = [];
13844
13965
  try {
13845
- const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-S63X5XLG.js');
13966
+ const { NODE_CONFIGS: NODE_CONFIGS3, ensureNodeConfigsLoaded: ensureNodeConfigsLoaded2 } = await import('./blocks-NRIL7V7G.js');
13846
13967
  await ensureNodeConfigsLoaded2().catch(() => {
13847
13968
  });
13848
13969
  const workflowNodeTypes = [
@@ -14111,5 +14232,5 @@ function WorkflowBuilder() {
14111
14232
  }
14112
14233
 
14113
14234
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, FlowBuilderPage, FluidGridsProvider, TemplateCard, WorkflowBuilder, useFluidGridsContext, useImportWorkflowTemplate, useWorkflowTemplates };
14114
- //# sourceMappingURL=chunk-X6I7YBLP.js.map
14115
- //# sourceMappingURL=chunk-X6I7YBLP.js.map
14235
+ //# sourceMappingURL=chunk-MMIHLPRC.js.map
14236
+ //# sourceMappingURL=chunk-MMIHLPRC.js.map