n8n-editor-ui 1.78.0 → 1.79.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.
- package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-eVUE5od5.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DWFDE-uq.js} +1 -1
- package/dist/assets/{AuthView-D1tEXMXA.js → AuthView-BWy2AXVx.js} +2 -2
- package/dist/assets/{CanvasChat-BLb-TUbz.js → CanvasChat-BsICzNGY.js} +5 -4
- package/dist/assets/{CanvasControls-BN3S3-fQ.js → CanvasControls-BYFrPavs.js} +1 -1
- package/dist/assets/{ChangePasswordView-V1JTrEew.js → ChangePasswordView-CCLiIUKZ.js} +3 -3
- package/dist/assets/CollectionParameter-B3ZH0i1M.js +4 -0
- package/dist/assets/{ConcurrentExecutionsHeader-BNA8q-8c.js → ConcurrentExecutionsHeader-B2EowTfB.js} +2 -2
- package/dist/assets/{CredentialsView-AQksN2m1.js → CredentialsView-D432ux-I.js} +4 -4
- package/dist/assets/{ErrorView-CLT4S_BD.js → ErrorView-9_LZzUF-.js} +1 -1
- package/dist/assets/{ExecutionsView-qI0J-9KP.js → ExecutionsView-BIxxUIkR.js} +5 -5
- package/dist/assets/{FileSaver.min-B-zoCBIE.js → FileSaver.min-B1V6jKo8.js} +1 -1
- package/dist/assets/{FixedCollectionParameter-DQeeV-mE.js → FixedCollectionParameter-YMjaDcrW.js} +1 -1
- package/dist/assets/{ForgotMyPasswordView-BYvqdrhp.js → ForgotMyPasswordView-BOt01WDb.js} +3 -3
- package/dist/assets/{Logo-CmkNIoey.js → Logo-DCNJYrds.js} +1 -1
- package/dist/assets/{MainHeader-rUYFpqrO.js → MainHeader-KzaLIjdh.js} +10 -9
- package/dist/assets/{MainSidebar-Djaxwdmm.css → MainSidebar-BQVC8zBU.css} +13 -13
- package/dist/assets/{MainSidebar-B9_KVa79.js → MainSidebar-DOmlVdj3.js} +10 -10
- package/dist/assets/{NodeCreation-CWLKVrNb.js → NodeCreation-DY007rCJ.js} +4 -4
- package/dist/assets/{NodeCreator-CzIIkTTW.js → NodeCreator-DOXRU1eU.js} +5 -4
- package/dist/assets/{NodeViewSwitcher-Det3o0gl.css → NodeViewSwitcher-9WCdidKb.css} +23 -23
- package/dist/assets/{NodeViewSwitcher-BUNM0KZ6.js → NodeViewSwitcher-mdZWG63-.js} +75 -61
- package/dist/assets/{ProjectCardBadge-BbA_Exq8.js → ProjectCardBadge-ncOmPQT3.js} +1 -1
- package/dist/assets/{ProjectHeader-DlgpDOwX.js → ProjectHeader-B2g2JlKl.js} +1 -1
- package/dist/assets/{ProjectSettings-DqEtmmAS.js → ProjectSettings-AKqh1FtB.js} +2 -2
- package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-DL91BcV8.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-Dl-7_27h.js} +7 -4
- package/dist/assets/{ResourcesListLayout-D2ZxA1Uw.js → ResourcesListLayout-ByR63gYP.js} +1 -1
- package/dist/assets/{useRunWorkflow-B-O5w0ED.js → RunDataAi-ccnApOYE.js} +4 -320
- package/dist/assets/{RunDataJson-UkDmIQKn.js → RunDataJson-BKSpe5ct.js} +16 -14
- package/dist/assets/{RunDataJsonActions-BqDvrghZ.js → RunDataJsonActions-2mr7NT2e.js} +4 -5
- package/dist/assets/{RunDataSearch-UNQ4_4vM.js → RunDataSearch-Cr7Vco2g.js} +1 -1
- package/dist/assets/{RunDataTable-BdbNPKnU.js → RunDataTable-Di4ZRdsP.js} +2 -2
- package/dist/assets/{SamlOnboarding-Rzkh3AGB.js → SamlOnboarding-C6A4K5y_.js} +3 -3
- package/dist/assets/{SettingsApiView-C27ofqQf.js → SettingsApiView-lxJDg42B.js} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CWp_YPSH.js → SettingsCommunityNodesView-YkXQrq1A.js} +5 -4
- package/dist/assets/{SettingsExternalSecrets-BytZbZef.js → SettingsExternalSecrets-Cyrb1_mA.js} +1 -1
- package/dist/assets/{SettingsLdapView-DvNozRM0.js → SettingsLdapView-BiBAQFE3.js} +1 -1
- package/dist/assets/{SettingsLogStreamingView-C4Y3N6rF.js → SettingsLogStreamingView-B1xZpAcm.js} +1 -1
- package/dist/assets/{SettingsPersonalView--Z9y3dtC.js → SettingsPersonalView-D0iryycz.js} +1 -1
- package/dist/assets/{SettingsSourceControl-BElByx3w.js → SettingsSourceControl-B3SU8Cq3.js} +1 -1
- package/dist/assets/{SettingsSso-DUOhZeok.js → SettingsSso-DX4TKTsQ.js} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-DTw2vCOM.js → SettingsUsageAndPlan-DawDrfF4.js} +1 -1
- package/dist/assets/{SettingsUsersView-B2lC671-.js → SettingsUsersView-BQWBJqPE.js} +1 -1
- package/dist/assets/{SettingsView-tGXgBeZb.js → SettingsView-BNDKNELZ.js} +1 -1
- package/dist/assets/{SetupView-BB-PMekL.js → SetupView-C4Eo3Exo.js} +3 -3
- package/dist/assets/{SetupWorkflowCredentialsButton-B7i_jYti.js → SetupWorkflowCredentialsButton-D5_n7ODz.js} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-Co52TGFE.js → SetupWorkflowFromTemplateView-BhrvXdVP.js} +3 -3
- package/dist/assets/{SigninView-B8lcx39e.js → SigninView-Hl7bzZyS.js} +3 -3
- package/dist/assets/{SignoutView-CamkX68g.js → SignoutView-BTZ7B2eU.js} +1 -1
- package/dist/assets/{SignupView-D9e7FiEj.js → SignupView-BzD--VKr.js} +3 -3
- package/dist/assets/{TemplateDetails-C0RPBtYu.js → TemplateDetails-CE4hKdqt.js} +1 -1
- package/dist/assets/{TemplateList-B6jscn2o.js → TemplateList-C40kkbIk.js} +1 -1
- package/dist/assets/{TemplatesCollectionView-9fi4vQ1-.js → TemplatesCollectionView-qnbaiTtg.js} +5 -5
- package/dist/assets/{TemplatesSearchView-VlRyjuTl.js → TemplatesSearchView-CxGzeepB.js} +3 -3
- package/dist/assets/{TemplatesView-CgQelQ-w.js → TemplatesView-CLnu-Vk0.js} +1 -1
- package/dist/assets/{TemplatesWorkflowView-BhhfuZZ9.js → TemplatesWorkflowView-DSUDCqLB.js} +5 -5
- package/dist/assets/{TestDefinitionEditView-Cv4ImQQb.js → TestDefinitionEditView-Cr91OHJq.js} +4 -3
- package/dist/assets/{TestDefinitionListView-CywmtGBZ.js → TestDefinitionListView-CHtb_wVa.js} +1 -1
- package/dist/assets/{TestDefinitionRootView-BhZESeJD.js → TestDefinitionRootView-qwBGRGcA.js} +1 -1
- package/dist/assets/{VariablesView-B_Ju8Kay.js → VariablesView-DbieMKqP.js} +2 -2
- package/dist/assets/{WorkerView-Lif0hJie.js → WorkerView-CGoEdLP1.js} +6 -5
- package/dist/assets/{WorkflowActivator-Bv0WPJm3.js → WorkflowActivator-DDV__yRf.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-DitIU6bv.js → WorkflowExecutionsInfoAccordion-BtuCDilo.js} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-vuyCAPrk.js → WorkflowExecutionsLandingPage-BY-k0RSJ.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-DN_WSVD_.js → WorkflowExecutionsPreview-CyaPgz0p.js} +5 -5
- package/dist/assets/{WorkflowExecutionsView-BhFMyj3l.js → WorkflowExecutionsView-BiJSnqfz.js} +5 -5
- package/dist/assets/{WorkflowHistory-XSHcXPVZ.js → WorkflowHistory-DPFTyd0-.js} +3 -3
- package/dist/assets/{WorkflowOnboardingView-DdujIOw8.js → WorkflowOnboardingView-CvM7VnUz.js} +1 -1
- package/dist/assets/{WorkflowPreview-YDi-9g3Y.js → WorkflowPreview-AXxLG6z_.js} +1 -1
- package/dist/assets/{WorkflowsView-BLTTQnV3.js → WorkflowsView-CJfwV6KM.js} +7 -7
- package/dist/assets/_commonjs-dynamic-modules-TGKdzP3c.js +6 -0
- package/dist/assets/{easyAiWorkflowUtils-WSNP3eeS.js → easyAiWorkflowUtils-Bgzcbe9I.js} +2 -2
- package/dist/assets/global-link-actions-ilTTGVxi.js +5 -0
- package/dist/assets/import-curl-BmGzfSSE.js +5 -0
- package/dist/assets/{index-BwoviwZU.js → index-DCrfHAqy.js} +1818 -1741
- package/dist/assets/{index-DFFkAkMx.css → index-xKO0gQfI.css} +23 -19
- package/dist/assets/pushConnection.store-BfRLeHNn.js +238 -0
- package/dist/assets/{templateActions-CDiqnge9.js → templateActions-B1TLkU9O.js} +1 -1
- package/dist/assets/{useBeforeUnload-BQCxN-bM.js → useBeforeUnload-QUAV6NNZ.js} +1 -1
- package/dist/assets/{useCanvasOperations-DQSiUE8i.js → useCanvasMapping-B7TPBzRe.js} +3362 -3174
- package/dist/assets/{useCanvasOperations-CKa4_bqL.css → useCanvasMapping-DeC609A4.css} +213 -160
- package/dist/assets/{useExecutionDebugging-BlSzHQ7f.js → useExecutionDebugging-Cgdyxfi_.js} +1 -1
- package/dist/assets/{useExecutionHelpers-DpNwTiuj.js → useExecutionHelpers-CN4pMvuh.js} +1 -1
- package/dist/assets/useImportCurlCommand-D-HLU11j.js +9055 -0
- package/dist/assets/{usePushConnection-ioPocbvz.js → usePushConnection-DNb5nQKO.js} +4 -3
- package/dist/assets/useRunWorkflow-DTE_Nd7p.js +616 -0
- package/dist/assets/{useWorkflowActivate-CbVB4JlR.js → useWorkflowActivate-FRUHj-WT.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/tree-sitter-bash.wasm +0 -0
- package/dist/tree-sitter.wasm +0 -0
- package/package.json +1 -1
- package/vite.config.mts +14 -1
- package/dist/assets/CollectionParameter-C28x26Fy.js +0 -4
- package/dist/assets/pushConnection.store-BlMyXexG.js +0 -117
- package/dist/assets/usePinnedData-E0jv55-6.js +0 -274
- /package/dist/assets/{useRunWorkflow-DWoFsQdi.css → RunDataAi-DWoFsQdi.css} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { g5 as makeRestApiRequest, R as defineStore, Z as useRootStore, d as defineComponent, cT as resolveDirective, c as openBlock, h as createElementBlock, ax as withDirectives, j as createBaseVNode, t as toDisplayString, l as unref, g as useI18n, a4 as useWorkflowHelpers, bp as useNodeHelpers, a as useToast, bS as useCredentialsStore, bo as useNodeTypesStore, p as useSettingsStore, K as useUIStore, T as useWorkflowsStore, eX as useAssistantStore, au as usePostHog, r as ref, bU as AI_CREDITS_EXPERIMENT, g6 as parse, g7 as hasTrimmedItem, g8 as codeNodeEditorEventBus, af as WORKFLOW_SETTINGS_MODAL_KEY, dR as generateNodesGraph, ap as h, d3 as getTriggerNodeServiceName, g9 as hasTrimmedData, aT as useExternalHooks, aj as useTelemetry, ga as clearPopupWindowState } from "./index-DCrfHAqy.js";
|
|
2
|
+
import { g as globalLinkActionsEventBus } from "./global-link-actions-ilTTGVxi.js";
|
|
3
|
+
import { u as usePushConnectionStore } from "./pushConnection.store-BfRLeHNn.js";
|
|
4
|
+
import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-Bgzcbe9I.js";
|
|
4
5
|
const GET_STATUS_ENDPOINT = "/orchestration/worker/status";
|
|
5
6
|
const sendGetWorkerStatus = async (context) => {
|
|
6
7
|
await makeRestApiRequest(context, "POST", GET_STATUS_ENDPOINT);
|
|
@@ -0,0 +1,616 @@
|
|
|
1
|
+
import { gh as baseSlice, gi as toString, bo as useNodeTypesStore, q as computed, l as unref, eM as isSubNodeType, Z as useRootStore, T as useWorkflowsStore, a as useToast, gj as PIN_DATA_NODE_TYPES_DENYLIST, bg as getNodeOutputs, bh as NodeConnectionType, gk as jsonStringify, gl as toMegaBytes, gm as stringSizeInBytes, ch as jsonParse, g as useI18n, aj as useTelemetry, aT as useExternalHooks, eN as useDataSchema, gn as MAX_PINNED_DATA_SIZE, go as MAX_WORKFLOW_SIZE, gp as MAX_EXPECTED_REQUEST_SIZE, bp as useNodeHelpers, a4 as useWorkflowHelpers, p as useSettingsStore, K as useUIStore, at as useExecutionsStore, b7 as CHAT_TRIGGER_NODE_TYPE, bj as get, gq as SINGLE_WEBHOOK_TRIGGERS, gr as displayForm, cL as isEmpty, dR as generateNodesGraph } from "./index-DCrfHAqy.js";
|
|
2
|
+
import { u as usePushConnectionStore } from "./pushConnection.store-BfRLeHNn.js";
|
|
3
|
+
function castSlice(array, start, end) {
|
|
4
|
+
var length = array.length;
|
|
5
|
+
end = end === void 0 ? length : end;
|
|
6
|
+
return !start && end >= length ? array : baseSlice(array, start, end);
|
|
7
|
+
}
|
|
8
|
+
var rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = "\\ufe0e\\ufe0f";
|
|
9
|
+
var rsZWJ$1 = "\\u200d";
|
|
10
|
+
var reHasUnicode = RegExp("[" + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + "]");
|
|
11
|
+
function hasUnicode(string) {
|
|
12
|
+
return reHasUnicode.test(string);
|
|
13
|
+
}
|
|
14
|
+
function asciiToArray(string) {
|
|
15
|
+
return string.split("");
|
|
16
|
+
}
|
|
17
|
+
var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\ufe0e\\ufe0f";
|
|
18
|
+
var rsAstral = "[" + rsAstralRange + "]", rsCombo = "[" + rsComboRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d";
|
|
19
|
+
var reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
|
|
20
|
+
var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
|
|
21
|
+
function unicodeToArray(string) {
|
|
22
|
+
return string.match(reUnicode) || [];
|
|
23
|
+
}
|
|
24
|
+
function stringToArray(string) {
|
|
25
|
+
return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
|
|
26
|
+
}
|
|
27
|
+
function createCaseFirst(methodName) {
|
|
28
|
+
return function(string) {
|
|
29
|
+
string = toString(string);
|
|
30
|
+
var strSymbols = hasUnicode(string) ? stringToArray(string) : void 0;
|
|
31
|
+
var chr = strSymbols ? strSymbols[0] : string.charAt(0);
|
|
32
|
+
var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
|
|
33
|
+
return chr[methodName]() + trailing;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
var upperFirst = createCaseFirst("toUpperCase");
|
|
37
|
+
function capitalize(string) {
|
|
38
|
+
return upperFirst(toString(string).toLowerCase());
|
|
39
|
+
}
|
|
40
|
+
function useNodeType(options = {}) {
|
|
41
|
+
const nodeTypesStore = useNodeTypesStore();
|
|
42
|
+
const nodeType = computed(() => {
|
|
43
|
+
if (options.nodeType) {
|
|
44
|
+
return unref(options.nodeType);
|
|
45
|
+
}
|
|
46
|
+
const activeNode = unref(options.node);
|
|
47
|
+
if (activeNode) {
|
|
48
|
+
return nodeTypesStore.getNodeType(activeNode.type, activeNode.typeVersion);
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
});
|
|
52
|
+
const isSubNodeType$1 = computed(() => isSubNodeType(nodeType.value));
|
|
53
|
+
const isMultipleOutputsNodeType = computed(() => {
|
|
54
|
+
const outputs = nodeType.value?.outputs;
|
|
55
|
+
if (typeof outputs === "string") return false;
|
|
56
|
+
return (outputs ?? []).length > 1;
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
nodeType,
|
|
60
|
+
isSubNodeType: isSubNodeType$1,
|
|
61
|
+
isMultipleOutputsNodeType
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function usePinnedData(node, options = {}) {
|
|
65
|
+
const rootStore = useRootStore();
|
|
66
|
+
const workflowsStore = useWorkflowsStore();
|
|
67
|
+
const toast = useToast();
|
|
68
|
+
const i18n = useI18n();
|
|
69
|
+
const telemetry = useTelemetry();
|
|
70
|
+
const externalHooks = useExternalHooks();
|
|
71
|
+
const { getInputDataWithPinned } = useDataSchema();
|
|
72
|
+
const { isSubNodeType: isSubNodeType2, isMultipleOutputsNodeType } = useNodeType({
|
|
73
|
+
node
|
|
74
|
+
});
|
|
75
|
+
const data = computed(() => {
|
|
76
|
+
const targetNode = unref(node);
|
|
77
|
+
return targetNode ? workflowsStore.pinDataByNodeName(targetNode.name) : void 0;
|
|
78
|
+
});
|
|
79
|
+
const hasData = computed(() => {
|
|
80
|
+
const targetNode = unref(node);
|
|
81
|
+
return !!targetNode && typeof data.value !== "undefined";
|
|
82
|
+
});
|
|
83
|
+
const isValidNodeType = computed(() => {
|
|
84
|
+
const targetNode = unref(node);
|
|
85
|
+
return !!targetNode && !isSubNodeType2.value && !isMultipleOutputsNodeType.value && !PIN_DATA_NODE_TYPES_DENYLIST.includes(targetNode.type);
|
|
86
|
+
});
|
|
87
|
+
function canPinNode(checkDataEmpty = false, outputIndex) {
|
|
88
|
+
const targetNode = unref(node);
|
|
89
|
+
if (targetNode === null || PIN_DATA_NODE_TYPES_DENYLIST.includes(targetNode.type)) return false;
|
|
90
|
+
const nodeType = useNodeTypesStore().getNodeType(targetNode.type, targetNode.typeVersion);
|
|
91
|
+
const dataToPin = getInputDataWithPinned(targetNode);
|
|
92
|
+
if (!nodeType || checkDataEmpty && dataToPin.length === 0) return false;
|
|
93
|
+
const workflow = workflowsStore.getCurrentWorkflow();
|
|
94
|
+
const outputs = getNodeOutputs(workflow, targetNode, nodeType).map(
|
|
95
|
+
(output) => typeof output === "string" ? { type: output } : output
|
|
96
|
+
);
|
|
97
|
+
const mainOutputs = outputs.filter(
|
|
98
|
+
(output) => output.type === NodeConnectionType.Main && output.category !== "error"
|
|
99
|
+
);
|
|
100
|
+
let indexAcceptable = true;
|
|
101
|
+
if (outputIndex !== void 0) {
|
|
102
|
+
const output = outputs[outputIndex];
|
|
103
|
+
if (outputs[outputIndex] === void 0) return false;
|
|
104
|
+
indexAcceptable = output.type === NodeConnectionType.Main && output.category !== "error";
|
|
105
|
+
}
|
|
106
|
+
return mainOutputs.length === 1 && indexAcceptable;
|
|
107
|
+
}
|
|
108
|
+
function isValidJSON(data2) {
|
|
109
|
+
try {
|
|
110
|
+
JSON.parse(data2);
|
|
111
|
+
return true;
|
|
112
|
+
} catch (error) {
|
|
113
|
+
const title = i18n.baseText("runData.editOutputInvalid");
|
|
114
|
+
const toRemove = new RegExp(/JSON\.parse:|of the JSON data/, "g");
|
|
115
|
+
const message = error.message.replace(toRemove, "").trim();
|
|
116
|
+
const positionMatchRegEx = /at position (\d+)/;
|
|
117
|
+
const positionMatch = error.message.match(positionMatchRegEx);
|
|
118
|
+
error.message = message.charAt(0).toUpperCase() + message.slice(1);
|
|
119
|
+
error.message = error.message.replace(
|
|
120
|
+
"Unexpected token ' in JSON",
|
|
121
|
+
i18n.baseText("runData.editOutputInvalid.singleQuote")
|
|
122
|
+
);
|
|
123
|
+
if (positionMatch) {
|
|
124
|
+
const position = parseInt(positionMatch[1], 10);
|
|
125
|
+
const lineBreaksUpToPosition = (data2.slice(0, position).match(/\n/g) || []).length;
|
|
126
|
+
error.message = error.message.replace(
|
|
127
|
+
positionMatchRegEx,
|
|
128
|
+
i18n.baseText("runData.editOutputInvalid.atPosition", {
|
|
129
|
+
interpolate: {
|
|
130
|
+
position: `${position}`
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
);
|
|
134
|
+
error.message = `${i18n.baseText("runData.editOutputInvalid.onLine", {
|
|
135
|
+
interpolate: {
|
|
136
|
+
line: `${lineBreaksUpToPosition + 1}`
|
|
137
|
+
}
|
|
138
|
+
})} ${error.message}`;
|
|
139
|
+
}
|
|
140
|
+
toast.showError(error, title);
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function getMaxPinnedDataSize() {
|
|
145
|
+
return window.maxPinnedDataSize ?? MAX_PINNED_DATA_SIZE;
|
|
146
|
+
}
|
|
147
|
+
function isValidSize(data2) {
|
|
148
|
+
const targetNode = unref(node);
|
|
149
|
+
if (!targetNode) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (typeof data2 === "object") data2 = JSON.stringify(data2);
|
|
153
|
+
const { pinData: currentPinData, ...workflow } = workflowsStore.getCurrentWorkflow();
|
|
154
|
+
const workflowJson = jsonStringify(workflow, { replaceCircularRefs: true });
|
|
155
|
+
const newPinData = { ...currentPinData, [targetNode.name]: data2 };
|
|
156
|
+
const newPinDataSize = workflowsStore.getPinDataSize(newPinData);
|
|
157
|
+
if (newPinDataSize > getMaxPinnedDataSize()) {
|
|
158
|
+
toast.showError(
|
|
159
|
+
new Error(
|
|
160
|
+
i18n.baseText("ndv.pinData.error.tooLarge.description", {
|
|
161
|
+
interpolate: {
|
|
162
|
+
size: toMegaBytes(newPinDataSize),
|
|
163
|
+
limit: toMegaBytes(getMaxPinnedDataSize())
|
|
164
|
+
}
|
|
165
|
+
})
|
|
166
|
+
),
|
|
167
|
+
i18n.baseText("ndv.pinData.error.tooLarge.title")
|
|
168
|
+
);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
const workflowSize = stringSizeInBytes(workflowJson) + newPinDataSize;
|
|
172
|
+
const limit = MAX_WORKFLOW_SIZE - MAX_EXPECTED_REQUEST_SIZE;
|
|
173
|
+
if (workflowSize > limit) {
|
|
174
|
+
toast.showError(
|
|
175
|
+
new Error(
|
|
176
|
+
i18n.baseText("ndv.pinData.error.tooLargeWorkflow.description", {
|
|
177
|
+
interpolate: { size: toMegaBytes(workflowSize), limit: toMegaBytes(limit) }
|
|
178
|
+
})
|
|
179
|
+
),
|
|
180
|
+
i18n.baseText("ndv.pinData.error.tooLargeWorkflow.title")
|
|
181
|
+
);
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
function onSetDataSuccess({ source }) {
|
|
187
|
+
const targetNode = unref(node);
|
|
188
|
+
const displayMode = unref(options.displayMode);
|
|
189
|
+
const runIndex = unref(options.runIndex);
|
|
190
|
+
const telemetryPayload = {
|
|
191
|
+
pinning_source: source,
|
|
192
|
+
node_type: targetNode?.type,
|
|
193
|
+
push_ref: rootStore.pushRef,
|
|
194
|
+
data_size: stringSizeInBytes(data.value),
|
|
195
|
+
view: displayMode,
|
|
196
|
+
run_index: runIndex
|
|
197
|
+
};
|
|
198
|
+
void externalHooks.run("runData.onDataPinningSuccess", telemetryPayload);
|
|
199
|
+
telemetry.track("Ndv data pinning success", telemetryPayload);
|
|
200
|
+
}
|
|
201
|
+
function onSetDataError({
|
|
202
|
+
errorType,
|
|
203
|
+
source
|
|
204
|
+
}) {
|
|
205
|
+
const targetNode = unref(node);
|
|
206
|
+
const displayMode = unref(options.displayMode);
|
|
207
|
+
const runIndex = unref(options.runIndex);
|
|
208
|
+
telemetry.track("Ndv data pinning failure", {
|
|
209
|
+
pinning_source: source,
|
|
210
|
+
node_type: targetNode?.type,
|
|
211
|
+
push_ref: rootStore.pushRef,
|
|
212
|
+
data_size: stringSizeInBytes(data.value),
|
|
213
|
+
view: displayMode,
|
|
214
|
+
run_index: runIndex,
|
|
215
|
+
error_type: errorType
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function setData(data2, source) {
|
|
219
|
+
const targetNode = unref(node);
|
|
220
|
+
if (!targetNode) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (typeof data2 === "string") {
|
|
224
|
+
if (!isValidJSON(data2)) {
|
|
225
|
+
onSetDataError({ errorType: "invalid-json", source });
|
|
226
|
+
throw new Error("Invalid JSON");
|
|
227
|
+
}
|
|
228
|
+
data2 = jsonParse(data2);
|
|
229
|
+
}
|
|
230
|
+
if (!isValidSize(data2)) {
|
|
231
|
+
onSetDataError({ errorType: "data-too-large", source });
|
|
232
|
+
throw new Error("Data too large");
|
|
233
|
+
}
|
|
234
|
+
workflowsStore.pinData({ node: targetNode, data: data2 });
|
|
235
|
+
onSetDataSuccess({ source });
|
|
236
|
+
}
|
|
237
|
+
function onUnsetData({ source }) {
|
|
238
|
+
const targetNode = unref(node);
|
|
239
|
+
const runIndex = unref(options.runIndex);
|
|
240
|
+
telemetry.track("User unpinned ndv data", {
|
|
241
|
+
node_type: targetNode?.type,
|
|
242
|
+
push_ref: rootStore.pushRef,
|
|
243
|
+
run_index: runIndex,
|
|
244
|
+
source,
|
|
245
|
+
data_size: stringSizeInBytes(data.value)
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function unsetData(source) {
|
|
249
|
+
const targetNode = unref(node);
|
|
250
|
+
if (!targetNode) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
onUnsetData({ source });
|
|
254
|
+
workflowsStore.unpinData({ node: targetNode });
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
data,
|
|
258
|
+
hasData,
|
|
259
|
+
isValidNodeType,
|
|
260
|
+
canPinNode,
|
|
261
|
+
setData,
|
|
262
|
+
onSetDataSuccess,
|
|
263
|
+
onSetDataError,
|
|
264
|
+
unsetData,
|
|
265
|
+
onUnsetData,
|
|
266
|
+
isValidJSON,
|
|
267
|
+
isValidSize
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
const getDirtyNodeNames = (runData, getParametersLastUpdate) => {
|
|
271
|
+
const dirtyNodeNames = Object.entries(runData).reduce((acc, [nodeName, tasks]) => {
|
|
272
|
+
if (!tasks.length) return acc;
|
|
273
|
+
const updatedAt = getParametersLastUpdate(nodeName) ?? 0;
|
|
274
|
+
if (updatedAt > tasks[0].startTime) {
|
|
275
|
+
acc.push(nodeName);
|
|
276
|
+
}
|
|
277
|
+
return acc;
|
|
278
|
+
}, []);
|
|
279
|
+
return dirtyNodeNames.length ? dirtyNodeNames : void 0;
|
|
280
|
+
};
|
|
281
|
+
function useRunWorkflow(useRunWorkflowOpts) {
|
|
282
|
+
const nodeHelpers = useNodeHelpers();
|
|
283
|
+
const workflowHelpers = useWorkflowHelpers({ router: useRunWorkflowOpts.router });
|
|
284
|
+
const i18n = useI18n();
|
|
285
|
+
const toast = useToast();
|
|
286
|
+
const telemetry = useTelemetry();
|
|
287
|
+
const externalHooks = useExternalHooks();
|
|
288
|
+
const settingsStore = useSettingsStore();
|
|
289
|
+
const rootStore = useRootStore();
|
|
290
|
+
const pushConnectionStore = usePushConnectionStore();
|
|
291
|
+
const uiStore = useUIStore();
|
|
292
|
+
const workflowsStore = useWorkflowsStore();
|
|
293
|
+
const executionsStore = useExecutionsStore();
|
|
294
|
+
async function runWorkflowApi(runData) {
|
|
295
|
+
if (!pushConnectionStore.isConnected) {
|
|
296
|
+
throw new Error(i18n.baseText("workflowRun.noActiveConnectionToTheServer"));
|
|
297
|
+
}
|
|
298
|
+
workflowsStore.subWorkflowExecutionError = null;
|
|
299
|
+
uiStore.addActiveAction("workflowRunning");
|
|
300
|
+
let response;
|
|
301
|
+
try {
|
|
302
|
+
response = await workflowsStore.runWorkflow(runData);
|
|
303
|
+
} catch (error) {
|
|
304
|
+
uiStore.removeActiveAction("workflowRunning");
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
307
|
+
if (response.executionId !== void 0) {
|
|
308
|
+
workflowsStore.activeExecutionId = response.executionId;
|
|
309
|
+
}
|
|
310
|
+
if (response.waitingForWebhook === true && useWorkflowsStore().nodesIssuesExist) {
|
|
311
|
+
uiStore.removeActiveAction("workflowRunning");
|
|
312
|
+
throw new Error(i18n.baseText("workflowRun.showError.resolveOutstandingIssues"));
|
|
313
|
+
}
|
|
314
|
+
if (response.waitingForWebhook === true) {
|
|
315
|
+
workflowsStore.executionWaitingForWebhook = true;
|
|
316
|
+
}
|
|
317
|
+
return response;
|
|
318
|
+
}
|
|
319
|
+
async function runWorkflow(options) {
|
|
320
|
+
const workflow = workflowHelpers.getCurrentWorkflow();
|
|
321
|
+
if (uiStore.isActionActive["workflowRunning"]) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
toast.clearAllStickyNotifications();
|
|
325
|
+
try {
|
|
326
|
+
let directParentNodes = [];
|
|
327
|
+
if (options.destinationNode !== void 0) {
|
|
328
|
+
directParentNodes = workflow.getParentNodes(
|
|
329
|
+
options.destinationNode,
|
|
330
|
+
NodeConnectionType.Main,
|
|
331
|
+
-1
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
const runData = workflowsStore.getWorkflowRunData;
|
|
335
|
+
if (workflowsStore.isNewWorkflow) {
|
|
336
|
+
await workflowHelpers.saveCurrentWorkflow();
|
|
337
|
+
}
|
|
338
|
+
const workflowData = await workflowHelpers.getWorkflowDataToSave();
|
|
339
|
+
const consolidatedData = consolidateRunDataAndStartNodes(
|
|
340
|
+
directParentNodes,
|
|
341
|
+
runData,
|
|
342
|
+
workflowData.pinData,
|
|
343
|
+
workflow
|
|
344
|
+
);
|
|
345
|
+
const { startNodeNames } = consolidatedData;
|
|
346
|
+
const destinationNodeType = options.destinationNode ? workflowsStore.getNodeByName(options.destinationNode)?.type : "";
|
|
347
|
+
let { runData: newRunData } = consolidatedData;
|
|
348
|
+
let executedNode;
|
|
349
|
+
let triggerToStartFrom;
|
|
350
|
+
if (startNodeNames.length === 0 && "destinationNode" in options && options.destinationNode !== void 0) {
|
|
351
|
+
executedNode = options.destinationNode;
|
|
352
|
+
startNodeNames.push(options.destinationNode);
|
|
353
|
+
} else if (options.triggerNode && options.nodeData) {
|
|
354
|
+
startNodeNames.push(
|
|
355
|
+
...workflow.getChildNodes(options.triggerNode, NodeConnectionType.Main, 1)
|
|
356
|
+
);
|
|
357
|
+
newRunData = { [options.triggerNode]: [options.nodeData] };
|
|
358
|
+
executedNode = options.triggerNode;
|
|
359
|
+
}
|
|
360
|
+
if (options.triggerNode) {
|
|
361
|
+
triggerToStartFrom = {
|
|
362
|
+
name: options.triggerNode,
|
|
363
|
+
data: options.nodeData
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
if (options.destinationNode && (workflowsStore.checkIfNodeHasChatParent(options.destinationNode) || destinationNodeType === CHAT_TRIGGER_NODE_TYPE) && options.source !== "RunData.ManualChatMessage") {
|
|
367
|
+
const startNode = workflow.getStartNode(options.destinationNode);
|
|
368
|
+
if (startNode && startNode.type === CHAT_TRIGGER_NODE_TYPE) {
|
|
369
|
+
const chatHasInputData = nodeHelpers.getNodeInputData(startNode, 0, 0, "input")?.length > 0;
|
|
370
|
+
const chatHasPinData = !!workflowData.pinData?.[startNode.name];
|
|
371
|
+
if (!chatHasInputData && !chatHasPinData) {
|
|
372
|
+
workflowsStore.chatPartialExecutionDestinationNode = options.destinationNode;
|
|
373
|
+
workflowsStore.setPanelOpen("chat", true);
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const triggers = workflowData.nodes.filter(
|
|
379
|
+
(node) => node.type.toLowerCase().includes("trigger") && !node.disabled
|
|
380
|
+
);
|
|
381
|
+
if (!options.destinationNode && options.source !== "RunData.ManualChatMessage" && workflowData.nodes.some((node) => node.type === CHAT_TRIGGER_NODE_TYPE)) {
|
|
382
|
+
const otherTriggers = triggers.filter((node) => node.type !== CHAT_TRIGGER_NODE_TYPE);
|
|
383
|
+
if (otherTriggers.length) {
|
|
384
|
+
const chatTriggerNode = workflowData.nodes.find(
|
|
385
|
+
(node) => node.type === CHAT_TRIGGER_NODE_TYPE
|
|
386
|
+
);
|
|
387
|
+
if (chatTriggerNode) {
|
|
388
|
+
chatTriggerNode.disabled = true;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
const startNodes = startNodeNames.map((name) => {
|
|
393
|
+
let sourceData = get(runData, [name, 0, "source", 0], null);
|
|
394
|
+
if (sourceData === null) {
|
|
395
|
+
const parentNodes = workflow.getParentNodes(name, NodeConnectionType.Main, 1);
|
|
396
|
+
const executeData = workflowHelpers.executeData(
|
|
397
|
+
parentNodes,
|
|
398
|
+
name,
|
|
399
|
+
NodeConnectionType.Main,
|
|
400
|
+
0
|
|
401
|
+
);
|
|
402
|
+
sourceData = get(executeData, ["source", NodeConnectionType.Main, 0], null);
|
|
403
|
+
}
|
|
404
|
+
return {
|
|
405
|
+
name,
|
|
406
|
+
sourceData
|
|
407
|
+
};
|
|
408
|
+
});
|
|
409
|
+
const singleWebhookTrigger = triggers.find(
|
|
410
|
+
(node) => SINGLE_WEBHOOK_TRIGGERS.includes(node.type)
|
|
411
|
+
);
|
|
412
|
+
if (singleWebhookTrigger && workflowsStore.isWorkflowActive && !workflowData.pinData?.[singleWebhookTrigger.name]) {
|
|
413
|
+
toast.showMessage({
|
|
414
|
+
title: i18n.baseText("workflowRun.showError.deactivate"),
|
|
415
|
+
message: i18n.baseText("workflowRun.showError.productionActive", {
|
|
416
|
+
interpolate: { nodeName: singleWebhookTrigger.name }
|
|
417
|
+
}),
|
|
418
|
+
type: "error"
|
|
419
|
+
});
|
|
420
|
+
return void 0;
|
|
421
|
+
}
|
|
422
|
+
const isPartialExecution = options.destinationNode !== void 0;
|
|
423
|
+
const settingsStore2 = useSettingsStore();
|
|
424
|
+
const version = settingsStore2.partialExecutionVersion;
|
|
425
|
+
const startRunData = {
|
|
426
|
+
workflowData,
|
|
427
|
+
// With the new partial execution version the backend decides what run
|
|
428
|
+
// data to use and what to ignore.
|
|
429
|
+
runData: !isPartialExecution ? (
|
|
430
|
+
// if it's a full execution we don't want to send any run data
|
|
431
|
+
void 0
|
|
432
|
+
) : version === 2 ? (
|
|
433
|
+
// With the new partial execution version the backend decides
|
|
434
|
+
//what run data to use and what to ignore.
|
|
435
|
+
runData ?? void 0
|
|
436
|
+
) : (
|
|
437
|
+
// for v0 we send the run data the FE constructed
|
|
438
|
+
newRunData
|
|
439
|
+
),
|
|
440
|
+
startNodes,
|
|
441
|
+
triggerToStartFrom
|
|
442
|
+
};
|
|
443
|
+
if ("destinationNode" in options) {
|
|
444
|
+
startRunData.destinationNode = options.destinationNode;
|
|
445
|
+
}
|
|
446
|
+
if (startRunData.runData) {
|
|
447
|
+
startRunData.dirtyNodeNames = getDirtyNodeNames(
|
|
448
|
+
startRunData.runData,
|
|
449
|
+
workflowsStore.getParametersLastUpdate
|
|
450
|
+
);
|
|
451
|
+
}
|
|
452
|
+
const executionData = {
|
|
453
|
+
id: "__IN_PROGRESS__",
|
|
454
|
+
finished: false,
|
|
455
|
+
mode: "manual",
|
|
456
|
+
status: "running",
|
|
457
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
458
|
+
startedAt: /* @__PURE__ */ new Date(),
|
|
459
|
+
stoppedAt: void 0,
|
|
460
|
+
workflowId: workflow.id,
|
|
461
|
+
executedNode,
|
|
462
|
+
triggerNode: triggerToStartFrom?.name,
|
|
463
|
+
data: {
|
|
464
|
+
resultData: {
|
|
465
|
+
runData: startRunData.runData ?? {},
|
|
466
|
+
pinData: workflowData.pinData,
|
|
467
|
+
workflowData
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
workflowData: {
|
|
471
|
+
id: workflowsStore.workflowId,
|
|
472
|
+
name: workflowData.name,
|
|
473
|
+
active: workflowData.active,
|
|
474
|
+
createdAt: 0,
|
|
475
|
+
updatedAt: 0,
|
|
476
|
+
...workflowData
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
workflowsStore.setWorkflowExecutionData(executionData);
|
|
480
|
+
nodeHelpers.updateNodesExecutionIssues();
|
|
481
|
+
workflowHelpers.setDocumentTitle(workflow.name, "EXECUTING");
|
|
482
|
+
const runWorkflowApiResponse = await runWorkflowApi(startRunData);
|
|
483
|
+
const pinData = workflowData.pinData ?? {};
|
|
484
|
+
const getTestUrl = /* @__PURE__ */ (() => {
|
|
485
|
+
return (node) => {
|
|
486
|
+
const path = node.parameters.path || node.parameters.options?.path || node.webhookId;
|
|
487
|
+
return `${rootStore.formTestUrl}/${path}`;
|
|
488
|
+
};
|
|
489
|
+
})();
|
|
490
|
+
try {
|
|
491
|
+
displayForm({
|
|
492
|
+
nodes: workflowData.nodes,
|
|
493
|
+
runData: workflowsStore.getWorkflowExecution?.data?.resultData?.runData,
|
|
494
|
+
destinationNode: options.destinationNode,
|
|
495
|
+
pinData,
|
|
496
|
+
directParentNodes,
|
|
497
|
+
source: options.source,
|
|
498
|
+
getTestUrl
|
|
499
|
+
});
|
|
500
|
+
} catch (error) {
|
|
501
|
+
}
|
|
502
|
+
await externalHooks.run("workflowRun.runWorkflow", {
|
|
503
|
+
nodeName: options.destinationNode,
|
|
504
|
+
source: options.source
|
|
505
|
+
});
|
|
506
|
+
return runWorkflowApiResponse;
|
|
507
|
+
} catch (error) {
|
|
508
|
+
workflowHelpers.setDocumentTitle(workflow.name, "ERROR");
|
|
509
|
+
toast.showError(error, i18n.baseText("workflowRun.showError.title"));
|
|
510
|
+
return void 0;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
function consolidateRunDataAndStartNodes(directParentNodes, runData, pinData, workflow) {
|
|
514
|
+
const startNodeNames = /* @__PURE__ */ new Set();
|
|
515
|
+
let newRunData;
|
|
516
|
+
if (runData !== null && Object.keys(runData).length !== 0) {
|
|
517
|
+
newRunData = {};
|
|
518
|
+
for (const directParentNode of directParentNodes) {
|
|
519
|
+
const parentNodes = workflow.getParentNodes(directParentNode, NodeConnectionType.Main);
|
|
520
|
+
if (workflow.nodes[directParentNode].disabled) continue;
|
|
521
|
+
parentNodes.push(directParentNode);
|
|
522
|
+
for (const parentNode of parentNodes) {
|
|
523
|
+
if (!runData[parentNode]?.length && !pinData?.[parentNode]?.length || runData[parentNode]?.[0]?.error !== void 0) {
|
|
524
|
+
startNodeNames.add(parentNode);
|
|
525
|
+
break;
|
|
526
|
+
}
|
|
527
|
+
if (runData[parentNode] && !runData[parentNode]?.[0]?.error) {
|
|
528
|
+
newRunData[parentNode] = runData[parentNode]?.slice(0, 1);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
if (isEmpty(newRunData)) {
|
|
533
|
+
newRunData = void 0;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
return { runData: newRunData, startNodeNames: [...startNodeNames] };
|
|
537
|
+
}
|
|
538
|
+
async function stopCurrentExecution() {
|
|
539
|
+
const executionId = workflowsStore.activeExecutionId;
|
|
540
|
+
if (executionId === null) {
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
try {
|
|
544
|
+
await executionsStore.stopCurrentExecution(executionId);
|
|
545
|
+
} catch (error) {
|
|
546
|
+
const execution = await workflowsStore.getExecution(executionId);
|
|
547
|
+
if (execution === void 0) {
|
|
548
|
+
toast.showMessage({
|
|
549
|
+
title: i18n.baseText("nodeView.showMessage.stopExecutionCatch.unsaved.title"),
|
|
550
|
+
message: i18n.baseText("nodeView.showMessage.stopExecutionCatch.unsaved.message"),
|
|
551
|
+
type: "success"
|
|
552
|
+
});
|
|
553
|
+
} else if (execution?.finished) {
|
|
554
|
+
const executedData = {
|
|
555
|
+
data: execution.data,
|
|
556
|
+
finished: execution.finished,
|
|
557
|
+
mode: execution.mode,
|
|
558
|
+
startedAt: execution.startedAt,
|
|
559
|
+
stoppedAt: execution.stoppedAt
|
|
560
|
+
};
|
|
561
|
+
workflowsStore.setWorkflowExecutionData(executedData);
|
|
562
|
+
toast.showMessage({
|
|
563
|
+
title: i18n.baseText("nodeView.showMessage.stopExecutionCatch.title"),
|
|
564
|
+
message: i18n.baseText("nodeView.showMessage.stopExecutionCatch.message"),
|
|
565
|
+
type: "success"
|
|
566
|
+
});
|
|
567
|
+
} else {
|
|
568
|
+
toast.showError(error, i18n.baseText("nodeView.showError.stopExecution.title"));
|
|
569
|
+
}
|
|
570
|
+
} finally {
|
|
571
|
+
workflowsStore.markExecutionAsStopped();
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
async function stopWaitingForWebhook() {
|
|
575
|
+
try {
|
|
576
|
+
await workflowsStore.removeTestWebhook(workflowsStore.workflowId);
|
|
577
|
+
} catch (error) {
|
|
578
|
+
toast.showError(error, i18n.baseText("nodeView.showError.stopWaitingForWebhook.title"));
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
async function runEntireWorkflow(source, triggerNode) {
|
|
583
|
+
const workflow = workflowHelpers.getCurrentWorkflow();
|
|
584
|
+
void workflowHelpers.getWorkflowDataToSave().then((workflowData) => {
|
|
585
|
+
const telemetryPayload = {
|
|
586
|
+
workflow_id: workflow.id,
|
|
587
|
+
node_graph_string: JSON.stringify(
|
|
588
|
+
generateNodesGraph(
|
|
589
|
+
workflowData,
|
|
590
|
+
workflowHelpers.getNodeTypes(),
|
|
591
|
+
{ isCloudDeployment: settingsStore.isCloudDeployment }
|
|
592
|
+
).nodeGraph
|
|
593
|
+
),
|
|
594
|
+
button_type: source
|
|
595
|
+
};
|
|
596
|
+
telemetry.track("User clicked execute workflow button", telemetryPayload);
|
|
597
|
+
void externalHooks.run("nodeView.onRunWorkflow", telemetryPayload);
|
|
598
|
+
});
|
|
599
|
+
void runWorkflow({ triggerNode });
|
|
600
|
+
}
|
|
601
|
+
return {
|
|
602
|
+
consolidateRunDataAndStartNodes,
|
|
603
|
+
runEntireWorkflow,
|
|
604
|
+
runWorkflow,
|
|
605
|
+
runWorkflowApi,
|
|
606
|
+
stopCurrentExecution,
|
|
607
|
+
stopWaitingForWebhook
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
export {
|
|
611
|
+
useRunWorkflow as a,
|
|
612
|
+
useNodeType as b,
|
|
613
|
+
capitalize as c,
|
|
614
|
+
upperFirst as d,
|
|
615
|
+
usePinnedData as u
|
|
616
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as ref, b as useRouter, a4 as useWorkflowHelpers, T as useWorkflowsStore, K as useUIStore, a as useToast, a2 as useNpsSurveyStore, X as PLACEHOLDER_EMPTY_WORKFLOW_ID, aT as useExternalHooks, aI as useStorage,
|
|
1
|
+
import { r as ref, b as useRouter, a4 as useWorkflowHelpers, T as useWorkflowsStore, K as useUIStore, a as useToast, a2 as useNpsSurveyStore, X as PLACEHOLDER_EMPTY_WORKFLOW_ID, aT as useExternalHooks, aI as useStorage, gf as LOCAL_STORAGE_ACTIVATION_FLAG, gg as WORKFLOW_ACTIVE_MODAL_KEY, aj as useTelemetry, g as useI18n } from "./index-DCrfHAqy.js";
|
|
2
2
|
function useWorkflowActivate() {
|
|
3
3
|
const updatingWorkflowActivation = ref(false);
|
|
4
4
|
const router = useRouter();
|
package/dist/index.html
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
<script>!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled getFeatureFlag onFeatureFlags reloadFeatureFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[])</script>
|
|
17
17
|
|
|
18
18
|
<title>n8n.io - Workflow Automation</title>
|
|
19
|
-
<script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-
|
|
20
|
-
<link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/{{BASE_PATH}}/assets/index-DCrfHAqy.js"></script>
|
|
20
|
+
<link rel="stylesheet" crossorigin href="/{{BASE_PATH}}/assets/index-xKO0gQfI.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
|
23
23
|
<noscript>
|
|
Binary file
|
|
Binary file
|