n8n-editor-ui 1.91.1 → 1.93.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-BrkRvAXQ.js → AnimatedSpinner-hbTZDd93.js} +1 -1
  2. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-DRamY8Fo.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CYzc5StE.js} +1 -1
  3. package/dist/assets/{AuthView-ehh7NFh5.js → AuthView-8SLMP0H_.js} +2 -2
  4. package/dist/assets/{CanvasChatSwitch-DUBgoMXw.js → CanvasChatSwitch-Dt8TgNJg.js} +22 -10
  5. package/dist/assets/{ChangePasswordView-BLFb7_-o.js → ChangePasswordView-DIRyDp89.js} +3 -3
  6. package/dist/assets/CollectionParameter-Cj4t6-hd.js +4 -0
  7. package/dist/assets/{CredentialsView-1uYUpp0G.js → CredentialsView-B6-VxAJ6.js} +26 -11
  8. package/dist/assets/{DemoFooter-CNfkqkRC.js → DemoFooter-CIHwH5PG.js} +8 -8
  9. package/dist/assets/{ErrorView-CmYweWFA.js → ErrorView-C7i0TZwT.js} +1 -1
  10. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-DAWTDTON.js → ExecutionsTime.vue_vue_type_script_setup_true_lang--2G21NNR.js} +2 -2
  11. package/dist/assets/{ExecutionsView-fotg1R4V.js → ExecutionsView-C_YtciAr.js} +10 -9
  12. package/dist/assets/{FileSaver.min-CcnqpaV-.js → FileSaver.min-bgn7Q9Gt.js} +1 -1
  13. package/dist/assets/{FixedCollectionParameter-BYR4RzWw.js → FixedCollectionParameter-BPCJ5aaq.js} +1 -1
  14. package/dist/assets/{ForgotMyPasswordView-CQMKtpr-.js → ForgotMyPasswordView-DyUaGd6Z.js} +3 -3
  15. package/dist/assets/{InsightsChartAverageRuntime-B-9BU5qw.js → InsightsChartAverageRuntime-BB2I2vpV.js} +4 -4
  16. package/dist/assets/{InsightsChartFailed-Bd1BlFEm.js → InsightsChartFailed-CN_Rl3Bl.js} +4 -4
  17. package/dist/assets/{InsightsChartFailureRate-DPTCueAp.js → InsightsChartFailureRate-CHKlg6tg.js} +4 -4
  18. package/dist/assets/{InsightsChartTimeSaved-CSVKB08W.js → InsightsChartTimeSaved-Cd05cM8q.js} +4 -4
  19. package/dist/assets/{InsightsChartTotal-Bxjmisao.js → InsightsChartTotal-ChAO7myf.js} +4 -4
  20. package/dist/assets/{InsightsDashboard-5cOORj5z.js → InsightsDashboard-BeCfBVUz.js} +10 -10
  21. package/dist/assets/{InsightsPaywall-Bdo_3Ic_.js → InsightsPaywall-Chz8CDc3.js} +1 -1
  22. package/dist/assets/{InsightsSummary-DB62HhNM.js → InsightsSummary-MECenLJQ.js} +1 -1
  23. package/dist/assets/{InsightsTableWorkflows-BEC5Yh0b.js → InsightsTableWorkflows-5rpYY7YT.js} +2 -2
  24. package/dist/assets/{Logo-CK8euEWT.js → Logo-DUDCllkm.js} +1 -1
  25. package/dist/assets/{LogsPanel-CrGEYFLo.js → LogsPanel-D9r5AcQH.js} +75 -106
  26. package/dist/assets/{LogsPanel-DLC2TAqh.css → LogsPanel-mTaFEGk_.css} +38 -34
  27. package/dist/assets/{MainHeader-CEPLiR-5.css → MainHeader-CEMGASqv.css} +18 -11
  28. package/dist/assets/{MainHeader-C7XOaZKu.js → MainHeader-DkKOOZ_D.js} +145 -79
  29. package/dist/assets/{MainSidebar-CKMiDGvH.css → MainSidebar-D1_1YFQZ.css} +13 -12
  30. package/dist/assets/{MainSidebar-DD_ugRL3.js → MainSidebar-ZUBIWeXm.js} +36 -19
  31. package/dist/assets/{NodeCreation-S2FoBcnW.js → NodeCreation-DCfAFuL5.js} +10 -5
  32. package/dist/assets/{NodeCreator-D9fmPdS2.css → NodeCreator-D18StsVZ.css} +1021 -174
  33. package/dist/assets/{NodeCreator-D6TKVgLu.js → NodeCreator-a0YVv1IE.js} +863 -418
  34. package/dist/assets/{NodeDetailsView-DtvMtBqp.js → NodeDetailsView-C5_hVJzj.js} +60 -47
  35. package/dist/assets/{NodeDetailsView-CGgV4Pn_.css → NodeDetailsView-pYP-34nS.css} +20 -20
  36. package/dist/assets/{NodeView-BPhaaoWK.js → NodeView-Bk9h8GYy.js} +49 -25
  37. package/dist/assets/{ProjectCardBadge-C_L_pqWA.js → ProjectCardBadge-DRlDZx3d.js} +38 -2
  38. package/dist/assets/{ProjectHeader-C0FZTxjm.js → ProjectHeader-DNm605Kk.js} +106 -64
  39. package/dist/assets/{ProjectSettings-DlggJ6Ti.js → ProjectSettings-Dge_6KaR.js} +3 -2
  40. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-BNtCDFSj.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-CUf0LkWR.js} +1 -1
  41. package/dist/assets/{ResourcesListLayout-HzoSFUaj.js → ResourcesListLayout-Bbl-1i4l.js} +156 -53
  42. package/dist/assets/{ResourcesListLayout-CtGME7aU.css → ResourcesListLayout-DuNjbsMn.css} +8 -8
  43. package/dist/assets/{RunData-C9dtm1M2.css → RunData-DQeENuzG.css} +12 -2
  44. package/dist/assets/{RunData-D8Eax0cQ.js → RunData-b0RE2JWc.js} +418 -207
  45. package/dist/assets/{RunDataAi-BF2gZZGr.css → RunDataAi-D9VLFXIf.css} +10 -51
  46. package/dist/assets/{RunDataAi-BUnCQIRN.js → RunDataAi-DnWcCR_0.js} +27 -310
  47. package/dist/assets/{RunDataJson-DXd3nZxI.js → RunDataJson-CptVuHuA.js} +7 -7
  48. package/dist/assets/{RunDataJsonActions-aivOaol2.js → RunDataJsonActions-3jjDztw7.js} +1 -1
  49. package/dist/assets/RunDataParsedAiContent-9EEUzCKp.css +176 -0
  50. package/dist/assets/RunDataParsedAiContent-BbXv-NPD.js +148 -0
  51. package/dist/assets/{RunDataSearch-DJ9BZGTu.js → RunDataSearch-B90wjsDA.js} +1 -1
  52. package/dist/assets/{RunDataTable-vEPCwbcC.js → RunDataTable-CpS78GlT.js} +3 -3
  53. package/dist/assets/{SamlOnboarding--OTxMEws.js → SamlOnboarding-Ch9K5rRW.js} +3 -3
  54. package/dist/assets/{SettingsApiView-BulxWyyY.js → SettingsApiView-9GU5n_rm.js} +1 -1
  55. package/dist/assets/{SettingsCommunityNodesView-4wwPXFO2.js → SettingsCommunityNodesView-CPnVRzNX.js} +24 -11
  56. package/dist/assets/{SettingsExternalSecrets-zt7dxBKK.js → SettingsExternalSecrets-D7xTMV9h.js} +1 -1
  57. package/dist/assets/{SettingsLdapView-xneO6UIv.js → SettingsLdapView-OfrjGKkt.js} +1 -1
  58. package/dist/assets/{SettingsLogStreamingView-_h8wUzum.js → SettingsLogStreamingView-C_VnOaeX.js} +1 -1
  59. package/dist/assets/{SettingsPersonalView-CwYMP4sk.js → SettingsPersonalView-Dm24akPV.js} +14 -13
  60. package/dist/assets/{SettingsSourceControl-B9Tg93u3.js → SettingsSourceControl-DDCmL82j.js} +1 -1
  61. package/dist/assets/{SettingsSso-XaL1PzfW.js → SettingsSso-BGGQ0Cpg.js} +14 -1
  62. package/dist/assets/{SettingsUsageAndPlan-Ci15FW81.js → SettingsUsageAndPlan-BzO_zdkH.js} +1 -1
  63. package/dist/assets/{SettingsUsersView-DBJV4vSK.js → SettingsUsersView-DHQUqhqB.js} +1 -1
  64. package/dist/assets/{SettingsView-DMzdPF-1.js → SettingsView-CbtAqjOX.js} +1 -1
  65. package/dist/assets/{SetupView-BqWgdvDq.js → SetupView-BME1OE6U.js} +3 -3
  66. package/dist/assets/{SetupWorkflowCredentialsButton-B2wnuUnF.js → SetupWorkflowCredentialsButton-DZr4TCPC.js} +1 -1
  67. package/dist/assets/{SetupWorkflowFromTemplateView-BwC_wFSc.js → SetupWorkflowFromTemplateView-CPkKEY04.js} +3 -3
  68. package/dist/assets/{SigninView-DpTLJJwD.js → SigninView-DUeRvOiY.js} +3 -3
  69. package/dist/assets/{SignoutView-dkTtOCo1.js → SignoutView-BC7SBunZ.js} +1 -1
  70. package/dist/assets/{SignupView-CJFJJO3L.js → SignupView-B5ecYJ2q.js} +3 -3
  71. package/dist/assets/{TemplateDetails-84YElIBA.js → TemplateDetails-DjanZgC1.js} +1 -1
  72. package/dist/assets/{TemplateList-CGsfKuVA.js → TemplateList-8TyNGxY-.js} +1 -1
  73. package/dist/assets/{TemplatesCollectionView-2y8KZk0I.js → TemplatesCollectionView-BkH4pJCv.js} +5 -5
  74. package/dist/assets/{TemplatesSearchView-DgosiOzl.js → TemplatesSearchView-Bcdhi1SL.js} +3 -3
  75. package/dist/assets/{TemplatesView-CgQSZO4a.js → TemplatesView-De2XB6We.js} +1 -1
  76. package/dist/assets/{TemplatesWorkflowView-2pSUmAbX.js → TemplatesWorkflowView-BVnwtrMa.js} +5 -5
  77. package/dist/assets/{TestDefinitionEditView-C26sWE7p.js → TestDefinitionEditView-DjmPnrTk.js} +7 -7
  78. package/dist/assets/{TestDefinitionListView-Cyl6bsLP.js → TestDefinitionListView-BL2s_qBZ.js} +1 -1
  79. package/dist/assets/{TestDefinitionNewView-CfIZ0atk.js → TestDefinitionNewView-B9BqJZST.js} +2 -2
  80. package/dist/assets/{TestDefinitionRootView-CYg7HBL-.js → TestDefinitionRootView-AlWyxbc0.js} +1 -1
  81. package/dist/assets/{VariablesView-BFE9B0_b.js → VariablesView-BZCvPfan.js} +4 -3
  82. package/dist/assets/{WorkerView-BUMCMS_B.js → WorkerView-CigxqnWi.js} +6 -6
  83. package/dist/assets/{WorkflowActivator-BDLto9c0.js → WorkflowActivator-B7jRy4L1.js} +8 -4
  84. package/dist/assets/{WorkflowActivator-DAyH7N29.css → WorkflowActivator-DrMTmuTZ.css} +2 -2
  85. package/dist/assets/{WorkflowExecutionsInfoAccordion-manN-WIj.js → WorkflowExecutionsInfoAccordion-C_ZycbsF.js} +1 -1
  86. package/dist/assets/{WorkflowExecutionsLandingPage-BzGmpGvf.js → WorkflowExecutionsLandingPage-DOqrfKlC.js} +2 -2
  87. package/dist/assets/{WorkflowExecutionsPreview-CNEV2lom.js → WorkflowExecutionsPreview-B4Cj2gXW.js} +6 -6
  88. package/dist/assets/{WorkflowExecutionsView-WiNvtAmD.js → WorkflowExecutionsView-RXfP7zkJ.js} +11 -9
  89. package/dist/assets/{WorkflowHistory-6uJJqB4x.js → WorkflowHistory-DrXrRwIS.js} +37 -19
  90. package/dist/assets/{WorkflowOnboardingView-CPt_AUR-.js → WorkflowOnboardingView-CXH1vCW2.js} +1 -1
  91. package/dist/assets/{WorkflowPreview-CHUEX6H6.js → WorkflowPreview-B_MuFEV8.js} +1 -1
  92. package/dist/assets/{WorkflowsView-B2_HJCJ5.css → WorkflowsView-CQvTAWQ0.css} +24 -13
  93. package/dist/assets/{WorkflowsView-DbGBRbfc.js → WorkflowsView-D90hfJ35.js} +300 -158
  94. package/dist/assets/{chartjs.utils-C--HONKb.js → chartjs.utils-DalQn9bk.js} +2 -2
  95. package/dist/assets/{dateFormatter-DbKqmK4w.js → dateFormatter-BPfJSa6q.js} +1 -1
  96. package/dist/assets/{easyAiWorkflowUtils-BWgfZ0am.js → easyAiWorkflowUtils-kgtpBx2h.js} +1 -1
  97. package/dist/assets/{global-link-actions-COf-9vBh.js → global-link-actions-CnWOMvqA.js} +1 -1
  98. package/dist/assets/{import-curl-BiXaU2jk.js → import-curl-BvX_O56D.js} +1 -1
  99. package/dist/assets/{index-B6xE9gZ1.js → index-Bb2NNknG.js} +1 -1
  100. package/dist/assets/{index-BLAboPd2.js → index-DZ6VpjNj.js} +4635 -2824
  101. package/dist/assets/{index-sq5ggyEC.css → index-yNaoC3fo.css} +363 -97
  102. package/dist/assets/{pickBy-gZHb6vZ2.js → pickBy-B_HGYyxS.js} +1 -1
  103. package/dist/assets/{templateActions-DCx74tPa.js → templateActions-DQfZ3ni5.js} +1 -1
  104. package/dist/assets/{useBeforeUnload-DbfysOS-.js → useBeforeUnload-Cu0LPVWe.js} +1 -1
  105. package/dist/assets/{useCanvasMapping-CSuq_dYj.js → useCanvasMapping-CTTq6x8X.js} +62 -40
  106. package/dist/assets/{useCanvasMapping-cuXLM-h-.css → useCanvasMapping-VtpW_QZA.css} +6 -5
  107. package/dist/assets/{useCanvasOperations-C0pQBHW3.js → useCanvasOperations-u8oSDa_u.js} +96 -445
  108. package/dist/assets/{useClearExecutionButtonVisible-Cvfxw8xC.js → useClearExecutionButtonVisible-Dwc1_eG9.js} +2 -2
  109. package/dist/assets/{useExecutionDebugging-D2H5O6fT.js → useExecutionDebugging-rc72wLIp.js} +1 -1
  110. package/dist/assets/{useExecutionHelpers-C--m0pTQ.js → useExecutionHelpers-DqwMonFW.js} +2 -2
  111. package/dist/assets/{useImportCurlCommand-XFn6Ezp2.js → useImportCurlCommand-D_onuFvo.js} +19 -10
  112. package/dist/assets/useProjectPages-e8b03-5_.js +17 -0
  113. package/dist/assets/usePushConnection-wm-7Id6Q.js +629 -0
  114. package/dist/assets/{useTestDefinitionForm-2YP-8pAN.js → useTestDefinitionForm-DlUOnNC0.js} +1 -1
  115. package/dist/assets/{useWorkflowActivate-CvmIpy5T.js → useWorkflowActivate-65xML23U.js} +1 -1
  116. package/dist/assets/useWorkflowSaving-CUel20JA.js +66 -0
  117. package/dist/index.html +2 -2
  118. package/package.json +1 -1
  119. package/dist/assets/CollectionParameter-BaH_a73u.js +0 -4
  120. package/dist/assets/usePushConnection-x0iF1Axz.js +0 -537
@@ -0,0 +1,629 @@
1
+ import { d as defineComponent, co as resolveDirective, i as createElementBlock, g as openBlock, aA as withDirectives, k as createBaseVNode, t as toDisplayString, m as unref, c as useI18n, Q as useWorkflowsStore, H as useUIStore, dx as clearPopupWindowState, ag as useTelemetry, dy as parse, dz as hasTrimmedItem, p as useSettingsStore, a5 as useWorkflowHelpers, ak as WORKFLOW_SETTINGS_MODAL_KEY, a as useToast, dA as generateNodesGraph, aq as h, bz as useNodeTypesStore, dB as getTriggerNodeServiceName, bA as useNodeHelpers, dC as hasTrimmedData, aP as useExternalHooks, dD as codeNodeEditorEventBus, bS as useCredentialsStore, dE as useAssistantStore, dF as useSchemaPreviewStore, dG as isCommunityPackageName, dH as makeRestApiRequest, O as defineStore, Z as useRootStore, P as usePushConnectionStore, r as ref } from "./index-DZ6VpjNj.js";
2
+ import { g as getEasyAiWorkflowJson } from "./easyAiWorkflowUtils-kgtpBx2h.js";
3
+ import { g as globalLinkActionsEventBus } from "./global-link-actions-CnWOMvqA.js";
4
+ const _hoisted_1 = { "data-test-id": "sanitized-error-message" };
5
+ const _hoisted_2 = ["data-action-parameter-node"];
6
+ const _sfc_main = /* @__PURE__ */ defineComponent({
7
+ __name: "NodeExecutionErrorMessage",
8
+ props: {
9
+ nodeName: {},
10
+ errorMessage: {}
11
+ },
12
+ setup(__props) {
13
+ const i18n = useI18n();
14
+ return (_ctx, _cache) => {
15
+ const _directive_n8n_html = resolveDirective("n8n-html");
16
+ return openBlock(), createElementBlock("div", null, [
17
+ withDirectives(createBaseVNode("span", _hoisted_1, null, 512), [
18
+ [_directive_n8n_html, _ctx.errorMessage]
19
+ ]),
20
+ _cache[0] || (_cache[0] = createBaseVNode("br", null, null, -1)),
21
+ createBaseVNode("a", {
22
+ "data-action": "openNodeDetail",
23
+ "data-action-parameter-node": _ctx.nodeName
24
+ }, toDisplayString(unref(i18n).baseText("node.executionError.openNode")), 9, _hoisted_2)
25
+ ]);
26
+ };
27
+ }
28
+ });
29
+ async function executionFinished({ data }, options) {
30
+ const workflowsStore = useWorkflowsStore();
31
+ const uiStore = useUIStore();
32
+ if (typeof workflowsStore.activeExecutionId === "undefined") {
33
+ return;
34
+ }
35
+ const telemetry = useTelemetry();
36
+ clearPopupWindowState();
37
+ const workflow = workflowsStore.getWorkflowById(data.workflowId);
38
+ if (workflow?.meta?.templateId) {
39
+ const easyAiWorkflowJson = getEasyAiWorkflowJson();
40
+ const isEasyAIWorkflow = workflow.meta.templateId === easyAiWorkflowJson.meta.templateId;
41
+ if (isEasyAIWorkflow) {
42
+ telemetry.track(
43
+ "User executed test AI workflow",
44
+ {
45
+ status: data.status
46
+ },
47
+ { withPostHog: true }
48
+ );
49
+ }
50
+ }
51
+ uiStore.setProcessingExecutionResults(true);
52
+ let successToastAlreadyShown = false;
53
+ let execution;
54
+ if (data.rawData) {
55
+ const { executionId, workflowId, status, rawData } = data;
56
+ execution = {
57
+ id: executionId,
58
+ workflowId,
59
+ workflowData: workflowsStore.workflow,
60
+ data: parse(rawData),
61
+ status,
62
+ startedAt: workflowsStore.workflowExecutionData?.startedAt ?? /* @__PURE__ */ new Date(),
63
+ stoppedAt: /* @__PURE__ */ new Date()
64
+ };
65
+ } else {
66
+ if (data.status === "success") {
67
+ handleExecutionFinishedSuccessfully(data.workflowId, options);
68
+ successToastAlreadyShown = true;
69
+ }
70
+ execution = await fetchExecutionData(data.executionId);
71
+ if (!execution) {
72
+ uiStore.setProcessingExecutionResults(false);
73
+ return;
74
+ }
75
+ }
76
+ const runExecutionData = getRunExecutionData(execution);
77
+ uiStore.setProcessingExecutionResults(false);
78
+ if (execution.data?.waitTill !== void 0) {
79
+ handleExecutionFinishedWithWaitTill(options);
80
+ } else if (execution.status === "error" || execution.status === "canceled") {
81
+ handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData, options);
82
+ } else {
83
+ handleExecutionFinishedWithOther(successToastAlreadyShown, options);
84
+ }
85
+ setRunExecutionData(execution, runExecutionData);
86
+ }
87
+ async function fetchExecutionData(executionId) {
88
+ const workflowsStore = useWorkflowsStore();
89
+ try {
90
+ const executionResponse = await workflowsStore.fetchExecutionDataById(executionId);
91
+ if (!executionResponse?.data) {
92
+ return;
93
+ }
94
+ return {
95
+ id: executionId,
96
+ workflowId: executionResponse.workflowId,
97
+ workflowData: workflowsStore.workflow,
98
+ data: parse(executionResponse.data),
99
+ status: executionResponse.status,
100
+ startedAt: workflowsStore.workflowExecutionData?.startedAt,
101
+ stoppedAt: /* @__PURE__ */ new Date()
102
+ };
103
+ } catch {
104
+ return;
105
+ }
106
+ }
107
+ function getRunExecutionData(execution) {
108
+ const workflowsStore = useWorkflowsStore();
109
+ const runExecutionData = {
110
+ startData: execution.data?.startData,
111
+ resultData: execution.data?.resultData ?? { runData: {} },
112
+ executionData: execution.data?.executionData
113
+ };
114
+ if (workflowsStore.workflowExecutionData?.workflowId === execution.workflowId) {
115
+ const activeRunData = workflowsStore.workflowExecutionData?.data?.resultData?.runData;
116
+ if (activeRunData) {
117
+ for (const key of Object.keys(activeRunData)) {
118
+ if (hasTrimmedItem(activeRunData[key])) continue;
119
+ runExecutionData.resultData.runData[key] = activeRunData[key];
120
+ }
121
+ }
122
+ }
123
+ return runExecutionData;
124
+ }
125
+ function getExecutionError(execution) {
126
+ const error = execution.data?.resultData.error;
127
+ const i18n = useI18n();
128
+ let errorMessage;
129
+ if (execution.data?.resultData.lastNodeExecuted && error) {
130
+ errorMessage = error.message ?? error.description ?? "";
131
+ } else {
132
+ errorMessage = i18n.baseText("pushConnection.executionError", {
133
+ interpolate: { error: "!" }
134
+ });
135
+ if (error?.message) {
136
+ let nodeName;
137
+ if ("node" in error) {
138
+ nodeName = typeof error.node === "string" ? error.node : error.node.name;
139
+ }
140
+ const receivedError = nodeName ? `${nodeName}: ${error.message}` : error.message;
141
+ errorMessage = i18n.baseText("pushConnection.executionError", {
142
+ interpolate: {
143
+ error: `.${i18n.baseText("pushConnection.executionError.details", {
144
+ interpolate: {
145
+ details: receivedError
146
+ }
147
+ })}`
148
+ }
149
+ });
150
+ }
151
+ }
152
+ return errorMessage;
153
+ }
154
+ function getRunDataExecutedErrorMessage(execution) {
155
+ const i18n = useI18n();
156
+ if (execution.status === "crashed") {
157
+ return i18n.baseText("pushConnection.executionFailed.message");
158
+ } else if (execution.status === "canceled") {
159
+ const workflowsStore = useWorkflowsStore();
160
+ return i18n.baseText("executionsList.showMessage.stopExecution.message", {
161
+ interpolate: { activeExecutionId: workflowsStore.activeExecutionId ?? "" }
162
+ });
163
+ }
164
+ return getExecutionError(execution);
165
+ }
166
+ function handleExecutionFinishedWithWaitTill(options) {
167
+ const workflowsStore = useWorkflowsStore();
168
+ const settingsStore = useSettingsStore();
169
+ const workflowHelpers = useWorkflowHelpers(options);
170
+ const workflowObject = workflowsStore.getCurrentWorkflow();
171
+ const workflowSettings = workflowsStore.workflowSettings;
172
+ const saveManualExecutions = workflowSettings.saveManualExecutions ?? settingsStore.saveManualExecutions;
173
+ if (!saveManualExecutions) {
174
+ const uiStore = useUIStore();
175
+ globalLinkActionsEventBus.emit("registerGlobalLinkAction", {
176
+ key: "open-settings",
177
+ action: async () => {
178
+ if (workflowsStore.isNewWorkflow) await workflowHelpers.saveAsNewWorkflow();
179
+ uiStore.openModal(WORKFLOW_SETTINGS_MODAL_KEY);
180
+ }
181
+ });
182
+ }
183
+ workflowHelpers.setDocumentTitle(workflowObject.name, "IDLE");
184
+ }
185
+ function handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData, options) {
186
+ const toast = useToast();
187
+ const i18n = useI18n();
188
+ const telemetry = useTelemetry();
189
+ const workflowsStore = useWorkflowsStore();
190
+ const workflowHelpers = useWorkflowHelpers(options);
191
+ const workflowObject = workflowsStore.getCurrentWorkflow();
192
+ const runDataExecutedErrorMessage = getRunDataExecutedErrorMessage(execution);
193
+ workflowHelpers.setDocumentTitle(workflowObject.name, "ERROR");
194
+ if (runExecutionData.resultData.error?.name === "ExpressionError" && runExecutionData.resultData.error.functionality === "pairedItem") {
195
+ const error = runExecutionData.resultData.error;
196
+ void workflowHelpers.getWorkflowDataToSave().then((workflowData) => {
197
+ const eventData = {
198
+ caused_by_credential: false,
199
+ error_message: error.description,
200
+ error_title: error.message,
201
+ error_type: error.context.type,
202
+ node_graph_string: JSON.stringify(
203
+ generateNodesGraph(
204
+ workflowData,
205
+ workflowHelpers.getNodeTypes()
206
+ ).nodeGraph
207
+ ),
208
+ workflow_id: workflowsStore.workflowId
209
+ };
210
+ if (error.context.nodeCause && ["paired_item_no_info", "paired_item_invalid_info"].includes(error.context.type)) {
211
+ const node = workflowObject.getNode(error.context.nodeCause);
212
+ if (node) {
213
+ eventData.is_pinned = !!workflowObject.getPinDataOfNode(node.name);
214
+ eventData.mode = node.parameters.mode;
215
+ eventData.node_type = node.type;
216
+ eventData.operation = node.parameters.operation;
217
+ eventData.resource = node.parameters.resource;
218
+ }
219
+ }
220
+ telemetry.track("Instance FE emitted paired item error", eventData, {
221
+ withPostHog: true
222
+ });
223
+ });
224
+ }
225
+ if (runExecutionData.resultData.error?.name === "SubworkflowOperationError") {
226
+ const error = runExecutionData.resultData.error;
227
+ workflowsStore.subWorkflowExecutionError = error;
228
+ toast.showMessage({
229
+ title: error.message,
230
+ message: error.description,
231
+ type: "error",
232
+ duration: 0
233
+ });
234
+ } else if ((runExecutionData.resultData.error?.name === "NodeOperationError" || runExecutionData.resultData.error?.name === "NodeApiError") && runExecutionData.resultData.error.functionality === "configuration-node") {
235
+ let title;
236
+ const nodeError = runExecutionData.resultData.error;
237
+ if (nodeError.node.name) {
238
+ title = `Error in sub-node ‘${nodeError.node.name}‘`;
239
+ } else {
240
+ title = "Problem executing workflow";
241
+ }
242
+ toast.showMessage({
243
+ title,
244
+ message: h(_sfc_main, {
245
+ errorMessage: nodeError?.description ?? runDataExecutedErrorMessage,
246
+ nodeName: nodeError.node.name
247
+ }),
248
+ type: "error",
249
+ duration: 0
250
+ });
251
+ } else {
252
+ if (execution.status === "canceled") {
253
+ toast.showMessage({
254
+ title: i18n.baseText("nodeView.showMessage.stopExecutionTry.title"),
255
+ type: "success"
256
+ });
257
+ } else {
258
+ let title;
259
+ if (runExecutionData.resultData.lastNodeExecuted) {
260
+ title = `Problem in node ‘${runExecutionData.resultData.lastNodeExecuted}‘`;
261
+ } else {
262
+ title = "Problem executing workflow";
263
+ }
264
+ toast.showMessage({
265
+ title,
266
+ message: runDataExecutedErrorMessage,
267
+ type: "error",
268
+ duration: 0
269
+ });
270
+ }
271
+ }
272
+ }
273
+ function handleExecutionFinishedSuccessfully(workflowId, options) {
274
+ const workflowsStore = useWorkflowsStore();
275
+ const workflowHelpers = useWorkflowHelpers(options);
276
+ const toast = useToast();
277
+ const i18n = useI18n();
278
+ workflowHelpers.setDocumentTitle(workflowsStore.getWorkflowById(workflowId)?.name, "IDLE");
279
+ workflowsStore.setActiveExecutionId(void 0);
280
+ toast.showMessage({
281
+ title: i18n.baseText("pushConnection.workflowExecutedSuccessfully"),
282
+ type: "success"
283
+ });
284
+ }
285
+ function handleExecutionFinishedWithOther(successToastAlreadyShown, options) {
286
+ const workflowsStore = useWorkflowsStore();
287
+ const toast = useToast();
288
+ const i18n = useI18n();
289
+ const workflowHelpers = useWorkflowHelpers(options);
290
+ const nodeTypesStore = useNodeTypesStore();
291
+ const workflowObject = workflowsStore.getCurrentWorkflow();
292
+ workflowHelpers.setDocumentTitle(workflowObject.name, "IDLE");
293
+ const workflowExecution = workflowsStore.getWorkflowExecution;
294
+ if (workflowExecution?.executedNode) {
295
+ const node = workflowsStore.getNodeByName(workflowExecution.executedNode);
296
+ const nodeType = node && nodeTypesStore.getNodeType(node.type, node.typeVersion);
297
+ const nodeOutput = workflowExecution?.executedNode && workflowExecution.data?.resultData?.runData?.[workflowExecution.executedNode];
298
+ if (nodeType?.polling && !nodeOutput) {
299
+ toast.showMessage({
300
+ title: i18n.baseText("pushConnection.pollingNode.dataNotFound", {
301
+ interpolate: {
302
+ service: getTriggerNodeServiceName(nodeType)
303
+ }
304
+ }),
305
+ message: i18n.baseText("pushConnection.pollingNode.dataNotFound.message", {
306
+ interpolate: {
307
+ service: getTriggerNodeServiceName(nodeType)
308
+ }
309
+ }),
310
+ type: "success"
311
+ });
312
+ } else {
313
+ toast.showMessage({
314
+ title: i18n.baseText("pushConnection.nodeExecutedSuccessfully"),
315
+ type: "success"
316
+ });
317
+ }
318
+ } else if (!successToastAlreadyShown) {
319
+ toast.showMessage({
320
+ title: i18n.baseText("pushConnection.workflowExecutedSuccessfully"),
321
+ type: "success"
322
+ });
323
+ }
324
+ }
325
+ function setRunExecutionData(execution, runExecutionData) {
326
+ const workflowsStore = useWorkflowsStore();
327
+ const nodeHelpers = useNodeHelpers();
328
+ const runDataExecutedErrorMessage = getRunDataExecutedErrorMessage(execution);
329
+ const workflowExecution = workflowsStore.getWorkflowExecution;
330
+ if (workflowsStore.getWorkflowRunData && !hasTrimmedData(workflowsStore.getWorkflowRunData)) {
331
+ runExecutionData.resultData.runData = workflowsStore.getWorkflowRunData;
332
+ }
333
+ removeRunningTaskData(runExecutionData.resultData.runData);
334
+ workflowsStore.executingNode.length = 0;
335
+ workflowsStore.setWorkflowExecutionData({
336
+ ...workflowExecution,
337
+ status: execution.status,
338
+ id: execution.id,
339
+ stoppedAt: execution.stoppedAt
340
+ });
341
+ workflowsStore.setWorkflowExecutionRunData(runExecutionData);
342
+ workflowsStore.setActiveExecutionId(void 0);
343
+ nodeHelpers.updateNodesExecutionIssues();
344
+ const lastNodeExecuted = runExecutionData.resultData.lastNodeExecuted;
345
+ let itemsCount = 0;
346
+ if (lastNodeExecuted && runExecutionData.resultData.runData[lastNodeExecuted] && !runDataExecutedErrorMessage) {
347
+ itemsCount = runExecutionData.resultData.runData[lastNodeExecuted][0].data?.main[0]?.length ?? 0;
348
+ }
349
+ workflowsStore.setActiveExecutionId(void 0);
350
+ void useExternalHooks().run("pushConnection.executionFinished", {
351
+ itemsCount,
352
+ nodeName: runExecutionData.resultData.lastNodeExecuted,
353
+ errorMessage: runDataExecutedErrorMessage,
354
+ runDataExecutedStartData: runExecutionData.startData,
355
+ resultDataError: runExecutionData.resultData.error
356
+ });
357
+ const lineNumber = runExecutionData.resultData?.error?.lineNumber;
358
+ codeNodeEditorEventBus.emit("highlightLine", lineNumber ?? "last");
359
+ }
360
+ function removeRunningTaskData(runData) {
361
+ for (const [nodeName, taskItems] of Object.entries(runData)) {
362
+ if (taskItems.some((item) => item.executionStatus === "running")) {
363
+ runData[nodeName] = taskItems.filter((item) => item.executionStatus !== "running");
364
+ }
365
+ }
366
+ }
367
+ async function executionRecovered({ data }, options) {
368
+ const workflowsStore = useWorkflowsStore();
369
+ const uiStore = useUIStore();
370
+ if (typeof workflowsStore.activeExecutionId === "undefined") {
371
+ return;
372
+ }
373
+ uiStore.setProcessingExecutionResults(true);
374
+ const execution = await fetchExecutionData(data.executionId);
375
+ if (!execution) {
376
+ uiStore.setProcessingExecutionResults(false);
377
+ return;
378
+ }
379
+ const runExecutionData = getRunExecutionData(execution);
380
+ uiStore.setProcessingExecutionResults(false);
381
+ if (execution.data?.waitTill !== void 0) {
382
+ handleExecutionFinishedWithWaitTill(options);
383
+ } else if (execution.status === "error" || execution.status === "canceled") {
384
+ handleExecutionFinishedWithErrorOrCanceled(execution, runExecutionData, options);
385
+ } else {
386
+ handleExecutionFinishedWithOther(false, options);
387
+ }
388
+ setRunExecutionData(execution, runExecutionData);
389
+ }
390
+ async function executionStarted({ data }) {
391
+ const workflowsStore = useWorkflowsStore();
392
+ if (typeof workflowsStore.activeExecutionId === "undefined") {
393
+ return;
394
+ } else if (workflowsStore.activeExecutionId === null) {
395
+ workflowsStore.setActiveExecutionId(data.executionId);
396
+ }
397
+ if (workflowsStore.workflowExecutionData?.data && data.flattedRunData) {
398
+ workflowsStore.workflowExecutionData.data.resultData.runData = parse(data.flattedRunData);
399
+ }
400
+ }
401
+ async function nodeDescriptionUpdated(_event) {
402
+ const nodeTypesStore = useNodeTypesStore();
403
+ const credentialsStore = useCredentialsStore();
404
+ await nodeTypesStore.getNodeTypes();
405
+ await credentialsStore.fetchCredentialTypes(true);
406
+ }
407
+ async function nodeExecuteAfter({ data: pushData }) {
408
+ const workflowsStore = useWorkflowsStore();
409
+ const assistantStore = useAssistantStore();
410
+ const schemaPreviewStore = useSchemaPreviewStore();
411
+ if (pushData.itemCount && pushData.data?.data?.main && Array.isArray(pushData.data.data.main[0]) && pushData.data.data.main[0].length < pushData.itemCount) {
412
+ pushData.data.data.main[0]?.push(...new Array(pushData.itemCount - 1).fill({ json: {} }));
413
+ }
414
+ workflowsStore.updateNodeExecutionData(pushData);
415
+ setTimeout(() => {
416
+ workflowsStore.removeExecutingNode(pushData.nodeName);
417
+ }, 50);
418
+ void assistantStore.onNodeExecution(pushData);
419
+ void schemaPreviewStore.trackSchemaPreviewExecution(pushData);
420
+ }
421
+ async function nodeExecuteBefore({ data }) {
422
+ const workflowsStore = useWorkflowsStore();
423
+ workflowsStore.addExecutingNode(data.nodeName);
424
+ workflowsStore.addNodeExecutionData(data);
425
+ }
426
+ async function reloadNodeType({ data }) {
427
+ const nodeTypesStore = useNodeTypesStore();
428
+ await nodeTypesStore.getNodeTypes();
429
+ const isCommunityNode = isCommunityPackageName(data.name);
430
+ await nodeTypesStore.getFullNodesProperties([data], !isCommunityNode);
431
+ }
432
+ async function removeNodeType({ data }) {
433
+ const nodeTypesStore = useNodeTypesStore();
434
+ const credentialsStore = useCredentialsStore();
435
+ const nodesToBeRemoved = [data];
436
+ await credentialsStore.fetchCredentialTypes(false).then(() => {
437
+ nodeTypesStore.removeNodeTypes(nodesToBeRemoved);
438
+ });
439
+ }
440
+ async function sendConsoleMessage({ data }) {
441
+ console.log(data.source, ...data.messages);
442
+ }
443
+ const GET_STATUS_ENDPOINT = "/orchestration/worker/status";
444
+ const sendGetWorkerStatus = async (context) => {
445
+ await makeRestApiRequest(context, "POST", GET_STATUS_ENDPOINT);
446
+ };
447
+ const WORKER_HISTORY_LENGTH = 100;
448
+ const STALE_SECONDS = 120 * 1e3;
449
+ const useOrchestrationStore = defineStore("orchestrationManager", {
450
+ state: () => ({
451
+ initialStatusReceived: false,
452
+ workers: {},
453
+ workersHistory: {},
454
+ workersLastUpdated: {},
455
+ statusInterval: null
456
+ }),
457
+ actions: {
458
+ updateWorkerStatus(data) {
459
+ this.workers[data.senderId] = data;
460
+ if (!this.workersHistory[data.senderId]) {
461
+ this.workersHistory[data.senderId] = [];
462
+ }
463
+ this.workersHistory[data.senderId].push({ data, timestamp: Date.now() });
464
+ if (this.workersHistory[data.senderId].length > WORKER_HISTORY_LENGTH) {
465
+ this.workersHistory[data.senderId].shift();
466
+ }
467
+ this.workersLastUpdated[data.senderId] = Date.now();
468
+ this.initialStatusReceived = true;
469
+ },
470
+ removeStaleWorkers() {
471
+ for (const id in this.workersLastUpdated) {
472
+ if (this.workersLastUpdated[id] + STALE_SECONDS < Date.now()) {
473
+ delete this.workers[id];
474
+ delete this.workersHistory[id];
475
+ delete this.workersLastUpdated[id];
476
+ }
477
+ }
478
+ },
479
+ startWorkerStatusPolling() {
480
+ const rootStore = useRootStore();
481
+ if (!this.statusInterval) {
482
+ this.statusInterval = setInterval(async () => {
483
+ await sendGetWorkerStatus(rootStore.restApiContext);
484
+ this.removeStaleWorkers();
485
+ }, 1e3);
486
+ }
487
+ },
488
+ stopWorkerStatusPolling() {
489
+ if (this.statusInterval) {
490
+ clearInterval(this.statusInterval);
491
+ this.statusInterval = null;
492
+ }
493
+ },
494
+ getWorkerLastUpdated(workerId) {
495
+ return this.workersLastUpdated[workerId] ?? 0;
496
+ },
497
+ getWorkerStatus(workerId) {
498
+ return this.workers[workerId];
499
+ },
500
+ getWorkerStatusHistory(workerId) {
501
+ return this.workersHistory[workerId] ?? [];
502
+ }
503
+ }
504
+ });
505
+ async function sendWorkerStatusMessage({ data }) {
506
+ const orchestrationStore = useOrchestrationStore();
507
+ orchestrationStore.updateWorkerStatus(data.status);
508
+ }
509
+ async function testWebhookDeleted({ data }) {
510
+ const workflowsStore = useWorkflowsStore();
511
+ if (data.workflowId === workflowsStore.workflowId) {
512
+ workflowsStore.executionWaitingForWebhook = false;
513
+ workflowsStore.setActiveExecutionId(void 0);
514
+ }
515
+ }
516
+ async function testWebhookReceived({ data }) {
517
+ const workflowsStore = useWorkflowsStore();
518
+ if (data.workflowId === workflowsStore.workflowId) {
519
+ workflowsStore.executionWaitingForWebhook = false;
520
+ workflowsStore.setActiveExecutionId(data.executionId ?? null);
521
+ }
522
+ }
523
+ async function workflowActivated({ data }) {
524
+ const workflowsStore = useWorkflowsStore();
525
+ workflowsStore.setWorkflowActive(data.workflowId);
526
+ }
527
+ async function workflowDeactivated({ data }) {
528
+ const workflowsStore = useWorkflowsStore();
529
+ workflowsStore.setWorkflowInactive(data.workflowId);
530
+ }
531
+ async function workflowFailedToActivate({ data }) {
532
+ const workflowsStore = useWorkflowsStore();
533
+ if (workflowsStore.workflowId !== data.workflowId) {
534
+ return;
535
+ }
536
+ workflowsStore.setWorkflowInactive(data.workflowId);
537
+ workflowsStore.setActive(false);
538
+ const toast = useToast();
539
+ const i18n = useI18n();
540
+ toast.showError(
541
+ new Error(data.errorMessage),
542
+ i18n.baseText("workflowActivator.showError.title", {
543
+ interpolate: { newStateName: "activated" }
544
+ }) + ":"
545
+ );
546
+ }
547
+ function createEventQueue(processEvent) {
548
+ const queue = [];
549
+ let processing = false;
550
+ async function processNext() {
551
+ if (processing || queue.length === 0) {
552
+ return;
553
+ }
554
+ processing = true;
555
+ const currentEvent = queue.shift();
556
+ if (currentEvent !== void 0) {
557
+ try {
558
+ await processEvent(currentEvent);
559
+ } catch (error) {
560
+ console.error("Error processing event:", error);
561
+ }
562
+ }
563
+ processing = false;
564
+ await processNext();
565
+ }
566
+ function enqueue(event) {
567
+ queue.push(event);
568
+ void processNext();
569
+ }
570
+ return { enqueue };
571
+ }
572
+ function usePushConnection(options) {
573
+ const pushStore = usePushConnectionStore();
574
+ const { enqueue } = createEventQueue(processEvent);
575
+ const removeEventListener = ref(null);
576
+ function initialize() {
577
+ removeEventListener.value = pushStore.addEventListener((message) => {
578
+ enqueue(message);
579
+ });
580
+ }
581
+ function terminate() {
582
+ if (typeof removeEventListener.value === "function") {
583
+ removeEventListener.value();
584
+ }
585
+ }
586
+ async function processEvent(event) {
587
+ switch (event.type) {
588
+ case "testWebhookDeleted":
589
+ return await testWebhookDeleted(event);
590
+ case "testWebhookReceived":
591
+ return await testWebhookReceived(event);
592
+ case "reloadNodeType":
593
+ return await reloadNodeType(event);
594
+ case "removeNodeType":
595
+ return await removeNodeType(event);
596
+ case "nodeDescriptionUpdated":
597
+ return await nodeDescriptionUpdated();
598
+ case "nodeExecuteBefore":
599
+ return await nodeExecuteBefore(event);
600
+ case "nodeExecuteAfter":
601
+ return await nodeExecuteAfter(event);
602
+ case "executionStarted":
603
+ return await executionStarted(event);
604
+ case "sendWorkerStatusMessage":
605
+ return await sendWorkerStatusMessage(event);
606
+ case "sendConsoleMessage":
607
+ return await sendConsoleMessage(event);
608
+ case "workflowFailedToActivate":
609
+ return await workflowFailedToActivate(event);
610
+ case "executionFinished":
611
+ return await executionFinished(event, options);
612
+ case "executionRecovered":
613
+ return await executionRecovered(event, options);
614
+ case "workflowActivated":
615
+ return await workflowActivated(event);
616
+ case "workflowDeactivated":
617
+ return await workflowDeactivated(event);
618
+ }
619
+ }
620
+ return {
621
+ initialize,
622
+ terminate
623
+ };
624
+ }
625
+ export {
626
+ WORKER_HISTORY_LENGTH as W,
627
+ useOrchestrationStore as a,
628
+ usePushConnection as u
629
+ };
@@ -1,4 +1,4 @@
1
- import { gH as useTestDefinitionStore, r as ref, q as computed } from "./index-BLAboPd2.js";
1
+ import { gU as useTestDefinitionStore, r as ref, q as computed } from "./index-DZ6VpjNj.js";
2
2
  function useTestDefinitionForm() {
3
3
  const evaluationsStore = useTestDefinitionStore();
4
4
  const state = ref({
@@ -1,4 +1,4 @@
1
- import { r as ref, b as useRouter, a5 as useWorkflowHelpers, Q as useWorkflowsStore, H as useUIStore, a as useToast, a3 as useNpsSurveyStore, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, ag as useTelemetry, aP as useExternalHooks, c as useI18n, aJ as useStorage, dG as LOCAL_STORAGE_ACTIVATION_FLAG, dH as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-BLAboPd2.js";
1
+ import { r as ref, b as useRouter, a5 as useWorkflowHelpers, Q as useWorkflowsStore, H as useUIStore, a as useToast, a3 as useNpsSurveyStore, S as PLACEHOLDER_EMPTY_WORKFLOW_ID, ag as useTelemetry, aP as useExternalHooks, c as useI18n, aJ as useStorage, dO as LOCAL_STORAGE_ACTIVATION_FLAG, dP as WORKFLOW_ACTIVE_MODAL_KEY } from "./index-DZ6VpjNj.js";
2
2
  function useWorkflowActivate() {
3
3
  const updatingWorkflowActivation = ref(false);
4
4
  const router = useRouter();