n8n-editor-ui 1.85.2 → 1.87.0

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 (120) hide show
  1. package/dist/assets/AnimatedSpinner-ChSRgyeI.css +39 -0
  2. package/dist/assets/AnimatedSpinner-urWn52iY.js +18 -0
  3. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-B2Xk-4o2.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DIbgkfAC.js} +1 -1
  4. package/dist/assets/{AuthView-Bhr2Ols-.js → AuthView-DIQI5asI.js} +2 -2
  5. package/dist/assets/{CanvasChatSwitch-BcSDHC-c.css → CanvasChatSwitch-0IWSu8RE.css} +488 -46
  6. package/dist/assets/{CanvasChatSwitch-E9vu2jW8.js → CanvasChatSwitch-BIpZuY-n.js} +697 -214
  7. package/dist/assets/{ChangePasswordView-BzAEcqVw.js → ChangePasswordView-D8Qv0tim.js} +3 -3
  8. package/dist/assets/CollectionParameter-DT1MnS63.js +4 -0
  9. package/dist/assets/{CredentialsView-CZiEXdjH.js → CredentialsView-tJ8-2RrO.js} +8 -8
  10. package/dist/assets/{ErrorView-C1QywuMY.js → ErrorView-CZEZD7LB.js} +1 -1
  11. package/dist/assets/{ExecutionsTime-BOPJEomw.css → ExecutionsTime-DZHUIJjP.css} +6 -6
  12. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-l5VZIkoy.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-gcknFyjA.js} +23 -20
  13. package/dist/assets/{ExecutionsView-Bo0Nk8lV.js → ExecutionsView-BCfIz8EF.js} +49 -57
  14. package/dist/assets/{ExecutionsView-JCKikuIS.css → ExecutionsView-ByQf9yli.css} +13 -47
  15. package/dist/assets/{FileSaver.min-D3VgyjMF.js → FileSaver.min-Bs2qHlKb.js} +1 -1
  16. package/dist/assets/{FixedCollectionParameter-RpfOY9Ho.js → FixedCollectionParameter-E0LDqNW3.js} +1 -1
  17. package/dist/assets/{ForgotMyPasswordView-DPTddCxG.js → ForgotMyPasswordView-YOnrzvKJ.js} +3 -3
  18. package/dist/assets/InsightsChartAverageRuntime-DWrrriYN.js +61 -0
  19. package/dist/assets/InsightsChartFailed-DRi6JC3m.js +57 -0
  20. package/dist/assets/InsightsChartFailureRate-BdFNsMpg.js +57 -0
  21. package/dist/assets/InsightsChartTimeSaved-C12GZzSQ.js +71 -0
  22. package/dist/assets/InsightsChartTotal-Cn386HO4.js +59 -0
  23. package/dist/assets/InsightsDashboard-BawwZ0Oo.js +154 -0
  24. package/dist/assets/InsightsDashboard-CB4vHnBh.css +152 -0
  25. package/dist/assets/InsightsPaywall-OeXh6LeZ.css +133 -0
  26. package/dist/assets/InsightsPaywall-g3JcqAYL.js +58 -0
  27. package/dist/assets/{useOverview-DcRuPjLJ.css → InsightsSummary-W08OzElS.css} +57 -35
  28. package/dist/assets/InsightsSummary-vMmKUcie.js +185 -0
  29. package/dist/assets/InsightsTableWorkflows-DQQ1vvMz.js +129 -0
  30. package/dist/assets/InsightsTableWorkflows-Us3j4UTO.css +128 -0
  31. package/dist/assets/{Logo-CxllxUni.js → Logo-Vm92axlM.js} +1 -1
  32. package/dist/assets/{MainHeader-9gTxUJIR.js → MainHeader-BUhpvu2K.js} +9 -10
  33. package/dist/assets/{MainSidebar-CRJML8mh.js → MainSidebar-D5P5FSUQ.js} +11 -4
  34. package/dist/assets/{NodeCreation-zoYjBJl6.js → NodeCreation-BgW5u-Bc.js} +4 -4
  35. package/dist/assets/{NodeCreator-D-qBRyBy.js → NodeCreator-CFe2n6vJ.js} +10 -26
  36. package/dist/assets/{NodeDetailsView-C1z3N5z_.css → NodeDetailsView-BT-ro74o.css} +63 -70
  37. package/dist/assets/{NodeDetailsView-C1iBFaC1.js → NodeDetailsView-CmtK-rDD.js} +145 -482
  38. package/dist/assets/{NodeView-Bio-FnnF.js → NodeView-BqaNPfpx.js} +19 -21
  39. package/dist/assets/{ProjectCardBadge-BEflW6oP.js → ProjectCardBadge-BKgtzWr1.js} +69 -36
  40. package/dist/assets/{ProjectCardBadge-C78ap7Rc.css → ProjectCardBadge-t3v64i1e.css} +18 -13
  41. package/dist/assets/{ProjectHeader-DK3_g_D8.js → ProjectHeader-BWVSdavS.js} +33 -7
  42. package/dist/assets/{ProjectHeader-B-a6_GH6.css → ProjectHeader-BsBpG-Mj.css} +7 -7
  43. package/dist/assets/{ProjectSettings-CLMy_-YC.js → ProjectSettings-BL-2-uOg.js} +3 -3
  44. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-CSazgsi8.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-BL-bMMgn.js} +1 -2
  45. package/dist/assets/{ResourcesListLayout-CBvvL0VM.js → ResourcesListLayout-CozpmfUY.js} +1 -1
  46. package/dist/assets/{RunDataAi-C-tu9GrI.js → RunDataAi-B_EadpzG.js} +188 -94
  47. package/dist/assets/{RunDataAi-CN9FrT9c.css → RunDataAi-CUUDqZRP.css} +128 -0
  48. package/dist/assets/{RunDataJson-ClpS_600.js → RunDataJson-CyNNCtyd.js} +11 -12
  49. package/dist/assets/{RunDataJsonActions-gWW8Qkt_.js → RunDataJsonActions-SQqaiBEP.js} +1 -2
  50. package/dist/assets/{RunDataSearch-Dgv5JYk-.js → RunDataSearch-BF9kshKq.js} +1 -1
  51. package/dist/assets/{RunDataTable-nsOk35pD.js → RunDataTable-DsW7wuc2.js} +10 -8
  52. package/dist/assets/{SamlOnboarding-C5TSdGcx.js → SamlOnboarding-BX7RiRJB.js} +3 -3
  53. package/dist/assets/{SettingsApiView-CzQG1ofR.js → SettingsApiView-CDIPYvaG.js} +1 -1
  54. package/dist/assets/{SettingsCommunityNodesView-D_F3n2NO.js → SettingsCommunityNodesView-BRSEkT73.js} +4 -5
  55. package/dist/assets/{SettingsExternalSecrets-BUgKlMoR.js → SettingsExternalSecrets-D7ASuAnS.js} +1 -1
  56. package/dist/assets/{SettingsLdapView-CAmuVErd.js → SettingsLdapView-DA5fZZ51.js} +1 -1
  57. package/dist/assets/{SettingsLogStreamingView-DLkHrsx5.js → SettingsLogStreamingView-C9qkYvCr.js} +1 -1
  58. package/dist/assets/{SettingsPersonalView-2elwsG0f.js → SettingsPersonalView-BnNOJcvO.js} +2 -2
  59. package/dist/assets/{SettingsSourceControl-BD426GUo.js → SettingsSourceControl--ozL4427.js} +1 -1
  60. package/dist/assets/{SettingsSso-B-7lLoTI.js → SettingsSso-Bfe_HRSr.js} +1 -1
  61. package/dist/assets/{SettingsUsageAndPlan-EUWVJYe2.js → SettingsUsageAndPlan-CzvMNudh.js} +1 -1
  62. package/dist/assets/{SettingsUsersView-C3GbTYvU.js → SettingsUsersView-DGu5ku48.js} +1 -1
  63. package/dist/assets/{SettingsView-DSMM_8SL.js → SettingsView-CvreVxXL.js} +1 -1
  64. package/dist/assets/{SetupView-CexY8Lic.js → SetupView-BJT6GtIA.js} +3 -3
  65. package/dist/assets/{SetupWorkflowCredentialsButton-BpLp754t.js → SetupWorkflowCredentialsButton-BEq2gs_-.js} +2 -4
  66. package/dist/assets/{SetupWorkflowFromTemplateView-CLvS9Kda.js → SetupWorkflowFromTemplateView-F9oCDWX8.js} +3 -12
  67. package/dist/assets/{SigninView-CYkcm3hG.js → SigninView-DyoDtCBc.js} +3 -3
  68. package/dist/assets/{SignoutView-C2HutrZm.js → SignoutView-DclBslYe.js} +1 -1
  69. package/dist/assets/{SignupView-B-o-ka0Z.js → SignupView-BhB0Hhj0.js} +3 -3
  70. package/dist/assets/{TemplateDetails-C20G_lj4.js → TemplateDetails-B3utdyMi.js} +1 -1
  71. package/dist/assets/{TemplateList-DQzcYS6n.js → TemplateList-Bgz1iiiH.js} +1 -1
  72. package/dist/assets/{TemplatesCollectionView-DEEMhmYZ.js → TemplatesCollectionView-CORzb8YZ.js} +7 -9
  73. package/dist/assets/{TemplatesSearchView-S6802uNr.js → TemplatesSearchView-DTuv4-5C.js} +3 -3
  74. package/dist/assets/{TemplatesView-CT7S5O4K.js → TemplatesView-CFV5SVF7.js} +1 -1
  75. package/dist/assets/{TemplatesWorkflowView-BMd9OmqA.js → TemplatesWorkflowView-CQVVdNty.js} +5 -7
  76. package/dist/assets/{TestDefinitionEditView-BXhOuJrU.css → TestDefinitionEditView-Cwkrz308.css} +12 -143
  77. package/dist/assets/{TestDefinitionEditView-5kDGEtaD.js → TestDefinitionEditView-DX6GIeq2.js} +179 -331
  78. package/dist/assets/{TestDefinitionListView-BM-hghAY.js → TestDefinitionListView-CLEkthYQ.js} +1 -1
  79. package/dist/assets/{TestDefinitionNewView-CNN-qAmL.js → TestDefinitionNewView-DWTTqvlN.js} +2 -2
  80. package/dist/assets/{TestDefinitionRootView-S8g84AaK.js → TestDefinitionRootView-D0yLW0V6.js} +1 -1
  81. package/dist/assets/{VariablesView-D90WCfYK.js → VariablesView-Dsr4pqth.js} +3 -3
  82. package/dist/assets/{WorkerView-BHVIRKm_.js → WorkerView-Bbu5wv-g.js} +6 -7
  83. package/dist/assets/{WorkflowActivator-BsceIfln.js → WorkflowActivator-C197X_D6.js} +2 -2
  84. package/dist/assets/{WorkflowExecutionsInfoAccordion-DxGIzmq4.js → WorkflowExecutionsInfoAccordion-CHPlRtMQ.js} +1 -1
  85. package/dist/assets/{WorkflowExecutionsLandingPage-czqJYUnQ.js → WorkflowExecutionsLandingPage-CnvMc3SA.js} +2 -2
  86. package/dist/assets/{WorkflowExecutionsPreview-BzCGXWj0.js → WorkflowExecutionsPreview-CJBM3Awe.js} +24 -256
  87. package/dist/assets/{WorkflowExecutionsPreview-CHu6M3Dh.css → WorkflowExecutionsPreview-D7jTJ8GL.css} +16 -48
  88. package/dist/assets/{WorkflowExecutionsView-syep-_N0.js → WorkflowExecutionsView-BwB6WS6M.js} +11 -17
  89. package/dist/assets/{WorkflowHistory-CmHn_hnX.js → WorkflowHistory-U5a4aYts.js} +4 -4
  90. package/dist/assets/{WorkflowOnboardingView-BmhaZBkH.js → WorkflowOnboardingView-DHUUTLOo.js} +1 -1
  91. package/dist/assets/{WorkflowPreview-BN13256Q.js → WorkflowPreview-D8pwehRe.js} +1 -1
  92. package/dist/assets/{WorkflowsView-r9qJOUEb.css → WorkflowsView-CJB9aI6A.css} +27 -41
  93. package/dist/assets/{WorkflowsView-6qbtftll.js → WorkflowsView-DIh7kqZk.js} +76 -141
  94. package/dist/assets/chartjs.utils-DTEY3u-V.js +193 -0
  95. package/dist/assets/dateFormatter-C7xnNKzY.js +21 -0
  96. package/dist/assets/{easyAiWorkflowUtils-C7LfXIgb.js → easyAiWorkflowUtils-V__OjFo9.js} +1 -1
  97. package/dist/assets/{global-link-actions-znEIb0N4.js → global-link-actions-vGpWr9Uz.js} +1 -1
  98. package/dist/assets/{import-curl-BsKs3fYs.js → import-curl-C6ERUxFe.js} +1 -1
  99. package/dist/assets/{index-Cjz62pAo.js → index-BrjPYODL.js} +3 -1
  100. package/dist/assets/{index-DZljH0cm.js → index-DD7Wuhk5.js} +11407 -5580
  101. package/dist/assets/{index-CgXKy7t-.css → index-DJ205bL0.css} +418 -92
  102. package/dist/assets/{pickBy-DlIFPp_M.js → pickBy-BILEJ4hg.js} +1 -1
  103. package/dist/assets/{templateActions-ClDjWPHA.js → templateActions-M3qRQiV6.js} +2 -7
  104. package/dist/assets/{useBeforeUnload-BFlrxvKb.js → useBeforeUnload-DTsj_abb.js} +1 -1
  105. package/dist/assets/{useCanvasMapping-CJcAsQmx.css → useCanvasMapping-BkGr1HdJ.css} +29 -28
  106. package/dist/assets/{useCanvasMapping-C0PMQVwg.js → useCanvasMapping-DJvMRP2s.js} +71 -56
  107. package/dist/assets/{useCanvasOperations-2Ca5hPmu.js → useCanvasOperations-DCaSrD1N.js} +26 -254
  108. package/dist/assets/{useClearExecutionButtonVisible-D8unhL-H.js → useClearExecutionButtonVisible-CVPKhr9F.js} +2 -2
  109. package/dist/assets/{useExecutionDebugging-MiAgkS54.js → useExecutionDebugging-yY2o_eNc.js} +1 -1
  110. package/dist/assets/{useExecutionHelpers-CgD9G_XU.js → useExecutionHelpers-BVY9xXbG.js} +2 -19
  111. package/dist/assets/{useImportCurlCommand-D6LUnncf.js → useImportCurlCommand-Chewi-_x.js} +2 -2
  112. package/dist/assets/{usePushConnection-DAhrfl2L.js → usePushConnection-9zsAnuvC.js} +13 -6
  113. package/dist/assets/{useTestDefinitionForm-TDiKTq9o.js → useTestDefinitionForm-CCVy0jKP.js} +1 -31
  114. package/dist/assets/{useWorkflowActivate-C_GRAYoC.js → useWorkflowActivate-DeEvbrsK.js} +1 -1
  115. package/dist/index.html +2 -2
  116. package/package.json +1 -1
  117. package/dist/assets/CollectionParameter-XKkHxrwX.js +0 -4
  118. package/dist/assets/pushConnection.store-DHLcz9cC.js +0 -238
  119. package/dist/assets/useOverview-BqIOGpWx.js +0 -161
  120. package/dist/assets/useRunWorkflow-sGIs6NeH.js +0 -521
@@ -1,521 +0,0 @@
1
- import { bH as useHistoryStore, T as useWorkflowsStore, p as useSettingsStore, q as computed, be as NodeConnectionTypes, dC as CanvasNodeDirtiness, dD as BulkCommand, dE as AddConnectionCommand, dF as RemoveConnectionCommand, dG as RemoveNodeCommand, dH as AddNodeCommand, dI as EnableNodeToggleCommand, bv as useNodeHelpers, a6 as useWorkflowHelpers, a as useToast, a0 as useRootStore, L as useUIStore, au as useExecutionsStore, c as useI18n, bt as CHAT_TRIGGER_NODE_TYPE, bf as get, dJ as SINGLE_WEBHOOK_TRIGGERS, dK as displayForm, aQ as useExternalHooks, dr as generateNodesGraph, ah as useTelemetry, dL as isEmpty } from "./index-DZljH0cm.js";
2
- import { u as usePushConnectionStore } from "./pushConnection.store-DHLcz9cC.js";
3
- function shouldCommandMarkDirty(command, nodeName, siblingCommands, getIncomingConnections, getOutgoingConnectors) {
4
- if (command instanceof BulkCommand) {
5
- return command.commands.some(
6
- (cmd) => shouldCommandMarkDirty(
7
- cmd,
8
- nodeName,
9
- command.commands,
10
- getIncomingConnections,
11
- getOutgoingConnectors
12
- )
13
- );
14
- }
15
- if (command instanceof AddConnectionCommand) {
16
- return command.connectionData[1]?.node === nodeName;
17
- }
18
- if (command instanceof RemoveConnectionCommand) {
19
- const [from, to] = command.connectionData;
20
- if (to.node !== nodeName) {
21
- return false;
22
- }
23
- return siblingCommands.some(
24
- (sibling) => sibling instanceof RemoveNodeCommand && sibling.node.name === from.node
25
- );
26
- }
27
- const incomingNodes = Object.values(getIncomingConnections(nodeName)).flat().flat().filter((connection) => connection !== null).map((connection) => connection.node);
28
- if (command instanceof AddNodeCommand) {
29
- return incomingNodes.includes(command.node.name);
30
- }
31
- if (command instanceof EnableNodeToggleCommand) {
32
- return incomingNodes.includes(command.nodeName) && (command.newState || Object.keys(getOutgoingConnectors(command.nodeName)).some(
33
- (type) => type !== NodeConnectionTypes.Main
34
- ));
35
- }
36
- return false;
37
- }
38
- function findLoop(nodeName, visited, getIncomingConnections) {
39
- const index = visited.indexOf(nodeName);
40
- if (index >= 0) {
41
- return visited.slice(index);
42
- }
43
- const newVisited = [...visited, nodeName];
44
- for (const [type, typeConnections] of Object.entries(getIncomingConnections(nodeName))) {
45
- if (type !== NodeConnectionTypes.Main) {
46
- continue;
47
- }
48
- for (const connections of typeConnections) {
49
- for (const { node } of connections ?? []) {
50
- const loop = findLoop(node, newVisited, getIncomingConnections);
51
- if (loop) {
52
- return loop;
53
- }
54
- }
55
- }
56
- }
57
- return void 0;
58
- }
59
- function useNodeDirtiness() {
60
- const historyStore = useHistoryStore();
61
- const workflowsStore = useWorkflowsStore();
62
- const settingsStore = useSettingsStore();
63
- function getParentSubNodes(nodeName) {
64
- return Object.entries(workflowsStore.incomingConnectionsByNodeName(nodeName)).filter(([type]) => type !== NodeConnectionTypes.Main).flatMap(([, typeConnections]) => typeConnections.flat().filter((conn) => conn !== null));
65
- }
66
- function getDirtinessByParametersUpdate(nodeName, after) {
67
- if ((workflowsStore.getParametersLastUpdate(nodeName) ?? 0) > after) {
68
- return CanvasNodeDirtiness.PARAMETERS_UPDATED;
69
- }
70
- for (const connection of getParentSubNodes(nodeName)) {
71
- if (getDirtinessByParametersUpdate(connection.node, after) !== void 0) {
72
- return CanvasNodeDirtiness.UPSTREAM_DIRTY;
73
- }
74
- }
75
- return void 0;
76
- }
77
- function getDirtinessByConnectionsUpdate(nodeName, after) {
78
- for (let i = historyStore.undoStack.length - 1; i >= 0; i--) {
79
- const command = historyStore.undoStack[i];
80
- if (command.getTimestamp() < after) {
81
- break;
82
- }
83
- if (shouldCommandMarkDirty(
84
- command,
85
- nodeName,
86
- [],
87
- workflowsStore.incomingConnectionsByNodeName,
88
- workflowsStore.outgoingConnectionsByNodeName
89
- )) {
90
- return CanvasNodeDirtiness.INCOMING_CONNECTIONS_UPDATED;
91
- }
92
- }
93
- for (const connection of getParentSubNodes(nodeName)) {
94
- if (getDirtinessByConnectionsUpdate(connection.node, after) !== void 0) {
95
- return CanvasNodeDirtiness.UPSTREAM_DIRTY;
96
- }
97
- }
98
- return void 0;
99
- }
100
- const depthByName = computed(() => {
101
- const depth = {};
102
- function setDepthRecursively(nodeName, current, visited) {
103
- if (visited.has(nodeName)) {
104
- return;
105
- }
106
- const myVisited = new Set(visited);
107
- myVisited.add(nodeName);
108
- for (const [type, typeConnections] of Object.entries(
109
- workflowsStore.outgoingConnectionsByNodeName(nodeName)
110
- )) {
111
- if (type !== NodeConnectionTypes.Main) {
112
- continue;
113
- }
114
- for (const connections of typeConnections) {
115
- for (const { node } of connections ?? []) {
116
- if (!depth[node] || depth[node] > current) {
117
- depth[node] = current;
118
- }
119
- setDepthRecursively(node, current + 1, myVisited);
120
- }
121
- }
122
- }
123
- }
124
- for (const startNode of workflowsStore.allNodes) {
125
- const hasIncomingNode = Object.keys(workflowsStore.incomingConnectionsByNodeName(startNode.name)).length > 0;
126
- if (hasIncomingNode) {
127
- continue;
128
- }
129
- depth[startNode.name] = 0;
130
- setDepthRecursively(startNode.name, 1, /* @__PURE__ */ new Set());
131
- }
132
- return depth;
133
- });
134
- const dirtinessByName = computed(() => {
135
- if (settingsStore.partialExecutionVersion === 1) {
136
- return {};
137
- }
138
- const dirtiness = {};
139
- const runDataByNode = workflowsStore.getWorkflowRunData ?? {};
140
- function setDirtiness(nodeName, value) {
141
- dirtiness[nodeName] = dirtiness[nodeName] ?? value;
142
- const loop = findLoop(nodeName, [], workflowsStore.incomingConnectionsByNodeName);
143
- if (!loop) {
144
- return;
145
- }
146
- const loopEntryNodeName = [...loop].sort(
147
- (a, b) => (depthByName.value[a] ?? Number.MAX_SAFE_INTEGER) - (depthByName.value[b] ?? Number.MAX_SAFE_INTEGER)
148
- )?.[0];
149
- if (loopEntryNodeName && depthByName.value[loopEntryNodeName]) {
150
- dirtiness[loopEntryNodeName] = dirtiness[loopEntryNodeName] ?? CanvasNodeDirtiness.UPSTREAM_DIRTY;
151
- }
152
- }
153
- for (const [nodeName, runData] of Object.entries(runDataByNode)) {
154
- const runAt = runData[0]?.startTime ?? 0;
155
- if (!runAt) {
156
- continue;
157
- }
158
- const parameterUpdate = getDirtinessByParametersUpdate(nodeName, runAt);
159
- if (parameterUpdate) {
160
- setDirtiness(nodeName, parameterUpdate);
161
- continue;
162
- }
163
- const connectionUpdate = getDirtinessByConnectionsUpdate(nodeName, runAt);
164
- if (connectionUpdate) {
165
- setDirtiness(nodeName, connectionUpdate);
166
- continue;
167
- }
168
- const hasInputPinnedDataChanged = Object.values(
169
- workflowsStore.incomingConnectionsByNodeName(nodeName)
170
- ).flat().flat().filter((connection) => connection !== null).some((connection) => {
171
- const pinnedDataLastUpdatedAt = workflowsStore.getPinnedDataLastUpdate(connection.node) ?? 0;
172
- return pinnedDataLastUpdatedAt > runAt;
173
- });
174
- if (hasInputPinnedDataChanged) {
175
- setDirtiness(nodeName, CanvasNodeDirtiness.PINNED_DATA_UPDATED);
176
- continue;
177
- }
178
- const pinnedDataLastRemovedAt = workflowsStore.getPinnedDataLastRemovedAt(nodeName) ?? 0;
179
- if (pinnedDataLastRemovedAt > runAt) {
180
- setDirtiness(nodeName, CanvasNodeDirtiness.PINNED_DATA_UPDATED);
181
- continue;
182
- }
183
- }
184
- return dirtiness;
185
- });
186
- return { dirtinessByName };
187
- }
188
- function useRunWorkflow(useRunWorkflowOpts) {
189
- const nodeHelpers = useNodeHelpers();
190
- const workflowHelpers = useWorkflowHelpers({ router: useRunWorkflowOpts.router });
191
- const i18n = useI18n();
192
- const toast = useToast();
193
- const telemetry = useTelemetry();
194
- const externalHooks = useExternalHooks();
195
- const settingsStore = useSettingsStore();
196
- const rootStore = useRootStore();
197
- const pushConnectionStore = usePushConnectionStore();
198
- const uiStore = useUIStore();
199
- const workflowsStore = useWorkflowsStore();
200
- const executionsStore = useExecutionsStore();
201
- const { dirtinessByName } = useNodeDirtiness();
202
- async function runWorkflowApi(runData) {
203
- if (!pushConnectionStore.isConnected) {
204
- throw new Error(i18n.baseText("workflowRun.noActiveConnectionToTheServer"));
205
- }
206
- workflowsStore.subWorkflowExecutionError = null;
207
- uiStore.addActiveAction("workflowRunning");
208
- let response;
209
- try {
210
- response = await workflowsStore.runWorkflow(runData);
211
- } catch (error) {
212
- uiStore.removeActiveAction("workflowRunning");
213
- throw error;
214
- }
215
- if (response.executionId !== void 0) {
216
- workflowsStore.activeExecutionId = response.executionId;
217
- }
218
- if (response.waitingForWebhook === true && useWorkflowsStore().nodesIssuesExist) {
219
- uiStore.removeActiveAction("workflowRunning");
220
- throw new Error(i18n.baseText("workflowRun.showError.resolveOutstandingIssues"));
221
- }
222
- if (response.waitingForWebhook === true) {
223
- workflowsStore.executionWaitingForWebhook = true;
224
- }
225
- return response;
226
- }
227
- async function runWorkflow(options) {
228
- const workflow = workflowHelpers.getCurrentWorkflow();
229
- if (uiStore.isActionActive.workflowRunning) {
230
- return;
231
- }
232
- toast.clearAllStickyNotifications();
233
- try {
234
- let directParentNodes = [];
235
- if (options.destinationNode !== void 0) {
236
- directParentNodes = workflow.getParentNodes(
237
- options.destinationNode,
238
- NodeConnectionTypes.Main,
239
- -1
240
- );
241
- }
242
- const runData = workflowsStore.getWorkflowRunData;
243
- if (workflowsStore.isNewWorkflow) {
244
- await workflowHelpers.saveCurrentWorkflow();
245
- }
246
- const workflowData = await workflowHelpers.getWorkflowDataToSave();
247
- const consolidatedData = consolidateRunDataAndStartNodes(
248
- directParentNodes,
249
- runData,
250
- workflowData.pinData,
251
- workflow
252
- );
253
- const { startNodeNames } = consolidatedData;
254
- const destinationNodeType = options.destinationNode ? workflowsStore.getNodeByName(options.destinationNode)?.type : "";
255
- let { runData: newRunData } = consolidatedData;
256
- let executedNode;
257
- let triggerToStartFrom;
258
- if (startNodeNames.length === 0 && "destinationNode" in options && options.destinationNode !== void 0) {
259
- executedNode = options.destinationNode;
260
- startNodeNames.push(options.destinationNode);
261
- } else if (options.triggerNode && options.nodeData) {
262
- startNodeNames.push(
263
- ...workflow.getChildNodes(options.triggerNode, NodeConnectionTypes.Main, 1)
264
- );
265
- newRunData = { [options.triggerNode]: [options.nodeData] };
266
- executedNode = options.triggerNode;
267
- }
268
- if (options.triggerNode) {
269
- triggerToStartFrom = {
270
- name: options.triggerNode,
271
- data: options.nodeData
272
- };
273
- }
274
- if (options.destinationNode && (workflowsStore.checkIfNodeHasChatParent(options.destinationNode) || destinationNodeType === CHAT_TRIGGER_NODE_TYPE) && options.source !== "RunData.ManualChatMessage") {
275
- const startNode = workflow.getStartNode(options.destinationNode);
276
- if (startNode && startNode.type === CHAT_TRIGGER_NODE_TYPE) {
277
- const chatHasInputData = nodeHelpers.getNodeInputData(startNode, 0, 0, "input")?.length > 0;
278
- const chatHasPinData = !!workflowData.pinData?.[startNode.name];
279
- if (!chatHasInputData && !chatHasPinData) {
280
- workflowsStore.chatPartialExecutionDestinationNode = options.destinationNode;
281
- workflowsStore.setPanelState("attached");
282
- return;
283
- }
284
- }
285
- }
286
- const triggers = workflowData.nodes.filter(
287
- (node) => node.type.toLowerCase().includes("trigger") && !node.disabled
288
- );
289
- if (!options.destinationNode && options.source !== "RunData.ManualChatMessage" && workflowData.nodes.some((node) => node.type === CHAT_TRIGGER_NODE_TYPE)) {
290
- const otherTriggers = triggers.filter((node) => node.type !== CHAT_TRIGGER_NODE_TYPE);
291
- if (otherTriggers.length) {
292
- const chatTriggerNode = workflowData.nodes.find(
293
- (node) => node.type === CHAT_TRIGGER_NODE_TYPE
294
- );
295
- if (chatTriggerNode) {
296
- chatTriggerNode.disabled = true;
297
- }
298
- }
299
- }
300
- const isPartialExecution = options.destinationNode !== void 0;
301
- const version = settingsStore.partialExecutionVersion;
302
- const startNodes = startNodeNames.map((name) => {
303
- let sourceData = get(runData, [name, 0, "source", 0], null);
304
- if (sourceData === null) {
305
- const parentNodes = workflow.getParentNodes(name, NodeConnectionTypes.Main, 1);
306
- const executeData = workflowHelpers.executeData(
307
- parentNodes,
308
- name,
309
- NodeConnectionTypes.Main,
310
- 0
311
- );
312
- sourceData = get(executeData, ["source", NodeConnectionTypes.Main, 0], null);
313
- }
314
- return {
315
- name,
316
- sourceData
317
- };
318
- });
319
- const singleWebhookTrigger = triggers.find(
320
- (node) => SINGLE_WEBHOOK_TRIGGERS.includes(node.type)
321
- );
322
- if (singleWebhookTrigger && workflowsStore.isWorkflowActive && !workflowData.pinData?.[singleWebhookTrigger.name]) {
323
- toast.showMessage({
324
- title: i18n.baseText("workflowRun.showError.deactivate"),
325
- message: i18n.baseText("workflowRun.showError.productionActive", {
326
- interpolate: { nodeName: singleWebhookTrigger.name }
327
- }),
328
- type: "error"
329
- });
330
- return void 0;
331
- }
332
- const startRunData = {
333
- workflowData,
334
- // With the new partial execution version the backend decides what run
335
- // data to use and what to ignore.
336
- runData: !isPartialExecution ? (
337
- // if it's a full execution we don't want to send any run data
338
- void 0
339
- ) : version === 2 ? (
340
- // With the new partial execution version the backend decides
341
- //what run data to use and what to ignore.
342
- runData ?? void 0
343
- ) : (
344
- // for v0 we send the run data the FE constructed
345
- newRunData
346
- ),
347
- startNodes,
348
- triggerToStartFrom
349
- };
350
- if ("destinationNode" in options) {
351
- startRunData.destinationNode = options.destinationNode;
352
- }
353
- if (startRunData.runData) {
354
- const nodeNames = Object.entries(dirtinessByName.value).flatMap(
355
- ([nodeName, dirtiness]) => dirtiness ? [nodeName] : []
356
- );
357
- startRunData.dirtyNodeNames = nodeNames.length > 0 ? nodeNames : void 0;
358
- }
359
- const executionData = {
360
- id: "__IN_PROGRESS__",
361
- finished: false,
362
- mode: "manual",
363
- status: "running",
364
- createdAt: /* @__PURE__ */ new Date(),
365
- startedAt: /* @__PURE__ */ new Date(),
366
- stoppedAt: void 0,
367
- workflowId: workflow.id,
368
- executedNode,
369
- triggerNode: triggerToStartFrom?.name,
370
- data: {
371
- resultData: {
372
- runData: startRunData.runData ?? {},
373
- pinData: workflowData.pinData,
374
- workflowData
375
- }
376
- },
377
- workflowData: {
378
- id: workflowsStore.workflowId,
379
- name: workflowData.name,
380
- active: workflowData.active,
381
- createdAt: 0,
382
- updatedAt: 0,
383
- ...workflowData
384
- }
385
- };
386
- workflowsStore.setWorkflowExecutionData(executionData);
387
- nodeHelpers.updateNodesExecutionIssues();
388
- workflowHelpers.setDocumentTitle(workflow.name, "EXECUTING");
389
- const runWorkflowApiResponse = await runWorkflowApi(startRunData);
390
- const pinData = workflowData.pinData ?? {};
391
- const getTestUrl = /* @__PURE__ */ (() => {
392
- return (node) => {
393
- const path = node.parameters.path || node.parameters.options?.path || node.webhookId;
394
- return `${rootStore.formTestUrl}/${path}`;
395
- };
396
- })();
397
- try {
398
- displayForm({
399
- nodes: workflowData.nodes,
400
- runData: workflowsStore.getWorkflowExecution?.data?.resultData?.runData,
401
- destinationNode: options.destinationNode,
402
- triggerNode: options.triggerNode,
403
- pinData,
404
- directParentNodes,
405
- source: options.source,
406
- getTestUrl
407
- });
408
- } catch (error) {
409
- }
410
- await externalHooks.run("workflowRun.runWorkflow", {
411
- nodeName: options.destinationNode,
412
- source: options.source
413
- });
414
- return runWorkflowApiResponse;
415
- } catch (error) {
416
- workflowHelpers.setDocumentTitle(workflow.name, "ERROR");
417
- toast.showError(error, i18n.baseText("workflowRun.showError.title"));
418
- return void 0;
419
- }
420
- }
421
- function consolidateRunDataAndStartNodes(directParentNodes, runData, pinData, workflow) {
422
- const startNodeNames = /* @__PURE__ */ new Set();
423
- let newRunData;
424
- if (runData !== null && Object.keys(runData).length !== 0) {
425
- newRunData = {};
426
- for (const directParentNode of directParentNodes) {
427
- const parentNodes = workflow.getParentNodes(directParentNode, NodeConnectionTypes.Main);
428
- if (workflow.nodes[directParentNode].disabled) continue;
429
- parentNodes.push(directParentNode);
430
- for (const parentNode of parentNodes) {
431
- if (!runData[parentNode]?.length && !pinData?.[parentNode]?.length || runData[parentNode]?.[0]?.error !== void 0) {
432
- startNodeNames.add(parentNode);
433
- break;
434
- }
435
- if (runData[parentNode] && !runData[parentNode]?.[0]?.error) {
436
- newRunData[parentNode] = runData[parentNode]?.slice(0, 1);
437
- }
438
- }
439
- }
440
- if (isEmpty(newRunData)) {
441
- newRunData = void 0;
442
- }
443
- }
444
- return { runData: newRunData, startNodeNames: [...startNodeNames] };
445
- }
446
- async function stopCurrentExecution() {
447
- const executionId = workflowsStore.activeExecutionId;
448
- if (executionId === null) {
449
- return;
450
- }
451
- try {
452
- await executionsStore.stopCurrentExecution(executionId);
453
- } catch (error) {
454
- const execution = await workflowsStore.getExecution(executionId);
455
- if (execution === void 0) {
456
- toast.showMessage({
457
- title: i18n.baseText("nodeView.showMessage.stopExecutionCatch.unsaved.title"),
458
- message: i18n.baseText("nodeView.showMessage.stopExecutionCatch.unsaved.message"),
459
- type: "success"
460
- });
461
- } else if (execution?.finished) {
462
- const executedData = {
463
- data: execution.data,
464
- finished: execution.finished,
465
- mode: execution.mode,
466
- startedAt: execution.startedAt,
467
- stoppedAt: execution.stoppedAt
468
- };
469
- workflowsStore.setWorkflowExecutionData(executedData);
470
- toast.showMessage({
471
- title: i18n.baseText("nodeView.showMessage.stopExecutionCatch.title"),
472
- message: i18n.baseText("nodeView.showMessage.stopExecutionCatch.message"),
473
- type: "success"
474
- });
475
- } else {
476
- toast.showError(error, i18n.baseText("nodeView.showError.stopExecution.title"));
477
- }
478
- } finally {
479
- workflowsStore.markExecutionAsStopped();
480
- }
481
- }
482
- async function stopWaitingForWebhook() {
483
- try {
484
- await workflowsStore.removeTestWebhook(workflowsStore.workflowId);
485
- } catch (error) {
486
- toast.showError(error, i18n.baseText("nodeView.showError.stopWaitingForWebhook.title"));
487
- return;
488
- }
489
- }
490
- async function runEntireWorkflow(source, triggerNode) {
491
- const workflow = workflowHelpers.getCurrentWorkflow();
492
- void workflowHelpers.getWorkflowDataToSave().then((workflowData) => {
493
- const telemetryPayload = {
494
- workflow_id: workflow.id,
495
- node_graph_string: JSON.stringify(
496
- generateNodesGraph(
497
- workflowData,
498
- workflowHelpers.getNodeTypes(),
499
- { isCloudDeployment: settingsStore.isCloudDeployment }
500
- ).nodeGraph
501
- ),
502
- button_type: source
503
- };
504
- telemetry.track("User clicked execute workflow button", telemetryPayload);
505
- void externalHooks.run("nodeView.onRunWorkflow", telemetryPayload);
506
- });
507
- void runWorkflow({ triggerNode });
508
- }
509
- return {
510
- consolidateRunDataAndStartNodes,
511
- runEntireWorkflow,
512
- runWorkflow,
513
- runWorkflowApi,
514
- stopCurrentExecution,
515
- stopWaitingForWebhook
516
- };
517
- }
518
- export {
519
- useNodeDirtiness as a,
520
- useRunWorkflow as u
521
- };